上次写了一篇关于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 的“频道基本设置”底部指定频道密码。
LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました
CHANNEL_ACCESS_TOKEN在 Line Developers 的“Messaging API Settings”下指定通道访问令牌。
创建通道时不可用,所以必须发出。
LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

启动 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”的勾选第一次没有勾选,所以我也会勾选。
LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

* 启动 ngrok 时的输出网页界面http://127.0.0.1:4040当您访问
您可以看到请求的内容。 (这让我很开心!!)

操作检查

我会尝试实际的请求。
LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

我被告知他们不接受它,但我暂时退回了它。 . .
当我查看它时,似乎我不得不关闭 Line Developers 端的“响应消息”设置。
“消息 API 设置”→“响应消息:编辑”→关闭响应消息。
LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

我又发了又找回来了!
LineMessageAPI+ngrok+Lambdaで送られてきたメッセージをそのまま返すBotを作ってみました

在最后

我没有检查如何调试 Lambda,所以我有点上瘾了。
我认为 ngrok 是一项非常方便的服务!
下一次,我会尝试改进它,让它不只是返回鹦鹉,而是其他东西!

*如果您有任何更正或补充,如果您能发表评论,我将不胜感激。
感谢您阅读到最后

参考

使用 AWS Lambda + Python + LINE Bot 询问您是否需要雨伞


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623379.html

相关文章:

  • 2022-01-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2022-12-23
猜你喜欢
  • 2021-12-20
  • 2021-06-17
  • 2022-01-23
  • 2021-07-10
  • 2021-07-10
  • 2021-05-19
  • 2022-12-23
相关资源
相似解决方案