こんにちは。
GCP上で動作するLINE-botをPython(flask)で作ってみたいと思います。
GCPを使うので、相手の発言を記憶するdatabaseも実装し、簡単なアプリとして恥ずかしくないようにします。databaseの実装によって、ボットの応用範囲がググッと広がります。
今回は、イエス、ノーで答えられる質問を10問出して、イエスの数の集計結果を表示するボットを作ってみます(画像はイメージです)。
完成品は、以下のQRコードかボタンで友達追加してお試しください!
↓
対象としている方は
●google cloud platformを使ったことがある
●line-bot-sdkを使ったことがある
●pythonに慣れている
方になります。
上の前提知識については、時間があれば、別の記事で説明します。
それでは、さっそくいきましょう。
###プログラムの仕組み
書くファイルは以下の3つです。
1 main.py botの本体を書いたファイル
2 app.yaml google-cloud-platformにデプロイする際の条件を書くファイル
3 question.txt イエス、ノーで答えられる質問を記載したファイル
それでは、順番に見ていきましょう。
###main.py
まずは、必要なモジュールのインポートと、認証部分の記述です。
以下の公式ドキュメントほぼそのままです。
↓
line-bot-sdk-python
from google.cloud import datastore
from flask import Flask, redirect, request, render_template,abort,request
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage,PostbackEvent,JoinEvent, TextSendMessage,TemplateSendMessage, ButtonsTemplate,
PostbackAction, MessageAction,
URIAction, DatetimePickerAction,
ConfirmTemplate, CarouselTemplate, CarouselColumn,
ImageCarouselTemplate, ImageCarouselColumn
)
app = Flask(__name__)
line_bot_api = LineBotApi('<channel-access-token>')
handler = WebhookHandler('<channel-secret>')
@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'
上のコードで出てくる
line_bot_api = LineBotApi('<channel-access-token>')
handler = WebhookHandler('<channel-secret>')
の部分は、Line Developers に登録して、アクセストークンとチャンネルシークレットを取得して書き換えます。
↓
Line Developers
1行目の
from google.cloud import datastore
は、GCP上にデプロイしてからでないと使えないので、ご注意を。
それでは、下準備ができたので、次回からは、main.pyの本体を記述していきます。