Slack Integration Hub
Slack is OpenClaw’s secondary team communication layer — used primarily by the Aurora agent for deal-related notifications, approval workflows, and BetterFiles/BetterAcq team coordination across the TeamSteph and Henry workspaces. Unlike Discord (ops alerting), Slack carries human-facing deal status and approval flows. Read this hub before modifying Aurora’s Slack behavior or adding new Slack-connected scripts.
Quick reference
| Field | Value |
|---|---|
| Vendor | Salesforce / Slack Technologies |
| URL | https://slack.com / https://api.slack.com/docs |
| KB doc | API · WEBHOOKS |
| Auth method | HMAC-SHA256 (X-Slack-Signature header) for inbound webhooks; Bearer bot token for outbound API |
| Auth credential | op://Aurora/slack/bot-token · op://Aurora/slack/app-token · op://Aurora/slack/signing-secret |
| Cred-proxy port | n/a (until B1-B6 ratified) |
| Webhook port | n/a (HTTP mode — no Socket Mode; inbound events delivered to registered URL) |
| Webhook handler | n/a (no dedicated inbound handler currently running in FUNNEL-REGISTRY) |
| Webhook dedup table | n/a |
| Tunnel path | n/a |
| Outbound API base | https://slack.com/api/ |
| Rate limits | Tier 1: 1 req/min; Tier 2: 20 req/min; Tier 3: 50 req/min; Tier 4: 100+ req/min (per method) |
| Rate-limit action | 429 + Retry-After header → exponential backoff; ok: false with error: ratelimited in body |
| Cost | Included in Slack workspace subscription (TeamSteph + Henry) |
| Backup/recovery | Vendor-owned; message history per workspace retention policy |
| Discord alert channel | ops (if Slack integration fails) |
| Drift cadence | On bot token rotation; on workspace permission changes |
| Status | production |
Workspace map
| Workspace | Owner | Primary use |
|---|---|---|
| TeamSteph | teamsteph@betterfiles.com | BetterFiles TC ops, deal approval flows, dispo notifications |
| Henry | henry@reri.co | Personal RERI ops, acquisitions review |
Both workspaces are accessible to the Aurora agent via the op://Aurora/slack/bot-token credential (bot must be installed in each workspace separately).
Token types in use
| Token | Prefix | 1Password reference | Purpose |
|---|---|---|---|
| Bot token | xoxb- | op://Aurora/slack/bot-token | Primary — chat.postMessage, channel ops, file upload |
| App token | xapp- | op://Aurora/slack/app-token | Socket Mode (disabled — see note below) |
| Signing secret | — | op://Aurora/slack/signing-secret | HMAC-SHA256 verification of inbound webhook payloads |
Note on HTTP vs Socket Mode: The Slack KB doc (last verified 2026-03-04) confirms HTTP mode is in use due to zombie process issues with Socket Mode. Socket Mode (
xapp-token) is provisioned but not active. If Socket Mode is re-enabled, theapp-tokenmust be referenced and a port must be registered per G-SERVICE-PRE-START-DOC before starting the daemon.
Components
/home/opsadmin/.openclaw/workspace-betterfiles/scripts/slack-approval.js— BetterFiles deal approval flow via Slack interactive messages/home/opsadmin/.openclaw/workspace-dispo/scripts/slack-button-handler.js— dispo deal button interactions (approve/pass/hold)/home/opsadmin/.openclaw/scripts/slack-health-check.sh— Slack connectivity health check script/home/opsadmin/.openclaw/workspace-dealcmd/scripts/create-slack-channels.js— programmatic channel creation for deal cohorts/home/opsadmin/.openclaw/workspace-betteracq/send_to_slack.py— Python Slack poster used by acquisitions workspace/home/opsadmin/.openclaw/workspace/slack-channel-audit.md— channel inventory audit (last run date unknown)@slack/web-apinpm package — used by JS scripts for Slack API calls
How it’s used
- Trigger: Aurora agent determines a deal event requires human approval or notification → posts to the relevant deal channel; or a cron script posts a summary embed to a reporting channel
- Workflow: Aurora calls
chat.postMessagewithblocks(interactive components) → operator clicks approve/pass → Slack sends interaction payload to registered endpoint →slack-button-handler.jsprocesses the action → updates HubSpot deal stage via hubspot - Agents involved: _summary is the primary Slack actor; BetterFiles agent posts dispo approvals; BetterAcq workspace posts acquisitions status
- Failure mode: if bot token is expired/revoked,
chat.postMessagereturnsok: falsewitherror: invalid_auth; interactive message buttons silently fail if the interaction endpoint is unreachable or unregistered; HMAC verification failure returns 403 and Slack retries 3x - Success criteria:
chat.postMessagereturns{ ok: true, ts: "..." }; button interaction processed within 3s (Slack requires 200 within 3s or shows error to user)
Signature verification (inbound)
All inbound Slack event/interaction payloads MUST be verified with HMAC-SHA256 before processing:
X-Slack-Signature: v0=<HMAC-SHA256 of "v0:<timestamp>:<raw_body>">
X-Slack-Request-Timestamp: <unix_epoch>
Signing secret: op://Aurora/slack/signing-secret
Reject payloads where abs(now - timestamp) > 300 seconds (replay attack protection). Never trust X-Slack-Signature header values without verifying against the signing secret.
Aurora Slack behavior rules
Per feedback_aurora_slack_behavior:
- Aurora does not post to Slack channels unless explicitly triggered by a deal event or Henry instruction
- Never post Henry’s full name in Slack messages (per feedback_never_use_henry_name)
- Slack is for human-readable deal status; structured data goes to Supabase, not Slack threads
- All interactive message payloads must be acknowledged within 3 seconds (use deferred processing pattern)
Related: Webhook/tunnel cluster
| Hub | Relationship |
|---|---|
| cloudflare | Any Slack interaction endpoint must be registered in FUNNEL-REGISTRY with HMAC sig verification before exposure |
| discord | Discord = ops alerting (automated); Slack = human-facing deal comms. Separate concerns, complementary channels |
| hubspot | Slack button interactions trigger HubSpot deal stage updates; Aurora bridges the two |
Related: Credential layer cluster
| Credential | Reference | Notes |
|---|---|---|
Bot token (xoxb-) | op://Aurora/slack/bot-token | Primary; rotate after any session exposure |
App token (xapp-) | op://Aurora/slack/app-token | Provisioned, inactive (Socket Mode off) |
| Signing secret | op://Aurora/slack/signing-secret | Required for HMAC-SHA256 verification of all inbound payloads |
See 1password for rotation procedures and Aurora vault structure.
Cross-links
Agents that touch this
- _summary — primary Slack bot; posts deal notifications, handles interactive approvals
- BetterFiles agent — dispo approval flows via
slack-approval.js - BetterAcq workspace — acquisitions status posts via
send_to_slack.py
Skills that invoke this
- hubspot-deal-ingest — deal creation notifications may trigger Slack posts via Aurora
- dispo-blast — buyer blast results can route notifications to Slack deal channels
Plans that govern this
- openclaw-fragmentation-fix-2026-05-01 — G-NO-PLAINTEXT-CREDS applies to all Slack token references in scripts
- openclaw-self-improvement-layer-2026-05-03 — OSIL Phase 6 deferred voice layer may add Slack notification tier
Feedback rules
- feedback_aurora_slack_behavior — Aurora Slack posting constraints; no unprompted messages
- feedback_never_use_henry_name — never include “Henry” in Slack message content
- feedback_no_plaintext_creds —
xoxb-andxapp-prefixed tokens must never appear in tracked files - feedback_action_gate_violation_repeated — posting to Slack is a side-effect action requiring authorization
KB / source docs
- API — Slack Web API reference (last verified 2026-03-04); token types, method list, rate limit tiers
- WEBHOOKS — Incoming webhooks, HMAC-SHA256 sig verification, Socket Mode vs HTTP mode tradeoffs
System maps
- agent-communication — Aurora → Slack deal notification flow
- data-flow — HubSpot → Aurora → Slack approval loop
Open issues / TODOs
- P1: No Slack interaction endpoint registered in FUNNEL-REGISTRY —
slack-button-handler.jsis running on dispo workspace but its public URL is undocumented; verify endpoint security and add to registry - P1:
slack-channel-audit.md— last run date unknown; re-run to verify active channels match deal pipeline stages - P2: Socket Mode (
xapp-app token) provisioned but disabled due to zombie process issues — if re-enabled, register a new port in CLAUDE.md port map and ARCHITECTURE.md before starting daemon (G-SERVICE-PRE-START-DOC) - P2:
send_to_slack.pyin BetterAcq workspace uses Python; verify it readsSLACK_BOT_TOKENfrom env (not hardcoded) before next credential rotation - P2: Slack workspace channel inventory for TeamSteph workspace is not in ARCHITECTURE.md — document active channels used by deal workflows
Recent activity
- 2026-05-03: Hub created by W1-S6 (Wave 1 hub authoring pass)
- 2026-03-04: KB docs (API.md + WEBHOOKS.md) last verified; HTTP mode confirmed over Socket Mode
- Ongoing: Aurora agent posts deal status to TeamSteph Slack workspace on deal pipeline transitions