2016-01-06 5 views
2

Я пытаюсь создать приложение ASK (Alexa Skill Kit) в основном считывать сообщения, как они приходят в.Как вы можете передавать ответы в Alexa Skill Kit (ASK)

код, который я уже пытаюсь проверить это до сих пор является:

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); 
    } 
} 
+1

Используйте [event-source-stream] (https://www.npmjs.com/package/event-source-stream). –

+0

В чем разница между источником событий и потоком событий-источников, и как это отличается в ASK? –

+0

Я не знаю о ASK, но '' 'EventSource''' недоступен в' '' node.js''' только в браузере. Таким образом, существует '' '' npm''' polyfill для '' '' EventSource''' и '' 'EventSourceStream''', который обертывает первый в поток api, поэтому вы можете' '' .pipe() '' 'it или view '' '.on ('data', ...' '' для этого –

ответ

4

То, что вы пытаетесь сделать, в настоящее время на платформе ASK невозможно.

Невозможно, чтобы Alexa что-то произнесла без предварительного запроса. Alexa разговаривает и не может прерывать пользователя.

Хотя может показаться, что то, что вы хотите сделать, возможно в коде, основанном на асинхронном характере node.js, ваше умение вызывается синхронно Amazon на основе данного намерения, и вы просто предоставляете ответ. СПРОС не предоставляет механизм для того, чтобы вы что-то толкали Алекси, чтобы он мог сказать.

Это означает, что вы должны сформировать весь свой ответ, прежде чем Алекс действительно скажет что-нибудь. Повторяю, это потому, что Amazon называет ваше умение с намерением и ожидает ответа. После того, как вы вернете ответ с помощью response.tell, вы не можете заставить Alexa сказать что-нибудь еще, пока вы не получите другой запрос Intent от Amazon.

+0

Знаете ли вы, что они транслируют музыку? Как они объединяют несколько ответов вместе таким образом? –

+0

Если бы я должен был догадаться, потоковое приложение для музыки на Alexa не построено поверх ASK так же, как встроенная функциональность дома не построена поверх ASK. – JaredHatfield

-1

Это уже поздно, но, возможно, будет полезно другим. Хотя вы не можете сделать это с помощью ASK, вы можете с AVS. Это означало бы построение собственного эха с малиновым пи или другим, но это сделало бы то, что вы ищете. Вместо того, чтобы быть постоянным открытым потоком, вы вызывали бы дискретный ответ для каждого происходящего события. Вы можете проверить this hackster project I did, который делает что-то подобное. В моем случае код, запущенный в RPI, ждет событие. Когда нажата кнопка IOT, Alexa отвечает на соответствующий ответ.

Смежные вопросы