在对话流实现中,处理程序如下所示:
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)
} It's print getNum is NaN to the console。
我认为数据会持续存在,但我显然错了。
谢谢
发布于 2020-02-02 07:47:16
您似乎是在Google Cloud平台或Dialogflow内联编辑器中使用Cloud Functions。
在这两种情况下,实现代码都运行在云函数中,云函数应该是stateless。每个请求可以在不同的环境中执行;因此,如果需要存储变量,建议添加额外的持久层,例如数据库。
对于您的用例,您可以考虑以下三个建议:
1) Use a global variable。通常,这些函数将在相同的环境中执行,因此,您可以将信息存储在全局变量中;但是,这不能保证,因此您应该处理该信息不可用的情况
2) Use Dialogflow contexts as temporary storage。您可以将随机数作为参数存储在上下文中,只要上下文处于活动状态,它就会通过Dialogflow发送到webhook
https://stackoverflow.com/questions/60014468
复制相似问题