【问题标题】:Asking while using SSML in Dialogflow webhook在 Dialogflow webhook 中使用 SSML 时询问
【发布时间】:2019-06-17 13:21:30
【问题描述】:

我正在尝试通过 DialogFlow 在 Google 代理上构建一个 Actions,但在尝试向用户询问问题时不断收到错误,同时包含 ssml。

我已经在 DialogFlow 上构建了代理,使用实现 webhook 实现了逻辑(通过节点模块 dialogflow-fulfillment 实现),并且能够使用 DialogFlow 右侧的测试控制台成功地在 DialogFlow 上进行测试。

因此,我将 DialogFlow 集成连接到 Google 助理。

我第一次尝试没有成功:

const client = new WebhookClient({ req, res });
let qToSnd = 'Hi <break time=\"500ms\"/> Can I help you?';
let conv = client.conv();
conv.ask(qToSnd);
client.add(conv);

上述方法可行(不会给出错误),但会导致在说出&lt;break&gt; 标签时提出问题。

我也试过了:

conv.ask(
  new Text({
    text: _stripTags(qToSnd),
    ssml: qToSnd
}));

但是,当我使用 Google 模拟器上的 Actions 进行测试时,我收到了错误消息:

[代理] 现在没有响应。请稍后再试。

深入日志查看器会显示以下错误消息:

MalformedResponse: ErrorId: ... Failed to parse Dialogflow response into AppResponse because of invalid platform response. : Could not find a RichResponse or SystemIntent in the platform response for agentId: ... and intentId: ...

我的履行 API 正在返回:

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "text": "Hi - Can I help you?",
            "ssml": "Hi <break time=\"500ms\"/> Can I help you?"
          }
        ]
      }
    }
  }
}

我将不胜感激任何正确方向的指示。

【问题讨论】:

  • 发布您用于生成响应的实际代码可能会有所帮助
  • @NickFelker - 发布实际代码有点困难。我将尝试制作一个简单的应用程序来做到这一点。你是说代理的输出没有给出任何关于要研究什么的明显想法?
  • 我不是 JSON 输出方面的专家,但我基于类似问题的怀疑是您正在尝试同时使用 dialogflow-fulfillment 和 actions-on-google 库并发送简单的响应.这两个库不应该混合在一起。简单响应对象在 JSON 中的表示方式可能存在问题,与 actions.google.com 文档不匹配。
  • @NickFelker - 我正在使用 dialogflow-fulfillment 库 - 这取决于 actions-on-google。此外,simpleResponse 对象不是 dialogflow-fulfillment 库的一部分,因此我无法使用它。

标签: actions-on-google


【解决方案1】:

查看 the documentation 中的简单响应的 JSON sn-p,您应该将您的项目包装在 simpleResponse 元素中。此外,您用于文本和音频响应的键不正确,应该是 textToSpeechdisplayText

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Howdy, this is GeekNum. I can tell you fun facts about almost any number, my favorite is 42. What number do you have in mind?",
              "displayText": "Howdy! I can tell you fun facts about almost any number. What do you have in mind?"
            }
          }
        ]
      }
    }
  }
}

【讨论】:

    【解决方案2】:

    受到@NickFelker 下面的回答的启发,并对该主题进行了更多研究,我能够通过确保添加&lt;speak&gt; 标签来使 SSML 正常工作。所以这行得通:

    const client = new WebhookClient({ req, res });
    let qToSnd = 'Hi <break time=\"500ms\"/> Can I help you?';
    let conv = client.conv();
    conv.ask('<speak>' + qToSnd + '</speak>');
    client.add(conv);
    

    履行 API 返回:

    {
      "payload": {
        "google": {
          "expectUserResponse": true,
          "richResponse": {
            "items": [
              {
                  "simpleResponse": {
                      "textToSpeech": "<speak>Hi <break time=\"500ms\"/> Can I help you</speak>"
                  }
              }
            ]
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-19
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多