Простые ответы (Dialogflow)

Посмотреть в Dialogflow

Нажмите Continue (Продолжить), чтобы импортировать примеры ответов в Dialogflow. Затем выполните следующие действия, чтобы развернуть и протестировать пример:

  1. Введите название агента и создайте новый агент Dialogflow для примера.
  2. После завершения импорта нажмите Перейти к агенту.
  3. В главном меню навигации выберите Выполнение заказов.
  4. Включите встроенный редактор и нажмите Развернуть. В редакторе появится образец кода.
  5. В главном меню навигации выберите Integrations (Интеграции), а затем нажмите Google Assistant (Google Ассистент).
  6. В появившемся модальном окне включите Auto-preview changes (Автоматический предпросмотр изменений) и нажмите Test (Протестировать), чтобы открыть симулятор действий.
  7. Введите Talk to my test app в симуляторе, чтобы протестировать пример.
Продолжить

Простые ответы визуально представляют собой значок чата и используют преобразование текста в речь (TTS) или язык разметки синтеза речи (SSML) для звука.

По умолчанию в качестве содержимого сообщения используется текст TTS. Если вас устраивает, как выглядит этот текст, то указывать отображаемый текст для значка чата не нужно.

Вы также можете ознакомиться с рекомендациями по разработке диалогов, чтобы узнать, как добавить эти визуальные элементы в свое действие.

Свойства

Рисунок 1. Пример простого ответа (смартфон)

Простые ответы имеют следующие требования и необязательные свойства, которые вы можете настроить:

  • Поддерживается на платформах с возможностями actions.capability.AUDIO_OUTPUT или actions.capability.SCREEN_OUTPUT.
  • Ограничение на количество символов в одном сообщении – 640. Строки, превышающие ограничение, усекаются на первом разрыве слова (или пробеле) до 640 символов.

  • Содержимое сообщения должно быть фонетическим подмножеством или полной расшифровкой выходных данных TTS/SSML. Это помогает пользователям понять, о чем вы говорите, и улучшает понимание в различных условиях.

  • Не более двух сообщений за ход.

  • Логотип, который вы отправляете в Google, должен иметь размер 192 x 192 пикселя и не должен быть анимированным.

Рисунок 2. Простой пример ответа (умный дисплей)

Образец кода

Node.js

app.intent('Simple Response', (conv) => {
  conv.ask(new SimpleResponse({
    speech: `Here's an example of a simple response. ` +
      `Which type of response would you like to see next?`,
    text: `Here's a simple response. ` +
      `Which response would you like to see next?`,
  }));
});

Java

@ForIntent("Simple Response")
public ActionResponse welcome(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder.add(
      new SimpleResponse()
          .setTextToSpeech(
              "Here's an example of a simple response. "
                  + "Which type of response would you like to see next?")
          .setDisplayText(
              "Here's a simple response. Which response would you like to see next?"));
  return responseBuilder.build();
}

Node.js

conv.ask(new SimpleResponse({
  speech: `Here's an example of a simple response. ` +
    `Which type of response would you like to see next?`,
  text: `Here's a simple response. ` +
    `Which response would you like to see next?`,
}));

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder.add(
    new SimpleResponse()
        .setTextToSpeech(
            "Here's an example of a simple response. "
                + "Which type of response would you like to see next?")
        .setDisplayText(
            "Here's a simple response. Which response would you like to see next?"));
return responseBuilder.build();

Файл в формате JSON

Обратите внимание, что приведенный ниже код JSON описывает ответ вебхука.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Here's an example of a simple response. Which type of response would you like to see next?",
              "displayText": "Here's a simple response. Which response would you like to see next?"
            }
          }
        ]
      }
    }
  }
}

Файл в формате JSON

Обратите внимание, что приведенный ниже код JSON описывает ответ вебхука.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Here's an example of a simple response. Which type of response would you like to see next?",
                "displayText": "Here's a simple response. Which response would you like to see next?"
              }
            }
          ]
        }
      }
    }
  ]
}

SSML и звуки

Использование SSML и звуков в ответах делает их более качественными и улучшает пользовательский опыт. В приведенных ниже фрагментах кода показано, как создать ответ с использованием SSML.

Node.js

app.intent('SSML', (conv) => {
  conv.ask(`<speak>` +
    `Here are <say-as interpet-as="characters">SSML</say-as> examples.` +
    `Here is a buzzing fly ` +
    `<audio src="https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg"></audio>` +
    `and here's a short pause <break time="800ms"/>` +
    `</speak>`);
  conv.ask('Which response would you like to see next?');
});

Java

@ForIntent("SSML")
public ActionResponse ssml(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder.add(
      "<speak>"
          + "Here are <say-as interpet-as=\"characters\">SSML</say-as> examples."
          + "Here is a buzzing fly "
          + "<audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>"
          + "and here's a short pause <break time=\"800ms\"/>"
          + "</speak>");
  return responseBuilder.build();
}

Node.js

conv.ask(`<speak>` +
  `Here are <say-as interpet-as="characters">SSML</say-as> examples.` +
  `Here is a buzzing fly ` +
  `<audio src="https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg"></audio>` +
  `and here's a short pause <break time="800ms"/>` +
  `</speak>`);
conv.ask('Which response would you like to see next?');

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder.add(
    "<speak>"
        + "Here are <say-as interpet-as=\"characters\">SSML</say-as> examples."
        + "Here is a buzzing fly "
        + "<audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>"
        + "and here's a short pause <break time=\"800ms\"/>"
        + "</speak>");
return responseBuilder.build();

Файл в формате JSON

Обратите внимание, что приведенный ниже код JSON описывает ответ вебхука.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "<speak>Here are <say-as interpet-as=\"characters\">SSML</say-as> examples.Here is a buzzing fly <audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>and here's a short pause <break time=\"800ms\"/></speak>"
            }
          },
          {
            "simpleResponse": {
              "textToSpeech": "Which response would you like to see next?"
            }
          }
        ]
      }
    }
  }
}

Файл в формате JSON

Обратите внимание, что приведенный ниже код JSON описывает ответ вебхука.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "<speak>Here are <say-as interpet-as=\"characters\">SSML</say-as> examples.Here is a buzzing fly <audio src=\"https://actions.google.com/sounds/v1/animals/buzzing_fly.ogg\"></audio>and here's a short pause <break time=\"800ms\"/></speak>"
              }
            },
            {
              "simpleResponse": {
                "textToSpeech": "Which response would you like to see next?"
              }
            }
          ]
        }
      }
    }
  ]
}

Дополнительную информацию можно найти в справочной документации по SSML.

Фонотека

В нашей фонотеке есть множество бесплатных коротких звуков. Эти звуки размещены на сервере, поэтому вам нужно только включить их в SSML.