I’m troubleshooting an Alexa Skill using ASK-SDK v2 to retrieve Airtable records. Even with correct API credentials, the Airtable request never fires. See sample code:
'use strict';
const AlexaSDK = require('ask-sdk-core');
const httpsLib = require('https');
const SKILL_ID = 'amzn1.ask.skill.abcdef123456';
const StartHandler = {
canHandle(input) {
return input.requestEnvelope.request.type === 'LaunchRequest';
},
handle(input) {
console.log('Skill started');
return input.responseBuilder
.speak('Welcome! Please state a character name.')
.reprompt('I need a character name.')
.getResponse();
}
};
const RetrieveRecordHandler = {
canHandle(input) {
return input.requestEnvelope.request.type === 'IntentRequest' &&
input.requestEnvelope.request.intent.name === 'RetrieveRecordIntent';
},
handle(input) {
const charInput = input.requestEnvelope.request.intent.slots.charInput.value;
const encodedName = encodeURIComponent(charInput);
const apiPath = `/v0/appXYZ/Table?api_key=myNewKey&filterByFormula=%7BName%7D%3D%22${encodedName}%22`;
const reqOptions = {
hostname: 'api.airtable.com',
port: 443,
path: apiPath,
method: 'GET'
};
return new Promise((resolve, reject) => {
let dataAccumulator = '';
const req = httpsLib.request(reqOptions, (res) => {
res.on('data', (chunk) => { dataAccumulator += chunk; });
res.on('end', () => {
const result = JSON.parse(dataAccumulator);
if (result.records && result.records.length > 0) {
resolve(input.responseBuilder
.speak(`Description: ${result.records[0].fields.Description}`)
.getResponse());
} else {
resolve(input.responseBuilder
.speak('No record found for that character.')
.getResponse());
}
});
});
req.on('error', (error) => reject(error));
req.end();
});
}
};
exports.handler = AlexaSDK.SkillBuilders.custom()
.addRequestHandlers(StartHandler, RetrieveRecordHandler)
.lambda();