我应该在哪里寻找错误信息“ MalformedResponse由于语音响应为空而无法将Dialogflow响应解析为AppResponse

时间:2019-01-02 09:07:25

标签: dialogflow actions-on-google

发现错误

  

MalformedResponse由于语音响应为空,无法将Dialogflow响应解析为AppResponse

已经读过Failed to parse Dialogflow response into AppResponse because of empty speech response for Ssml response,但仍然没明白这一点。

我是个新手。

试图遵循“使用Cloud Firestore在Scalable查询数据以在Google上执行操作”中提供的代码,但是出现了错误。

//Copyright 2018 Google LLC.SPDX-License-Identifier: Apache-2.0

'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const app = dialogflow({debug: true});

admin.initializeApp();

const db = admin.firestore();
const collectionRef = db.collection('restaurants');

app.intent('ask_recipe_intent', (conv, {name}) => {
  const term = name.toLowerCase();
  const termRef = collectionRef.doc(`${term}`);

  return termRef.get()
    .then((snapshot) => {
      const {city, name} = snapshot.data();
      conv.ask(`Here you go, ${name}, ${city}. ` +
            `What else do you want to know?`);

    }).catch((e) => {
      console.log('error:', e);
      conv.close('Sorry, try again and tell me another food.');
    });
});


exports.actionsOracle = functions.https.onRequest(app);

我想了解什么

`${term}`

是什么以及在Firebase中如何使用?我没有任何名为“ term”的文档。

1 个答案:

答案 0 :(得分:0)

您在这里有几个无关的问题。

development

太复杂了。您可以安全地将其重写为

collectionRef.doc(`${term}`);

因为反引号在这种情况下不做任何事情。最新版本的JavaScript中的反引号引起了collectionRef.doc(term); 部分内表达式的扩展。因此评估表达式

${}

只求`${term}` 的值。因此,该功能的结果是在Firestore中创建一个由term命名的文档的引用,这只是Dialogflow Intent中term参数的小写版本。

这会导致我们遇到错误。如果您无法发送回复,通常会发生这种情况。无法发送回复的原因有多种,其中最常见的两个是

  • 您没有致电nameconv.ask()
  • 您正在执行异步操作(例如调用数据库)而没有返回Promise

但是,就您而言,似乎您都在做。

您的函数在到达数据库调用之前似乎正在生成错误。在这种情况下,最有可能的可能性是线

conv.close()

如果未定义const term = name.toLowerCase(); ,可能会导致错误,这意味着它不是Dialogflow Intent中的参数。

您不妨参考以下两篇文章,它们还将对有关Google Intent实现的调试动作进行研究: