Этот код отлично работает
var app = new Alexa.app('appName');
// ...
app.intent('marcopolo', {
'slots': {},
'utterances': ['marco']
}, function(request, response){
console.log('marco worked');
response.say('polo').shouldEndSession(false).send();
});
// Alexa says: polo
// Log says: marco worked
Этот код не работает
var app = new Alexa.app('appName');
// ...
app.intent('marcopolo', {
'slots': {},
'utterances': ['marco']
}, function(request, response){
console.log('marco started');
return ajax('http://www.google.com')
.then(function(){
console.log('marco response');
response.say('polo').shouldEndSession(false).send();
})
.catch(function(){
console.log('marco error');
response.say('polo, I think').shouldEndSession(false).send();
});
});
// alexa says: (no response)
// Log says: marco started
Я попытался использовать оба request-обещание и суперагент в качестве библиотеки Ajax с тем же результатом.
Вот версии:
"alexa-app": "^2.4.0",
"request-promise": "^2.0.0",
"superagent": "^3.8.3"
Вот мое намерение в навыке Алексы:
"intents": [
{
"name": "marcopolo",
"slots": [],
"samples": [ "marco" ]
}
]
Я никогда не видел, чтобы app.intent()
принимал оператор return
, но где-то в Интернете я читал ответ, в котором говорилось, что для асинхронного ответа внутри app.intent()
требуется возврат обещания, но это обновление не имело никакого эффекта:
return ajax('http://www.google.com')
Я также подумал, что, возможно, это было медленно и истекло время ожидания, но у моего Alexa Skill Timeout установлено 5 минут. У меня есть другие навыки, которые делают Ajax без проблем, и весь код работает на Lambda (облачный сервис), поэтому я не могу представить, что что-то окружающее может вызвать проблему.
Любая помощь приветствуется.