Intempt Docs
GuidesCustomer Data PlatformWebhooks

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 eventDescriptionIntempt event
message with subtype bot_message from Intempt's botIntempt's destination post landed. Delivery confirmationmessaged_slack_notification
reaction_added on that postSomeone acknowledged the alert. reaction_removed is deliberately not countedreacted_slack_notification
message with thread_ts under that postSomeone replied in the threadreplied_slack_notification
message with no thread_ts, in a Slack Connect channel, from an external memberA customer opened a support thread in a shared channelticket_created
message with thread_ts, from the external sideCustomer replied in the threadticket_customer_replied
message with thread_ts, from your workspace or a botYour team repliedticket_agent_replied
app_installedApp installed. Fires for organization-wide apps only; a plain workspace install has no eventapp_installed
app_uninstalled, app_uninstalled_team, app_deleted, tokens_revokedApp removed or a user deauthorised itapp_uninstalled
app_home_openedSomeone opened the app's Home tabapp_opened
shared_channel_invite_acceptedAn external workspace joined a shared channel. The one event that carries the external member's emailidentify
shared_channel_invite_accepted, member_joined_channelLinks an external member to their home workspaceuser_account
shared_channel_invite_acceptedAn external workspace is seen for the first timeaccount_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/slack

Slack 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

  1. Create a Slack source on the Integrations page and copy the endpoint URL.

  2. 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.

  3. 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_channel and shared_channel_invite_accepted. If the app is organization-wide, add app_installed, app_uninstalled_team and app_deleted too.

  4. Under OAuth & Permissions, add the users:read and users:read.email scopes so users.info can resolve your own members to email.

  5. Reinstall the app to the workspace so the new scopes and subscriptions take effect.

  6. Send a test notification from an Intempt journey to a channel the app is in, react to it, and confirm messaged_slack_notification and reacted_slack_notification appear in the Intempt event stream.

On this page