【发布时间】:2020-04-02 21:12:39
【问题描述】:
我是 Node、AWS Lambdas 和 Slackbots 的新手,那么有什么比同时弄清楚它们更好的方法来学习它们呢?开个玩笑。
我创建了一个 slackbot 斜线命令应用程序。也就是说,当 Slack 上的用户键入“/anndm @username msg”时,Slack 会将此命令发送到我的 Lambda 函数,然后它会直接将答案返回给发送者。
目标是让 Lambda 接收消息,删除用户名,然后将消息匿名转发给收件人。
现在,首先,这是存在的。或者至少,我可以在 GitHub 上找到代码库。但我想要一个品牌版本,我想添加一些小技巧。
什么有效: — 创建 bot 和 slash 命令不成问题。 — 让 Lambda 接收消息并响应发送者也不是问题。
如果您有兴趣,只需要一个 API 网关和一个 Lambda 函数,本教程就足够了:https://api.slack.com/tutorials/aws-lambda
什么不工作: — 我需要向 Slack API 发出 HTTPS GET 请求,以便它执行向用户发送消息的命令。
我花了大约一天的时间试图弄清楚这一点,并在许多解决方案之间来回走动,但今天早上,在喝了杯咖啡后,我真的很喜欢。
我看到有人建议使用 SNS 主题。因此,一个 Lambda 接收 Web 请求,然后发布到触发另一个 Lambda 发送的 SNS 主题。好吧,这对于我会使用作业队列的大容量的东西来说听起来不错,但是......我的意思是它是一个 Web 处理程序和一个 GET 请求......这应该是几行代码。
那么问题来了:在收到 Web 请求的 Lambda 期间执行 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);
});
};
【问题讨论】:
标签: node.js https aws-lambda slack slack-api