logo header
logo header
logo header
logo header
  • 2017.01.25
  • その他技術ブログ

LINE Messaging APIでグループメンバーの誕生日を祝うBotを作ってみる(後編)

前回の記事「LINE Messaging APIでグループメンバーの誕生日を祝うBotを作ってみる(前編)」では、ユーザーの発言に対してオウム返しする機能を実装しました。

今回はいよいよ、Botのメイン機能である以下の機能を実装していきます!

  • グループメンバーの誕生日を登録する
  • グループ内に今日が誕生日の人がいれば、「◯◯さん、お誕生日おめでとう」のようなお祝いメッセージをグループに投稿する

Botに誕生日を覚えさせる

メンバーの誕生日を祝うからには、当然ながら誕生日を覚えておく必要があります。すなわち、何らかの形でBotに誕生日を登録する必要があります。

本当は「ユーザーが誕生日を公開していればそれを取得する」という方法をとりたかったのですが、ドキュメントによるとプロフィール情報から誕生日を取得することはできないようです。

なので、ユーザーが発信したメッセージから誕生日情報(メンバーの名前・月・日)を受け取ることとします。

以下、順を追ってコードを解説していきます。

APIからの入力を受け取る部分

今回は、汎用的な変数や機能を別ファイルのcommon.phpにまとめて実装していくので、callback.php 先頭部分のrequire_onceで common.php を呼び出しています。5〜7行目のイベントオブジェクト取得部分は前回のコードと同じです。

9〜18行目も前回と基本は変わらず、JSONから使う分だけ情報を抜き出しています。前回と違う点として、メッセージの送信元を示すsourceからグループIDを抽出しています。

誕生日を登録する部分

さて、ここからが本題です。

ユーザーがグループに投稿したメッセージから誕生日情報を取り出す方法として、今回は簡易的に「誕生日,(名前),(月),(日)」のようなカンマ区切りの形式で受け付けることとします。

先ほどの callback.php に続けて、以下のように記述します。

まず、24〜26行目の部分でメッセージの文字列をexplode関数を用いてカンマで分割します。この際、カンマの前後に半角スペースを入力されることも想定して、事前に文字列中の半角スペースを除去しておきます。

28〜45行目の部分で、誕生日登録の形式に沿ったメッセージならばregister_birthday()によって誕生日を登録し、それ以外の発言にはオウム返しをします。

誕生日情報は、同じディレクトリにJSONファイルを作成してそこに保存していきます。

common.php には上記のように、アクセストークン$access_tokenや保存先となるJSONファイルのパス$storage_file_path、その他関数を定義します。

なお、reply_message()に引数として渡す$post_dataは以下の形で定義します。

おめでとうメッセージをBotに投稿させる

誕生日を記憶する仕組みができたら、次は「毎日決まった時間にメンバーの誕生日を思い出し、お祝いする」仕組みを実装します。

こちらは、登録された全メンバーの誕生日をチェックし、今日が誕生日ならお祝いのメッセージを送るようなPHPファイルを作成すれば実現できそうです。

では早速、コードに書き起こしてみましょう。

push.php も先ほどと同様に、コードの先頭部分で common.php を呼び出しています。

今度は登録された誕生日のデータが欲しいので push.php4行目のget_birthday_data()で誕生日データを読み込んでおきます。

push.php6〜10行目で今日の日付を取得し、12〜27行目の処理でもし今日が誕生日の人がいればpush_message()でグループにお祝いメッセージを送信します。

また、先ほどの common.php に 追記でpush_message()を定義します。

なお、push_message()に引数として渡す$post_dataは以下の形で定義します。

実際に動かしてみる

メッセージを送って誕生日を登録します。

birthdays.json をブラウザから確認します。

山田さんの誕生日がちゃんと格納されています!

この状態で push.php を実行すると...

山田さんの誕生日を祝ってくれました!
(実行日:2017年1月20日)

あとは、push.phpをcronで毎日決まった時間に実行すれば、お誕生日Botの出来上がりです。

さいごに

「前編」「後編」合わせて、今回は簡単な設定とシンプルな実装でお誕生日Botを作成することができました。

LINE Messaging APIを用いたBot作成はトレンドになりつつあると思うので、挑戦してみてはいかがでしょうか?

ともに世界をアップグレードできる、そんな日を夢見て。
Upgrade the World!