Dialogflow es Dialogflow代理是';t将数据存储在agent.conv()数据中
在dialogflow中,处理程序如下所示:Dialogflow es Dialogflow代理是';t将数据存储在agent.conv()数据中,dialogflow-es,dialogflow-es-fulfillment,Dialogflow Es,Dialogflow Es Fulfillment,在dialogflow中,处理程序如下所示: exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => { const agent = new WebhookClient({ request, response }); let conv = agent.conv(); console.log('Dialogflow Request headers: ' + J
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
let conv = agent.conv();
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
我已将conv设置为agent.conv()。欢迎用户,我想存储一个随机生成的数字
function welcome(agent) {
agent.add(`Welcome to Med Ed! Can I get your name?`);
//generate random number -> num
conv.data.random = num
console.log(conv.data.random)
}
以上操作正常,数字打印到控制台上。但当调用另一个函数处理程序时,我尝试提取数字:
function intentHandler(agent) {
// get the number from the agent.conv()
getNum = conv.data.random
console.log(getNum)
}
控制台的print getNum是NaN
我认为数据仍然存在,但我显然错了
谢谢您似乎正在谷歌云平台或Dialogflow内联编辑器中使用云功能 在这两种情况下,实现代码都在云函数中运行,而云函数应该是。每个请求都可以在不同的环境中执行;因此,如果需要存储变量,建议添加额外的持久层,例如数据库 对于您的用例,您可以考虑以下三个建议: 1) 。通常,函数将在相同的环境中执行,因此,可以将信息存储在全局变量中;但是,这并不能保证,因此您应该处理信息不可用的情况 2) 。您可以将随机数作为参数存储在上下文中,只要上下文处于活动状态,它就会通过Dialogflow发送到webhook
3) 在函数中添加持久层。在GCP中,您可以使用或使用更适合您的场景的。使用firestore的问题是,点击数据库并返回确实需要时间。关于全局变量,我遇到了一个问题,我认为全局变量在使用前需要初始化,例如,让randNum=0。如果这是从一个局部函数中设置的,比如randNum=6,那么下一次调用randNum时将返回其初始值0。我读了这篇文章,这就是为什么我认为可以使用agent.conv().数据。@jcantona你在“谷歌行动”平台上尝试过agent.conv()方法吗?它应该在那里作为临时仓库使用。尽管如此,我还是会选择上下文,以防您想将其用于其他集成。对于全局变量,理论上,除非函数在不同的环境中执行,否则该值不会更改为初始值;但是,由于该值可能不是“持久化”的,所以我仍然选择contextsThx。是的,我试着在google上的actions中使用agent.conv(),但仍然没有坚持。但上下文对此非常满意。谢谢