LoginSignup
13

More than 5 years have passed since last update.

Minette for Python でLINE BOTを作成する

Posted at

日本で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を設定します。

Webhook URLの設定

こんな感じです。なお、サービスをまだ起動してないので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

それでは、動作確認してみましょう。

こんな感じで動いたら成功です。おつかれさまでした。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13