ログの確認方法
error_log関数を使うと、出力されたログをターミナルからコマンドを通じて見ることができます。
ログを見るためにはHeroku CLIのインストールが必要なので、以下のリンクからインストールしてください。
ターミナルからherokuコマンドが通るようになったら、以下のようなコマンドでログを見ることができます。
heroku logs --app アプリ名 --tail -s app
メッセージ型のチェックとオウム返し
最後に以下のコードを追記します。
} catch(\LINE\LINEBot\Exception\InvalidEventRequestException $e) {
error_log("parseEventRequest failed. InvalidEventRequestException => ".var_export($e, true));
}
foreach ($events as $event) {
if (!($event instanceof \LINE\LINEBot\Event\MessageEvent)) {
error_log('Non message event has come');
continue;
}
if (!($event instanceof \LINE\LINEBot\Event\MessageEvent\TextMessage)) {
error_log('Non text message has come');
continue;
}
$bot->replyText($event->getReplyToken(), $event->getText());
}
?>
先ほど作られた変数$eventsから1つずつ取り出し、Eventに付与されたReplyTokenに向けてEventのテキストを送信するコードとなります。
Eventの種類
まず、$eventに格納されているイベントがMessageEventかどうかをチェックし、そうでない場合は以後の処理をスキップしています。
EventにはMessageEvent以外にも以下のようなものがあります。
- Follow Event:友達追加やブロック解除された時に発生する
- Unfollow Event:ブロックされた時に発生する
- Join Event:グループやトークルームに参加した時に発生する
- Leave Event:グループからの退出時に発生する
- Postback Event:リッチメッセージに付与したアクションがユーザーによって実行された時に発生する
今回のbotはオウム返しをするbotであり、相手からメッセージが送られた時に発生するMessageEventのみを対象にするため、型のチェックを行っています。
MessageEventの種類
MessageEvent型であった場合、さらにTextMessage型であるかどうかのチェックを行います。
MessageEventにはTextMessage以外にも以下のようなものがあります。
- AudioMessage
- ImageMessage
- LocationMessage
- StickerMessage
- VideoMessage
それぞれ、ユーザーから送られたコンテンツによって上記のいずれかとなります。今回はイベントがTextMessageであった場合のみオウム返しを行います。
メッセージの返信
LINE Botにはユーザーからのアクションをトリガーにメッセージを送るReply APIと、bot側の好きなタイミングでメッセージを送ることができるPush APIの2つがあります。
本連載では、利用に際して月額21,600円と個人にはやや高額なプランの契約が必要になるPush APIは使わず、アクションに対して起こってから短時間内(長くても数十秒間)であれば1回だけ無料で利用できるReply APIを使います。
Reply APIは宛先としてユーザーを指定しての返信ではなく、LINEが各イベントに付与したReplyTokenという1回だけ使えるトークンを利用し、イベントに向かって返信を行うような形になります。
ユーザーにメッセージを送るには、LINE Botインスタンスが持つ関数replyTextを使います。第1引数は上記のreplyTokenで、こちらはEventのインスタンスから取得できます。
$event->getReplyToken()
なお先ほど書いた通り、取得したReplyTokenはアクションから数十秒間、1回のみしか使えませんのでご注意ください。2回目以降使おうとしてもエラーではじかれます。
replyTextの第2引数は実際に送信する内容です。今回はオウム返しなのでgetText関数で取得した内容をそのまま指定しています。
デプロイと動作確認
これでのプロジェクトの最も簡単なLINE Botが実装できました。デプロイして、前回と同じようにLINEアプリからテキストを送ってみましょう。
正常にオウム返しが行われたら成功です。返事が返ってこなかった場合は、前述したログを見てみれば原因が分かると思います。
スタンプを送ってみる
せっかくなので、コードを少し変えてスタンプを送ってみましょう。
$bot->replyText($event->getReplyToken(), $event->getText());
$profile = $bot->getProfile($event->getUserId())->getJSONDecodedBody();
$message = $profile["displayName"] . "さん、おはようございます!今日も頑張りましょう!";
$bot->replyMessage($event->getReplyToken(),
(new \LINE\LINEBot\MessageBuilder\MultiMessageBuilder())
->add(new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($message))
->add(new \LINE\LINEBot\MessageBuilder\StickerMessageBuilder(1, 114))
);
}
?>
同様にデプロイしてLINEアプリから適当なメッセージを送信してみてください。メッセージに続いてスタンプが送信されます。
このあたりもSDKを使うと簡潔に書くことができます。SDKにはこれだけでなく他にもさまざまな機能がありますので、次回詳しく解説します。
最後に
第2回は自分でLINE Botに必要なSDKをダウンロードしたりスクリプトを作成しながら、プロジェクトの大枠を学びました。
次回はLINE Botが持つさまざまな機能の解説と、開発上のはまりどころを解説します。
LINE Bot Awardsエントリー受付中!(2017年2月22日まで)
グランプリ賞金1000万円のLINE Bot Awards、エントリー絶賛受付中です。他にも賞金50万円の9部門、そして学生賞は賞金100万円となっています。革新的なBotを開発して入賞を狙いましょう!
