【问题标题】:Send group (multiple) messages from Lambda to Lex从 Lambda 向 Lex 发送组(多条)消息
【发布时间】:2019-03-15 08:35:54
【问题描述】:

我目前正在尝试在 Python 3.6 中从 AWS Lambda 向 Lex 发送多条消息,但 Lex 认为我的答案不正确。

我遇到了多个错误,例如:

  • 收到来自 Lambda 的无效响应:无法构造消息实例,问题:contentType 不能为空
  • “内容”不能为空
  • 模块 'lambda_function' 中的语法错误:行继续符后出现意外字符 [在尝试转义我的 JSON 之后]
  • 收到来自 Lambda 的无效响应:无法从 START_OBJECT 令牌中反序列化 java.lang.String 实例...

所以基本上,我是这样做的:

    messages = [
        {
            'contentType': 'PlainText',
            'group': 0,
            'value': 'Applying this criteria, you have %d result(s) left.' % len(json.loads(session_attributes['results']))
        },
        {
            'contentType': 'PlainText',
            'group': 1,
            'value': 'What do you want to do next ?'
        }
    ]

format_message('PlainText', messages)

使用 TEMPORARILY 看起来像这样的 format_message(因为我已经尝试了很多事情来使它工作......但没有任何成功)——但这一个也不起作用:

def format_message(message_type, content):
return {'messages': content}

最后,它给出了这种响应格式(带有其他 lex 先决条件,例如插槽等,但我不会在此处显示它们,因为我认为它不相关):

{'message': {'messages': [{'group': 0, 'contentType': 'PlainText', 'value': 'Applying this criteria, you have 1 result(s) left.'}, {'group': 1, 'contentType': 'PlainText', 'value': 'What do you want to do next ?'}]

我尝试将“消息”数组转换为字符串,将其作为 JSON 等发送,但似乎没有任何效果。

我阅读了此issue...中列出的所有文档...

请问有人已经找到解决方案了吗?

谢谢,

【问题讨论】:

    标签: python python-3.x amazon-web-services aws-lambda aws-lex


    【解决方案1】:

    据我所知,Lambda 无法做到这一点。 Lex only allows one return message。当您从命令行aws 管理实用程序使用 JSON 构建 Lex 机器人时,可以创建称为 Message Group 的东西,例如:

    {
        "metadata": {
            "importFormat": "JSON",
            "importType": "LEX",
            "schemaVersion": "1.0"
        },
        "resource": {
            "abortStatement": {
                "messages": [
                    {
                        "content": "Sorry, I could not understand. Goodbye.",
                        "contentType": "PlainText"
                    }
                ]
            },
            "childDirected": false,
            "clarificationPrompt": {
                "maxAttempts": 5,
                "messages": [
                    {
                        "content": "Sorry, can you please repeat that?",
                        "contentType": "PlainText"
                    }
                ]
            },
            "idleSessionTTLInSeconds": 300,
            "intents": [
                {
                    "conclusionStatement": {
                        "messages": [
                            {
                                "content": "Hello",
                                "contentType": "PlainText"
                            },
                            {
                                "content": "World",
                                "contentType": "PlainText"
                            }
                        ]
                    },
                    "fulfillmentActivity": {
                        "type": "ReturnIntent"
                    },
                    "name": "test",
                    "sampleUtterances": [
                        "hello"
                    ],
                    "slots": [],
                    "version": "1"
                }
            ],
            "locale": "en-US",
            "name": "Test",
            "version": "1",
            "voiceId": "Matthew"
        }
    }
    

    我认为 Lambda 函数的最佳选择是在 Python 中将字符串连接在一起,如下所示:

    'message': {
        'contentType': 'PlainText',
        'value': ('Applying this criteria, you have %d result(s) left.' % len(json.loads(session_attributes['results']))) + 'What do you want to do next ?'
    }
    

    请原谅格式。我通常不使用 Python。

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2020-02-18
      • 2022-01-25
      相关资源
      最近更新 更多