Introduction
Beyond streaming modes, OpenClaw manages several visual aspects of response delivery: typing indicators that show the agent is working, markdown formatting that varies by platform, and response chunking for platforms with message size limits. These details significantly impact how professional and responsive your agent feels to end users.
Key Concepts
- Typing Indicators: Visual cues ("Agent is typing...") that platforms display while the agent processes a request
- Markdown Rendering: How formatting (bold, code blocks, lists) is handled differently across platforms
- Response Chunking: Splitting long responses into multiple messages to respect platform character limits
- Platform-Specific Formatting: Adapting markdown syntax for platforms with different rendering capabilities
- WhatsApp 4K Limit: WhatsApp's 4,000-character maximum message size, requiring automatic chunking for long responses
Real World Context
An agent generates a detailed code review with markdown formatting: headers, code blocks, bold text, and bullet lists. On Discord, this renders beautifully with syntax highlighting. On WhatsApp, markdown is limited — code blocks render as plain text and headers are just bold text. On SMS, there is no markdown at all. OpenClaw adapts the formatting for each platform so the response is always readable.
Deep Dive
Typing Indicators
OpenClaw sends typing indicators to give users immediate feedback that their message was received:
json{ "channels": { "discord": { "typingIndicator": { "enabled": true, "refreshIntervalMs": 5000 } }, "telegram": { "typingIndicator": { "enabled": true, "action": "typing", "refreshIntervalMs": 4000 } }, "whatsapp": { "typingIndicator": { "enabled": true } } } }
This configuration enables typing indicators on three platforms. The refreshIntervalMs controls how often the indicator is refreshed — most platforms require periodic refresh to keep showing the indicator. Discord needs a refresh every 5 seconds, while Telegram uses 4 seconds.
Platforms handle typing indicators differently:
markdownTyping indicator support: - Discord: Shows "Agent is typing..." with periodic refresh - Telegram: Shows "typing..." action, supports multiple action types - WhatsApp: Shows native typing indicator (presence) - Slack: Shows typing indicator in thread or channel - WebChat: Custom implementation via WebSocket events - iMessage: Shows typing bubble animation - IRC: No native typing indicator support - SMS: No typing indicator support
Markdown Formatting
Different platforms support different levels of markdown:
markdownMarkdown support by platform: - Discord: Full markdown (bold, italic, code blocks with syntax highlighting, headers, lists, links) - Telegram: Partial markdown (bold, italic, code, inline code, links — no headers) - WhatsApp: Limited (bold with *, italic with _, strikethrough with ~, monospace with ```) - Slack: Custom format (mrkdwn: bold, italic, code, links, lists) - WebChat: Full HTML-rendered markdown - iMessage: No markdown (plain text only) - SMS: No markdown (plain text only)
OpenClaw automatically adapts markdown syntax for each platform. A response with ## Heading renders as a proper heading on Discord, as bold text on WhatsApp, and as plain text on SMS.
Response Chunking
Platforms with message size limits require automatic chunking:
json{ "channels": { "whatsapp": { "chunking": { "maxChars": 4000, "splitOn": "paragraph", "addContinuationMarker": true } }, "sms": { "chunking": { "maxChars": 160, "splitOn": "sentence", "addContinuationMarker": true } } } }
This sets WhatsApp's chunk limit to 4,000 characters (its actual API limit) with paragraph-based splitting, and SMS to 160 characters with sentence-based splitting. The addContinuationMarker option appends a marker like "(1/3)" to help users understand the message continues.
When a response exceeds the chunk limit, OpenClaw splits it intelligently:
markdownChunking behavior for a 10,000-character response on WhatsApp: 1. Split at paragraph boundaries within the 4,000 char limit 2. Message 1: First ~3,800 chars + " (1/3)" 3. Message 2: Next ~3,800 chars + " (2/3)" 4. Message 3: Remaining chars + " (3/3)" 5. Small delay between messages to maintain order
The chunker respects logical boundaries (paragraphs, sentences) rather than splitting mid-word or mid-sentence.
Common Pitfalls
- Not testing markdown on all target platforms: What looks perfect on Discord may be unreadable on WhatsApp. Always test formatted responses on each platform.
- Ignoring chunk limits: Sending a message that exceeds WhatsApp's 4K limit causes the API to reject it entirely. Always configure chunking for platforms with limits.
- Disabling typing indicators: Without typing indicators, users think the agent is not responding during long processing times. Keep them enabled on all platforms that support them.
Best Practices
- Configure platform-specific chunking: Set appropriate limits for each channel based on the platform's actual API constraints.
- Keep typing indicators enabled: They provide critical user feedback during the 2-10 seconds of model processing time.
- Test with long, formatted responses: Generate a response with headers, code blocks, lists, and 5,000+ characters, then verify it renders correctly on each platform.
Summary
- Typing indicators provide immediate feedback that the agent is processing, with platform-specific refresh intervals
- Markdown rendering varies significantly across platforms, from full support (Discord) to none (SMS)
- Response chunking splits long messages at logical boundaries to respect platform character limits
- WhatsApp has a 4,000-character message limit that requires automatic chunking
- Test formatted responses on all target platforms to ensure readability