Slack is in beta.
0.7.11 or later.
Connect your workspace
- Open your identity’s Slack page in the Inkbox Console, or go to Channels → Slack, choose Enable Slack, and select an agent.
- For your first workspace, follow Your Slack apps, select the intended workspace, and generate an app-configuration access token and refresh token under Your App Configuration Tokens. Paste both into the Console. For later apps, the Workspace dropdown defaults to a saved workspace. Select Connect another workspace to enter a new token pair.
- Choose Continue. Inkbox saves any new workspace credentials and starts preparing the agent’s app in one step.
- After Preparing your Slack app… finishes, choose Add to Slack and approve access in Slack. The Console detects the connection and returns you to conversations.
- Add the bot to the channels where it should participate.
Start installation from code
Use an organization admin API key or the identity’s claimed agent key, save both workspace configuration tokens, then prepare the app with that saved workspace UUID. Wait forsetup.status to be ready, then request the installation URL below.
Open the returned URL in a browser; the SDK does not open it for you. Treat it as a secret, use it before expires_at, and finish approval in the same browser.
return_url in Python, returnUrl in the TypeScript options, or --return-url in the CLI. Its path must be exactly /console/slack/complete; see installation options. Omitting this option keeps the default.
Contacts from Slack
When the agent encounters a human participant, Inkbox can match a confirmed Slack email to an existing organization contact or create a shared, unreviewed contact. Workspace and user IDs keep the account linked. Missing or unconfirmed email stays a Slack-only contact; a profile phone number is not automatically added as an active contact phone number. This does not import every channel member. See automatic contacts for copied fields and visibility.Choose a workspace explicitly
Every live read, connection-specific archive read, file operation, and send uses aconnection_id. Identity-level retained search can search all of the identity’s workspaces without selecting one. Get it from the connection list for your identity. Do not treat a Slack conversation ID as sufficient to select a workspace.
Read and reply
Start with conversation discovery, then read messages or thread replies. Pagination is explicit. Request another page only when you need it and honor rate-limit responses. Send a channel message or supply the root message’sthread_ts to reply in a thread:
status: sending, sent, failed, or unknown.
sent means Slack accepted the message. It is not a delivery or read receipt. Poll the action status while it is sending. An unknown result does not automatically settle later. Reconcile with the live conversation before deciding what to do. Do not blindly send again with a new key.
Read conversations in the Console
Open Channels → Slack to start setup for an agent or open its existing Slack conversations. Each identity connects to one workspace in this version. The Console does not expose disable or remove actions; lifecycle controls remain available through the management API. Open your identity’s Slack section to browse Channels and Direct messages, including group DMs. Each row opens one conversation. Open replies from the message timeline to read a thread. Member profile images and your identity’s avatar identify message authors. Workspace setup lives on the Slack pages. Reauthorize when a connection needs updated permissions. Retention, retained-message search, history imports, and connection lifecycle controls remain available through the API, SDKs, and CLI.Decide when your agent should act
In the Console, use Webhooks to manage notification subscriptions across channels. Subscribe an HTTPS endpoint to the events your runtime needs; one identity-owned subscription can combine Slack with other notification types. Choose DMs, group DMs, mentions, channel messages, and thread replies directly in the event list. These selections cover all accessible conversations across the identity’s connected workspaces, without a separate filter configuration. Inkbox delivers matching events. Your runtime decides when to wake the agent, what to respond to, which threads to keep watching, and what memory to retain.slack.thread_reply_received matches any thread reply; it does not remember whether your agent was mentioned earlier in that thread.
Deduplicate events by the webhook envelope’s stable id. One post can qualify as both a channel message and a mention, but overlapping matches do not create separate logical events.
Interaction and session-stop events are notifications for your runtime to handle. Receiving one does not automatically execute an action or cancel agent work.
Capture history without waking on everything
All eligible messages received through the connection are captured automatically, independently of webhook event selection. There is no capture switch or conversation allowlist. Use archive settings to set a retention period and webhook event selection to choose what wakes your agent. Search across the identity’s retained messages with identity-level search. Use an explicit backfill to import accessible conversation or thread history, then inspect coverage. A completed conversation pass is not proof that every thread or every historical message is present.connection_id in Python, connectionId in TypeScript, or --connection-id in the CLI to narrow a search to one workspace. Keep all filters unchanged when following next_cursor in Python or nextCursor in TypeScript and CLI output. Continue even when a page is short or empty if a cursor is present.
Retained history still requires current conversation access. Pausing the identity can retain incoming messages without waking the runtime. Disconnect stops capture through that connection and schedules that connection’s archive for deletion.
Files, pins, and richer actions
- Fetch file metadata and bytes on demand, or upload a file of up to 10 MiB. Uploads require their own idempotency key. File metadata can be retained; file bytes are not archived.
- A pin marks an existing conversation item for easy reference; it is not a file copy. You can read, add, and remove pins.
- Edit or delete the bot’s messages, manage its reactions, and join or leave supported conversations, subject to Slack permissions.
- Inspect capabilities before choosing an optional operation. Granted scopes do not guarantee every native feature is available.
- Native processing status is an explicit runtime action for eligible Slack agent sessions. It is not a universal typing indicator and does not run or cancel work automatically.
- Slack webhook delivery diagnostics contain event coordinates and status, not recoverable message bodies. Historical Slack webhook replay remains unsupported even when retained history is enabled.
Slack Connect and access boundaries
Slack Connect conversations are supported when the selected connection can access them. Use that connection’s authority, not a message author’s home workspace, for follow-up requests. The same shared conversation can be visible through separate installations; do not merge their permissions or archives. An incoming event uses the installation identified by Slack’s event context. Inkbox does not copy it to every connected workspace that might share the conversation. Installation does not grant entire-workspace access. Private channels need an authorized invitation. External users and files may expose fewer fields, and access can change after an event arrives. A file reference does not prove the file’s original workspace. Slack does not use the identity’s email or phone contact allow/block rules. Slack membership, granted permissions, and workspace restrictions control access. Your runtime still decides which events deserve a response.Connection lifecycle
When a workspace requires reauthorization, start installation again for the same identity and workspace. Reauthorization does not grant access to other workspaces or replay missed webhooks. Request a backfill explicitly when you need accessible history. The disconnect API removes Inkbox’s access through a connection. It also stops capture and schedules that connection’s retained history for deletion. Reconnection does not restore the deleted archive. This does not uninstall the app from Slack. A workspace administrator can remove the Slack app separately. The Console does not expose a disconnect action. After reconnecting, capture resumes automatically. Import earlier accessible history explicitly if needed.Reference
- Slack API overview
- Connections and installation
- Retained history and search
- Slack operations
- Slack events
Sender profiles and contacts
Message webhooks include available sender names and profile details under the connection’s Slack permissions. Email requires the profile email permission; existing connections can grant newly requested permissions by completing authorization again. Missing profile details do not stop message delivery. Inkbox links encountered people to organization contacts, including their Slack workspace and user identifiers. The contact card shows those linked accounts. This is not a full workspace directory import. Inkbox contact visibility controls the webhook’s linkedcontact_id and contact-card accounts; matching an email does not grant additional contact access.
