介绍
我找不到有关使用line-bot-sdk-python使用lambda创建BOT的文章,所以我创建了它。
目标是创建一个鹦鹉返回机器人。
我是AWS的超级初学者,所以请评论这些缺点。
环境
- Windows 10
- Python3.6
①创建工作目录
为了将库与
lambda一起使用,您需要一次以zip格式上传文件,因此请创建一个文件夹,以便轻松地将其上传到lambda。
目前,我将在
②图书馆介绍
移至工作文件夹
1 | cd C\:Users\ユーザー名\Documents\aws\parrot |
通过添加
-t选项指定安装目的地,以安装库。
1 | python -m pip install line-bot-sdk -t . |
③创建要在lambda中使用的函数
我认为很多
文件夹已经完成,但是让我们在
内容是这样的。
lambda_function.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | import os import sys from linebot import ( LineBotApi, WebhookHandler ) from linebot.models import ( MessageEvent, TextMessage, TextSendMessage, ) from linebot.exceptions import ( LineBotApiError, InvalidSignatureError ) import logging logger = logging.getLogger() logger.setLevel(logging.ERROR) channel_secret = os.getenv('LINE_CHANNEL_SECRET', None) channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None) if channel_secret is None: logger.error('Specify LINE_CHANNEL_SECRET as environment variable.') sys.exit(1) if channel_access_token is None: logger.error('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.') sys.exit(1) line_bot_api = LineBotApi(channel_access_token) handler = WebhookHandler(channel_secret) def lambda_handler(event, context): if "x-line-signature" in event["headers"]: signature = event["headers"]["x-line-signature"] elif "X-Line-Signature" in event["headers"]: signature = event["headers"]["X-Line-Signature"] body = event["body"] ok_json = {"isBase64Encoded": False, "statusCode": 200, "headers": {}, "body": ""} error_json = {"isBase64Encoded": False, "statusCode": 500, "headers": {}, "body": "Error"} @handler.add(MessageEvent, message=TextMessage) def message(line_event): text = line_event.message.text line_bot_api.reply_message(line_event.reply_token, TextSendMessage(text=text)) try: handler.handle(body, signature) except LineBotApiError as e: logger.error("Got exception from LINE Messaging API: %s\n" % e.message) for m in e.error.details: logger.error(" %s: %s" % (m.property, m.message)) return error_json except InvalidSignatureError: return error_json return ok_json |
请注意,如果您没有在
2/5更改
@Aki_fujita的评论中有一个报告,因此我进行了查找。
https://developers.line.biz/ja/news/2021/01/18/reminder-update-webhook-client-and-root-certificate/#header-field-name-2
看起来LINE一侧的标头字段名称的处理已发生了一些变化。
当我阅读参考资料时,似乎原因是由于HTTP / 2中的限制,字段名称只能小写。
由于我过去制作的应用程序运行正常,因此似乎没有统一的更改,但是正如LINE所宣布的那样,我重写了" X-Line-Signature"或" x-line-Signature",以便可以处理。
我尚未确认操作,所以对不起,如果您无法使用...
更新结束
④合并成ZIP
选择工作文件夹中的所有文件,然后将它们压缩在一起。
像这样,我选择全部并将其压缩成一个zip。
⑤用aws创建lambda
打开
aws控制台,然后转到lambda位置。并创建一个这样的lambda。
该角色没有所需的权限,因此不添加任何内容。
继续时上载代码。
将代码输入类型更改为ZIP文件上传,然后上传刚刚创建的zip文件。
接下来,在环境变量中设置访问令牌等。
在LINE Developers网站和
上为您的机器人创建LINE帐户
- 重新获得访问令牌
- 使用webhook
- 不要使用自动助理消息
让我们这样做。 Webhook URL将在下一章中设置。
将在那里显示的通道密码和访问令牌复制到lambda的环境变量,然后按保存。
lambda的工作已经结束。
⑥设置AWS API Gateway
设置API网关以接收来自LINE的webhook。
从AWS服务中选择API Gateway,然后选择创建一个API。
创建为新的API。
创建比操作新的资源
我是这样创建的。
接下来,创建一个方法
因为它是通过POST发出的,所以选择POST。
选择代理集成,因为它使用
标头信息。
在下一个屏幕上,选择方法要求并进行设置,如下图所示。
最后部署。
让我们适当地进行一个阶段。
选择POST并检查URL
在LINE Developers中将此URL设置为Webhook URL,就完成了!
演示版
参考文献
https://qiita.com/Hironsan/items/0eb5578f3321c72637b4
https://qiita.com/hiyuzawa/items/10e7bf2f6ad5d1c7fc9c
https://qiita.com/_mogaming/items/2bd83204e212e35b2c6c