alexa ask sdk v2 nodejs, как произнести массив строк в ответ

У меня проблемы с высказыванием нескольких вариантов в ответе 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();

Вызов API getNearestNames отправляет в ответ массив. Я пытаюсь произнести каждое имя одно за другим. Но передача переменной NearestNames функциям speak() приводит к ошибке «Есть проблема с ответом запрошенного навыка». Как решить эту проблему?

Спасибо


person Ashy Ashcsi    schedule 23.02.2019    source источник


Ответы (2)


Вы можете попробовать использовать приведенный ниже код для отправки нескольких ответов, он делает вызов 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();
  }
};
person shradha    schedule 24.02.2019

Ответы Alexa не дружелюбны к разработчикам, когда что-то пошло не так, не так ли?

Эта ошибка, вероятно, вызвана исключением, вызванным методом getNearestNames (добавьте .catch(e => console.log(e)) и проверьте выходные данные CloudWatch, или из-за слишком большого времени отклика — у вас есть только 10 секунд, чтобы отреагировать на ввод пользователя, или вы просто не отметили обработчик метод как async.Также я не уверен, что Alexa оборачивает текст ответа разметкой <speak> - вы используете <break> в своем образце.

person slawciu    schedule 26.02.2019