Sending message to different channel via slack webhook fails

In general incoming webhooks are fixed to the configured channel. So if you want to send messages to users and/or multiple channels you need to create multiple webhooks or send messages though the API (e.g. chat.PostMessage).

However, there is a another way to create webhooks, that allows you to send messages to every channel with the same webhook by adding a channel override property ('channel') to your message. Its how incoming webhooks used to work in the past and part of legacy custom integrations.

To create such a webhook you need to install an app called "Incoming webhooks" from the Slack App Directory (app is made by the Slack team).

Syntax:

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

Where U12345678 is the Slack ID of the user you want to send a direct message to.

Note that the channel property is optional and the message will be send to the default channel if omitted.

See here fore the full documentation.


Hooks only allow you to send to the channel defined in the hook. If you want to send to any channel you need to

  1. Add an API app Once done create a bot user (or create and delete a webhook )
  2. Create a bot user or create and delete a webhook (which will create the bot user for you)
  3. Add chat:write and possibly chat:write.public to the OAuth & Permissions of the API App.
  4. Grab the Bot User OAuth Access Token it should start xoxb
  5. Post to https://slack.com/api/chat.postMessage eg
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 provides some details