Architecture Decisions: Adapter-First Channels
Last updated 2026-02-12
Decision
Rooaak is adapter-first:
- Rooaak exposes a single public messaging contract (
/v1/agents/:id/messages) and a webhook/event system. - Providers (Slack, WhatsApp, custom UIs) are integrated by external adapters that you deploy and operate.
Why
- Keeps Rooaak public surface small and stable.
- Lets customers choose hosting, routing, and UI patterns.
- Avoids Rooaak needing to model every provider feature as a first-class API.
Ownership boundaries
Rooaak-owned:
- agent orchestration + runtime lifecycle
- message lifecycle and persistence
- webhook signing + retry queue (and cron processing in hosted deployments)
- SDK primitives and typed metadata conventions
Customer-owned:
- provider app configuration (Slack/Meta console work)
- inbound provider verification (Slack signature, Meta signature)
- outbound provider delivery (Slack API, Graph API) and provider-specific retry/limits
- UX and conversation/session mapping
Compatibility contract
All adapters map into the same flow:
- Inbound:
POST /v1/agents/:id/messages - Completion:
message.respondedwebhook +GET /v1/messages/:id - Metadata:
metadata.channelandmetadata.correlationIdfor correlation.
Deferred surface
Rooaak does not expose a public OpenClaw-native “channel management” API at this time.