下面的lambda代码的响应不是lex接受的,但是如果我将json槽值改为声明的槽变量,则返回语句,然后工作,即它接受lex的响应。它完全令人困惑,因为变量槽和变量d具有相同的值,请找我附带的云观察日志截图。
def lambda_handler(event,context):
slot=event['currentIntent']['slots']
d="{'Intro': None, 'Start': None, 'ReturnBooking': None, 'name': None, 'pickup': None, 'conformation': None, 'location': None, 'Count': None, 'comfort': None}"
print("using dict:",slot,"using variable:",d)
return {
"dialogAction": {
"type": "Delegate",
"slots": d
}
}
如果有人想通了,请帮帮我。
如果一个槽没有持有一个值,那么它应该是null
而不是None
。看起来Cloudwatch正在为你记录null
为None
。这应该是你的变量之间的差异:slot
和d
。
所以这就是d
应该是:
d="{'Intro': null, 'Start': null, 'ReturnBooking': null, 'name': null, 'pickup': null, 'conformation': null, 'location': null, 'Count': null, 'comfort': null}"
但是没有理由为你的意图插槽重新创建一个字符串。你应该简单地将slots=event['currentIntent']['slots']
变量传递给Lex。如果要更改Lambda中的插槽,请将其视为数组,并将其中一个插槽设置为新值:
slots['slotName'] = "new value";
或者您可以通过将其设置为null来删除插槽的值:
slots['slotName'] = null;
然后将slots
送回Lex。