Я пытаюсь получить данные из API Yummly через Amazon Alexa, используя ws-yummly в Node.js, развернутом на AWS Lambda. Я довольно новичок во всех аспектах этого, но плохо знаком с javascript в частности (Python - мой «родной» язык).
Вот что я имею для своей рекомендации:
"RecommendationIntent": function () {
// delegate to Alexa to collect all the required slots
let filledSlots = delegateSlotCollection.call(this);
if (!filledSlots) {
return;
}
console.log("filled slots: " + JSON.stringify(filledSlots));
// at this point, we know that all required slots are filled.
let slotValues = getSlotValues(filledSlots);
console.log(JSON.stringify(slotValues));
const mainIngredientQuery = slotValues.mainIngredient.resolved;
async function main (queryWord) {
const resp = await Yummly.query(queryWord)
.maxTotalTimeInSeconds(1400)
.maxResults(20)
.minRating(3)
.get();
const names = resp.matches.map(recipe => recipe.recipeName);
const speechOutput = String(names[0]);
this.response.speak(speechOutput);
this.emit(":responseReady");
}
main(mainIngredientQuery).catch(error => console.error(error))
},
Это файл index.js, развернутый в AWS lambda. Я изолировал проблему с асинхронной функцией. Я протестировал функцию локально, и она возвращает в console.log список имен рецептов. Я хочу, чтобы Алекса произнесла эти имена. Или хотя бы одно имя.
Если я помещаю назначение speechOutput внутрь (как сейчас), то я получаю сообщение об ошибке, что 'Speechlet Response установлен в null'.
Если я скажу «возвращать имена» и установлю внешнее присвоение именам или именам [0], я получу обещание объекта или неопределенное значение (соответственно).
Все остальное в моей программе работает нормально и тестирует эти два бита на части, они работают, но соединять их вместе не работает. Я думаю, что это ошибка синтаксиса или размещения, но я еще недостаточно хорошо понимаю структуру или форматирование (все еще учусь), чтобы понять, что делать дальше.