微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法让AWS Lambda向Lex发送提示消息

如何解决无法让AWS Lambda向Lex发送提示消息

我正在尝试创建一个模板,为AWS Lambda编写新功能,以验证来自Lex的输入。我对完成正确的输入没有任何麻烦,只是在插槽未正确填充时让Lex中继提示消息。

def hello_world(intent_request):
    object_of_greeting = get_slots(intent_request)["HelloObject"]
    type_of_greeting = get_slots(intent_request)["GreetingType"]
    # add more of these calls if more slots are involved
    
    source = intent_request['invocationSource']

    if source == 'DialogCodeHook':
        # Perform basic validation on the supplied input slot(s).
        # Use the elicitSlot dialog action to re-prompt for the first violation detected.
        slots = get_slots(intent_request)

        validation_result = validate_greeting(object_of_greeting,type_of_greeting)
        if not validation_result['isValid']:
            slots[validation_result['violatedSlot']] = None
            return elicit_slot(intent_request['sessionAttributes'],intent_request['currentIntent']['name'],slots,validation_result['violatedSlot'],validation_result['message'])

等...然后,验证功能

def validate_greeting(object_of_greeting,type_of_greeting):
    
    objects = ['world','kitty','my dear']
    # these should match the listed examples of their corresponding slot,which is 'HelloObject' here
    if object_of_greeting is not None and object_of_greeting.lower() not in objects:
        return build_validation_result(False,'HelloObject',f'You cannot greet {object_of_greeting},would you like to greet someone else?')

    greetings = ['hello',"gday","whassup"]
    if type_of_greeting is not None and type_of_greeting.lower() not in greetings:
        return build_validation_result(False,'GreetingType',f'You cannot say {type_of_greeting} to anyone. 
                                       How about gday or whassup?')

    return build_validation_result(True,None,None)

我能够使用build_validation_result函数的测试脚本返回正确的JSON,如下所示:

{
  'isValid': False,'violatedSlot': 'HelloObject','message': {
      'contentType': 'PlainText','content': 'You cannot greet foobar,would you like to greet someone else?
  }
}

我还针对错误输入编写了Lambda测试,该测试给出以下响应:

{
  "sessionAttributes": {},"dialogAction": {
    "type": "ElicitSlot","intentName": "HelloWorld","slots": {
      "HelloObject": null,"GreetingType": "howdy"
    },"slottoElicit": "HelloObject","message": {
      "contentType": "PlainText","content": "You cannot greet foobar,would you like to greet someone else?"
    }
  }
}

以某种方式,验证结果并没有返回到Lex,因此仅返回控制台提示,“您想和谁打招呼?”一遍又一遍,在n次尝试后放弃。

我的测试表明Lambda函数正在输出正确的JSON,所以我不知道为什么我永远无法使它们的提示消息出现在聊天机器人中。任何帮助,不胜感激。如果需要,将发布更多详细信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。