Невозможно обнаружить действие из-за многопользовательского выбора с помощью болта Slack
Ниже приведено простое приложение Slack для узлов, которое отображает встроенный 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);
})();
1 ответ
Решение
Итак, я нашел решение этой проблемы, посмотрев исходный код приемника.
Насколько я могу судить, это нигде не задокументировано, но если вам нужны отдельные URL-адреса для событий и действий, вы должны указать их самостоятельно:
const app = new App({
signingSecret: process.env.SLACK_SIGNING_SECRET,
token: process.env.SLACK_BOT_TOKEN,
endpoints: {
events: '/slack/events',
actions: '/slack/actions'
},
});