无法使用 Slack 螺栓检测来自多用户 select 的操作
Unable to detect action from multi-user-select using Slack bolt
下面是一个简单的节点松弛应用程序,它向用户显示内置的 multi user select
块元素。我想在用户单击输入中的提交按钮时处理操作,因此我在块中设置了 action_id 并根据文档中的示例添加了一个操作侦听器。
但是,操作没有被触发; ngrok 正在显示传入的 /slack/actions
请求但返回 404。
我在这里错过了什么?
const { App } = require('@slack/bolt');
const app = new App({
signingSecret: process.env.SLACK_SIGNING_SECRET,
token: process.env.SLACK_BOT_TOKEN,
});
app.event('app_home_opened', ({ event, say }) => {
say(`Hi <@${event.user}>!`);
const blocks = [{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Pick one or more items from the list"
},
"accessory": {
"type": "multi_users_select",
"action_id": "test_action",
"placeholder": {
"type": "plain_text",
"text": "Select items"
},
}
}];
say({ blocks });
});
app.action('test_action', async(req, res) => {
console.log(req);
console.log(res);
});
app.error(error => {
console.error(error);
});
(async () => {
await app.start(process.env.PORT || 3000);
})();
所以我通过查看 receiver 源代码找到了解决方案。
据我所知,这在任何地方都没有记录,但如果您想要单独的事件和操作 url,您必须自己指定它们:
const app = new App({
signingSecret: process.env.SLACK_SIGNING_SECRET,
token: process.env.SLACK_BOT_TOKEN,
endpoints: {
events: '/slack/events',
actions: '/slack/actions'
},
});
下面是一个简单的节点松弛应用程序,它向用户显示内置的 multi user select
块元素。我想在用户单击输入中的提交按钮时处理操作,因此我在块中设置了 action_id 并根据文档中的示例添加了一个操作侦听器。
但是,操作没有被触发; ngrok 正在显示传入的 /slack/actions
请求但返回 404。
我在这里错过了什么?
const { App } = require('@slack/bolt');
const app = new App({
signingSecret: process.env.SLACK_SIGNING_SECRET,
token: process.env.SLACK_BOT_TOKEN,
});
app.event('app_home_opened', ({ event, say }) => {
say(`Hi <@${event.user}>!`);
const blocks = [{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Pick one or more items from the list"
},
"accessory": {
"type": "multi_users_select",
"action_id": "test_action",
"placeholder": {
"type": "plain_text",
"text": "Select items"
},
}
}];
say({ blocks });
});
app.action('test_action', async(req, res) => {
console.log(req);
console.log(res);
});
app.error(error => {
console.error(error);
});
(async () => {
await app.start(process.env.PORT || 3000);
})();
所以我通过查看 receiver 源代码找到了解决方案。
据我所知,这在任何地方都没有记录,但如果您想要单独的事件和操作 url,您必须自己指定它们:
const app = new App({
signingSecret: process.env.SLACK_SIGNING_SECRET,
token: process.env.SLACK_BOT_TOKEN,
endpoints: {
events: '/slack/events',
actions: '/slack/actions'
},
});