How to Set Up OpenClaw Multi-Channel Inbox
A multi-channel inbox lets users start a conversation on Slack and continue it on WhatsApp without losing context. This advanced guide covers configuring multiple channel adapters, message routing, user identity mapping, context preservation, and priority rules across platforms.
Why This Is Hard to Do Yourself
These are the common pitfalls that trip people up.
Cross-channel identity mapping
Users have different IDs on Slack, WhatsApp, Discord, etc. Mapping them to a single identity requires careful configuration.
Context preservation
Conversation history from Slack needs to be accessible when the user switches to WhatsApp. Shared context storage is critical.
Message routing logic
Routing messages to the right channel based on user preference, availability, and priority requires complex rules
Adapter synchronization
Multiple channel adapters running concurrently need shared state, rate limiting, and error handling coordination
Step-by-Step Guide
Configure multiple channel adapters
# Enable all channels you want in the unified inbox:
# config/channels/slack.yaml:
slack:
enabled: true
bot_token: "xoxb-..."
# config/channels/whatsapp.yaml:
whatsapp:
enabled: true
phone_number_id: "..."
# config/channels/discord.yaml:
discord:
enabled: true
bot_token: "..."Set up message routing
# config/routing.yaml:
routing:
enabled: true
default_channel: slack # Fallback if user preference unknown
rules:
- name: "Priority messages"
condition: "message.priority == 'high'"
channels: ["slack", "sms"] # Send to multiple channels
- name: "After-hours"
condition: "time.hour >= 18 or time.hour < 9"
channels: ["whatsapp", "telegram"] # Use async channels
- name: "User preference"
condition: "user.preferred_channel"
channels: ["{{ user.preferred_channel }}"]Warning: Routing rules are evaluated in order. Place specific rules before general ones to avoid unexpected behavior.
Configure context preservation
# config/context.yaml:
context:
storage: redis # or "postgres", "mongodb"
redis_url: "redis://localhost:6379"
retention_days: 90
cross_channel: true # Enable cross-channel history access
sync_interval: 5 # Seconds between context syncsSet up user identity mapping
# config/identity.yaml:
identity:
mapping:
enabled: true
auto_link: true # Auto-link when email matches across platforms
link_prompt: true # Ask user to confirm identity linking
providers:
- name: slack
identifier: user.email
- name: whatsapp
identifier: user.phone
- name: discord
identifier: user.id # Discord doesn't expose emailConfigure priority rules
# config/priority.yaml:
priority:
enabled: true
rules:
- name: "Executive escalation"
condition: "user.role == 'executive'"
priority: high
channels: ["slack", "sms"] # Multi-channel for critical users
- name: "Support ticket"
condition: "message.category == 'support'"
priority: medium
sla_minutes: 30 # Response time SLATest end-to-end
# Test flow:
# 1. Message from Slack: "What's my account balance?"
# 2. Switch to WhatsApp
# 3. Message: "And my transaction history?"
# 4. OpenClaw should have full context from Slack conversation
#
# Check logs:
tail -f ~/.openclaw/logs/routing.log
tail -f ~/.openclaw/logs/context.logMulti-Channel Is an Architecture Problem
User identity mapping, context preservation, routing rules, adapter coordination โ our integration experts design and implement unified inbox architectures. Get an omnichannel AI system that works seamlessly across platforms.
Get matched with a specialist who can help.
Sign Up for Expert Help โ