Dialogflow api调用有效,但是chatbot关闭

时间:2018-09-06 13:09:59

标签: javascript firebase dialogflow actions-on-google

在Dialogflow中,我将免费版本(V2)与Firebase的出色计划配合使用。 我有一个意图适用于“测试”一词。当我在模拟器中输入“测试”时,聊天机器人会给出无响应并退出聊天。假设要调用我的API并检索信息。

奇怪的是,有一个console.log可以打印出正文并从API返回JSON。因此,这意味着该API调用可以正常运行,但该漫游器内部仍存在错误。

我发现了这个问题:Dialogflow v2 error “MalformedResponse 'final_response' must be set”

看起来很像我的问题,但我似乎无法弄清楚为使我的工作而应该做出的改变。

提前感谢您的时间。

成就:

function testcommand(agent) {
  callNPApi().then((output) => {
    agent.add(output);
  }).catch(() => {
    agent.add("That went wrong!");
  });
}

function callNPApi() {
  return new Promise((resolve, reject) => {
    request2(url, function (error, response2, body){
      //The substring is too ensure it doesnt crash for the character limit yet
      body = body.substring(1,10);
      console.log('Api errors: ' + JSON.stringify(error));
      console.log('Api body: ' + JSON.stringify(body));

      if (error) {
        reject();
      }
      resolve('api call returned: ');
    });
  });
}

控制台中的响应:

{
  "responseMetadata": {
    "status": {
      "code": 10,
      "message": "Failed to parse Dialogflow response into AppResponse because of empty speech response",
      "details": [
        {
          "@type": "type.googleapis.com/google.protobuf.Value",
          "value": "{\"id\":\"bca7bd81-58f1-40e7-a5d5-e36b60986b66\",\"timestamp\":\"2018-09-06T12:45:26.718Z\",\"lang\":\"nl\",\"result\":{},\"alternateResult\":{},\"status\":{\"code\":200,\"errorType\":\"success\"},\"sessionId\":\"ABwppHFav_2zx7FWHNQn7d0uw8B_I06cY91SKfn1eJnVNFa3q_Y6CrE_OAJPV-ajaZXl7o2ZHfdlVAZwXw\"}"
        }
      ]
    }
  }
}

控制台中的错误:

MalformedResponse
'final_response' must be set.

1 个答案:

答案 0 :(得分:2)

是的,这是同样的问题。

问题是您要从callNPApi()返回一个Promise,但是您的事件处理程序(我认为是testcommand())不是 也会返回一个Promise。如果要在处理程序中的任何位置进行异步调用,则必须使用Promise,并且如果使用的是Promise,则还必须从处理程序中返回该Promise。

对于您来说,这应该是一个简单的更改。只需在您的处理程序中添加“返回”即可。所以可能看起来像这样

function testcommand(agent) {
  return callNPApi().then((output) => {
    agent.add(output);
  }).catch(() => {
    agent.add("That went wrong!");
  });
}