こんにちは、バックエンドエンジニアの米山です。
今回はPHP(Laravel)を使ってLINEBotを自作するための環境を作ってみようと思います。
実は、社内で先日リリースしたシステムがこれを実施しています。
LINE公式アカウントを作成し、LINE Official Account Managerで自動応答を作ることは可能です。
ですが、このコンソールで受け答えの設定ができるのは一部の機能で、返し方もある程度決められているため
より柔軟に自動応答させるにはbotの自作が必要なのです。
ライブラリをインストール
PHP(Laravel)のライブラリ管理ではおなじみの、Composerを使います。
composer require linecorp/line-bot-sdk
これでインストール完了です。
Tokenを設定する
LINEBot(LINE Messaging API)を利用するには「ビジネスアカウント」というものを作成し
LINE公式アカウント(コンソール内で「チャネル」と呼んでいるもの)を作成し
「チャネルトークン」「チャネルシークレット」というものを取得し、環境変数として設定する必要があります。
公式アカウントの作成方法はググれば沢山出てくるので、ここでは割愛します。
インストール後の状態だと、vendor/linecorp/line-bot-sdk/src/Laravel/config/line-bot.phpで
<?php return [ 'channel_access_token' => env('LINE_BOT_CHANNEL_ACCESS_TOKEN'), 'channel_secret' => env('LINE_BOT_CHANNEL_SECRET'), ];
とあるので、.envファイルで設定してあげれば良さそうです。
(私の場合はこのファイルの存在を知らず、プロジェクト内ファイルとしてconfig/line-bot.phpに作ってしまいました。笑)
LINEBot用のコントローラクラスを作成
通常のLaravelで、RESTfulな処理を作る時と同様にAPIを作成します。
php artisan make:controller LINEController
ルーティングも設定します(HTTP MethodはPOSTで作ります)
Route::post('/line/callback', [LINEController::class, 'callback']);
LINEControllerは全体的にこんな感じで作ります
public function callback(Request $request) { $bot = app('line-bot'); // LINE シグネチャのチェック $signature = $_SERVER['HTTP_' . LINEBot\Constant\HTTPHeader::LINE_SIGNATURE]; if (!LINEBot\SignatureValidator::validateSignature($request->getContent(), config('line-bot.channel_secret'), $signature)) { abort(400); } // ここに自動応答処理を書く // JSONでステータスコード=200のレスポンスを返す response()->json(['return-data' => 'data'], 200); }
ステータスコードは常に200を返すように作ります。
何故こんなことをしているかと言うと、開発ガイドラインで指示されているからです。
https://developers.line.biz/media/partner-docs/LINE_BOT_Development_Guidelines.pdf
ここまで作れると、こんな感じのイメージになるかと思います。 (下図のYour Systemの部分がここまで構築した内容になります)
まとめ
PHP(Laravel)で、自作のLINEBotプログラムを作る場合は
- ComposerでSDKをインストールする
- LINE公式アカウントを作成し、ChannelToken・ChannelSecretを取得。環境変数として設定する
- APIを作る要領で、ルーティングの設定、Controllerを作成する
- Controller以降を実装する(レスポンスは必ずHTTPステータス=200を返すようにする)
こんなところですね。
ここまでの内容はあくまで疎通レベルのものなので、実際はDBを使ったり、サービスクラスを作ったりしながら、特定のキーワードや挙動に反応する処理を作っていくことになります。
ここまで読んで頂き、ありがとうございました。
Wizではエンジニアを募集しております。
興味のある方、ぜひご覧下さい。