通过 slack webhook 将消息发送到不同的频道失败

Sending message to different channel via slack webhook fails

我不确定我是否理解了如何正确使用 webhooks 的方式,但是: 我想通过不同的渠道或向不同的用户发送消息(不是一次),而不参与该对话。

我的问题:我只能为特定用户创建 webhook,所以我最终对每个用户/频道都有一个唯一的 URL? 如果我使用 "channel" 参数甚至我使用的库中的 "setReceipent" 方法,它不会有任何效果,只有为其创建 webhook 的频道/用户才会收到消息。

我需要使用 API 访问权限还是可以使用 webhook 来满足我的需求?

一般来说incoming webhooks都是固定在配置的频道上的。因此,如果您想向用户 and/or 多个渠道发送消息,您需要创建多个 webhook 或通过 API(例如 chat.PostMessage)发送消息。

但是,还有另一种创建 webhook 的方法,通过在消息中添加通道覆盖 属性 ('channel'),您可以使用相同的 webhook 将消息发送到每个通道。它是传入 webhook 过去的工作方式,也是遗留自定义集成的一部分。

要创建这样的 webhook,您需要从 Slack App Directory 安装一个名为“Incoming webhooks”的应用程序(该应用程序由 Slack 团队制作)。

语法:

POST https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Content-type: application/json
{
    "text": "Hello, world.",
    "channel": "U12345678"
}

其中 U12345678 是您要向其发送直接消息的用户的 Slack ID。

请注意,channel 属性 是可选的,如果省略,消息将发送到默认频道。

有关完整文档,请参阅 here

挂钩只允许您发送到挂钩中定义的通道。 如果您想发送到任何频道,您需要创建一个可以 post 到任何频道的机器人用户。要创建机器人用户,您需要执行以下操作:

  1. 添加一个 API 应用完成后创建一个 bot 用户(或创建和删除一个 webhook)
  2. 创建 bot 用户或创建和删除 webhook(将为您创建 bot 用户)
  3. chat:write 并可能 chat:write.public 添加到 API 应用程序的 OAuth 和权限
  4. 获取 Bot 用户 OAuth 访问令牌 它应该开始 xoxb
  5. Post 至 https://slack.com/api/chat.postMessage 例如
curl -X POST \ 
  -H 'Authorization: Bearer xoxb-###-###-***' \
  -H 'Content-type: application/json' \
  --data '{"channel": "#general","text":"Hello, World!"}' \
  https://slack.com/api/chat.postMessage

https://api.slack.com/messaging/sending#publishing 提供了一些细节