Dialogflow es 我应该在哪里查找错误;由于语音响应为空,格式错误的响应无法将Dialogflow响应解析为AppResponse

Dialogflow es 我应该在哪里查找错误;由于语音响应为空,格式错误的响应无法将Dialogflow响应解析为AppResponse,dialogflow-es,actions-on-google,Dialogflow Es,Actions On Google,找到错误了吗 由于语音响应为空,格式错误的响应无法将Dialogflow响应解析为AppResponse 我已经读过了,但仍然没有领会要点 我是个新手 试图遵循“使用云Firestore可伸缩地查询Google上操作的数据”中提供的代码,但出现了错误 //Copyright 2018 Google LLC.SPDX-License-Identifier: Apache-2.0 'use strict'; const {dialogflow} = require('actions-on-goo

找到错误了吗

由于语音响应为空,格式错误的响应无法将Dialogflow响应解析为AppResponse

我已经读过了,但仍然没有领会要点

我是个新手

试图遵循“使用云Firestore可伸缩地查询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”的文档。

这里有一些无关的问题

线路

collectionRef.doc(`${term}`);
太复杂了。您可以安全地将其重写为

collectionRef.doc(term);
因为backtick引号在这种情况下没有任何作用。JavaScript最新版本中的反勾引号在
${}
部分中进行表达式扩展。所以计算表达式

`${term}`
只要计算出
术语
是什么。因此,该函数的结果是在Firestore中创建一个名为
term
的文档引用,它只是Dialogflow Intent中
name
参数的小写版本

这就导致了你的错误。如果您未能发送回复,通常会发生这种情况。无法发送回复的原因有很多,其中最常见的两个是

  • 您没有调用
    conv.ask()
    conv.close()
  • 您正在执行异步操作(例如调用数据库),而不返回承诺
然而,在你的情况下,看起来你两者都在做

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

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

您可能希望参考以下两篇文章,这两篇文章还探讨了Google Intent实现的调试操作:


什么是(
${term}
)?我在Firebase集合中没有任何名为“术语”的文档,这在Firebase文档中是如何使用的?请不要在注释中添加代码-这会使理解您的问题变得更加困难。如果您试图澄清您的问题,请继续编辑问题。@我的问题是,我应该在哪里查看错误消息作为标题?我猜${term}应该是问题所在,因为我复制了代码,但并不真正理解这意味着什么。感谢您提供的详细说明。我试图找出一个更好的错误…“对不起,再试一次,告诉我另一种食物。”这是conv.close的错误<代码>名称在Dialogflow中定义,并在Firestore中创建“名称”字段。有什么建议吗?[链接]在Firestore中创建了一个具有相同“名称”的文档后,我终于找到了答案。非常感谢你的帮助,如果有什么我能帮忙的,请随时告诉我,我退休了,有很多时间。