こんにちは、@ketancho です。プライベートの開発で LINE Bot を作ろうと思っており、その準備?調査?状況をまとめていきたいと思います。今回は、LINE Developers 側の準備、疎通確認用の Web API の用意までを整理しました。(このメモを元に私の友人が開発をするので、なるべく丁寧に残したいと思っています。)
LINE Developers 側の準備
まず、 LINE Developers 上で事前準備をしていきます。
下記の画面でログインボタンを押下すると、
LINE のアカウントでログインするか、ビジネスアカウントでログインするかを選ぶことができます。先々はビジネスアカウントを作ることになるのかもしれませんが、いったん自身のアカウントで進めていくことにしました。
その後 LINE Developers コンソール から、プロバイダーなるものを作成します。続いて、このプロバイダーの配下に紐付ける形でチャネルを作っていきます。チャネルは幾つかのタイプを選ぶことができるのですが、ボットの場合は Messaging API を選択します。
最後に、チャネルの名前であったり、画像であったりをセットアップします。この設定の中で Webhook URL という欄があるのですが、ここに後ほど作成する Web API のエンドポイントを指定します。
Web API を作る
このポストでは、LINE Bot になにかしらのメッセージを送り、バックエンドの Web API の疎通確認までをしたいと思います。今回は Amazon API Gateway + AWS Lambda で簡単な Web API を作り、Webhook URL に指定、そしてボットにメッセージを送ると、それが呼び出しログが残ることを確認、という流れで進めていきます。
前述の友人はエンジニアではないので、開発環境を整えるところからまとめていきたいと考えています。今回は AWS Cloud9 を使っていくことで、ブラウザさえ動けば開発ができるようにしていきたいと思います(友人の環境わかっていないので)。
AWS Cloud9 から、"Create Environment" します。
環境面は、任意の名前をつけて貰えれば大丈夫です。その後の画面は、標準の設定のまま進めていきます。
下のようにきれいな環境が立ち上がってくると思います。右側のペインから、"AWS Resources" を押したあと、"λ+" マークを押すことで、Lambda Function とそれを呼び出す API Gateway の雛形を作っていくことができます。
Lambda と API Gateway の設定を下記に載せておきます。Lambda ファンクション名は任意で設定してください。
Python を選びます。Cloud9 だと まだ Python 3.7 や 3.8 は選べないですね。。
API Gateway の設定も進めていきます。今の時点では認証を必要としない形で Web API を作成します。
以降の設定は、デフォルトのままで進めます。
その後、lambda_function.py を下記のように修正しました。ただログを吐くだけのコードです。
import json import boto3 import datetime import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): logger.info(event) logger.info(json.loads(event['body'])['events'][0]['message']['text']) return { 'statusCode': 200, 'body': json.dumps({ 'output_text': "test" }), 'isBase64Encoded': False, 'headers': {} }
その後、AWS Resources ペインでデプロイ("↑" マーク)すると、AWS リソースが更新されます。これで AWS 側の設定は完了です。
API Gateway の画面に遷移すると、Web API ができているはずですので、下記の画面で URL をコピーしましょう。
LINE Developers 側で Webhook URL を設定する
最後に、Webhook URL に API Gateway の URL を貼り付けます。
検証ボタンを押して、下記のような表示になればOKです。
LINE からメッセージを送り、Web API が叩かれているかを確認します
LINE でチャネルの QR コードを読み取ると Friends 一覧にボットを追加できます。ボットに対して何かしら発信をしてみてください。CloudWatch Logs に下記のようなログが残っていれば、正しく Web API が呼び出されていることになります。
まとめと今後
LINE Developers 側の初期設定と、ボットの Webhook URL に設定した Web API が呼び出されるところまで確認しました。最低限の確認ですので、今後下記の実装を試していきたいと考えています。
- ボットからの何かしらの返信をする
- ↑のボットからの返信でボタンを表示できるようにする(例: はい or いいえ を選ばせる、など)
- ボット経由以外の場合は Web API を呼び出させない設定をする
LINE Messaging API でできることの全容がまだまだ分かっていませんが、年内に何かしらのプロトタイプが作れるように進めていこうと思います。それでは!