【问题标题】:What is correct aws lambda python output format to aws lex. Getting Invalid Lambda Response什么是正确的 aws lambda python 输出格式到 aws lex。获取无效的 Lambda 响应
【发布时间】:2021-09-19 22:15:06
【问题描述】:

我遇到了一个巨大的障碍,因为 aws lambda 函数没有将预期的 json 格式发送到 aws lex。构建一个与 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
        }
    ]
}

两者都不起作用,所有尝试都会出现一个错误...帮助)

【问题讨论】:

  • 你遇到了什么错误?
  • 无效的 Lambda 响应:收到来自 Lambda 的错误响应:未处理

标签: python amazon-web-services aws-lambda amazon-lex


【解决方案1】:

我从我的一个 Cloudwatch 日志中提取了这个 Lambda 响应。

{
   "dialogAction":{
      "type":"Close",
      "fulfillmentState":"Fulfilled",
      "message":{
         "contentType":"PlainText",
         "content":"MY BOTS RESPONSE"
      }
   }
}

我建议您硬编码一个示例响应(也许使用我的),并使其成为 Lambda 函数的唯一响应。我们的想法是测试 Lex 是否能与经过验证的响应消息一起正常工作。

一旦你有这个工作,添加sessionAttributes,然后最后用answer变量中的值替换内容的值。希望这将有助于找到导致错误的行。

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2021-10-23
    • 2018-06-13
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多