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に設定する
.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);