PythonとAWSで始める感情分析AIをLINE Bot開発②オウム返しLINE Bot

Python

Web API

普通のWebと同じ仕組みの通信で、処理を呼び出す仕組み。通信する内容はHTMLではなくJSONという形式のテキストで書かれている。下記のフォルダをダウンロードして解凍、その後エディタに表示させます。

LINE developpersのチャネルのMessaging API設定でチャネルアクセストークンを発行しておく。

sam build -t template.json

sam build --use-container -t template.json
最初のコマンドでエラーが出る場合は、Dockerをインストールした後にこちらのコマンドを入力する
ただし、Dockerのインストールが必要なので要注意
https://www.docker.com/

sam deploy --guided
stack nameはなんでも良いが唯一無二のタイトルをつける。 
    linebot-app-0908
AWS Region
    ap-northeast-1->東京を意味する
Parameter Line ChannelAccessToken
    チャネルアクセストークンのコピペ
Line ChannelSecret
    シークレットパスワードをコピペする
Confirm changes before deploy
    そのままEnter
Allow SAM CLI IAM role creation
    そのままEnter
Authorrization defined, is this ok?
    Yで回答
その後、3つは全て空白のままEnterでOK
                        

出力されたURLをLINE developpersのwebhookに入力するしてwebhookは有効にする。

あいさつメッセージはオフ、応答メッセージもオフ、Webhookはオンに設定する。

これでオウム返しbotは完成です。

コード詳細解説

template.jsonはaws lambda / API Gatewayをデプロイさせるためのsam-cliの設定ファイル
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Parameters": {
    "LineChannelAccessToken": {"Type": "String", "Description": "LINE のアクセストークン"},
    "LineChannelSecret": {"Type": "String", "Description": "LINE のチャンネルシークレット"}
  },
  "Resources": {
    "EndPointFunction": {
      "Type": "AWS::Serverless::Function",
      "Properties": {
        "Runtime": "python3.8",
        "CodeUri": "src",
        "Handler": "mylinebot.lambda_handler",
        "Environment": {"Variables": {
            "LINE_CHANNEL_ACCESS_TOKEN": {"Ref": "LineChannelAccessToken"},
            "LINE_CHANNEL_SECRET": {"Ref": "LineChannelSecret"}
        }},
        "Policies": [{"RekognitionDetectOnlyPolicy":{}}],
        "Events": {
          "API": {
            "Type": "Api",
            "Properties": {"Path": "/api_endpoint", "Method": "post"}
          }
        }
      }
    }
  },
  "Outputs": {
    "ApiEndpointURL": {
      "Description": "API Endpoint URL",
      "Value": {"Fn::Sub": "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/${ServerlessRestApi.Stage}/api_endpoint"}
    }
  }
}
src/mylinebot.pyはaws Lambdaで実行されるコードでAPI Gatewayが呼ばれるたびに実行される

"""
オウム返し Line Bot
"""

import os

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

handler = WebhookHandler(os.getenv('LINE_CHANNEL_SECRET'))
line_bot_api = LineBotApi(os.getenv('LINE_CHANNEL_ACCESS_TOKEN'))


def lambda_handler(event, context):
    headers = event["headers"]
    body = event["body"]

    # get X-Line-Signature header value
    signature = headers['x-line-signature']

    # handle webhook body
    handler.handle(body, signature)

    return {"statusCode": 200, "body": "OK"}


@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
    """ TextMessage handler """
    input_text = event.message.text

    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=input_text))

src/requirement.txtは利用するライブラリを書くファイルでここに書いたライブラリが使える

line-bot-sdk
環境変数を使用してPublicに自身のキーを公開しないようにする

kazuhiro

旅行が趣味で、国内外さまざまな場所を訪れています。外資系企業で働きながら、副業として不動産投資も行っています。 https://vdhqm2p0.autosns.app/line

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE