创造者
@slack/interactive-messages
在这里
什么是express中间件?
Express中间件是一种处理传入HTTP请求的函数的名称。所有中间件功能都可以逐个请求选择预处理请求(通常是通过将属性添加到
req
参数),响应请求,或对请求进行后处理(如计算请求和响应之间的时间)。它可以做这些事情的任何一个或组合,这取决于它试图完成什么。express应用程序管理一堆中间件。您可以将其视为在响应准备就绪之前请求可能完成的步骤列表。列表中的每一步都可以决定提供响应,这样就连下一步的请求都不会到达。
这个
cors
代码示例中的值是一个中间件函数。它应用了一些有关Firebase函数应该接受来自哪个源的请求的规则。它将这些规则应用于传入的请求,当不允许源站时,它将立即响应错误。否则,它允许堆栈中的下一个中间件处理请求。
在您的示例中还有另一个中间件,那就是路由器。路由器只是一种中间件,它知道如何根据传入请求中的路径(URL的一部分)将应用程序拆分为单独的处理程序。每一个快车
app
附带了一个内置路由器,您使用
app.post("/go", () => {});
堆栈中的最后一个中间件
. 它们确实有一个人们通常没有意识到的特殊功能。这些路由处理程序是什么?他们只是
. 所以总体来说,您可以将路由器视为一种中间件,它可以帮助您根据请求的路径划分应用程序行为。
这对我来说意味着什么
slackInteractions
?
对象作为路由器
处理请求-它从不将请求传递到堆栈中的下一个中间件。关键的区别在于,它不是用请求的路径来划分应用程序行为,而是使用松弛交互的各种属性来划分行为。你呢
describe which properties exactly you care about by passing in constraints
到
.action()
懒散的互动
,即值本身不是express中间件,通过调用
.expressMiddleware()
方法。它是这样分开的,这样它也可以在express应用程序之外工作(这时您可以使用
.start()
方法)。
把它放在一起
就像我说的,我没有具体使用Firebase函数的经验,但是我认为对于一个只处理松散交互的函数,您至少应该从这里开始。
// Firebase Functions SDK
import functions = require("firebase-functions");
const slackbotConfig = functions.config().slackbot;
// Slack Interactive Messages Adapter
const { createMessageAdapter } = require("@slack/interactive-messages");
const slackInteractions = createMessageAdapter(slackbotConfig.signing_secret);
// Action handlers
slackInteractions.action('welcome_agree_button', (payload, respond) => {
// `payload` is an object that describes the interaction
console.log(`The user ${payload.user.name} in team ${payload.team.domain} pressed a button`);
// Your app does some asynchronous work using information in the payload
setTimeout(() => {
respond({ text: 'Thanks for accepting the code of conduct for our workspace' });
}, 0)
// Before the work completes, return a message object that is the same as the original but with
// the interactive elements removed.
const reply = payload.original_message;
delete reply.attachments[0].actions;
return reply;
});
// Express
import express = require("express");
const app = express();
app.use("/", slackInteractions.expressMiddleware());
exports.slackActions = functions.https.onRequest(app);