LINE Bot 開発チュートリアル

LINE Developers の MessagingAPIのドキュメントを参考にして、Botを開発したいと思います。

Messaging API | LINE Developers

1. MessagingAPIドキュメント概要

f:id:massox:20200617222509p:plain
LINE-dev-MessagingAPI-doc

内容はざっくりとこんな感じです。

  • 開発ガイドライン
    • Bot開発における禁止事項が記されている(大量リクエストしないでね、とか)
  • クイックスタート
    • Botを作る為に最低限知っておくべき情報が記述されている
  • ガイド
    • Botを作る為に必要なさらに詳細な情報が記述されている
  • Flex Message
    • メッセージの見た目をCSSを使って変更させるFlex Message 機能について書かれている
  • 概念
    • 用語説明
  • リファレンス
    • APIリファレンス

クイックスタートを読めば、サンプルのBotが作れそう。 まずはそこからやります。

2. クイックスタートを読む

■概要, メッセージタイプ

  • MessagingAPIでどのようなことを実現できるかが分かった
  • メッセージタイプにはいろいろあり、Botが発信する情報を豊かに表現できることが分かった
  • 【感想】だが、まずはテキストメッセージタイプによる情報の発信とユーザーからの情報の取得のみを行うこととする

■はじめに

  • チャンネルとは何なのかが分かった
  • 開発者コンソールで、任意のプロバイダについて、チャンネルを作成する手順が分かった
  • 【作業】とりあえず、チャンネルを作った

■権限を管理する

  • プロバイダに追加されたユーザーの権限として、AdminとMemberの二種類があることが分かった
  • チャンネルに追加されたユーザーの権限として、Admin, Member, Testerの三種類があることが分かった
  • 【感想】今回開発に関わるのは私一人なので、プロバイダとチャンネルに自分をAdminとして追加する(デフォルトがそれ)で良いと思う

■チャンネルアクセストーク

  • チャンネルへのアクセストークンには短期、長期、v2.1の三種類があることが分かった
  • サンプルでは長期を、本番用ではv2.1を使うことが推奨されていることが分かった

調査:JWTって何?

JSON Web Token(JWT)の紹介とYahoo! JAPANにおけるJWTの活用 - Yahoo! JAPAN Tech Blog

■JWTを生成する

  • アサーション署名キーを発行する必要がある(公開鍵をLINEが、秘密鍵を開発者が保持する)ことが分かった
  • アサーション署名キーとJWT用ライブラリを組み合わせてJWTによるチャンネルへのアクセスを実現するみたいということが分かった(この理解で合っているのかな…)
  • JWTライブラリがやることは、設定されたアサーション署名キー(開発者が保持する秘密鍵)を入力として、署名する(暗号化する?)ことで、JWTと言う名のコードが出力される。まだ理解はできてない。

3. サンプルEchoBotを作る

ここでは、以下のチュートリアルにしたがってEchoBot(おうむ返しBot)を作る。 LINEBot開発用のSDKがサポートしている言語は以下の通り。

参考:LINE Messaging API SDK | LINE Developers

本番開発では、Pythonを使うつもりだが、ここではチュートリアルに忠実に従うためJava用のSDKを使う。

■サンプルボットを作成する

手順は、ドキュメントに書いている通りでOK。綺麗に書かれていてわかりやすい。

developers.line.biz

Bot開発に慣れていない人で、初見の場合、困るかもしれないところを以下にメモしている。

  • チャンネルシークレットってどこにあるの?
    • LINEコンソール > プロバイダ > チャンネル > Basic Settings
  • チャンネルアクセストークンってどこにあるの?
    • LINEコンソール > プロバイダ > チャンネル > Messaging API Settings
  • HerokuのDeploy画面に表示されているLINE_BOT_CHANNEL_TOKENには何を設定するの?
    • LINEコンソールでコピーしたチャンネルアクセストーク
  • HerokuのDeploy画面に表示されているLINE_BOT_CHANNEL_SECRETには何を設定するの?
    • LINEコンソールでコピーしたチャンネルシークレット
  • Herokuで出てくるdynosって何?
  • デプロイ完了後BotサーバーのURLをLINEコンソールのWebhookURLに貼った後、Verifyボタンを押してもエラーになるんですが
    • ちょっと待った方が良い。自分の場合はデプロイ完了後2分ぐらい待ったらURLのVerifyが成功した。

■サンプルボットを使ってみる

LINEコンソール > プロバイダ > チャンネル > Messaging API Settings


Bot InformationにQRコードがあるので、お手持ちのスマホ(LINEアプリインストール済み)で読み取ればBotを友達に追加できる。 もし、スマホを持っていない場合やLINEアプリをインストールしたくない場合は、ごめん。どうしようもない。


では、適当にメッセージを打ってみよう。

f:id:massox:20200617231110j:plain


いや、なんか変なメッセージも一緒についてくるんですけど。
なんかデフォルトで設定されてるメッセージかな?
LINEコンソールを見に行くと、怪しいやつがいました。


f:id:massox:20200617231253p:plain


Auto-reply messages をDisabled にすれば良さそう。(実際そう)
付け加えると、Greeting messages は友達追加した時に最初に送られるメッセージのこと。
私は挨拶大事だと思うので、こっちはEnabledのままにしときます。


f:id:massox:20200617231741p:plain


ここまで終わったら普通におうむ返しをしてくれるようになった。


f:id:massox:20200617230631j:plain


という感じです。 次回は、テキスト以外のメッセージタイプも取り扱えるKitchensinkサンプルBotを作ります。