python - 什么是正确的 aws lambda python 输出格式到 aws lex。获取无效的 Lambda 响应
问题描述
我遇到了一个巨大的障碍,因为 aws lambda 函数没有向 aws lex 发送预期的 json 格式。构建一个与 lambda python 函数通信的简单天气聊天机器人。它只有一个插槽 {city}。在 Python 中,我尝试了许多不同的message
变量变体,但所有尝试都得到 lex 错误Invalid Lambda Response: Received error response from Lambda: Unhandled
这是 lambda 函数:
import requests
def lambda_handler(event, context):
city = event['currentIntent'] ['slots'] ['City']
api = "http://api.openweathermap.org/data/2.5/weather?q="+ city +"TOKEN"
json_data = requests.get(api).json()
temp = int(json_data['main']['temp'] - 273.15)
answer = f"Weather in {city} is {temp}C"
message = {
"dialogAction": {
"type": "ConfirmIntent", #also tried Close
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": answer
}
}
}
return message
#Also tried variant 2 With contentType PlainText or SSML:
message = {
"sessionAttributes": {},
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": answer
}
}
}
#Variant 3:
message = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
"name": "FindingWeather"
},
"state": "Fulfilled"
},
"messages": [
{
"contentType": "PlainText",
"content": answer
}
]
}
两者都不起作用,所有尝试都有一个错误...帮助)
解决方案
我从我的 Cloudwatch 日志中提取了这个 Lambda 响应。
{
"dialogAction":{
"type":"Close",
"fulfillmentState":"Fulfilled",
"message":{
"contentType":"PlainText",
"content":"MY BOTS RESPONSE"
}
}
}
我建议您硬编码一个示例响应(也许使用我的),并使其成为 Lambda 函数的唯一响应。这个想法将是测试 Lex 是否与经过验证的响应消息一起正常工作。
一旦你有这个工作,添加,sessionAttributes
然后最后用变量中的值替换内容的值answer
。希望这将有助于找到导致错误的行。
推荐阅读
- node.js - Angular不支持当前版本的Node(16.4.1)。如何完全摆脱mac中的软件?
- javascript - 如何为自定义 mongoose SchemaType 的所有实例提供默认验证?
- angular - 如何为 Firebase 实施拦截器?
- c++ - 如何可视化提升图并执行dijkstra的最短路径?
- windows-10 - 阻止程序以管理员身份运行
- postgresql - PostgreSQL 高 CPU 使用率
- reactjs - Socket.io 在与 reacter-router-dom 链接时不会关闭连接
- c# - 如何获取从固定点到特定距离的坐标邻居
- r - 我们如何在循环时将这些日期存储到另一个数据框中?
- macos - 我自己的 macOS pkg 在安装后脚本运行后很长一段时间都停留在“正在注册更新的组件...”上,它在做什么?