Slack webhook
Collect app installs, notification acknowledgements and Slack Connect activity from your Slack workspace. Slack is already an Intempt destination; this page is the source direction.
Research Preview. This connector is rolling out account by account. Ask your Intempt contact to enable it for your workspace.
Two Slack integrations, two directions. The Slack destination lets Journeys post notifications to a channel or user. This page is the source: the Slack Events API streaming what happened after that post, plus install and Slack Connect activity, into Intempt. Set up the destination first if you haven't; most of what this page collects is a reaction to something the destination sent.
The Slack webhook collects three things: whether anyone acknowledged an Intempt notification, whether your app is installed or removed from a workspace, and activity from external members in Slack Connect channels.
Read this before you plan on it: most of the value is account-level, not person-level. An install, an uninstall or an external workspace joining a shared channel says something about an account. A message in a channel says very little about a customer profile, and Slack withholds the one field that would link it.
Available events
Twelve Intempt events, drawn from a Slack Events API that publishes over 150 types. The small number is the point. The rest are workspace administration and carry no customer signal.
| Slack event | Description | Intempt event |
|---|---|---|
message with subtype bot_message from Intempt's bot | Intempt's destination post landed. Delivery confirmation | messaged_slack_notification |
reaction_added on that post | Someone acknowledged the alert. reaction_removed is deliberately not counted | reacted_slack_notification |
message with thread_ts under that post | Someone replied in the thread | replied_slack_notification |
message with no thread_ts, in a Slack Connect channel, from an external member | A customer opened a support thread in a shared channel | ticket_created |
message with thread_ts, from the external side | Customer replied in the thread | ticket_customer_replied |
message with thread_ts, from your workspace or a bot | Your team replied | ticket_agent_replied |
app_installed | App installed. Fires for organization-wide apps only; a plain workspace install has no event | app_installed |
app_uninstalled, app_uninstalled_team, app_deleted, tokens_revoked | App removed or a user deauthorised it | app_uninstalled |
app_home_opened | Someone opened the app's Home tab | app_opened |
shared_channel_invite_accepted | An external workspace joined a shared channel. The one event that carries the external member's email | identify |
shared_channel_invite_accepted, member_joined_channel | Links an external member to their home workspace | user_account |
shared_channel_invite_accepted | An external workspace is seen for the first time | account_created |
Each event is normalised onto a named stream, so you build segments and journey triggers on the event name rather than on the payload shape.
Slack has no ticket object. ticket_created and the two replies are Intempt's reading of a thread in an externally shared channel, based on whether the author's home workspace differs from yours. A reply is detected by thread_ts, not by subtype, because Slack documents that message_replied is missing its subtype over the Events API.
Identity
The identity key is the Slack user id, and it's workspace-scoped. A user id belongs to exactly one workspace and means nothing in another.
For a member of your own workspace, Intempt calls users.info and reads profile.email (this needs the users:read.email scope), so the profile resolves to a real person.
For an external member in a Slack Connect channel, users.info withholds email, even with the scope. The only place their address ever appears on the wire is shared_channel_invite_accepted, when they or their inviter accepted the shared channel. If Intempt saw that event for this user id, the profile gets an email. If it didn't, the profile stays keyed on the Slack user id alone, and there's no API call that fixes it later.
External workspaces become Intempt accounts, keyed on team_id. shared_channel_invite_accepted is also the one event that carries the workspace's name and domain.
Endpoint
The collector path for Slack events is:
https://<your collector host>/webhooks/events/slackSlack doesn't let you add request headers, so the source token travels in the endpoint URL Intempt gives you. Intempt answers Slack's url_verification challenge automatically when you paste the URL. The envelope event_id is the idempotency key.
Historical load
Slack's historical load runs on the certified Airbyte source source-slack, using the
same bot token you enter above. It loads channels, channel members, messages and users.
The Events API itself is push-only and replays nothing, so live coverage starts at the first delivery after you subscribe. The backfill is what fills in what came before.
Setup
Slack events are configured on the Slack app that also powers the destination. If you already set up the Slack destination, you're adding event subscriptions to that app. Create the source in Intempt first.
Configure Slack
-
Create a Slack source on the Integrations page and copy the endpoint URL.
-
At api.slack.com/apps, open your Intempt Slack app and go to Event Subscriptions. Turn it on and paste the Intempt endpoint as the Request URL. Slack sends a verification challenge; the field shows Verified when Intempt answers it.
-
Under Subscribe to bot events, add
message.channels,message.groups,message.im,message.mpim,reaction_added,app_home_opened,app_uninstalled,tokens_revoked,member_joined_channelandshared_channel_invite_accepted. If the app is organization-wide, addapp_installed,app_uninstalled_teamandapp_deletedtoo. -
Under OAuth & Permissions, add the
users:readandusers:read.emailscopes sousers.infocan resolve your own members to email. -
Reinstall the app to the workspace so the new scopes and subscriptions take effect.
-
Send a test notification from an Intempt journey to a channel the app is in, react to it, and confirm
messaged_slack_notificationandreacted_slack_notificationappear in the Intempt event stream.
SendGrid webhook
Collect email delivery and engagement events from your own SendGrid account. SendGrid is already an Intempt destination; this page is the source direction.
Twilio webhook
Collect SMS, MMS and WhatsApp delivery, replies and opt-outs from your own Twilio account. Twilio is already an Intempt destination; this page is the source direction.
