Skip to content

Slack and Microsoft Teams chat channels

For admins

Keystone can accept message events from Slack and Microsoft Teams and turn them into helpdesk requests. The flow is the same on both platforms: a chat user posts a message in a configured channel, the platform fires a webhook to Keystone, and Keystone normalises the payload before handing it to the ticket pipeline.

You need a Slack app with the Events API enabled and the message.channels event subscription. Two pieces of config wire it to Keystone:

  1. Request URL — point Slack at https://<your-keystone>/inbound/chat/slack. Slack will send a url_verification challenge first; Keystone responds automatically.
  2. Signing secret — copy the app’s signing secret into the SLACK_SIGNING_SECRET environment variable. Every event Keystone receives is HMAC-verified against this secret using Slack’s v0:<timestamp>:<rawBody> scheme. Events older than 5 minutes are rejected as replays.

Without the signing secret set, the webhook refuses every request — there is no opt-out.

Teams uses Bot Framework webhooks rather than the Events API. The current Teams adapter accepts events but rejects them in production until JWT verification against the Bot Framework JWKS is wired in. Use Teams in dev/test only for now, or stick with Slack until the Teams JWT validation lands.

The adapter pulls these fields from the payload:

  • The author’s external ID (Slack user ID or Teams user ID).
  • The channel ID and, where present, a thread ID so subsequent replies can append to the same ticket.
  • The message body (plain text — formatting is dropped).

The inbound chat controller currently accepts and normalises the payload, then returns 202 Accepted. It does not yet create a ticket — that dispatch step is the next piece of work. Until it lands, configure the integration so it’s ready, but expect chat messages to land in logs rather than in the ticket queue.

  • Bot replies, message edits, and threaded subtypes are filtered out — only top-level messages from real users are normalised.
  • The adapter doesn’t currently handle Slack file uploads or Teams attachment cards. Files referenced in chat won’t make it into the ticket.
  • Per-channel routing (e.g. “this channel maps to the IT department”) isn’t yet a configurable setting — every accepted message will go to the workspace’s default queue once the dispatch step is wired.