Поддержка SSML в AWS Alexa V2

Я работаю над обновлением навыка Alexa с V1 до V2. Но оказывается, по какой-то причине SSML не работает в версии V2. Вот несколько сценариев, которые я пробовал.

Завязал напрямую прохождение ssml,

const speechText = 'This <break time=\"0.3s\" /> is not working';

return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .getResponse();

Кроме того, Пробовали как объект,

 var speechText = {
      type: "SSML",
      ssml: 'This <break time=\"0.3s\" /> is not working',
  };

 return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .getResponse();

У кого-нибудь есть идея, что я могу делать неправильно? Заранее спасибо.


person Manoj Janaka    schedule 09.03.2019    source источник
comment
разве SSML не должен быть заключен в теги <speak>?   -  person Milan    schedule 09.03.2019
comment
Я попытался добавить «говорить», но в документации сказано, что это не обязательно для версии 2. Вот почему я удалил тег «говорить».   -  person Manoj Janaka    schedule 09.03.2019
comment
может быть проблема в том, что Response Builder не экранирует речь для SSML? Я вижу, что он был закрыт 3 дня назад: github. com/alexa/alexa-skills-kit-sdk-for-nodejs/issues/472 ... Попробуйте удалить эти escape-символы   -  person Milan    schedule 09.03.2019
comment
Да вы правы. Обновление библиотеки решило проблему   -  person Manoj Janaka    schedule 10.03.2019
comment
- Отлично, я добавлю ответ ниже, чтобы вы отметили правильный - это может быть полезно большему количеству людей!   -  person Milan    schedule 10.03.2019


Ответы (2)


Как мы установили в разделе комментариев оригинального поста.

Response Builder до выпуска v.2.5.1 не экранировал недопустимые символы SSML: &, <, >, ", ' эта проблема была поднята командой Alexa здесь и исправлено в версии 2.5.1.

Обновление библиотеки устраняет проблему

person Milan    schedule 10.03.2019

Пытаться

const speechText = `This <break time="0.3s" /> is not working`;

return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .getResponse();

Эта конструкция также полезна, когда вы хотите указать переменную в speechText:

const lengthInSeconds = 5;
const speechText = `This <break time="${length}s" /> is not working`;
person slawciu    schedule 09.03.2019
comment
Хотя в качестве примера это интересно, это не решение проблемы, поскольку способ построения строки OP правильный, хотя экранирование двойных кавычек в строке с одинарными кавычками не требуется. - person Milan; 10.03.2019