Quantcast
Channel: Google Cloud Platform その1 Advent Calendarの記事 - Qiita
Viewing all articles
Browse latest Browse all 23

Cloud Functions (Python3)入門用に LINE BOTを作ってみる

$
0
0

はじめに

今回の目的はLINE BOTの下地をCloud Functions(GCF)を使って作ること。
言語としては、最近サポートされはじめたPython3を使用する。
LINEで公開しているサンプルコードにあるオウム返しするアプリを、Cloud Functionsでうごかしてみる。

今回つかってみるもの

  • LINE Messaging API
  • Google Cloud Functions
  • Python3

準備

 LINE BOT

 LINE Developersへ登録

以下のURLからLINE Developersへサインアップ
https://developers.line.biz/ja/

プロバイダーとチャネルの作成

プロバイダーとチャネルという概念があるが、

プロバイダーを作成

プロバイダー作成

チャネル作成を選び、MessageAPIを選択

チャネル作成を選んでMessageAPIを選択

チャネル作成完了

チャネル完成

 チャネルの基本設定の確認

以下は後ほどアプリケーション内で使う。

Channel Secretの確認

基本設定 > 基本情報 > Channel Secret

AccessTokenを作成し、確認

基本設定 > メッセージ送受信設定 > AccessToken

チャネル詳細

Cloud Functions

Google Cloud

以下から登録
https://cloud.google.com/

迷うことはないと思いますが、わからなくてもググればいい記事が出てくるはずなので割愛。

Cloud Functionsの作成

  • Cloud Functions API を有効化 スクリーンショット 2018-12-25 0.29.46.png
  • 作成ボタンを押す スクリーンショット 2018-12-25 0.30.23.png
  • 各種項目を設定する

ひとまず以下のようにうめる

項目
名前 (任意)
割り当てられるメモリ 256MB
トリガー HTTP
URL (自動)
ソースコード インラインエディタ
ランタイム Python3.7
実行する関数 (任意。main.pyの中にある関数を指定)

スクリーンショット 2018-12-25 0.30.55.png
- 項目を埋めたら作成
スクリーンショット 2018-12-25 0.33.38.png

実装

コードはローカルで実装し、git管理して、gcloudコマンドでデプロイしてもいいし、今回くらいの規模なら、直接インラインエディタで書いてもいいかもしれない。

ディレクトリ構造

 project/
    ├ main.py
    └ requirements.txt

Python3での実装

実行される関数をかく

main.py
import os
import base64, hashlib, hmac
import logging

from flask import abort, jsonify

from linebot import (
    LineBotApi, WebhookParser
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage
)

def main(request):
    channel_secret = os.environ.get('LINE_CHANNEL_SECRET')
    channel_access_token = os.environ.get('LINE_CHANNEL_ACCESS_TOKEN')

    line_bot_api = LineBotApi(channel_access_token)
    parser = WebhookParser(channel_secret)

    body = request.get_data(as_text=True)
    hash = hmac.new(channel_secret.encode('utf-8'),
        body.encode('utf-8'), hashlib.sha256).digest()
    signature = base64.b64encode(hash).decode()

    if signature != request.headers['X_LINE_SIGNATURE']:
        return abort(405)

    try:
        events = parser.parse(body, signature)
    except InvalidSignatureError:
        return abort(405)


    for event in events:
        if not isinstance(event, MessageEvent):
            continue
        if not isinstance(event.message, TextMessage):
            continue

        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=event.message.text)
        )
    return jsonify({ 'message': 'ok'})

pip install しないといけないものをここに記載する

requirements.txt
# Function dependencies, for example:
# package>=version
line-bot-sdk

Cloud Functionsのローカルエミュレータについて

残念ながら、Python3は対応していないので割愛

Cloud Functions へデプロイ

gcloud functions deploy hogehoge --trigger-http

 Cloud Functions の環境変数の設定

上述したように、チャネル設定を確認し、
Channel SecretをLINE_CHANNEL_SECRETとして
AccessTokenをLINE_CHANNEL_ACCESS_TOKENとして設定する。

Cloudコンソールから

スクリーンショット 2018-12-25 0.42.53.png

コマンドから

gcloud functions deploy hogehoge --trigger-http --set-env-vars LINE_CHANNEL_SECRET=123456789qwert123456789qwert,LINE_CHANNEL_ACCESS_TOKEN=123456789qwert

挙動

LINE BOT

友だち追加

チャネル基本設定に「LINEアプリへのQRコード」という項目があるので、
スクリーンショット 2018-12-26 8.24.35.png

それを読み取ると作ったBOTを友だちに追加できる。
IMG_2049.PNG

チャット

追加すると、チャットをはじめられる。
IMG_2050.PNG

今回はオウム返しするサンプルコードを使ったのでこんな感じ。
とりあえずこれで最低限の挙動は確認できた。
IMG_2052.PNG

まとめ

以下の簡単な使い方だけまとめました。
 - LINE Messaging API
 - Google Cloud Functions
 - Python3

やったこととしては、LINEで公開されているサンプルコードにあるオウム返しするアプリを、
Cloud Functions(Python)でうごかしてみた。
基本的にLINEとGoogleの公式ドキュメントが丁寧なので、それを見ていれば問題なさそう。
(特にLINEのドキュメントにはPythonのコードが多いので、Pythonで実装していると楽かもしれない)

参考

展望

今回つくったものを基に、他APIと連携などしてちゃんとしたアプリケーションを作っていく。
Python3は現時点でベータ版なので、今後仕様がいろいろかわるかもしれないが・・・。
(ローカルエミュレータはやく対応してくれ)


Viewing all articles
Browse latest Browse all 23

Trending Articles