在 Google 语音应用程序中将数据流连接到用户响应的问题
Issues connecting data stream to users responses in Google Voice App
我目前正在开发一种用于智能扬声器的语音代理,用户会询问存储在数据流中的一些项目。最终目标是用户询问流中项目的名称,google 通过语音的操作将告诉他们有关流中另一列中显示的这些项目的详细信息。
为此,我 link 将电子表格编辑到 Axios 以将电子表格的内容作为数据流式传输到 google 操作中的网络挂接中读取。数据流的 link 是 HERE.
老实说,我是开发 google 操作应用程序的新手,也是 javascript 整体新手,所以我可能会犯一些愚蠢的错误。
在 google 操作的图形界面中,我正在为我希望用户询问的项目设置类型。
然后,我设置了一个意图,将项目识别为一种数据类型,并能够将其发送到 webhook。
webhook中的云函数如下:
const { conversation } = require('@assistant/conversation');
const functions = require('firebase-functions');
require('firebase-functions/lib/logger/compat'); // console.log compact
const axios = require('axios');
const app = conversation({debug: true});
app.handle('getItem', async conv => {
const data = await getItem();
const itemParam = app.types.Item;
// conv.add("This test to see if we are accessing the webhook for ${itemParam}");
data.map(item => {
if (item.Name === itemParam)
agent.add('These are the datails for ${itemParam}. It is located in zone
${item.Zone}, at level ${item.Level}');
});
});
async function getItem() {
const res = await axios.get('https://sheetdb.io/api/v1/n3ol4hwmfsmqd');
console.log(res.data);
return res.data; // To use in your Action's response
}
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
webhook 正在做的是使用 getItem 函数获取流,然后映射数据以在流中查找名称以匹配用户标识的项目参数 (ItemParam)。
但是,我遇到的主要问题之一是,当我尝试从用户访问该项目时,我使用的是 app.types.Item,但这不起作用,因为在测试时我收到一条错误消息:“错误”:“无法读取未定义的 属性 'Item'”。我认为发生的事情是我没有使用正确的方式在对话应用程序中调用项目。
此外,我不确定 linking 到数据库的确切工作方式。在其他作品中,我不确定
data.map(item => {
if (item.Name === itemParam)
agent.add('These are the datails for ${itemParam}. It is located in zone
${item.Zone}, at level ${item.Level}');
会起作用。
我已经尝试了多种方法来解决,但我真的很挣扎,所以如果能提供任何帮助,我们将不胜感激。另外,我知道我急于解释事情,所以如果您需要我更好地解释或澄清任何事情,请告诉我。
谢谢
我发现有三点是行不通的。
首先,app.types.Item
不是这个参数的获取方式。您应该改用 conv.intent.params['Item'].resolved
来获取用户的语音名称。
其次,您正尝试使用 agent.add
来包含文本,但您的环境中没有 agent
。您应该改用 conv.add
.
第三,您发送的文本没有在反引号之间正确转义``。它是允许您使用 template literals.
的反引号
你的代码总共可以重写为:
const { conversation } = require('@assistant/conversation');
const functions = require('firebase-functions');
require('firebase-functions/lib/logger/compat'); // console.log compact
const axios = require('axios');
const app = conversation({debug: true});
app.handle('getItem', async conv => {
const data = await getItem();
const itemParam = conv.intent.params['Item'].resolved;
data.map(item => {
if (item.Name === itemParam)
conv.add(`These are the datails for ${itemParam}. It is located in zone
${item.Zone}, at level ${item.Level}`);
});
});
async function getItem() {
const res = await axios.get('https://sheetdb.io/api/v1/n3ol4hwmfsmqd');
console.log(res.data);
return res.data; // To use in your Action's response
}
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
我目前正在开发一种用于智能扬声器的语音代理,用户会询问存储在数据流中的一些项目。最终目标是用户询问流中项目的名称,google 通过语音的操作将告诉他们有关流中另一列中显示的这些项目的详细信息。
为此,我 link 将电子表格编辑到 Axios 以将电子表格的内容作为数据流式传输到 google 操作中的网络挂接中读取。数据流的 link 是 HERE.
老实说,我是开发 google 操作应用程序的新手,也是 javascript 整体新手,所以我可能会犯一些愚蠢的错误。
在 google 操作的图形界面中,我正在为我希望用户询问的项目设置类型。
然后,我设置了一个意图,将项目识别为一种数据类型,并能够将其发送到 webhook。
webhook中的云函数如下:
const { conversation } = require('@assistant/conversation');
const functions = require('firebase-functions');
require('firebase-functions/lib/logger/compat'); // console.log compact
const axios = require('axios');
const app = conversation({debug: true});
app.handle('getItem', async conv => {
const data = await getItem();
const itemParam = app.types.Item;
// conv.add("This test to see if we are accessing the webhook for ${itemParam}");
data.map(item => {
if (item.Name === itemParam)
agent.add('These are the datails for ${itemParam}. It is located in zone
${item.Zone}, at level ${item.Level}');
});
});
async function getItem() {
const res = await axios.get('https://sheetdb.io/api/v1/n3ol4hwmfsmqd');
console.log(res.data);
return res.data; // To use in your Action's response
}
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
webhook 正在做的是使用 getItem 函数获取流,然后映射数据以在流中查找名称以匹配用户标识的项目参数 (ItemParam)。
但是,我遇到的主要问题之一是,当我尝试从用户访问该项目时,我使用的是 app.types.Item,但这不起作用,因为在测试时我收到一条错误消息:“错误”:“无法读取未定义的 属性 'Item'”。我认为发生的事情是我没有使用正确的方式在对话应用程序中调用项目。
此外,我不确定 linking 到数据库的确切工作方式。在其他作品中,我不确定
data.map(item => {
if (item.Name === itemParam)
agent.add('These are the datails for ${itemParam}. It is located in zone
${item.Zone}, at level ${item.Level}');
会起作用。
我已经尝试了多种方法来解决,但我真的很挣扎,所以如果能提供任何帮助,我们将不胜感激。另外,我知道我急于解释事情,所以如果您需要我更好地解释或澄清任何事情,请告诉我。
谢谢
我发现有三点是行不通的。
首先,app.types.Item
不是这个参数的获取方式。您应该改用 conv.intent.params['Item'].resolved
来获取用户的语音名称。
其次,您正尝试使用 agent.add
来包含文本,但您的环境中没有 agent
。您应该改用 conv.add
.
第三,您发送的文本没有在反引号之间正确转义``。它是允许您使用 template literals.
的反引号你的代码总共可以重写为:
const { conversation } = require('@assistant/conversation');
const functions = require('firebase-functions');
require('firebase-functions/lib/logger/compat'); // console.log compact
const axios = require('axios');
const app = conversation({debug: true});
app.handle('getItem', async conv => {
const data = await getItem();
const itemParam = conv.intent.params['Item'].resolved;
data.map(item => {
if (item.Name === itemParam)
conv.add(`These are the datails for ${itemParam}. It is located in zone
${item.Zone}, at level ${item.Level}`);
});
});
async function getItem() {
const res = await axios.get('https://sheetdb.io/api/v1/n3ol4hwmfsmqd');
console.log(res.data);
return res.data; // To use in your Action's response
}
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);