Nik*_*iss 3 alexa node.js alexa-skills-kit
我意识到这个问题可能措辞不当,但这是我能想到的最好的办法。
我的问题是,我在偶尔发出 Alexa 技能命令(比如每隔几分钟)的情况下使用 Alexa,并且我不想每次都重新调用该技能。
目前,在我发出命令后,Alexa 回复说她正在执行该操作,但最后她希望通过以下方式获得新用户输入:
this.emit(':responseReady');
Run Code Online (Sandbox Code Playgroud)
然而,这并不是我想要的,因为大多数时候我不想立即发出另一个命令。相反,几分钟后,我会想再次与该技能互动。
但是,如果我完全退出该技能,下次我将不得不重新调用它,并再次收到整个技能欢迎消息(“欢迎使用技能名称。您可以说……”)。我也不认为这是最佳选择。
有没有办法让该技能保持“打开/激活”状态,以便在该技能的上下文中解释我给出的下一个命令,而不必发出 :responseReady (期望立即响应)并且不必重新启动该技能( “Alexa,打开技能名称”)?
我想出了等待用户响应的最简单方法。在您的回复中,您可以添加一些静音音频。用户总是可以通过说“Alexa,[意图]”来打断这一点,这将触发您的应用程序的特定意图。
您需要知道音频应该少于 90 秒。我用了 80 秒 mp3。将多个音频分组在一个回复中无济于事。你能做的最好的事情是发出两个回复,这会给你大约 160 秒的等待时间。
这是我在技能中使用的示例代码:
// Get silence to wait for a user input.
var silence = '<audio src="' + PATHS.SILENCE_80_SEC + '" />';
var reply = 'Please go to <emphasis level="moderate">www.plumhead.xyz/pair</emphasis> and tell me your unique pairing code. Again, go to <emphasis level="moderate">www.plumhead.xyz/pair</emphasis> to get a pairing code. When you are ready say: "Alexa, and your pairing code".' + silence;
alexa.emit(':ask', reply, reply);
Run Code Online (Sandbox Code Playgroud)
要为 Alexa 生成无声 mp3,您可以使用ffmpeg. 接下来的命令生成 80 秒 mp3,然后将其转换为 Alexa 可以接受的格式:
ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t 80 -q:a 9 -acodec libmp3lame out.mp3
ffmpeg -y -i out.mp3 -ar 16000 -ab 48k -codec:a libmp3lame -ac 1 silence-80-sec.mp3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3847 次 |
| 最近记录: |