Dialogflow 代理未将数据存储在 agent.conv().data 中
Dialogflow agent isn't storing data in agent.conv().data
在 dialogflow fulfillment 中,处理程序如下所示:
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)
}
它向控制台打印 getNum is NaN。
我以为数据会持续存在,但我显然错了。
谢谢
您似乎在 Google Cloud Platform 或 Dialogflow 内联编辑器中使用 Cloud Functions。
在这两种情况下,实现代码都在 Cloud Functions 中运行,应该是 stateless。每个请求都可以在不同的环境中执行;因此,如果需要存储变量,建议增加一个额外的持久层,例如数据库。
对于您的用例,您可以考虑三个建议:
1) Use a global variable。通常,这些函数将在相同的环境中执行,因此,您可以将信息存储在一个全局变量中;但是,这并不能保证,因此您应该处理该信息不可用的情况
2) Use Dialogflow contexts as temporary storage。您可以将随机数作为参数存储在上下文中,只要上下文处于活动状态,它就会由 Dialogflow 发送到 webhook
3) 为您的函数添加持久层。在 GCP 中,您可以使用更适合您的场景的 Firestore or the database
在 dialogflow fulfillment 中,处理程序如下所示:
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)
}
它向控制台打印 getNum is NaN。
我以为数据会持续存在,但我显然错了。
谢谢
您似乎在 Google Cloud Platform 或 Dialogflow 内联编辑器中使用 Cloud Functions。
在这两种情况下,实现代码都在 Cloud Functions 中运行,应该是 stateless。每个请求都可以在不同的环境中执行;因此,如果需要存储变量,建议增加一个额外的持久层,例如数据库。
对于您的用例,您可以考虑三个建议:
1) Use a global variable。通常,这些函数将在相同的环境中执行,因此,您可以将信息存储在一个全局变量中;但是,这并不能保证,因此您应该处理该信息不可用的情况
2) Use Dialogflow contexts as temporary storage。您可以将随机数作为参数存储在上下文中,只要上下文处于活动状态,它就会由 Dialogflow 发送到 webhook
3) 为您的函数添加持久层。在 GCP 中,您可以使用更适合您的场景的 Firestore or the database