OptionalmaxMax length of one text message in UTF-16 code units (string.length). A longer
text send is split by the core into several messages (BotConfig.splitLongText);
ctx.stream() honours it too. Unset = no known limit.
OptionalmaxMax size of one text message in UTF-8 bytes, for transports that count bytes (Instagram: 1000). Applied together with maxTextLength. Unset = no byte limit.
OptionalmaxOptionalmaxCan SEND reactions (an outbound reaction OutboundContent). This does NOT
describe inbound reaction receipt — providers may emit inbound reaction
events regardless of this flag (e.g. Messenger/Instagram receive reactions
but cannot send them, so they set this false).
Interactions carry a hard ack deadline (Discord): the core then acknowledges each
interaction on its own (see InboundInteraction). false when an ack is
optional (Telegram's spinner) or meaningless; then only ctx.acknowledge() acks.
Delivery is push-to-us (webhook) rather than a socket the provider owns.
OptionalexclusiveSet it when two live replicas of the bot would each receive EVERY event, or fight
for the one connection the account allows: a WhatsApp Web socket (Baileys, a second
connection logs the first out), Telegram long polling (two getUpdates loops get
409), a Discord gateway without sharding (every connection gets every event), an
IMAP IDLE mailbox (both replicas fetch the same unseen mail). NOT for webhook or
REST-gateway transports (Cloud API, Messenger, Instagram, Twilio, Gupshup,
GoHighLevel, Evolution, WPPConnect, TikTok): the platform holds the session and a
webhook fans out to whichever replica is behind the load balancer. With multi-replica
coordination (BotConfig.coordination, providerSession: 'auto') only the elected
replica starts a provider that sets it. Omitted → false.
OptionalformsHow flow().form() renders: 'native' = the provider accepts form
OutboundContent and emits 'form' inbound messages with the submission
(WhatsApp Flows on the Cloud API); 'degraded' (or absent) = the core asks
field by field with plain text messages.
OptionalstreamingHow ctx.stream() renders a reply that is still being generated:
'draft' — native ephemeral draft previews (IProvider.sendDraft) then
one final send (Telegram sendMessageDraft); 'edit' — send once, then
throttled IProvider.editMessage calls (Discord, Telegram groups);
'none' — no live preview: sentence-sized chunks with typing (WhatsApp).
Omitted → treated as 'none'.
OptionaltextRich-text dialect the channel renders in plain text messages, so producers
of Markdown (e.g. @botmesh/ai replies) can convert it: 'whatsapp' —
*bold*, _italic_, ~strike~, `code`; 'markdown' — Markdown is
rendered as is (Discord); 'html' — a small HTML subset; 'plain' — no
formatting at all (markers are shown literally, so strip them). Omitted →
unknown: text is sent untouched.
Content kinds this provider can actually deliver.