1

下面是一个简单的节点松弛应用程序,它向用户显示内置的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);
})();

4

1 回答 1

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'
  },
});
于 2019-12-04T14:18:16.827 回答