Alexa API 调用未返回任何内容

Alexa API call is not returning anything

大家好,晚上好!

我在我的 Alexa 应用程序中设置了一个 API 调用,我试图基本了解为什么它不能与我的 URL/response 一起使用。

我知道 API 调用有效,因为当我将 'host' 替换为 'api.icndb.com' 并将 'path' 替换为 '/jokes/random' 时它有效(当我访问使用 response.value.quote).

的响应数据

我的 API 调用将无法与我提供的 URL 一起使用,或者这可能是我尝试访问数据的方式。 API 以数组形式提供数据,其中嵌套了对象,这与前面提到的 URL.

不同。

要了解我指的是什么,这里是 URL 我用我指的 'api.icndb.com' API 构建我的应用程序的示例 Alexa 技能.

这是我的代码:

/* 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();

此代码将与您的 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();
      }
}