search
LoginSignup
16

More than 3 years have passed since last update.

posted at

updated at

Organization

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

こんにちは。
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)へ続く

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
16