๐Ÿ”—Integration & Channels

How to Set Up OpenClaw Multi-Channel Inbox

Advanced2-4 hoursUpdated 2025-01-20

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

Step 1

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: "..."
Step 2

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.

Step 3

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 syncs
Step 4

Set 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 email
Step 5

Configure 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 SLA
Step 6

Test 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.log

Multi-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 โ†’

Frequently Asked Questions