前回のあらすじと今回の概要
前回は、docker-composeを用いてflaskとnginxをuwsgi繋げ、httpsでアクセスするところまで行った
今回はLINEのAPIを使ってオウム返しbotを作るところまでやろう
ディレクトリ構成
┣ ~
┣ app
┣ Dockerfile
┣ main.py
┣ requirements.txt
┣ uwsgi.ini
┣ docker-compose.yml
┣ nginx
┣ Dockerfile
┣ nginx.conf
┣ ssl
┣ fullchain.pem
┣ privkey.pem
LINEdevelopers登録・各種設定
Linebot作成、Messageing-APIを有効化
https://developers.line.biz/ja/
ここからログイン
公式ドキュメント参照
https://developers.line.biz/ja/docs/messaging-api/getting-started/
アクセストークンとチャネルシークレット発行
LINE Developersコンソールで、作成したチャネルを選択。
[チャネル基本設定]タブで、チャネルシークレット発行
[Messaging-API設定]タブで、チャネルアクセストークン(長期)を発行
Flaskサーバーの設定
~/appディレクトリ内のファイルを編集していく
requirement.txt
line-bot-sdkパッケージをインストールさせる
Flask
uwsgi
line-bot-sdk # 追加!!
main.py
以下のように4つのブロックを付け足す
from flask import Flask, render_template, request, abort
##1.line-bot-sdkの各モジュールをインポート################################
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
########################################################################
app = Flask(__name__)
##2.アクセストークンとチャネルシークレットを入力############################
line_bot_api = LineBotApi("YOUR_CHANNEL_ACCESS_TOKEN") # アクセストークンを入力
handler = WebhookHandler("YOUR_CHANNEL_SECRET") # チャネルシークレットを入力
########################################################################
@app.route("/")
def hello_world():
return "hello world!"
@app.route("/.well-known/acme-challenge/<filename>")
def well_known(filename):
return render_template('.well-known/acme-challenge/'+ filename)
##3.WebhookにURLを指定してWebhookからURLにイベントが送られるようにする########
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
########################################################################
##4.Webhookから送られてきたイベントの処理内容(この場合テキストメッセージが届くと同じメッセージを返す)
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
########################################################################
if __name__ == "__main__":
app.run()
Webhookしてみる
Message-API基本設定タブからWebhookURLの欄にURLを入力
自分のLINEに作成したbotを友達登録して、実際にbotにメッセージを送ってみる
オウム返しされたら成功!!
これにてサーバー構築終了!
お疲れ様!!
次回はLINEbotに送るメッセージに応じてサーボモーターを操作していくよ!
少し電気回路も触るけど、メインはコーディングだからソフトウェア編にかな