无法通过在对话框流上下文中保存文档名称来向文档添加多个字段

2023-12-27

我创建了一个对话流机器人来询问用户一些问题,我需要保存在 Firestore 数据库中输入的所有答案,我正在使用 api v1 机器人!我可以添加字段name and answer1通过在 Dialogflow 上下文中保存文档的名称,

索引.js:

const functions = require("firebase-functions");
const admin = require("firebase-admin");

admin.initializeApp(functions.config().firebase);

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(
  (request, response) => {
    // console.log("function happening");

    let action = request.body.result.action;

    var Name = request.body.result.parameters.Name;

    let params = request.body.result.parameters;

    var Answer1 = request.body.result.parameters.Answer1;
    var Answer2 = request.body.result.parameters.Answer2;
    var Answer3 = request.body.result.parameters.Answer3;
    var Answer4 = request.body.result.parameters.Answer4;
    var Answer5 = request.body.result.parameters.Answer5;
    var Answer6 = request.body.result.parameters.Answer6;
    var Answer7 = request.body.result.parameters.Answer7;
    var Answer8 = request.body.result.parameters.Answer8;
    var Answer9 = request.body.result.parameters.Answer9;
    var Answer10 = request.body.result.parameters.Answer10;
    var Answer11 = request.body.result.parameters.Answer11;
    var Answer12 = request.body.result.parameters.Answer12;

    let query = request.body.result.resolvedQuery;

    const parameters = request.body.result.parameters;

    const inputContexts = request.body.result.contexts;

    console.log("Parameters is" + params);
    console.log("Answer1 is " + Answer1);
    console.log("Helllo");
    console.log("action is " + action);
    console.log("name is:", Name);

    if (action == "save.name") {
      admin
        .firestore()
        .collection("users")
        .doc(Name)
        .set({
          name: Name,
          answer1: "",
          answer2: "",
        })
        .then(ref => {
          console.log("name saving function");
          console.log("Name is added successfully", +Name);
          console.log("Added new user");
        });
    }

    if (action == "save.answer1") {
      var Name;
      for (
        var co = 0;
        inputContexts && co < inputContexts.length && !Name;
        co++
      ) {
        var context = inputContexts[co];
        console.log('The input context here is ', +inputContexts[co]);
        if (context.name == "question1") {
          console.log("The name of the document is", +context.parameters.Name);
          Name = context.parameters.Name;
        }
      }
      console.log("name in save.answer1", Name);
      admin
        .firestore()
        .collection("users")
        .doc(Name)
        .update({
          answer1: Answer1
        })
        .then(ref => {
          console.log("Updated user");
          console.log("Name is " + Name);
          console.log("ref id is:" + ref.id);
        });
    }
    if (action == "save.answer2") {
      var Name;
      for (
        var co = 0;
        inputContexts && co < inputContexts.length && !Name;
        co++
      ) {
        var context = inputContexts[co];
        console.log('The input context here is ', +context.name);
        if (context.name == "question2") {
          console.log("The context name here is", +context.name);
          console.log("The name of the document is", +context.parameters.Name);
          Name = context.parameters.Name;
          console.log('Name inside if', +Name);
        }
      }
      console.log("name in save.answer2", Name);
      admin
        .firestore()
        .collection("users")
        .doc(Name)
        .update({
          answer2: Answer2
        })
        .then(ref => {
          console.log("Updated user");
          console.log("Name is " + Name);
          console.log("ref id is:" + ref.id);
        });
    }
}
);

我将文档的名称保存在对话框流上下文中,这样我就可以保存该字段name and answer1到文档,但我无法保存answer2通过遵循相同的技术,它会抛出如下错误:

Argument "documentPath" is not a valid ResourcePath. Path must be a non-empty string.

保存answer1后,我在dialogflow中的json如下所示:

