【问题标题】:SSML support in AWS Alexa V2AWS Alexa V2 中的 SSML 支持
【发布时间】:2019-07-31 11:31:13
【问题描述】:

我正在努力将 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();

有没有人知道我可能做错了什么?提前致谢。

【问题讨论】:

  • SSML 不应该被包裹在&lt;speak&gt; 标签中吗?
  • 我尝试添加 ,但文档说 V2 不需要。这就是我删除 标签的原因。
  • 可能是 Response Builder 没有为 SSML 转义语音的问题吗?我看到它已在 3 天前关闭:github.com/alexa/alexa-skills-kit-sdk-for-nodejs/issues/472 ... 尝试删除那些转义字符
  • 是的,你是对的。更新库修复了问题
  • - 太好了,我会在下面添加答案以供您标记正确-这可能对更多人有所帮助!

标签: node.js amazon-web-services aws-lambda ssml


【解决方案1】:

正如我们在原始帖子的评论部分中确定的那样。

Response Builder v.2.5.1 之前的版本没有转义无效的 SSML 字符:&amp;, &lt;, &gt;, ", ' Alexa 团队 here 提出了这个问题,并且是已在 2.5.1 版中修复

更新库可解决问题

【讨论】:

    【解决方案2】:

    试试

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

    【讨论】:

    • 虽然作为一个有趣的例子,但这并不是问题的解决方案,因为 OPs 构造字符串的方式是正确的,即使在单引号字符串中转义双引号是不必要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2016-12-31
    • 2019-05-09
    • 2018-08-02
    • 2016-08-23
    • 2017-11-29
    • 2016-08-02
    相关资源
    最近更新 更多