alexa询问sdk v2 nodejs如何在响应中说出字符串数组

问题描述 投票:0回答:2

我在回答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()函数会导致“请求技能的响应存在问题”。我该如何解决这个问题?

谢谢

node.js response alexa alexa-skills-kit ssml
2个回答
1
投票

您可以尝试使用以下代码发送多个响应,它会进行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();
  }
};

0
投票

当出现问题时,Alexa的回复不是开发人员友好的,是吗?

这个错误可能是由getNearestNames方法引发的异常引起的(添加.catch(e => console.log(e))并检查CloudWatch输出,或者由于响应时间太长 - 你只有10秒的时间来响应用户的输入,或者你还没有标记处理程序的作为async的方法。另外我不确定Alexa是否用<speak>标记包装响应文本 - 你在样本中使用<break>

© www.soinside.com 2019 - 2024. All rights reserved.