How It Works
Quick Start
Capability Reference
| Capability | Type | Meaning |
|---|---|---|
live_edit | bool | Channel can edit a previously sent message in place |
reactions | bool | Channel supports adding/removing emoji reactions |
typing | bool | Channel supports a typing/working indicator |
text_limit | int | Max characters per message (0 = unlimited) |
edit_rate_limit | float | Min seconds between edits (auto-applied) |
reaction_rate_limit | float | Min seconds between reactions (auto-applied) |
Per-Channel Matrix
Interactive widget capabilities (buttons, selects, native rendering shape) are governed separately by
PresentationLimits — see Bot Presentations and Message Presentation.| Channel | live_edit | reactions | typing | text_limit | edit_rate_limit |
|---|---|---|---|---|---|
| Telegram | Yes | Yes | Yes | 4096 | default |
| Slack | Yes | Yes | No | 40000 | 1.0 |
| Discord | Yes | Yes | Yes | 2000 | default |
| No | No | No | 4096 | — | |
| No | No | No | unlimited | — |
Graceful Degradation
DraftStreamer, StatusReactions, and TypingManager inspect bot.capabilities and silently no-op when a feature is unsupported — WhatsApp still delivers a single final message; Email skips reactions entirely.
Custom Adapters
Best Practices
Enable features once — engines adapt
Enable features once — engines adapt
Turn on
streaming=True and status_reactions=True on every bot; DraftStreamer, StatusReactions, and TypingManager no-op automatically when a channel lacks support.Respect per-channel text limits
Respect per-channel text limits
Discord caps at 2000 characters, Telegram at 4096. Long replies are split or truncated — design agent output accordingly rather than assuming unlimited length.
Declare capabilities on custom adapters
Declare capabilities on custom adapters
Implement the
capabilities property on new platform bots so rate limits (edit_rate_limit, reaction_rate_limit) and feature flags propagate correctly.Test degradation on limited channels
Test degradation on limited channels
Verify WhatsApp and Email bots still deliver a final message when live edits and reactions are unavailable — users should never see a silent failure.
Related
Streaming Replies
Live draft message edits
Status Reactions
Run-state emoji reactions
Typing Indicators
Keepalive typing indicators
Messaging Bots
Full bot setup guide

