laravelでLineBotを作ってみた際のメモ
前提条件
- laravel5.7の開発環境がそろっていること
- laravel/homesteadを使用
- Lineアカウント
手順
プロバイダー&チャネル作成
- LINE Developers Consoleにログイン
- 『新規プロバイダー作成』ボタンからプロバイダーを作成する
- 『Messaging API』のチャネルを作成する
- プラン:Developer Trial
チャネル基本設定
- 『Channel Secret』をメモする
- 『アクセストークン』を『再発行』しメモする
- 『Webhook送信』を『利用する』に変更する
- ※ngrokで動作確認するため『Webhook URL』は 後で設定する
- 『自動応答メッセージ』を『利用しない』に変更する
- 『友だち追加時あいさつ』を『利用しない』に変更する
Botアプリケーションの作成
- なにかEventが発生したら、ハローと応答させるアプリケーションとする
line-bot-sdk-phpのインストール
composer require linecorp/line-bot-sdk
env設定
- 上記でメモした『Channel Secret』と『アクセストークン』を.envに設定
.env
LINE_ACCESS_TOKEN=*****メモしたアクセストークン*****
LINE_CHANNEL_SECRET=*****メモしたChannel Secret*****
コントローラー作成
/app/Http/Controllers/Api/LineWebhookController.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 LineWebhookController 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) {
// ハローと応答する
$replyToken = $event->getReplyToken();
$textMessage = new TextMessageBuilder("ハロー");
$lineBot->replyMessage($replyToken, $textMessage);
}
} catch (Exception $e) {
// TODO 例外
return;
}
return;
}
}
ルーティング設定
\app\routes\api.php
Route::group(['namespace' => 'Api'], function() {
// LineからのWebhookを受信
Route::post('/line/webhook', 'LineWebhookController@webhook')->name('line.webhook');
});
動作確認
ngrokで外部に公開する
ngrok http 80
Webhook URLの設定
-
LINE Developers Consoleのチャネル基本設定の『Webhook URL』を編集し、ngrokで発行されたURL(httpsのほう)を登録する
- ex) https://hogehoge.ngrok.io/api/line/webhook
- 接続確認し、成功すること
-
QRコードでともだち登録して、Botにメッセージを送る
- Botは「ハロー」と答えてくれるはずである