ctx.supports(feature); an unsupported operation is an absent
provider method with a false flag here.
Properties
contentKinds
maxTextLength?
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.
maxTextBytes?
maxMediaBytes?
maxButtonDataBytes?
buttons
lists
polls
reactions
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).
edit
typing
presence
readReceipts
groups
templates
interactionsRequireAck
false when an ack is
optional (Telegram’s spinner) or meaningless; then only ctx.acknowledge() acks.
pushIngress
exclusiveSession?
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.
forms?
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.
streaming?
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'.
textFormat?
@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.