为什么助手即使进行了conv.close也仍然显示格式错误的响应?

时间:2018-10-18 21:05:12

标签: node.js actions-on-google

尽管使用了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错误图片。

预先感谢the first error regarding this piece of code. Full Thing

这是请求:

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

这是在Google行动页面上看到的debug标记的一部分,上面提到的错误(带有firebase选项卡运行状况的图片)是重复出现的错误。没有显示其他错误。如果有人有其他使用后续提示的方式,请务必告知。

2 个答案:

答案 0 :(得分:0)

您在响应中发布的错误消息中的“ Webhook调用失败。错误:500 Internal Server Error”部分表明您的代码存在问题,导致代码崩溃。

检查您的Firebase日志中错误的位置和原因。但是一些可能性包括:

首先,在“选定主题”意图处理程序中,您同时调用conv.close()conv.ask()。鉴于您要结束对话,目前尚不清楚为什么要这样做。

从日志中看到的有关“未定义主题”的错误消息似乎是因为,尽管您在函数中使用了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]));
  }
});

最后,尚不清楚在什么情况下会产生“需要简单响应”的错误,但是您似乎试图发送不带任何简单文本的基本卡,或者在“选定主题”意向处理程序中的“基本卡”之前,是“ 之前”。

答案 1 :(得分:0)

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