パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

LINE BOT を動かしてみた

メーリングリストに投稿があった際、某 LINE グループへその旨通知のメッセージを発信するような BOT を構成してみた。ちょっと浮足立って作業してしまったせいで、色々失敗したが、一応動くようになった。

LINE ボットの準備は、「よしまさのウェブサイト」さんの記事 と 「ポンコツエンジニアのごじゃっぺ開発日記。」さんの記事 を参考にさせてもらった。基本、書いてる通りに作業を進めればいいのだが、LINE Developers  のページがなんか使いにくく。英語のページになったり日本語のページになったり。BOT の自動応答 On/Off しようとすると、LINE Official Account Maneger のページと行ったり来たりする。なんでこんな構成にしたんだろう。

LINE Official Account という名前も、なんだかなぁ、と思ったり。最初、公式な運営からのメッセージが発信されるアカウントのことかな、とか考えていたら、普通にユーザーが作ったアカウントのことのような。ただ、基本的には企業向けなのかな。公式ページ。そういや自分のアカウントをビジネスアカウントにしたような気がするが、今、LINE Developers へのログインは、ビジネスアカウントじゃなくて普通の LINE アカウントだった。よくわからず。でも、ログイン時に送ってくるメッセージには、LINE Business ID にログインしたことになっている。う~ん。まぁいいか。

もう一つわかって無いのは、プロバイダー(Provider)なるもの。実際にメッセージ送信する チャンネル(BOT) 自身の上位存在。今一つ存在価値を理解していないが、チャンネル(BOT)を複数作るときは、それらをまとめるものがあった方がいいのだろう。公式ページには「プロバイダーは、LINEプラットフォームを通じてサービスを提供する個人、企業、またはそのほかの組織を意味する情報です。プロバイダー名には、あなたの名前や企業名を入力してください。」と書いてある。

さて、BOT からの発信は、公式の記事に、最初に挙げられている Shell 用の curl コマンドを実行することにした。メーリングリストは fml で Perl で書かれているので、Perl コードを使えばいいのだが、Shell からテストで実行したコードをそのまま Perl に組み込めるので間違いが少ないかな、と。そんなに活発な ML でもないので、実行効率の悪さは気にしない。

このコードでちと引っかかったのは、"channel access token"。この文字列自身を書くんじゃなくて、LINE Developers で、トップ > プロバイダ  > チャネル > Messaging API 設定 の一番下で、発行する長い文字記号列を書く。長期ってかかれていて、期限無しみたい。期限付きのは、どうやって発行するのかな。
後、Line グループの ID のゲットが必要。これは、php が使える Web サーバーに php スクリプトを置けるなら、上記の記事の前の方のやり方通り。WebHook の php スクリプトを外部から実行できる場所に置いて、その URL を LINE Developers で WebHook として登録する。2番目の記事の GAS を使うのもなかなか興味深い。そろそろ、自分で Linux サーバーの管理しながら、Web アプリを稼働させるのは時代遅れかも。

それはさておき、LINE グループに誰かがメッセージを送れば、WebHook が呼ばれて、Group ID を含んだメッセージが記録されるので、そこから抽出。
channel access token で BOT を識別し、Group ID で発信先を指定する。この二つが揃えば、メッセージ送信ができるということらしい。HTTP のヘッダーとかは、記事通りに。charset は UTF-8 を指定しておくのがいいらしいが、書いて無くても UTF-8 になっているっぽい。日本語のメッセージは UTF-8 で送るべし。後、メッセージ本体に '\n' を入れておくと改行してくれるっぽい。この辺りはお約束か。スタンプなんかも所定のフォーマットで送れば良いようだ。

ちなみに、「応答メッセージ」を ON にしていると、誰かがメッセージを送信するたびに、BOT がデフォルトのメッセージを返信するので鬱陶しい事に。最初、WebHook を ON にしているせいかと思って OFF にしても返信するので、なんで?と思ったが、ちゃんとその設定項目があったのだった。同じく「あいさつメッセージ」の ON/OFF もある。誰かが新たに参加した際送信されるのだろうか(自分では未テスト)。

後、失敗したのは、Messaging API 設定で、「グループ・複数人チャットへの参加を許可する 」を無効にした状態で、BOT をグループに招待したのだが、通常、BOT が自動的にグループに参加するはずが、当然ながら何も起こらず。一度、招待を削除して、許可を有効にしてから、再度招待しなおすことでうまくいった。まぁ、こんな失敗をする人はいないか。ちなみに、グループに参加した状態で、この「~許可する」を無効にすると、グループから BOT が退会したことになる。

という感じで、LINE への BOT の動かし方がわかったので、後は、fml の投稿時に BOT を動かすようにするのだが、それはまた後日メモることにする。まぁ、需要は無さそうだが。