我正在尝试构建一个ASK(Alexa Skill Kit)应用程序,以便在消息进入时基本上读取消息。
到目前为止,我试图测试的代码是:
function handleObserveFlowIntentRequest(intent, session, response) {
var callback = function (message) {
response.tell({
speech: message,
type: AlexaSkill.speechOutputType.PLAIN_TEXT
});
};
callback("One Observe Flow");
callback("Two Observe Flow");
}
我只能从第一个回调输出"One Observe Flow"
最终我想基本上做这样的事情:
function handleObserveFlowIntentRequest(intent, session, response) {
var callback = function (message) {
response.tell({
speech: message,
type: AlexaSkill.speechOutputType.PLAIN_TEXT
});
};
var jsonStream = new EventSource(::myApiUrl::);
jsonStream.onmessage = function (e) {
callback(e.data.message);
}
}
答案 0 :(得分:4)
目前在ASK平台上无法实现您的目标。
如果没有首先被提示,Alexa就不可能说出来。 Alexa是会话式的,无法打断用户。
虽然在基于node.js的异步性质的代码中可能看起来像你想做的事情,但是亚马逊基于给定的Intent同步调用你的技能,而你只是提供响应。 ASK没有提供一种机制让你把东西推到Alexa上去说。
这意味着您必须在Alexa实际说出任何内容之前形成您的整个回复。重申一下,这是因为亚马逊用Intent调用你的技能并期待回应。使用response.tell返回该响应后,除非您收到来自亚马逊的另一个Intent请求,否则您无法让Alexa说出任何其他内容。
答案 1 :(得分:-1)
这是迟到的,但可能会对其他人有用。虽然您无法使用ASK,但您可以使用AVS。这意味着用覆盆子pi等建立你自己的Echo,但它会做你想要的。而不是它是一个恒定的开放流,你会为每个发生的事件触发一个离散的响应。你可以看看this hackster project I did做类似的事情。在我的例子中,RPI上运行的代码等待事件。当按下IOT按钮时,Alexa会说出相应的响应。