0

我希望能够为 LEX 尝试逼近的插槽指定有效选项的自定义列表,或者在无法逼近有效选项的情况下拒绝无效响应。

起初我试图通过自定义插槽类型来做到这一点。尽管他们的例子可能会让你相信这些是枚举,但事实并非如此。用户仍然可以输入他们喜欢的任何值。

他们的文档有这样的说法:https ://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/migrating-to-the-improved-built-in-and-custom-slot-types #文字

自定义槽类型不等同于枚举。如果被口语理解系统识别,列表之外的值仍可能返回。尽管自定义槽类型的输入根据列表中的值加权,但它不仅限于列表中的项目。使用槽值时,您的代码仍需要包含验证和错误检查。

我知道我可以在他们完成完整提交后通过 lambda 验证他们的提交,但到那时为时已晚。用户已提交完整的意图消息。我无法中途捕捉并纠正它们。

我是否缺少一些输入槽选项或自定义槽类型的配置选项的方法?有什么方法可以为插槽强制执行自定义选项列表?(类似于意图的话语,或内置的槽类型,如果没有匹配,它将再次询问相同的问题。)

谢谢!

4

1 回答 1

1

我无法中途捕捉并纠正它们。

您可以在 lambda 中捕获错误,而无需实现意图并重新开始。这是我使用 Python 验证输入的方法。

如果您在 lambda 中检测到验证错误,则可以引出相同的插槽并传递您的错误消息。这允许您设置复杂的验证规则并让您的机器人向用户返回特定的响应。

   def validate(input):
       if input not in ['foo', 'bar']:
           return elicit_slot("Your response must be foo or bar")



   def elicit_slot(error_message):
        return {
            'dialogAction': {
                'type': 'ElicitSlot',
                'intentName': current_intent,
                'slots': current_slots,
                'slotToElicit': slot_with_validation_error,
                'message': {'contentType': 'PlainText', 'content': error_message }
        }
    }
于 2017-06-07T16:14:51.157 回答