首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对话流代理未在agent.conv().data中存储数据

对话流代理未在agent.conv().data中存储数据
EN

Stack Overflow用户
提问于 2020-02-01 14:04:29
回答 1查看 245关注 0票数 0

在对话流实现中,处理程序如下所示:

代码语言:javascript
复制
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()。用户是受欢迎的,我想存储一个随机生成的数字。

代码语言:javascript
复制
  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)
  } 

上面的代码运行良好,并将数字打印到控制台。但当调用另一个函数处理程序时,我尝试提取数字:

代码语言:javascript
复制
 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。

我认为数据会持续存在,但我显然错了。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

3)给你的函数增加一个持久层。在GCP中,您可以使用更适合您的场景的Firestoredatabase

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60014468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档