如何在几秒钟内使Alexa倒计时

时间:2018-07-17 19:30:06

标签: amazon-web-services alexa alexa-skills-kit alexa-skill alexa-voice-service

我希望我的技巧能够使Alexa(听觉上)倒计时15秒。我知道我只能在<break time="15s" />中使用SSML。但这是听不到的。我也知道我可以做到:

15<break time="1s" />
14<break time="1s" /> 

或者更好(考虑到说这个数字所花费的时间)

15<break time="0.85s" />
14<break time="0.85s" />

但是,如果我重复多次,那将是很多重复的代码。因此,我可能要编写一个函数,该函数需要一个数秒的时间,并在该间隔内产生SSML倒计时。

但是,在执行此操作之前,我想知道是否存在适当的内置方法?或者,如果某人已经为此功能建立了功能?谢谢!!!

2 个答案:

答案 0 :(得分:3)

function buildCountdown(seconds, break) {
    var countdown = "";

    for (var i = seconds; i > 0; i--) {
        var count = i.toString + "<break time='" + break.toString() + "s' />\n";
        countdown.concat(count);
    }

    return countdown;
}

然后仅提供outputSpeech属性:

"outputSpeech": {
    "type": "SSML",
    "ssml": buildCountdown(15, 0.85)
}

我不确定是否有用于构建SSML的任何ASK内置程序,但是在使用Javascript框架时,编写生成标记的函数非常普遍,因此在这里似乎很合适。

答案 1 :(得分:1)

我最终获得了以下功能(在Alexa闲暇的人的帮助下):

function countDown(numSeconds, breakTime) {
    return Array.apply(null, {length: numSeconds})
        .map((n, i) => {return `<say-as interpret-as="cardinal">${numSeconds-i}</say-as>` })
        .join(`<break time="${breakTime ? breakTime : 0.85}s" />`) + `<break time="${breakTime ? breakTime : 0.85}s" />`;
}