【问题标题】:alexa ask sdk v2 nodejs how to speak out array of strings in responsealexa 询问 sdk v2 nodejs 如何说出字符串数组作为响应
【发布时间】:2019-07-17 11:41:58
【问题描述】:

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

谢谢

【问题讨论】:

    标签: node.js response alexa alexa-skills-kit ssml


    【解决方案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();
      }
    };
    

    【讨论】:

      【解决方案2】:

      当出现问题时,Alexa 的响应对开发人员不友好,是吗?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-19
        • 1970-01-01
        • 2021-08-19
        • 2021-12-05
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        相关资源
        最近更新 更多