Запрашиваемая при использовании SSML в Dialogflow webhook - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь создать Действия для Агента Google через DialogFlow и продолжаю получать ошибки при попытке задать вопрос пользователю, включая ssml.

Я построил агент на DialogFlow, реализовал логику с помощью webhook выполнения (реализованного с помощью модуля узла dialogflow-fulfillment) и смог успешно протестировать DialogFlow с помощью тестовой консоли на правой стороне DialogFlow.

Поэтому я подключил DialogFlow Integrations к Google Assistant.

Сначала я попытался безуспешно:

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);

Вышеприведенное сработает (не даст ошибок), но приведет к тому, что вопрос будет задан при произнесении тега <break>.

Я также пробовал:

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

Однако, когда я проверяю это с помощью Действия на симуляторе Google, я получаю сообщение об ошибке:

[Агент] не отвечает прямо сейчас. Попробуй еще раз скоро.

При копании в средство просмотра журналов появляется следующее сообщение об ошибке:

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?"
          }
        ]
      }
    }
  }
}

Я буду признателен за любые указатели в правильном направлении.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Вдохновленный ответом @ NickFelker ниже и более подробно изучив эту тему, я смог заставить работать SSML, добавив теги <speak>. Так что это работает:

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>"
              }
          }
        ]
      }
    }
  }
}
0 голосов
/ 09 июня 2019

Глядя на фрагмент JSON для простого ответа в документации , вы должны заключить свой элемент в элемент simpleResponse. Кроме того, ключи, которые вы используете для текстовых и звуковых ответов, неверны и должны быть textToSpeech и displayText.

{
  "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?"
            }
          }
        ]
      }
    }
  }
}
...