AWS Lex无法通过变量识别响应

时间:2019-03-08 13:11:15

标签: amazon-web-services aws-lambda amazon-lex

lex不接受以下lambda代码的响应,但是如果我将json的 slots 值更改为声明的 slot 变量,则在 return 语句中,然后工作,即lex接受它的响应。完全令人困惑,因为变量 slot 和变量 d 具有相同的值,请在FYI中找到我的云监视日志屏幕截图。

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
  }
          }

enter image description here

如果有任何人请帮助我。

1 个答案:

答案 0 :(得分:3)

如果插槽未保存值,则它应该是null而不是None。看来Cloudwatch正在为您记录null作为None。那应该是您的变量slotd之间的区别。

这就是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。