Вызов Alexa API не возвращает ничего - PullRequest
0 голосов
/ 01 декабря 2018

Привет и добрый вечер всем!

Я настроил вызов API в своем приложении Alexa, и я пытаюсь получить общее представление о том, почему он не работает с URL / ответом, который у меня есть.

Я знаю, что вызов API работает, потому что когда я заменяю 'host' на 'api.icndb.com' и 'path' на '/ jokes / random', он работает (когда я получаю доступ к данным ответа с использованием ответа.value.quote).

Мой вызов API не будет работать с предоставленным мною URL, или, возможно, я пытаюсь получить доступ к данным.API предоставляет данные в массиве с вложенными в него объектами, который отличается от вышеупомянутого URL.

Чтобы увидеть, что я имею в виду, вот URL для примера навыка Alexa, который я создал для своего приложения.с API api.icndb.com, на который я ссылаюсь.

Вот мой код:

/* eslint-disable  func-names */
/* eslint-disable  no-console */

const Alexa = require('ask-sdk');
var https = require('https')


const LaunchRequestHandler = {
  canHandle(handlerInput) {
   const request = handlerInput.requestEnvelope.request;
   return request.type === 'LaunchRequest'
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak('Welcome to Simpson Speak')
      .getResponse();
  }
};


const GetQuoteHandler = {
  canHandle(handlerInput) {
    const request = handlerInput.requestEnvelope.request;
    return request.type === 'IntentRequest' && request.intent.name === 'GetQuote';
  },
  async handle(handlerInput) {
     const response = await httpGet();

     console.log(response);

     return handlerInput.responseBuilder
      .speak(response[0].author)
      .getResponse()

  }
};

function httpGet(){
  return new Promise(((resolve, reject) => {
    var options = {
      host: 'thesimpsonsquoteapi.glitch.me',
      port: 443,
      path: '/quotes',
      method: 'GET',
    };
    const request = https.request(options, (response) => {
      response.setEncoding('utf8');
      let returnData = '';

      response.on('data', (chunk)=>{
        returnData += chunk;
      });
      response.on('end',()=>{
        resolve(JSON.parse(returnData));
      });
      response.on('error', (error)=>{
        reject(error);
      });
    });
    request.end();
  }));
};

const skillBuilder = Alexa.SkillBuilders.standard();

exports.handler = skillBuilder
  .addRequestHandlers(
    LaunchRequestHandler,
    GetQuoteHandler
  )
  .lambda();

1 Ответ

0 голосов
/ 03 декабря 2018

Этот код будет работать с вашей функцией httpGet.

const GetQuoteHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'GetQuote';
  },
  async handle(handlerInput) {
    const {responseBuilder } = handlerInput;
        const response = await httpGet();
        console.log(response);
        const items = response[0]
        const item = items.quote

        var speechText = "Your quote is" + JSON.stringify(item)

        return responseBuilder
          .speak(speechText)
          .reprompt("don't even know that one")
          .getResponse();
      }
}
...