使用来自外部 API 和 API-KEY 的数据的 Alexa 技能

Alexa skill that uses data from an external API with API-KEY

我正在尝试使用在 node.js 8.1 上运行的 lambda 从 alexa 后端代码访问外部 API,该代码可以访问任何不需要 api- 的端点键,但我找不到在代码中包含我的 authoraztion (api-key) 的方法,这样我就可以检索我正在寻找的数据。 我试图访问的 api 文档如下:

curl --request GET -H 'Authorization: Bearer ' -H 'Content-Type: application/json' "https://some-end-point/path/i/want"

这是针对 alexa-skills-kit 的,它在调用技能后使用 lambda 并尝试访问外部 api,其中 api-key.The 代码可以将信息检索到不需要任何密钥的任何端点。 我已经尝试将密钥作为参数包含在 URL(api 密钥 + URL)中,因为我是 alexa、lambda、nodejs 的新手,我不确定如何调试它,但我只是没有得到想要的输出(Alexa 使用从外部 api 获得的信息将文本转换为语音)。

pd:假设我的 api 密钥是:xxxx-xxxx-xxxx

// endpoint that i want
url = https://some-end-point/path/i/want

await getRemoteData(url)
      .then((response) => {
        const data = JSON.parse(response);
        outputSpeech = `the data thati want is ${data.records.length} `;
        for (let i = 0; i < data.records.length; i++) {
          if (i === 0) {
            //first record
            outputSpeech = outputSpeech + data.records[i].fields.name + ', '
          } else if (i === data.records.length - 1) {
            //last record
            outputSpeech = outputSpeech + 'y '+data.records[i].fields.name + 
             ', '
          } else {
            //middle record(s)
            outputSpeech = outputSpeech + data.records[i].fields.name + ', '
          }
        }
      })



//function getRemoteData
const getRemoteData = function (url) {
  return new Promise((resolve, reject) => {
    const client = url.startsWith('https') ? require('https') : require('http');
    const request = client.get(url,(response) => {
      if (response.statusCode < 200 || response.statusCode > 299) {
        reject(new Error('Failed with status code: ' + response.statusCode));
      }
      const body = [];
      response.on('data', (chunk) => body.push(chunk));
      response.on('end', () => resolve(body.join('')));
    });
    request.on('error', (err) => reject(err))
  })
};

上面的代码可以无错误地访问任何端点,但我不知道如何包含 api 键以便它可以访问 api,预期的输出是可以访问 api 通过包含 api-key

对于这个问题的任何帮助都将很高兴得到这位新手的帮助....

您需要传递一个options对象作为client.get的第二个参数。例如:

const options = {
  headers: {
    'Authorization': 'Bearer <your API key>'
  }
}

然后你在哪里做请求:

const request = client.get(url, options, (response) => {
  // Do the rest of your stuff here...  
}

您可以在 options here.

上找到更多详细信息