Slack Roadmap
Developer notes for the Slack upstream connector: how Triage’s diagnostic runs as a Slack app, rendered with Block Kit over the Web API. The gateway’s Slack renderer already ships in the reference implementation; the hosted transport is on the roadmap. Facts here are grounded in Slack’s official Web API OpenAPI spec.
The public platform facts the Intake Gateway’s Slack renderer relies on. Method and scope names are taken from Slack’s official Web API OpenAPI specification (see Developer references).
| App & install | A Slack app (definable via an app manifest) with a bot user and granular bot scopes, installed to a workspace via OAuth 2.0; base URL https://slack.com/api. |
|---|---|
| Scopes | chat:write to post and update messages, im:write / conversations:write to open a DM, and users:read to resolve the acting user. |
| Post a question | chat.postMessage — “Sends a message to a channel” — with a Block Kit blocks payload. |
| Lock in place | chat.update — “Updates a message” — replaces the question message with a locked version whose interactive elements are gone, mirroring the Teams card update. |
| Question rendering | Block Kit: section, context and actions blocks; button elements carry the answer values; text is plain_text or mrkdwn. |
| Interactivity | Button clicks deliver a block_actions interaction payload identified by block_id / action_id; the app acknowledges within 3 seconds and may reply via the response_url. |
| Transport | The app receives interactions and events over the Events API (a request URL) or Socket Mode (a WebSocket) — the gateway is transport-agnostic. |
| Identity | The acting user is resolved from user.id on the interaction payload, enriched via users.info where needed. |
| Step | What happens on the platform |
|---|---|
| 1 | The requester opens the Triage app’s DM (or invokes it). Slack delivers events/interactions to the gateway over the Events API or Socket Mode. |
| 2 | The gateway resolves the requester’s identity from the payload (user.id). |
| 3 | The gateway posts the first question with chat.postMessage — a Block Kit message with button options. |
| 4 | On a click, Slack sends a block_actions payload; the gateway acknowledges within 3s and calls chat.update to lock the message, then posts the next question. |
| 5 | On the final answer the gateway calls the Triage decision core; the Intent Record is minted and the completion message (channel, confidence, intent:// chip) is posted. |
| 6 | When composerID publishes downstream, chat.update adds a button linking to the created record. |
Slack’s official developer documentation. Method and scope names on this page are taken from the vendor-published Web API OpenAPI spec (slackapi/slack-api-specs).
| Reference | Vendor documentation |
|---|---|
| Slack API home | https://api.slack.com/ |
| chat.postMessage | https://api.slack.com/methods/chat.postMessage |
| chat.update | https://api.slack.com/methods/chat.update |
| Block Kit | https://api.slack.com/block-kit |
| Handling interactivity | https://api.slack.com/interactivity/handling |
| Events API | https://api.slack.com/apis/events-api |
| Socket Mode | https://api.slack.com/apis/socket-mode |
| OAuth scopes | https://api.slack.com/scopes |
| Web API OpenAPI spec (GitHub) | https://github.com/slackapi/slack-api-specs |
The gateway’s Slack renderer and its contract tests live in upstream/slack_blocks.py in this repository — the same gateway core, a different renderer.