我在说出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调用发送一个数组作为响应。我想一一讲出每个名字。但是,将最近的变量传递给speak()函数会导致“请求的技能的响应存在问题”。我该如何解决这个问题?
谢谢
答案 0 :(得分:0)
您可以尝试使用以下代码发送多个响应,它进行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();
}
};
答案 1 :(得分:0)
出现问题时,Alexa的存储库对开发人员不友好,是吗?
此错误可能是由于getNearestNames
方法引发的异常(添加.catch(e => console.log(e))
并检查CloudWatch输出),或者是由于响应时间太长-您只有10秒的时间可以响应用户的输入,或者您尚未将处理程序的方法标记为async
。同样,我不确定Alexa是否使用<speak>
标记包装响应文本-您在示例中使用<break>
。 / p>