Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js alexa询问sdk v2节点如何说出字符串数组作为响应_Node.js_Response_Alexa_Alexa Skills Kit_Ssml - Fatal编程技术网

Node.js alexa询问sdk v2节点如何说出字符串数组作为响应

Node.js alexa询问sdk v2节点如何说出字符串数组作为响应,node.js,response,alexa,alexa-skills-kit,ssml,Node.js,Response,Alexa,Alexa Skills Kit,Ssml,在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 +

在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();
let results=wait getNearestNames(data.results[0].geometry.location.lat,data.results[0].geometry.location.lng);
//生成响应
让最接近的名字=”;
结果.map((obj)=>{
最接近的名称+=对象名称+“”;
});
response=responseBuilder
.说出(最接近的名字)
.getResponse();
getNearestNames API调用发送一个数组作为响应。我试着一个接一个地说出每个名字。但是将nearestNames变量传递给speak()函数会导致“请求的技能的响应有问题”。我如何解决这个问题


谢谢

您可以尝试使用下面的代码发送多个响应,它会发出一个API调用来获取书籍名称,对其进行迭代,并以标题进行响应。它使用模块发出请求,只是为了显示示例

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();
  }
};
异步函数getNames(){ 试一试{ 常量选项={ 方法:“获取”, url:“http://libgen.io/json.php?ids=1,2&fields=标题、作者、MD5“ }; 让结果=等待rp(选项); result=JSON.parse(result); 返回结果; }捕获(e){ 投掷e; } } 常量BookNameIntentHandler={ canHandle(handlerInput){ 返回( handlerInput.requestEnvelope.request.type==“IntentRequest”&& handlerInput.requestEnvelope.request.intent.name==“BookIntent” ); }, 异步句柄(handlerInput){ const data=wait getNames(); 让名字=”; data.map(项=>{ 名称+=`${item.title}`; }); 控制台日志(“名称”,名称); const speechText=`书籍名称为,${names}`; 返回handlerInput.responseBuilder .发言(演讲稿) .reprompt(演讲稿) .getResponse(); } };
Alexa的resposnes在出现问题时对开发人员不友好,是吗

此错误可能是由
getNearestNames
方法(add
.catch(e=>console.log(e))引发的异常引起的
并检查CloudWatch输出,或者由于响应时间太长-您只有10秒的时间来响应用户的输入,或者您只是没有将处理程序的方法标记为
异步
。此外,我不确定Alexa是否使用
标记包装响应文本-您在示例中使用的是