Edited at

Pythonを使いGCPでlinebotを動かす(1)

More than 1 year has passed since last update.

こんにちは。

GCP上で動作するLINE-botをPython(flask)で作ってみたいと思います。

GCPを使うので、相手の発言を記憶するdatabaseも実装し、簡単なアプリとして恥ずかしくないようにします。databaseの実装によって、ボットの応用範囲がググッと広がります。

今回は、イエス、ノーで答えられる質問を10問出して、イエスの数の集計結果を表示するボットを作ってみます(画像はイメージです)。

IMG_20180627_114959.png

完成品は、以下のQRコードかボタンで友達追加してお試しください!

image.png

友だち追加

対象としている方は

●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


main.py


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'


上のコードで出てくる


main.py


line_bot_api = LineBotApi('<channel-access-token>')
handler = WebhookHandler('<channel-secret>')

の部分は、Line Developers に登録して、アクセストークンとチャンネルシークレットを取得して書き換えます。



Line Developers

1行目の


main.py

from google.cloud import datastore


は、GCP上にデプロイしてからでないと使えないので、ご注意を。

それでは、下準備ができたので、次回からは、main.pyの本体を記述していきます。

(2)へ続く