我在 Alexa 响应中说出多个选项时遇到问题。请找到下面的代码:
let results = await getNearestNames(data.results[0].geometry.location.lat, data.results[0].geometry.location.lng);
// generate response
let nearestNames = "";
results.map((obj) => {
nearestNames += obj.name + '<break time="1s">';
});
response = responseBuilder
.speak(nearestNames)
.getResponse();
getNearestNames API 调用发送一个数组作为响应。我试图一一说出每一个名字。但是将nearestNames 变量传递给speak() 函数会导致“请求的技能响应存在问题”。我该如何解决这个问题?
谢谢
最佳答案
您可以尝试使用下面的代码发送多个响应,它会调用 API 来获取图书名称,对其进行迭代并返回标题。它使用 request-promise-native模块发出请求,只是为了展示示例。
async function getNames() {
try {
const options = {
method: "GET",
url: "http://libgen.io/json.php?ids=1,2&fields=Title,Author,MD5"
};
let result = await rp(options);
result = JSON.parse(result);
return result;
} catch (e) {
throw e;
}
}
const BookNameIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.requestEnvelope.request.intent.name === "BookIntent"
);
},
async handle(handlerInput) {
const data = await getNames();
let names = "";
data.map(item => {
names += `${item.title} <break time="3s"/>`;
});
console.log("Names ", names);
const speechText = `<speak> The books names are, <break time="2s"/> ${names}</speak>`;
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
关于node.js - alexa询问sdk v2 nodejs如何说出字符串数组作为响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843002/