5

我们使用谷歌云功能作为 webhook 构建了一个 Dialogflow 代理,该代理直到昨天晚上都可以正常工作。当时我将代理导出并稍后重新导入,它工作了一段时间。

停止工作的是agent.context.get('...');(also agent.getContext('...')) 确实返回undefined,即使上下文是根据 UI 和原始 API 响应设置的。

作为一个例子,我有一个意图,它有一个必需的 slot shop,启用了 slot 填充的 webhook。当我测试代理时,命名的意图info正确匹配,并且上下文info_dialog_params_store似乎在那里:

意图

这是根据原始 API 响应的输出上下文的一部分:

"outputContexts": [
      {
        "name": "projects/MYAGENTNAME/agent/sessions/0b753e8e-b377-587b-3db6-3c8dc898879b/contexts/info_dialog_params_store",
        "lifespanCount": 1,
        "parameters": {
          "store": "",
          "store.original": "",
          "kpi": "counts",
          "date_or_period": "",
          "kpi.original": "trafico",
          "date_or_period.original": ""
        }
      }

在 webhook 中,我将意图正确地映射到 js 函数:

let intentMap = new Map();
intentMap.set('info', info);
agent.handleRequest(intentMap);

函数的第一行info如下所示:

function info(agent) {
    store_context = agent.context.get('info_dialog_params_store');
}

哪个返回

TypeError: Cannot read property 'get' of undefined
    at info (/user_code/index.js:207:36)
    at WebhookClient.handleRequest (/user_code/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:303:44)
    at exports.dialogflowFirebaseFulfillment.functions.https.onRequest (/user_code/index.js:382:9)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:57:9)
    at /var/tmp/worker/worker.js:762:7
    at /var/tmp/worker/worker.js:745:11
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickDomainCallback (internal/process/next_tick.js:128:9)

我很确定我没有更改任何可能影响代理正常运行的东西,除了一些重构。

当我读到环境可能存在问题时,我还尝试了激活和停用的 beta 功能,但这并没有改变任何东西。

任何人都知道我可以在哪个方向进一步调查?

4

3 回答 3

8

我有同样的问题,我解决了它更新 package.json 中的 dialogflow-fulfillment:

从 "dialogflow-fulfillment": "^0.5.0" 到"dialogflow-fulfillment": "^0.6.0"

于 2019-05-06T12:35:41.437 回答
2

我通过关闭“Beta 功能”解决了这个问题 在此处输入图像描述

于 2020-09-19T19:10:58.277 回答
0

实际上我可以通过以下“魔术”步骤来修复它:

  • 将我的原始函数复制到文本文件
  • 将原始示例代码复制并粘贴到 GUI 实现代码编辑器中(GitHub 上的代码
  • 部署功能
  • info为我的函数创建了一个最小示例:
function info(agent) {
    store_context = agent.context.get('info_dialog_params_store');
}
  • 测试了它,它工作
  • 复制回我的原始代码
  • 一切又好了
于 2019-03-08T19:55:21.030 回答