Part4です。今回はLINEbotとサーバーの設定、メッセージ送信のテスト等が中心となります。
LINEDevelopersへのログイン
先に楽な作業をこなしてしまいます。
個人で使っているLINEアカウントでこちらのページからログインしてください。
個人のアカウントを持っていない/使いたくない方はLINEビジネスアカウントを作成してログインしてください。
必要な情報を入力してLINEDevelopersコンソールに登録します。
botアカウントの作成
登録が完了するとDevelopersコンソールに入ります。「新規プロバイダー作成」をクリックして名前を入力してください。プロバイダー名はユーザーの同意画面に表示されるので、わかりやすい名前にしておきます。
つぎにMessagingAPIを選択します。
必要な情報を入力してください。
利用規約を確認したら作成します。
同意画面が出るので確認してください。
最後にMessaging API設定のタブを開き、下の方にあるチャネルアクセストークンの項目まで移動します。発行と書かれたボタンをクリックして、アクセストークンと呼ばれるbotを設定するための鍵を作ります。このトークンは重要なものなので、慎重に扱ってください。
次にMessagingAPIのタブを開いて、下にあるLINE公式アカウント機能の「編集」をクリックしてください。
次の画像のような設定ページに飛ぶので、画像のようにWebhookのみ設定を入れるように変更してください。
次に左の設定の欄からアカウント設定を開き、「写真や動画の受け取り」を「受け取らない」に変更します。
いったんLINEDevelopers側の設定は終了です。
サーバーの構築
ここからラズパイを使った作業に移ります。今回はラズパイのコマンド操作に慣れるための練習にしようと思うので、本番環境とは少しだけ違います。最初から本番環境で作業したい方は飛ばしてください。
なお、ここからは基本的にラズパイ上で作業をしています。
外部サイトの作業
今回はngrokと呼ばれる外部サービスを利用して、簡単にLINEbotを作りたいと思います。
こちらのngrok公式ページにアクセスして、右上のSign upからアカウントを作成してください。
そして、Welcomeと書いてあるところのしたのリストから「RaspberryPi」を選んで
Aptを選んで、赤い丸印のボタンを押してコマンドをコピーします。
ラズパイのコンソールを起動して、右クリックからPasteを選ぶかCtrl+Shift+Vキーでコンソールに貼り付けて実行します。
処理が終わったら、同じように一段下のコマンドも実行します。add-authtokenの後ろの文字列は認証キーなので扱いに気をつけてください。
botの作成
コンソールを開いて次のコマンドを実行します。
LINE_CHANNEL_SECRET=hogehoge
hogehogeの部分にはLINEDeveloppersのこの部分の文字列を入れてください。例によってCtrl+Shift+Vキーでペーストできます。これは環境変数と呼ばれる、システム側に情報を保存するための設定です。
ラズパイの電源が切れると消えてしまうので、作業中にフリーズして電源を落としたりした場合は打ち直してください。
同じように
LINE_CHANNEL_ACCESS_TOKEN=hogehoge
と入力します。ここのhogehogeにはMessaging API設定のタブの下にある、チャネルアクセストークンの長い文字列をコピペしてください。
botを作って作業するためのフォルダをデスクトップに作ります。名前は何でも良いですが、今回はlinebot
という名前にしました。
作ったフォルダの中にテキストファイルを作成し、次のプログラムをコピペします。
# -*- coding: utf-8 -*-
import sys
import os
from flask import Flask, request, abort
from linebot.v3 import (
WebhookHandler
)
from linebot.v3.exceptions import (
InvalidSignatureError
)
from linebot.v3.webhooks import (
MessageEvent,
TextMessageContent,
)
from linebot.v3.messaging import (
Configuration,
ApiClient,
MessagingApi,
TextMessage,
ReplyMessageRequest,
)
app = Flask(__name__)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN')
channel_secret = os.getenv('LINE_CHANNEL_SECRET')
handler = WebhookHandler(channel_secret)
configuration = Configuration(
access_token=channel_access_token
)
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
with ApiClient(configuration) as api_client:
if event.message.text == 'こんにちは':
msg = 'こんにちは'
elif event.message.text == 'こんばんは':
msg = 'こんばんは'
else:
msg = 'なんて?'
line_bot_api = MessagingApi(api_client)
line_bot_api.reply_message_with_http_info(
ReplyMessageRequest(
reply_token=event.reply_token,
messages=[TextMessage(text=msg)]
)
)
if __name__ == "__main__":
app.run(host="localhost", port=5050) # port5050
これは「こんにちは」「こんばんは」というメッセージには対応する挨拶を、それ以外には「なんて?」と返すプログラムです。
これをapp.pyという名前にして、先程作成したフォルダに保存します。
botの起動
テスト環境もできたのでbotを動かします。まずコンソールでsudo ngrok http 5050
を実行してngrokクライアントを立ち上げます。
次に新しいコンソールを起動して、cd Desktop/linebot
で作業ディレクトリに移動しpython app.py
と入力して実行します。プログラムのコピペがうまくできていれば、赤い文字で警告が出てbotが起動します。
botが起動したのでテスト...と行きたいのですが、LINEのサーバーとbotをつなぐ設定をまだしていません。
先ほど起動したngrokの画面を開くと以下のようなURLがあると思います。
画像の白い線で囲った部分だけをマウスで選択して、右クリックでコピーします。
次にLINEDevelopersコンソールを開きます。MessagingApi設定のタブを開き、WebhookURLの場所に貼り付けます。
そのあと、入力したURLの最後の部分に/callback
という文字を付け足してください。
次に、検証というボタンをクリックします。「200 OK」が表示されたら成功です。それ以外が出てしまったら、ngrokに何かエラーが出ていないか、ngrokのURLが正しいか、ラズパイがネットに接続されているか、app.pyの中身が正しいか等を確認してください。
botのテスト
LINEDevelopersコンソールのMessagingApi設定の場所にQRコードが表示されているので、お手持ちの携帯でスキャンしてください。でてきたbotを友達に登録して、「こんにちは」等のテキストメッセージを送信してください。返事が返ってくれば成功です。
botを終了させる場合はコンソールを開いてCtrl+Cキーで終了できます。コンソールをそのまま閉じることでも終了することができます。一度ngrokを終了するとURLが変わってしまうので、再度立ち上げるときはURLを入力しなおしてください。
ここまでお疲れさまでした。Part4はここまです。次回はモーターの回転プログラムの作成と、本番環境でのサーバー構築です。