Skip to main content
Defined in: core/provider.ts:547 What a transport can do: content kinds, buttons, typing, edits, text limits and so on. Handlers usually ask through ctx.supports(feature); an unsupported operation is an absent provider method with a false flag here.

Properties

contentKinds

Defined in: core/provider.ts:549 Content kinds this provider can actually deliver.

maxTextLength?

Defined in: core/provider.ts:555 Max 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.

maxTextBytes?

Defined in: core/provider.ts:560 Max size of one text message in UTF-8 bytes, for transports that count bytes (Instagram: 1000). Applied together with maxTextLength. Unset = no byte limit.

maxMediaBytes?

Defined in: core/provider.ts:561

maxButtonDataBytes?

Defined in: core/provider.ts:562

buttons

Defined in: core/provider.ts:563

lists

Defined in: core/provider.ts:564

polls

Defined in: core/provider.ts:565

reactions

Defined in: core/provider.ts:572 Can 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).

edit

Defined in: core/provider.ts:573

typing

Defined in: core/provider.ts:574

presence

Defined in: core/provider.ts:575

readReceipts

Defined in: core/provider.ts:576

groups

Defined in: core/provider.ts:577

templates

Defined in: core/provider.ts:578

interactionsRequireAck

Defined in: core/provider.ts:584 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.

pushIngress

Defined in: core/provider.ts:586 Delivery is push-to-us (webhook) rather than a socket the provider owns.

exclusiveSession?

Defined in: core/provider.ts:599 Set 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.

forms?

Defined in: core/provider.ts:606 How 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?

Defined in: core/provider.ts:615 How 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?

Defined in: core/provider.ts:624 Rich-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.