我遇到了aws lambda函数无法向aws lex发送预期json格式的巨大障碍。构建一个与lambda python函数通信的简单天气聊天机器人。它只有一个插槽{city}。在Python中,我尝试了message
变量的许多不同变体,但所有尝试都得到了lex error无效的Lambda响应:从Lambda接收到错误响应:未处理
以下是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响应
我建议您硬编码一个示例响应(可能使用我的),并使其成为Lambda函数的唯一响应。我们的想法是测试Lex是否能够正确地使用经过验证的响应消息
完成该工作后,添加
sessionAttributes
,然后最后用answer
变量中的值替换内容的值。希望这将有助于找到导致错误的线路相关问题 更多 >
编程相关推荐