{
  "id": "da818283-f8bf-44ee-8c86-80a69cf8128a",
  "timestamp": "2018-07-18T07:33:51.743Z",
  "lang": "en",
  "result": {
    "source": "agent",
    "resolvedQuery": "I am fine",
    "action": "save.answer1",
    "actionIncomplete": false,
    "parameters": {
      "Answer1": "I am fine"
    },
    "contexts": [
      {
        "name": "question2",
        "parameters": {
          "Answer1": "I am fine",
          "Answer1.original": "I am fine"
        },
        "lifespan": 1
      }
    ],
    "metadata": {
      "intentId": "cf4c0b5e-b848-402a-be22-62ca26ec1d00",
      "webhookUsed": "true",
      "webhookForSlotFillingUsed": "false",
      "isFallbackIntent": "false",
      "webhookResponseTime": 10000,
      "intentName": "Q-1"
    },
    "fulfillment": {
      "speech": "Oh Well, Can you tell What is the best thing about your Companion?",
      "messages": [
        {
          "type": 0,
          "speech": "Oh Well, Can you tell What is the best thing about your Companion?"
        }
      ]
    },
    "score": 1
  },
  "status": {
    "code": 206,
    "errorType": "partial_content",
    "errorDetails": "Webhook call failed. Error: Request timeout."
  },
  "sessionId": "4967cb18-a192-0796-63ed-5ce3ec03acf9"
}

输入answer2后的Json:

{
  "id": "9a9425dc-44a0-4cf6-8fa5-8d483d552c74",
  "timestamp": "2018-07-18T08:40:10.86Z",
  "lang": "en",
  "result": {
    "source": "agent",
    "resolvedQuery": "I love to watch movies",
    "action": "save.answer2",
    "actionIncomplete": false,
    "parameters": {
      "Answer2": "I love to watch movies"
    },
    "contexts": [
      {
        "name": "question3",
        "parameters": {
          "Answer2": "I love to watch movies",
          "Answer2.original": "I love to watch movies"
        },
        "lifespan": 1
      }
    ],
    "metadata": {
      "isFallbackIntent": "false",
      "webhookResponseTime": 339,
      "intentName": "Q-2",
      "intentId": "d15366cc-93f0-4178-975b-af8b0e182498",
      "webhookUsed": "true",
      "webhookForSlotFillingUsed": "false"
    },
    "fulfillment": {
      "speech": "Oh that's cool! What is the worst thing about your partner?",
      "messages": [
        {
          "type": 0,
          "speech": "Oh that's cool! What is the worst thing about your partner?"
        }
      ]
    },
    "score": 1
  },
  "status": {
    "code": 206,
    "errorType": "partial_content",
    "errorDetails": "Webhook call failed. Error: 500 Internal Server Error"
  },
  "sessionId": "4967cb18-a192-0796-63ed-5ce3ec03acf9"
}

问题是你没有存储name在任何上下文中都可以,但下次你会尝试脱离上下文来阅读它。这些上下文是在对 Webhook 的调用之间存储信息的内容,因此您需要添加下次所需的任何信息。

由于文档的名称是您需要在以后的响应中使用的名称,因此您需要保存它。

您不会显示如何创建或发送响应,但请确保创建上下文并包含name作为参数之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法通过在对话框流上下文中保存文档名称来向文档添加多个字段 的相关文章

