Я пытаюсь использовать одну и ту же лямбда-функцию AWS для двух операций с одним и тем же набором данных DynamoDB.
(a) Предоставьте ответы по навыку Алексы
Я уже реализовал это, и Навык работает правильно. Я использую NodeJS и Amazon Skills Kit версии 2. Последние несколько строк моего index.js выглядят следующим образом:
const skillBuilder = Alexa.SkillBuilders.standard();
exports.handler = skillBuilder
.addRequestHandlers(
LaunchRequest,
HelpIntent,
// .... various other intents
UnhandledIntent
)
.addErrorHandlers(ErrorHandler)
.lambda();
(b) Предоставить объект JSON, суммирующий некоторое содержимое базы данных
Код NodeJS, который я настроил для навыка Alexa, обрабатывает данные DynamoDB для предоставления ответов навыка. Я хочу использовать одну и ту же кодовую базу (то есть ту же функцию Lambda) для создания сводок для моей собственной выгоды. Я не хочу копировать и вставлять кусочки лямбда-функции в отдельную функцию. Я бы предпочел, чтобы один и тот же код выполнял обе задачи, чтобы все было в порядке.
Моя проблема в том, что структура лямбда-кода для возврата этого JSON-ответа на мой запрос выглядит следующим образом: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html:
'use strict';
console.log('Loading hello world function');
exports.handler = function(event, context, callback) {
let name = "you";
let city = 'World';
// etc ... more code ...
callback(null, response);
};
Обе части кода назначают функцию для `exports.handler`
Мне кажется, я хочу добиться этого эффекта:
if ( /* test whether being called by Alexa or by API Gateway */ )
{ /* Make the Alexa Response */ }
else
{ /* Construct the JSON data summary response */ }
Из того, что я могу разглядеть, каждая лямбда-функция (в смысле каждого номера ресурса Amazon для лямбда-функции) должна иметь только один входной файл, т.е. я не могу заставить лямбду начинать index_Alexa.js
против index_JSON.js
,
Я открыт для любых предложений о том, как заставить одну и ту же функцию Lambda (в смысле одного и того же файла JS или пакета файлов) делать обе вещи.