フェイス・ソリューション・テクノロジーズ株式会社 IS 本部 OS ユニットの Saitoです。
此度はAWSの「API Gateway」と「Lambda」使って、自動的に定型の受け答えをしてくれる LINE bot 作ります。
LINE公式アカウントのページからでもbotは作れるのですが、できることの範囲がとても狭いので、LINE Developer の「Messaging API」からLINE公式アカウントを作成し、AWS の「API Gateway」を使って、応答内容を設定した AWS「Lambda」と連携させます。
LINE公式アカウントの作成
まず、LINEビジネスIDを登録します。無料です。
https://www.linebiz.com/jp/signup/
登録した LINEビジネスIDで LINE Developerにログインします。
https://developers.line.biz/
プロダクト > Messaging API を選択
今すぐはじめよう > 新規チャネル作成
チャネルの種類:Messaging API にして他は適当に
これでLINE公式アカウントが作成されました。
作成したチャネル > Messaging API 設定
一番下のチャンネルアクセストークン(長期)「発行」を押して出てくる文字列
→
作成したチャネル > チャネル基本設定 にある「チャネルシークレット」の文字列
それぞれ後ほど使います。
Lambdaの設定
AWS Lambda > 関数の作成
一から作成、ランタイムはPython3.8を選択し関数の作成。
作成した関数にコードを書く前にライブラリを入れます。
コマンドプロンプトでline-bot-sdk-pythonのダウンロード
python -m pip install line-bot-sdk -t .
ダウンロードしたものをzipにする。
作成した関数 > コード > アップロード元 > zipファイル
zipにしたライブラリをアップロード。
関数直下に新しいファイル「lambda_function.py」を作成します。
このファイルに LINEbot 用のコードを書いていきます。
以下を入れてDeployを押す。
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, StickerSendMessage, QuickReply, QuickReplyButton, MessageAction, PostbackAction,
)
LINE_CHANNEL_ACCESS_TOKEN = os.environ['LINE_CHANNEL_ACCESS_TOKEN']
LINE_CHANNEL_SECRET = os.environ['LINE_CHANNEL_SECRET']
LINE_BOT_API = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
LINE_HANDLER = WebhookHandler(LINE_CHANNEL_SECRET)
def lambda_handler(event, context):
logger.info(event)
signature = event["headers"]["x-line-signature"]
body = event["body"]
@LINE_HANDLER.add(MessageEvent, message=TextMessage)
def on_message(line_event):
profile = LINE_BOT_API.get_profile(line_event.source.user_id)
logger.info(profile)
message = line_event.message.text.lower()
answerlist = ["鉛", "銅", "銀", "金", "斎藤道三", "斎藤義龍", "ショーツ", "パジャマ"]
if message == 'テスト':
LINE_BOT_API.reply_message(line_event.reply_token,
TextSendMessage(text='次のうち、最も融点が高いのはどれ?',
quick_reply=QuickReply(items=[
QuickReplyButton(action=PostbackAction(label="鉄", data="鉄", text="鉄")),
QuickReplyButton(action=PostbackAction(label="鉛", data="鉛", text="鉛")),
QuickReplyButton(action=PostbackAction(label="銅", data="銅", text="銅")),
QuickReplyButton(action=PostbackAction(label="銀", data="銀", text="銀")),
QuickReplyButton(action=PostbackAction(label="金", data="金", text="金")),
])))
elif message == '鉄':
LINE_BOT_API.reply_message(line_event.reply_token,
TextSendMessage(text='戦国時代の大名、斎藤氏の最後の当主は誰?',
quick_reply=QuickReply(items=[
QuickReplyButton(action=PostbackAction(label="斎藤道三", data="斎藤道三", text="斎藤道三")),
QuickReplyButton(action=PostbackAction(label="斎藤義龍", data="斎藤義龍", text="斎藤義龍")),
QuickReplyButton(action=PostbackAction(label="斎藤龍興", data="斎藤龍興", text="斎藤龍興")),
])))
elif message == '斎藤龍興':
LINE_BOT_API.reply_message(line_event.reply_token,
TextSendMessage(text='女性向け下着ブランド\nチュチュアンナで唯一存在するメンズ向けアイテムはどれ?',
quick_reply=QuickReply(items=[
QuickReplyButton(action=PostbackAction(label="ショーツ", data="ショーツ", text="ショーツ")),
QuickReplyButton(action=PostbackAction(label="パジャマ", data="パジャマ", text="パジャマ")),
QuickReplyButton(action=PostbackAction(label="ソックス", data="ソックス", text="ソックス")),
])))
elif message in answerlist:
LINE_BOT_API.reply_message(line_event.reply_token,
TextSendMessage(text='不正解!',
quick_reply=QuickReply(items=[
QuickReplyButton(action=PostbackAction(label="再挑戦", data="再挑戦", text="テスト")),
])))
elif message == 'ソックス':
LINE_BOT_API.reply_message(line_event.reply_token, StickerSendMessage(package_id='8515',sticker_id='16581254'))
else:
LINE_BOT_API.reply_message(line_event.reply_token, StickerSendMessage(package_id='11537',sticker_id='52002744'))
return
LINE_HANDLER.handle(body, signature)
return 0
作成した関数 > 設定 > 環境変数 にて
キーと値を以下のように追加します。値はMessaging API の画面で確認した、
チャンネルアクセストークン(長期)とチャネルシークレットの文字列を貼り付けます。
API Gateway の設定
続けて、AWS Lambdaの 作成した関数 > 設定 > トリガー > トリガーの追加
以下のように設定してAPI Gatewayをトリガーに追加する。
API Gateway の API endpoint(https://~)を
LINE developers の
作成したチャネル > Messaging API設定 > Webhook設定
WebhookURLに貼り付け、Webhookの利用を有効にします。
作成したチャネルを友だち追加して、トークで「テスト」と入れると…
※LINE Official Account Managerの設定からデフォルトの応答設定などをオフにしておきます。
応答とクイックリプライが出るようになりました。
クイックリプライを選択すると次のクイズか、不正解!の応答が出て、3問正解するとスタンプが出てきます。
例外のメッセージを入れると別のスタンプで応答します。
このようにして、LINE botを作ることができました。
他にもいろいろできることがあるので、以降の記事でも紹介していきたいと思います。
コメント