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();
}
}
大家好,晚上好!
我在我的 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();
}
}