Невозможно обнаружить действие из-за многопользовательского выбора с помощью болта 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'
  },
});
Другие вопросы по тегам