Я новичок в Node, AWS Lambdas и Slackbots, так что может быть лучший способ выучить их всех, чем пытаться понять их одновременно? Шучу.
Я создал командное приложение slackbot sla sh. То есть, когда пользователь в Slack набирает '/ anondm @username msg ' Slack отправит эту команду моей функции Lambda, которая затем вернет ответ непосредственно отправителю.
Эта цель есть, чтобы лямбда-сообщение приняло сообщение, удалило имя пользователя и перенаправило сообщение анонимно получателю.
Теперь, во-первых, это существует. Или, по крайней мере, я могу найти репозитории на GitHub. Но я хотел фирменную версию и хотел добавить пару маленьких хитростей.
Что работает: - Создание команды bot и sla sh не было проблемой. - Получение лямбды для получения сообщения и ответа отправителю также не было проблемой.
Если вам интересно, вам просто нужен API-шлюз и лямбда-функция, и этого руководства будет достаточно: https://api.slack.com/tutorials/aws-lambda
Что не работает: - Мне нужно сделать HTTPS GET-запрос к Slack API, чтобы он выполнил команду отправки сообщения пользователю.
Я потратил около суток, пытаясь понять это, и переходил от одного решения к другому, но сегодня утром после того, как кофе попал на что-то, что мне ДЕЙСТВИТЕЛЬНО нравится.
Я видел людей, предлагающих использовать SNS Topi c. Таким образом, одна лямбда получает веб-запрос, а затем публикует в SNS Topi c, который инициирует отправку другой лямбды. Ну, это звучит хорошо для чего-то большого объема, где я бы использовал очередь заданий, но ... я имею в виду, что это веб-обработчик и запрос GET ... это должно быть пара строк кода.
Итак, вопрос: как проще всего выполнить запрос GET во время лямбда-запроса, получившего веб-запрос?
Вот что не сработало (в простейшей форме), но ожидалось, что это решение:
'use strict';
var qs = require('querystring');
var https = require('https');
var target = "_snip_";
exports.handler = function(event, context) {
console.log("This will for sure execute.");
https.get(target, function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
console.log("This will for sure NOT execute.");
return "Your quest is complete.";
};
А вот что будет работать:
'use strict';
var qs = require('querystring');
var https = require('https');
var target = "_snip_";
exports.handler = function(event, context) {
console.log("This will for sure execute.");
https.get(target, function(res) {
console.log("Got response: " + res.statusCode);
context.succeed("Your quest is complete");
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
};