上次写了一篇关于golang在AWS上发布的Lambda容器镜像,
这一次,我扩展了它并尝试制作 LineBot。
先决条件
包配置
在之前的配置中,我想到了扩展代码,
当我第一次尝试构建 main.go 时,我得到一个关于 gopkg.in/yaml.v3 的错误,所以我决定这次用 Python 尝试一下。
├── docker
│ └── lambda-python-test
│ └── Dockerfile
├── docker-compose.yml
├── lambda
│ ├── app.py
│ └── .env
└── requirements.txt
创建 Docker 文件
我使它与 Python 一起工作
这里创建一个 Dockerfile 参考。
FROM public.ecr.aws/lambda/python:3.8
# Copy function code
COPY ../../lambda ${LAMBDA_TASK_ROOT}
# Install the function's dependencies using file requirements.txt
# from your project folder.
COPY requirements.txt ${LAMBDA_TASK_ROOT}
RUN pip3 install -r requirements.txt
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.handler" ]
- Requirements.txt 仅包含 python-dotenv。
# 環境変数
python-dotenv
Python代码
from dotenv import load_dotenv
import os
import sys
import json
import urllib.request
load_dotenv() # 環境変数ファイル読み込み
CHANNEL_ACCESS_TOKEN = os.environ['CHANNEL_ACCESS_TOKEN']
CHANNEL_SECRET = os.environ['CHANNEL_SECRET']
REPLY_URL = os.environ['REPLY_URL']
def handler(event, context):
message = event['events']
for message in event['events']:
url = 'https://api.line.me/v2/bot/message/reply'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN
}
body = {
'replyToken': message['replyToken'],
'messages': [
{
'type': 'text',
'text': message['message']['text'],
}
]
}
request = urllib.request.Request(url, data=json.dumps(body).encode('utf-8'), method='POST', headers=headers)
with urllib.request.urlopen(request) as response:
body = response.read() # ログ出すようにする
# logger.info(res.read().decode("utf-8"))
return {
"statusCode": 200,
"body": json.dumps({"status": "ok"})
}
CHANNEL_SECRET在 Line Developers 的“频道基本设置”底部指定频道密码。
CHANNEL_ACCESS_TOKEN在 Line Developers 的“Messaging API Settings”下指定通道访问令牌。
创建通道时不可用,所以必须发出。
启动 ngrok
$ ngrok http 9000
ngrok
Session Status online
Account xxxxxxxx (Plan: Free)
Version 3.0.6
Region Japan (jp)
Latency -
Web Interface http://127.0.0.1:4040
Forwarding https://xxxxxxxxxxxxxxxxxx.ngrok.io -> http://localhost:9000
https://xxxxxxxxxxxxxxxxxx.ngrok.io将域和 Lambda 路径部分设置为 Line Developers webhook URL。
我认为“Using Webhook”的勾选第一次没有勾选,所以我也会勾选。
* 启动 ngrok 时的输出网页界面的http://127.0.0.1:4040当您访问
您可以看到请求的内容。 (这让我很开心!!)
操作检查
我会尝试实际的请求。
我被告知他们不接受它,但我暂时退回了它。 . .
当我查看它时,似乎我不得不关闭 Line Developers 端的“响应消息”设置。
“消息 API 设置”→“响应消息:编辑”→关闭响应消息。
我又发了又找回来了!
在最后
我没有检查如何调试 Lambda,所以我有点上瘾了。
我认为 ngrok 是一项非常方便的服务!
下一次,我会尝试改进它,让它不只是返回鹦鹉,而是其他东西!
*如果您有任何更正或补充,如果您能发表评论,我将不胜感激。
感谢您阅读到最后
参考
使用 AWS Lambda + Python + LINE Bot 询问您是否需要雨伞
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308623379.html