Google 助理在 Dialogflow 中重复上一条消息时遇到问题

Having trouble with Google Assistant repeating previous message in Dialogflow

我正在开发一个非常简单的 Dialogflow,其中包含大约 15-20 个意图。除了一个之外,所有这些意图都使用文本响应。唯一不使用文本响应的意图称为 'repeat'。意图(重复)应该能够重复Google助手之前说过的任何内容。

我尝试使用 Multivocal 进行设置,但没有成功。当我在测试模拟器中键入命令时,我会得到初始响应,但是当我跟进 'repeat' 时,会返回 'Not available' 的默认响应。当我查看诊断信息时,webhook 超时。我的感觉是我配置错了,因为我已经阅读了这些答案但无法解决我的问题:

我在 Dialogflow 中使用内联编辑器,我的 index.js 看起来像:

const Multivocal = require('multivocal');
const conf = {
Local: {
    en: {
      Response: {
        "Action.multivocal.repeat": "Let me try again",
      }
    }
  }
};
new Multivocal.Config.Simple( conf );
exports.webhook = Multivocal.processFirebaseWebhook;
exports.dialogflowFirebaseFulfillment = Multivocal.processFirebaseWebhook;

我的package.json包括多声部依赖:

"multivocal": "^0.15.0"

根据上述 SO 问题,我的理解是这些配置值就足够了,我不需要做任何编码,但我显然搞砸了一些东西(很多东西?)。当用户说 'repeat' 或类似内容时,如何让 Google 助手中的先前响应重复?多声部似乎是一个简单的解决方案,如果我能那样做的话。

其他日志:

履行请求(删除项目 ID 信息):

{
  "responseId": "--",
  "queryResult": {
    "queryText": "repeat",
    "action": "multivocal.repeat",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            ""
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "project info",
        "parameters": {
          "no-input": 0,
          "no-match": 0
        }
      }
    ],
    "intent": {
      "name": "project info",
      "displayName": "repeat"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "payload": {}
  },
  "session": "project info"
}

原始 API 响应(已删除项目和响应 ID)

{
  "responseId": "",
  "queryResult": {
    "queryText": "repeat",
    "action": "multivocal.repeat",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            ""
          ]
        }
      }
    ],
    "intent": {
      "name": "projects info",
      "displayName": "repeat"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {
      "webhook_latency_ms": 4992
    },
    "languageCode": "en"
  },
  "webhookStatus": {
    "code": 4,
    "message": "Webhook call failed. Error: DEADLINE_EXCEEDED."
  }
}

我根据建议添加的简单意图,即要重复处理意图,它必须使用实现而不是 Dialogflow 中的基于文本响应

这是我的 index.js 文件,使用内联编辑器建议在配置中添加文本响应:

const conf = {
  Local: {
    en: {
      Response: {
        "Intent.help": [ 
          "I'm sorry, I'm not able to help you.",
          "You, John, Paul, George, and Ringo ey?"
        ],
        "Action.multivocal.repeat": "Let me try again"
      }
    }
  }
};

我 index.js 末尾的这一行对我来说很奇怪,但可能无关:

exports.webhook = Multivocal.processFirebaseWebhook;
exports.dialogflowFirebaseFulfillment = Multivocal.processFirebaseWebhook;

听起来您正在触发回退 Intent。您还需要在 Dialogflow 中定义一个 Intent,该 Intent 的 Action 设置为“multivocal.repeat”。这可能看起来像这样:

在 npm 包的 dialogflow 目录中(或在 github 上),您会找到一个 zip 文件,其中包含这个和其他几个可以与 mulivocal 一起使用的“标准”Intent。

此外,您想要重复的所有其他 Intent 必须 使用 fulfillment 来发送响应(图书馆不知道可能会发送什么,除非它可以发送本身)。执行此操作的最简单方法是在每个上启用 fulfillment,并将文本响应从其 Dialogflow 屏幕移动到条目下的配置中,例如“Intent.name”(将“name”替换为 Intent 的名称)或"Action.name" 如果您为它们设置了一个动作名称。

因此您的配置可能类似于

const conf = {
Local: {
    en: {
      Response: {
        "Intent.welcome": [
          "Hello there!",
          "Welcome to my Action!"
        ],
        "Action.multivocal.repeat": [
          "Let me try again"
        ]
      }
    }
  }
};