问题描述
我正在尝试创建一个模板,为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 (将#修改为@)