发现错误
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”的文档。
答案 0 :(得分:0)
您在这里有几个无关的问题。
行
development
太复杂了。您可以安全地将其重写为
collectionRef.doc(`${term}`);
因为反引号在这种情况下不做任何事情。最新版本的JavaScript中的反引号引起了collectionRef.doc(term);
部分内表达式的扩展。因此评估表达式
${}
只求`${term}`
的值。因此,该功能的结果是在Firestore中创建一个由term
命名的文档的引用,这只是Dialogflow Intent中term
参数的小写版本。
这会导致我们遇到错误。如果您无法发送回复,通常会发生这种情况。无法发送回复的原因有多种,其中最常见的两个是
name
或conv.ask()
但是,就您而言,似乎您都在做。
您的函数在到达数据库调用之前似乎正在生成错误。在这种情况下,最有可能的可能性是线
conv.close()
如果未定义const term = name.toLowerCase();
,可能会导致错误,这意味着它不是Dialogflow Intent中的参数。
您不妨参考以下两篇文章,它们还将对有关Google Intent实现的调试动作进行研究: