为什么助手在有 conv.close 的情况下仍然显示 Malformed response?

Why is the assistant still show Malformed response despite having conv.close?

尽管使用了 conv.close 标签,错误 'Malformed_Response' 仍然显示。 这是代码:

app.intent('Selected subjects', (conv, {Subject}) => {
  var subject = conv.arguments.get('OPTION') || Subject;
  if (!conv.screen) {
    conv.ask(subjectCard[subject].text);
  } else {
    conv.ask(new BasicCard(subjectCard[subject]));
  }
  conv.ask(' Do you want to hear about a new subject?');
  conv.ask(new Suggestions('Yes', 'No'));
});


app.intent(['Selected subjects - yes'], (conv) => {
  var subject = conv.arguments.get('OPTION') || Subject;
  if (!conv.screen) {
    conv.close(subjectCard[subject].text);
  } else {
    conv.close(`Maybe this would help`, new BasicCard(subjectCard[subject]));
  }
});

附上firebase错误图片

提前致谢

这是请求:

{
"response": "Team Edzuki isn't responding right now. Try again soon.",
"expectUserResponse": false,
"conversationToken": "GidzaW11bG...",
"audioResponse": "//NExAASWK...",
"sharedDebugInfoList": [
  {
    "name": "ResponseValidation",
    "debugInfo": "",
    "subDebugEntryList": [
      {
        "name": "MalformedResponse",
        "debugInfo": "'final_response' must be set.",
        "subDebugEntryList": []
      }
    ]
  }
  ]
  },
  "visualResponse": {
  "visualElementsList": [
  {
    "displayText": {
      "content": "Team Edzuki isn't responding right now. Try again 
    soon."
    }
    }
    ],
    "suggestionsList": [],
    "agentLogoUrl": ""
    },
    "clientError": 0,
    "is3pResponse": 1
    }

这是在 Action-On-Google 网页中看到的调试标签的一部分,我上面提到的错误,以及 firebase 标签健康状况的图片,是重复的错误.没有显示其他错误。如果有人有不同的使用后续提示的方式,请告诉。

您发布的响应中的错误消息部分 "Webhook call failed. Error: 500 Internal Server Error" 表明您的代码存在导致代码崩溃的问题。

检查您的 Firebase 日志以了解错误的位置和内容。但一些可能性包括:

首先,在 "Selected subjects" 意图处理程序中,您同时调用了 conv.close()conv.ask()。鉴于您正试图结束对话,目前尚不清楚您这样做的原因。

日志中关于 "Subject is not defined" 的错误消息似乎是因为在您的第二个意图(崩溃时似乎被调用的那个)中,尽管您在函数中使用了 Subject (当您可能将其分配给 subject) 时,它不在可用参数列表中。 (您之前遇到 Subjectsubject 的问题,但这不是同一个问题。)

为了更清楚,代码应该是这样的

app.intent('Selected subjects - yes', (conv, {Subject}) => {
  var subject = conv.arguments.get('OPTION') || Subject;
  if (!conv.screen) {
    conv.close(subjectCard[subject].text);
  } else {
    conv.close(`Maybe this would help`, new BasicCard(subjectCard[subject]));
  }
});

最后,尚不清楚 "a simple response is required" 的错误是在什么情况下产生的,但您似乎正在尝试发送没有任何简单文本的基本卡,或者可能是在您的 "Selected subjects" 意图处理程序中, 基本卡前期待文本。

答案非常简单:意图是建立的,因此每次您说出正确的词时,动作/意图就会起作用。因此,至少在这种情况下,最简单的方法是将选定的主题 - 是设置为文本响应,以使其按您希望的方式工作。