Contents
やりたいこと
タイトルの通りですが、LINE Messaging APIをRaspberry Pi 3で使ってみたいと思います。
いつかはLINEでメッセージを送ったらラズパイのGPIO経由で何か動かしたいと思います。
流行りのIoTを目指します!
参考サイト
こちらのお二人のサイトを参考にしております。
一部ハマったところをメモとして残しておきます。
LINE@のアカウント作成
まずLINE Messaging APIを使用するためにLINE@でアカウントを作成します。
作成方法は他サイトでわかりやすい解説がいっぱいあるので省きます。
こちらのサイトなどが参考になります。
ちなみに私はDeveloper Trialで利用してます。
作成後、LINE@managerからアカウントを選び、「アカウント設定」→「Messaging API設定」をクリックします。下のほうに表示されている「LINE Developersで設定する」をクリックします。
LINE developersのサイトに飛ぶと「Channel基本設定」画面が表示されます。
このページ内の以下設定がこの通りになっているかを確認します。
「Webhook送信」:利用する
「自動応答メッセージ」:利用しない
「Channel Secret」と「アクセストークン」をメモ帳などに張り付けておきます。
また、この「Channel基本設定」画面で後ほど「Webhook URL 」にngrokで出力されたURLを入力するので開いたままにしておきます。
ngrokのインストール
ngrokはインターネットから自宅にあるサーバを簡単に公開するために使用するサービスです。本来自宅サーバはIPアドレスの固定など面倒&お金が掛かりますが、このサービスを利用すると無料で同じ(ような)ことが可能になります。
今回のような、開発、テストのときにはとても重宝します。
LINE Messaging APIはインターネットからhttpsでアクセスできる環境がが必須なので
ngrokはとても便利です。(ngrokはhttpsでアクセス可能!)
ngrokを使用するためにまずはsign upします。
sign up後、ngrokのサイトにログインし、「2. Install your authtoken」にある./ngrok authtokenコマンドをメモ帳などに残しておきます。
※下の画像ではauthtokenの後を消していますがここに文字列があります。
次にngrokをラズパイにインストールします。ngrokのサイトからLinux ARMのDownloadボタンを右クリックしてリンクのアドレスをコピーします。
そのURLを適当な場所でwgetします。wget完了後は/usr/local/binにunzipします。
$ sudo unzip ngrok-stable-linux-arm.zip -d /usr/local/bin/
続いて先ほどのauthtoken を入力しておきます。
ホームディレクトリで実施してます。
$ ngrok authtoken XXXXXXXXXXXXXXXXXXXXX
flaskとline-bot-sdkのインストール
こちらのサンプルbotを使用して動作確認するのですが、動かすのにflaskとline-bot-sdkが必要なのでpipを使ってインストールしておきます。
$ pip install line-bot-sdk
サンプルbotを用意する
LINEのサイトにあるサンプルbotを用意します。
適当な場所にapp.pyで保存してください。
環境変数の設定
LINE@のアカウント作成の項目でメモした「Channel Secret」と「アクセストークン」を環境変数に設定します。以下コマンドのようにメモした内容を入力してください。
ここでは「Channel Secret」をaaaa、「アクセストークン」をbbbbとしています。
※aaaa,bbbbは実際はもっともっと長い文字列です。
$ export LINE_CHANNEL_ACCESS_TOKEN=bbbb
このままでは再起動後には消えてしまうので.profileに同じコマンドを追記しておきます。
$ vim .profile
サンプルアプリの実行
サンプルアプリを実行してLINEからのメッセージにオウム返しするかを確認します。
まずラズパイでコンソールを2つ立ち上げます。
1つ目のコンソール画面でapp.pyを実行します。
* Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
この状態で2つ目のコンソール画面でngrokを実行します。
実行後に表示されるForwarding https://cccc.ngrok.ioをメモしておきます。
※出力結果にあるccccは実際はもっと長い文字列です。
$ ngrok http 8000
grok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account XXXXXX (Plan: Free)
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://cccc.ngrok.io -> localhost:8000
Forwarding https://cccc.ngrok.io -> localhost:8000
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
次にLINE developersのサイトの「Channel基本設定」画面に戻り、「Webhook URL 」にngrokの出力結果を書き込みます。https://の後を書き込む形式なので
cccc.ngrok.io/callback
とします。最後に/callbackを追加してください。
追加後「更新」ボタンを押します。
その後「接続確認」ボタンが表示されますがこれはクリックしなくて結構です。
※LINEのサイトからのapp.pyをそのまま使用すると接続確認しても、
「Webhook が正常ではない HTTP ステータスを返しました。」
と表示されます。この表示が出ていてもLINEからのオウム返しは出来ました。
このエラーを表示させなくするには参考サイトにある通りapp.pyの一部をコメントアウトすればできます。しかしコメントアウトするとオウム返しがされなくなるので接続確認しかできません。
動作確認
以上で準備は整いました。
LINE@で登録したアカウントに日常で使用しているLINEアカウントを友達登録して何か話しかけてください。そのままオウム返しされるはずです。
app.py実行中のコンソールでは以下のログが表示されます。
ngrok実行中のコンソールでは以下のログが表示されます。
最後に
ここまで来るのに時間が掛かりましたが出来てしまえば簡単・・・ですかね?
私には難しい話でしたが。。
ngrokが便利すぎて泣いた;;
ちなみに読み方はエングロック(en-grok)のようです。
次回以降はこの話を掘り下げていきます!
コメント