使用来自外部 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.
上找到更多详细信息
我正在尝试使用在 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.