What you get
- Agents that answer @mentions and direct messages, with follow-ups kept in the thread
- Trigger keywords that route a message to a specific agent or to a multi-agent group discussion
- Group discussions streamed into a thread as they happen
- Approval cards in Slack for paused turns, tool calls and group phases, with an approver allow-list
- Several Slack workspaces against one EDDI
How it works in EDDI
- Create a Slack app and add the bot token scopes listed in the docs (
chat:write,app_mentions:read, thehistoryandim:*scopes). - Store the bot token and the signing secret in the EDDI Secrets Vault, then reference them as
${vault:...}. - Create a channel integration that maps the Slack channel to a default agent and, optionally, to groups behind trigger keywords such as
panel:. - Set the Request URL to
https://<your-eddi-host>/integrations/slack/eventsand subscribe toapp_mention,message.imandmessage.channels. Do this last: Slack verifies the URL immediately. - For approvals, set the Interactivity Request URL to
/integrations/slack/interactiveand list the approvers inhitlApproverUserIds.
Configuration
Taken from the EDDI documentation. Placeholders such as your-agent-id are yours to replace.
curl -X PUT http://localhost:7070/secretstore/secrets/default/slack-bot-token \
-H "Content-Type: application/json" \
-d '{"value":"xoxb-your-token-here","description":"Slack bot token"}'
curl -X PUT http://localhost:7070/secretstore/secrets/default/slack-signing-secret \
-H "Content-Type: application/json" \
-d '{"value":"your-signing-secret","description":"Slack signing secret"}'curl -X POST http://localhost:7070/channelstore/channels \
-H "Content-Type: application/json" \
-d '{
"name": "Main Slack Channel",
"channelType": "slack",
"platformConfig": {
"channelId": "C0123ABCDEF",
"botToken": "${vault:slack-bot-token}",
"signingSecret": "${vault:slack-signing-secret}",
"hitlApprovalChannel": "C0123ABCDEF",
"hitlApproverUserIds": "U0123ABCDE,U0456FGHIJ"
},
"defaultTargetName": "default",
"targets": [
{ "name": "default", "type": "AGENT", "targetId": "your-agent-id", "triggers": [] },
{ "name": "panel", "type": "GROUP", "targetId": "your-group-id", "triggers": ["panel", "discuss"] }
]
}'Governance
- Approval cards carry Approve and Reject buttons. Only Slack users listed in
hitlApproverUserIdscan decide. Without that list no buttons are rendered and interactive decisions are rejected (fail-closed). - A tool-call card shows the tool name and its redacted, truncated arguments, so the approver sees what they are approving. In version 1 the buttons approve or reject the whole batch.
- Each decision is attributed to
slack:<userId>and recorded in the audit ledger. - Incoming events are verified with the signing secret (HMAC-SHA256) and replay protection, and the secrets themselves stay in the vault.
Good to know
- Slack is the only third-party chat platform EDDI ships a channel for. See the note on the catalog page for what is not included.
- An optional observe mode lets a target see plain channel traffic, behind a trigger, a cooldown and daily response and cost caps. Those caps are per EDDI node.
Need it built and run for you?
EDDI Solutions builds and maintains connectors, runs EDDI as a managed or co-operated instance, and supports you in your own cloud or on-premises.
Talk to EDDI Solutions ↗Related integrations
Configuration and behavior on this page follow the EDDI documentation, checked on 2026-10-14. Field names and defaults can change between releases, so confirm them in the docs for your version.