Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What is going on with this article?
@ideki1991

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)へ続く

16
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ideki1991
弁護士のフリをしたプログラマ。 Python/Vue GoogleCloudPlatform/Firebase
abiteinc
法律に関するiOSアプリを開発・運営するスタートアップ。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
16
Help us understand the problem. What is going on with this article?