我如何让Lex + Lambda询问用户他们准备好了吗?



我有一个基本的bot设置,要求用户输入一些格式,如:

用户输入:我需要关于{policy}的信息

然后执行一个lambda函数,该函数使用一些基本正则表达式验证输入的策略。这一切工作完美,如预期。

然后,它将dialogAction返回给lex,我已将其设置如下:

return {"dialogAction": {
"type": "ConfirmIntent",
"fulfillmentState": "ReadyForFulfillment",
"message": {
"contentType": "PlainText",
"content": "Your policy " + policy + " is " + retStr (this just says valid or invalid) + " input."
}
}}

理想情况下,在测试时,我希望这验证用户输入与正则表达式,然后机器人基本上做ReadyForFulfillment消息,但这不起作用。相反,它崩溃了,我得到:

An error has occurred: The server encountered an error processing the Lambda response

我设置了日志记录,我使用它来处理其他错误,但是当它为这个东西出错时,它不会在CloudWatch日志中产生错误。

我可以将fulfillmentState更改为' completed '并键入'Close',这将完美运行。但我想要'ReadyForFulfillment'选项。

这是我完整的lambda函数:

import json
import logging
import re
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
def dispatch(event):
slots = event["currentIntent"]["slots"];
policy = slots["policy"]
if re.match(r"policy.([w]+.)+[w]+(?=[s]|$)", policy):
print("Valid input.")
retStr = "valid"
else:
print("Invalid input.")
retStr = "invalid"
return {"dialogAction": {
"type": "ConfirmIntent",
"fulfillmentState": "ReadyForFulfillment",
"message": {
"contentType": "PlainText",
"content": "Your policy " + policy + " is " + retStr + " input."
}
}}

def lambda_handler(event, context):

logger.debug('event={}'.format(event))
response = dispatch(event)
logger.debug(response)
return response

您尝试过不同的dialogAction类型吗?

相关内容