SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

日本一わかりやすいLINE Bot開発講座

LINE Bot開発の概要と実装の基本

日本一わかりやすいLINE Bot開発講座 第2回


ログの確認方法

 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回だけ使えるトークンを利用し、イベントに向かって返信を行うような形になります。

Reply APIとPush APIの概念図(簡略化)
Reply APIとPush APIの概念図(簡略化)

 ユーザーにメッセージを送るには、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を開発して入賞を狙いましょう!

(「LINE Bot Awards」より引用)
(「LINE Bot Awardsのページ」より引用)
修正履歴

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
日本一わかりやすいLINE Bot開発講座連載記事一覧

もっと読む

この記事の著者

立花 翔(タチバナ ショウ)

 LINE株式会社テクニカルエバンジェリスト  個人アプリケーションデベロッパーとして世界中で1000万近くのユーザーと接点を持った経験を元に、デベロッパーのLINEのAPIを利用したビジネスの成功をお手伝いさせて頂いております。 各種APIを始めとするプラットフォームとしてのLINEを啓蒙し、目指...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9811 2016/12/20 16:36

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー