Docs/Concepts/Channels

Channels

A channel is a surface where messages enter and leave. Neofir treats all channels as wire formats for the same agent. The agent does not know which channel it is on except as a string in its system prompt — there is no per-channel prompt branch.

Supported channels

ChannelInboundOutboundOnboardingStatus
Web widget POST /widget/message SSE stream Paste one line of HTML Live
Instagram DM Meta webhook Send API OAuth + page subscribe Live (Dev Mode)
Facebook Messenger Meta webhook Send API OAuth + page subscribe Live (Dev Mode)
WhatsApp Business Twilio webhook Twilio Messages API BSP-managed (1–3 days) Live (BSP)
TikTok Business Messaging — — — Deferred (EEA excluded)
"Dev Mode" vs "App Review approved". Until Meta App Review is approved, Instagram and Messenger can only connect to your own Facebook Page (the developer page). To onboard other tenants self-serve, the app must be in Live Mode — that requires platform-level review by Meta. Track at Status → Meta App Review.

How channels share an agent

Every inbound webhook resolves the org from the channel-side identifier (page ID, phone number, widget API key) and then passes the message through a single channel-agnostic message processor. From this point the path is identical: intent detection → RAG retrieval → personality prompt → LLM → tool dispatch → save → reply.

The channel string is included in the system prompt under Channel: web | instagram | messenger | whatsapp. The personality can be aware of it (the agent may behave slightly differently on IG vs web), but the platform does not branch.

Channel-specific behaviour

The few places channels do differ:

Message quota

Every message counted against the org's plan quota, regardless of channel. The dashboard's Today page shows daily usage; the sidebar plan badge shows monthly usage.