日本でBOTといえばやはりLINE BOTでしょう。ここではBOTアプリケーションフレームワークのMinette for Pythonを使った作り方をご紹介します。
事前に準備するもの
- LINE Messaging APIのChannel SecretとChannel Access Token
- docomo 雑談APIのAPIキー(省略可能。その場合はおうむ返しBOTになります)
依存ライブラリのインストール
Minetteの動作に必要なpytzとrequests、LINEエンドポイントを起動するために必要なWebアプリケーションフレームワークのflaskとLINE SDKをインストールします。導入済みの場合はこの手順はスキップしてもOKです。
$ pip install pytz
$ pip install requests
$ pip install Flask
$ pip install line-bot-sdk
Minetteのインストール
タイトルにあるように、BOTフレームワークのMinetteを使用します。Minetteの詳細については以下の記事を参照ください。
インストールはpip
コマンド一発でOKです。
$ pip install minette
おうむ返しBOTで動作確認してみましょう。
$ minette
user> hello
minette> You said: hello
インターネットへの公開
※このセクションは開発PC上でBOTを動作させる場合を想定したものですので、AWS上のサーバ等で直接作業をしている場合、スキップしてください
LINE Messaging APIのインバウンドは開発者が指定したWebhookを叩いてメッセージを渡してくれるようになっているので、Minetteを実行するマシンをインターネットからアクセスできるようにしてやる必要があります。
様々な方法があるかと思いますが、ここではお手軽お気楽な感じのngrokを使用した手順を説明します。
ngrokのインストール
ngrokとは、ざっくり言えば各種プロトコルに対応したルーティング&トンネリングツール(という認識)です。詳細はngrok公式を見ていただくとして、ダウンロードページからプラットフォームに応じたバイナリをダウンロード・解凍してください。
解凍するとその名もngrok
という名前の実行ファイル1個が出現しますので、こいつを以下の通り叩きます。普通に実行するとその後の作業ができなくなってしまうので、バックグラウンド実行するようにしています。
$ ./ngrok http 5050 -log=stdout > ngrok.log &
動作確認と兼ねて、インターネットURLを確認します。
$ curl http://localhost:4040/api/tunnels
{"tunnels":[{"name":"command_line","uri":"/api/tunnels/command_line","public_url":"https://abcd1234.ngrok.io","proto":"https","config":{"addr":"localhost:5050","inspect":true},"metrics":{"conns":{"count":0,"gauge":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0},"http":{"count":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0}}},{"name":"command_line (http)","uri":"/api/tunnels/command_line+%28http%29","public_url":"http://abcd1234.ngrok.io","proto":"http","config":{"addr":"localhost:5050","inspect":true},"metrics":{"conns":{"count":0,"gauge":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0},"http":{"count":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0}}}],"uri":"/api/tunnels"}
ずらずらと情報が返ってきましたが、public_url
の項目で示されたhttps://abcd1234.ngrok.io
が、ngrokによって払い出されたRaspberry PiにアクセスするためのURLなので、これをコピーするなどして控えておきます。
LINE developersのWebhook URLに設定
先ほどngrokから払い出されたURL(または実行環境そのもののURL)の、/api
を設定します。
こんな感じです。なお、サービスをまだ起動してないのでVerifyは押しても失敗します。
LINE Messaging APIのエンドポイントとして起動
minette
コマンドでは汎用WebAPIに加えて、LINE Messaging APIのエンドポイントのサンプル実装を起動することができます。
まずはLINE Messaging APIの利用に必要な認証関連情報を環境変数に設定します。
$ export LINE_CHANNEL_SECRET="あなたのチャネルシークレット"
$ export LINE_ACCESS_TOKEN="あなたのアクセストークン"
もしdocomo雑談APIのAPIキーがあれば、以下の通り設定することで雑談BOTになります。この手順を省略した場合、Minetteの動作確認同様におうむ返しBOTとして動作します。
$ export CHAT_API_KEY="あなたのAPIキー"
$ export DEFAULT_DIALOG_SERVICE="minette.dialog.chat_dialog.ChatDialogService"
これで準備は完了ですので、エンドポイントを起動しましょう。-l
オプションをつけます。
$ minette -l
それでは、動作確認してみましょう。
こんな感じで動いたら成功です。おつかれさまでした。