随机推荐

  • PHP 日期比较

    如何检查 2008 02 16 12 59 57 格式的日期是否小于 24 小时前 if strtotime 2008 02 16 12 59 57 gt time 24 60 60 LESS
  • 如何确定 _POSIX_PATH_MAX 的系统值

    谁能告诉我如何找到系统值 POSIX PATH MAX在 Linux 薄荷中 我知道它在 文件中可用 但我不知道如何找到它的值 根据 POSIX 要使用的工具被命名为getconf http pubs opengroup org onlin
  • React Router Lazy 组件不起作用

    所以这有效 import Page from components Page render return
  • 有选择地将 C++ 核心逻辑暴露给 QML 的最佳方法

    我想设置特定 QML 组件的上下文属性 而不是在根上下文中 我不希望在组件外部访问该属性 C 有没有一种方法可以访问组件的上下文 只允许从组件的上下文中访问命名属性 而不是从全局命名空间中访问 我想保持 QML 声明性 而不是在 C 中创建
  • Seaborn 群图和点图躲避对齐

    有没有办法将点图的平均值 SEM 与相应的群图对齐 这是我的代码 import seaborn as sns import numpy as np import pandas as pd import matplotlib pyplot a
  • 如何在pyspark中自动删除常量列?

    我在 pyspark 中有一个 Spark 数据框 我需要从数据框中删除所有常量列 由于我不知道哪些列是常量 因此我无法手动取消选择常量列 即我需要一个自动过程 我很惊讶我无法在 stackoverflow 上找到简单的解决方案 Examp
  • 如何保持火车步骤之间的状态?

    我的计算图中有一个张量 我想在每个训练步骤之后添加一行 我怎样才能做到这一点 更详细 我正在获取渐变optimizer compute gradients 我想根据渐变历史修改这些渐变 这是我尝试使用的代码 def process grad
  • 使用 Charles 和 SSL Apple 推送地址

    我必须确认我的用于发送推送通知的 PHP 代码正在与代理一起使用 我安装了 Charles 并且可以通过代理 127 0 0 1 8888 观看我的所有网络流量 现在我想看看我的脚本是否可以正确用于推送通知 我有 stream contex
  • Python:多维数组(“矩阵”)与列表中的列表相同吗?

    我试图理解人们所说的矩阵和人们所说的列表中的列表之间的区别 它们是否相同 一旦创建 您就可以对它们执行相同的操作 在其中以相同的方式引用元素等 例子 在列表中创建列表 ListsInLists 1 2 3 4 5 6 制作多维数组 np r
  • 动态创建 zip 并将其流式传输到客户端

    我正在使用 NodeJs w express 并且尝试将 zip 文件流式传输回客户端 zip 中包含的文件并不存在于文件系统中 而是动态创建的 我想将文件内容流式传输到 zip 并将 zip 流式传输回客户端 IE 我希望客户收到 tmp
  • django allauth 自定义注册表单分配不同的组

    我的系统中有两种类型的用户 我想在注册时分配适当的组 参考使用 django allauth 时如何自定义用户配置文件 https stackoverflow com questions 12303478 how to customize
  • 如何在 Chrome 扩展中使用 Python?

    我想用 Python 创建一个 Chrome 扩展 这可能吗 还是我必须使用 JavaScript 你可以看看Pyjamas http pyjs org 因为这可以让你用 Python 编写代码 但将代码编译为 Javascript
  • JavaScript 函数未定义错误(但已定义)

    我有一个 JavaScript 函数 它会在模糊时触发 奇怪的是 我第一次运行它时它工作得很好 从那时起我就收到了一个错误 提示 JavaScript 函数未定义 并且它停止运行 我用谷歌搜索过类似的问题 但没有一个建议能够解决该问题 As
  • NTFS(Windows XP 和 Windows Vista)中的最大文件名长度?

    我正在设计一个数据库表 它将保存上传文件的文件名 Windows XP 或 Vista 使用的 NTFS 文件名的最大长度是多少 文件名的各个组成部分 即路径上的每个子目录和最终文件名 限制为 255 个字符 总路径长度限制为大约 32 0
  • OpenSSL SSL_connect:SSL_ERROR_SYSCALL 连接到 api.amazonalexa.com:443

    我一直在尝试让技能管理 API 正常工作 今天早上我遇到了一个新的障碍 但没有进行任何更改 我收到一条 用户昨晚未同意此操作错误 并且今天早上没有更改任何内容 这是我收到的卷曲日志 尝试使用与昨 晚相同的代码访问 API 现在我得到 str
  • 图执行模式下张量流 tf.data 数据集的分割示例

    Goal 我有一个tf data Dataset其中一些示例太长 0 轴的尺寸太大 我想将这些过长的示例分成几个示例 其中每个示例都是原始示例的一部分 如果特定示例不能被所需的块大小整除 我想截断余数 例如 如果原始数据集的 numpy 视
  • 如何自动刷新 Excel 文件并通过电子邮件发送?

    我有一些 Excel 文件 数据透视表和图表 它们与 Access 数据库有数据连接 我希望做的是让它们自动刷新并在每个月的 1 号收到电子邮件 我在 Access 中做了类似的事情 其中 我有一个数据库 其中包含一个可以运行并通过电子邮件
  • -O3 和 (-O2 + man gcc 说 -O3 添加到 -O2 的标志) 之间有什么区别?

    我最近收到了一份有关无法使用 O3 开关进行编译的程序的错误报告 请参阅https github com cschwan sage on gentoo issues 66 https github com cschwan sage on g
  • 当分叉项目都在发展时,Git 的良好实践可以使其源代码保持最新

    Context 我是主要作者立即下一步 https github com UnlyEd next right now这是一个开源 样板 包含使用 Next js 框架构建 Web 应用程序的多个 预设 每个预设都带有内置功能 并且旨在进行分
  • 无法通过在对话框流上下文中保存文档名称来向文档添加多个字段

    我创建了一个对话流机器人来询问用户一些问题 我需要保存在 Firestore 数据库中输入的所有答案 我正在使用 api v1 机器人 我可以添加字段name and answer1通过在 Dialogflow 上下文中保存文档的名称 索引