概要
AWS LambdaでのLineBot作成手順をまとめました。line-bot-sdk-pythonを使わずに1から書いてみました。
ほぼほぼ「参考」の記事を使っています。
webhokとは
開発の手順紹介
技術
- Python
- AWS Lambda
流れ
- Lmabda関数の作成
- LineDeveloperの登録
- おうむ返しBot作成
- Botを少しいじってみよう
全体
import json
import logging
import os
import urllib.request
# ログ出力の準備
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
# リクエスト内容をログ出力
logger.info(event)
body = json.loads(event['body'])
for event in body['events']:
# 応答用のメッセージオブジェクトのリストを定義
messages = []
# 2. Webhookイベントタイプがmessageであり、
if event['type'] == 'message':
# 3. メッセージタイプがtextの場合に、
if event['message']['type'] == 'text':
# 4. 受信したテキストの内容をメッセージオブジェクトとする
if event['message']['text'] == 'ほんと':
messages.append({
'type': 'image',
'originalContentUrl': 'https://www.bizcourt.space/bizmarket/assets_c/2019/06/a_ocean_eyes_logo_bg_white_02-thumb-autox227-1304.png',
'previewImageUrl': 'https://www.bizcourt.space/bizmarket/assets_c/2019/06/a_ocean_eyes_logo_bg_white_02-thumb-autox227-1304.png'
})
else:
messages.append({
'type': 'text',
'text': event['message']['text']+ 'です'
})
# 応答メッセージのリクエスト情報を定義
url = 'https://api.line.me/v2/bot/message/reply'
headers = {
'Content-Type': 'application/json',
# 環境変数からLINEチャネルアクセストークンを取得
'Authorization': 'Bearer ' + os.environ['LINE_CHANNEL_ACCESS_TOKEN']
}
data = {
# 応答用トークンとメッセージオブジェクトを設定
'replyToken': event['replyToken'],
'messages': messages
}
request = urllib.request.Request(url, data = json.dumps(data).encode('utf-8'), method = 'POST', headers = headers)
with urllib.request.urlopen(request) as response:
# レスポンス内容をログ出力
logger.info(response.read().decode("utf-8"))
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
詳細
1. Lmabda関数の作成
2. LineDeveloperの登録
3. おうむ返しBot作成
Postリクエストを投げる
urllib.requestのライブラリを使う。
公式ドキュメント
使い方のサンプル・・・Python の HTTP クライアントは urllib.request で十分
環境変数の登録
AWS Lambda 環境変数の使用より
import os
region = os.environ['AWS_REGION']
で環境変数を使える。
4. Botを少しいじってみよう
・画像を返してみる
公式ドキュメントの画像オブジェクト
このドキュメントを参考に
messages.append({
'type': 'image',
'originalContentUrl': '画像のURL',
'previewImageUrl': '画像のURL'
})
とすれば画像を返せます。
参考:【LINE botから画像送信する方法】問いかけると柴犬の画像を返してくれるLINE botを作ってみた
参考
LINE Messaging API × AWS Lambdaによる簡易応答システム #1: LINE〜Lambdaをつなげる
←こちらサービスが切れてリンク切れのようです。
感想・今後・・・
- Lambda便利ですね。
- コードの読解力もっとあげたい!
- LineBotはもっといろいろ応用できそうなので、これから頑張りたい。