代码之家  ›  专栏  ›  技术社区  ›  Ashy Ashcsi

alexa ask sdk v2 nodejs如何说出响应的字符串数组

  •  0
  • Ashy Ashcsi  · 技术社区  · 5 年前

    在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();
    

    getNearestnamesAPI调用发送一个数组作为响应。我正试图逐一说出每个人的名字。但是,将nearestnames变量传递给speak()函数会导致“请求的技能响应有问题”。如何解决此问题?

    谢谢

    0 回复  |  直到 5 年前
        1
  •  1
  •   shradha    5 年前

    您可以尝试使用下面的代码来发送多个响应,它会调用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();
      }
    };
    
        2
  •  0
  •   slawciu    5 年前

    Alexa的respones在出现问题时对开发人员不友好,是吗?

    此错误可能是由 getNearestNames 方法(添加) .catch(e => console.log(e)) 并检查cloudwatch的输出,或者由于响应时间太长-您只有10秒的时间来响应用户的输入,或者您只是没有将handler的方法标记为 async . 我也不确定alexa是否用 <speak> 加价-您正在使用 <break> 在你的样本中。