带有aws lambda和API网关的Telegram bot



我正在开发一个电报机器人与python (telebot), aws lambda和api网关。

我在lambda函数中有一个问题,我不明白为什么会有这种问题。

我的lambda是这样的:

import telebot
import datetime
TOKEN = 'xxx'
def lambda_handler(event, context):
bot = telebot.TeleBot(TOKEN)
# Extract the message key over payload's body
message = json.loads(event['body'])
print(message)

# Split between three variables bellow
chat_id = message['chat']['id'] # Chat ID will guide your chatbot reply 
sender = message['from']['first_name'] # Sender's first name, registered by user's telegram app
text = message['text'] # The message content

if text.lower().strip() == "/time":

current_time = datetime.strftime(datetime.now(), "%H:%M:%S")
bot.send_message(chat_id, "Right now its {} UTC.".format(current_time))

else:
pass 

我得到的错误,运行测试是:

Response
{
"errorMessage": "'body'",
"errorType": "KeyError",
"stackTrace": [
"  File "/var/task/lambda_function.py", line 10, in lambda_handlern    message = json.loads(event['body'])n"
]
}

给定的json文件:

{
"update_id": 0000000,
"message": {
"message_id": 000000,
"from": {
"id": 00000000,
"is_bot": false,
"first_name": "myname",
"last_name": "mysurname",
"username": "sursurname",
"language_code": "it"
},
"chat": {
"id": 000000,
"first_name": "myname",
"last_name": "mysurname",
"username": "sursurname",
"type": "private"
},
"date": 1654697178,
"forward_from": {
"id": 00000000,
"is_bot": false,
"first_name": "mysurname",
"last_name": "mysurname",
"username": "sursurname",
"language_code": "it"
},
"forward_date": 0000000000,
"text": "ciao"
}
}

我不明白为什么它不能以任何方式读取正文,也许我在错误的库中?你有什么建议来帮助我吗?

event['body']几乎肯定不是访问通过事件传递的数据的正确键。事件在一个嵌套的字典中传递信息,您需要弄清楚如何向下钻取到正确的键。

我是这样解决的:

json_str = json.dumps(event)
resp = json.loads(json_str)
chat_id = resp['message']['chat']['id']
message_text = resp['message']['text']
message_chat_id = resp['message']['chat']['id']
message_username = resp['message']['from']['first_name']
bot = telebot.TeleBot(TOKEN)
bot.send_message(chat_id, "Hey, I understood this message!, hi {}".format(message_username))

最新更新