LoginSignup
6
6

More than 3 years have passed since last update.

LaravelでLINE BOT(オウム返し)を実装する。

Last updated at Posted at 2020-07-08

Laravel 5.5

LINE BOTのオウム返しをlaravelで実装してみる。

line-bot-sdk-phpをインストールする。

composer require linecorp/line-bot-sdk

route/api.phpにwebhookURLを設定する。

注意:route/web.phpに設定してしまう事があるので間違えないようにする。

route/api.php
Route::group(['namespace' => 'Api'], function() {
    // LineからのWebhookを受信
    Route::post('/line/webhook', 'LineController@webhook')->name('line.webhook');
});

LINE Developersで設定したチャンネルから
チャンネルアクセストークン、チャンネルシークレットを確認し
.envに設定する

LINE_ACCESS_TOKEN=*********チャネルアクセストークン**********
LINE_CHANNEL_SECRET=*********チャネルシークレット**********
Api/LineController.php
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use LINE\LINEBot;
use LINE\LINEBot\Constant\HTTPHeader;
use LINE\LINEBot\SignatureValidator;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;
use Exception;

class LineController extends Controller
{
    public function webhook (Request $request)
    {
        $lineAccessToken = env('LINE_ACCESS_TOKEN', "");
        $lineChannelSecret = env('LINE_CHANNEL_SECRET', "");

        // 署名のチェック
        $signature = $request->headers->get(HTTPHeader::LINE_SIGNATURE);

        if (!SignatureValidator::validateSignature($request->getContent(), $lineChannelSecret, $signature)) {
            // TODO 不正アクセス
            return;
        }

        $httpClient = new CurlHTTPClient ($lineAccessToken);
        $lineBot = new LINEBot($httpClient, ['channelSecret' => $lineChannelSecret]);

        try {
            // イベント取得
            $events = $lineBot->parseEventRequest($request->getContent(), $signature);

            foreach ($events as $event) {
                // ログファイルの設定
                // $file = __DIR__ . "/log.txt"
                // file_put_contents($file, print_r($event, true) . PHP_EOL, FILE_APPEND);
                // 入力した文字取得
                $message = $event->getText();
                $replyToken = $event->getReplyToken();
                $textMessage = new TextMessageBuilder($message);
                $lineBot->replyMessage($replyToken, $textMessage);
            }
        } catch (Exception $e) {
            // TODO 例外
            return;
        }
        return;
    }
}

※変数の中身の見方(logファイルの設定)
LINEBotは、変数をddなどで確認できないので
ログファイルに変数などを書き込み正しくデータが取れているか確認する。
これ以外の方法もあるので各自調べてください。

log.txtの権限も編集しておいてください。
chmod -R 777 log.txt

file_put_contents(__DIR__ . "/log.txt", print_r($event, true) . PHP_EOL, FILE_APPEND);
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6