通过 API-KEY 使用来自外部 API 的数据的 Alexa 技能
Posted
技术标签:
【中文标题】通过 API-KEY 使用来自外部 API 的数据的 Alexa 技能【英文标题】:Alexa skill that uses data from an external API with API-KEY 【发布时间】:2019-11-24 16:40:45 【问题描述】:我尝试使用在 node.js 8.1 上运行的 lambda 从 alexa 后端代码访问外部 API,该代码可以访问任何不需要 api-key 但我无法找到包含我的授权的端点( 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-key 访问外部 api。代码可以将信息检索到不需要任何密钥的任何端点。 我已经尝试将密钥作为参数包含在 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-key 来访问 api
对于这个问题的任何帮助都将很高兴得到这个新手的帮助......
【问题讨论】:
【参考方案1】:您需要传递一个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找到更多详细信息。
【讨论】:
以上是关于通过 API-KEY 使用来自外部 API 的数据的 Alexa 技能的主要内容,如果未能解决你的问题,请参考以下文章