Skip to content
ChatfuelSDK

Inbox

Every conversation the bot is having, five platforms in one list: the AI answers until you take it over, the thread renders what each platform actually sent, and closing one means choosing the flow that picks the contact back up.

One inbox, not five tabs

WhatsApp, Instagram, Facebook, TikTok and the website widget arrive in the same list, and a conversation is marked Automated for exactly as long as the bot has it.

Take it from the AI

A conversation the bot is running shows as Automated. Take over moves it to Open and the automation stops answering.

Reply in the thread

Text, a file, an emoji, one of your saved replies — or, on WhatsApp, an approved template filled in from a form.

Assign it

To a teammate, to Fuely AI, or to nobody at all. The roster is the bot’s own team, and the picker is one keystroke away.

Mark it won or lost

Both set the contact’s sales stage — the field the deals board is built on — and leave the conversation exactly as it was.

Hand it back to a flow

The only real close. You pick which flow takes the contact next, and the picker shows only the flows that run on that platform.

See what failed

A send is accepted, not delivered. Failures arrive later on the message itself, each written as the thing to do about it.

Live on one connection

The list and the open thread ride one WebSocket: a conversation lands in place, a reply appears as it is sent, the tick walks from sent to read. Nothing polls, and nothing waits for a refresh.

The 24-hour window, before you type

WhatsApp closes a day after the contact last wrote, and you find out before you type: the composer greys and the template button stays lit. An approved template is the way back in.

A platform limit is an error on the message

Instagram’s window, TikTok’s ten messages per 48 hours, a template Meta paused overnight — none of them fail the send. They come back on the bubble afterwards, as a sentence saying what to do about it.

Built for the keyboard

j and k walk the list, e closes, a assigns, / searches, ⌘K opens the palette. Every one of them stands down while you type, so “let me take a look” does not close the chat.

Automated, open, closed

A conversation belongs to the bot until an operator takes it, and it goes back to the bot when the operator is done. The header says which of the three it is at any moment.

01

Automated

The status that means the bot has it. The AI is answering and the thread is a transcript you can read — in the same list as everything else, so nothing is hidden while the bot works.

02

Take over

One button moves it to Open and the automation stops. From here you type, attach a file, send an approved template, assign it to a teammate or to Fuely AI, and read the contact’s card beside the thread.

03

Hand over

Closing means choosing the flow that takes the contact next — there is no plain close. Mark as won and mark as lost sit in the same menu and do something different: they set the contact’s stage and leave the conversation open.

What you can send, per channel

The five channels take different files and the differences are not alike. A file the channel cannot carry is refused when you pick it, before a byte is uploaded.

NameOn this channelYou can send
WhatsAppThe one channel with templates, and the one that sends a filename with a file.
TextTyped in the composer — while the 24-hour window is open.
ImageUploaded the moment you pick it, then sent as its own message.
VideoWhatsApp cannot send videos — only images, audio files and documents.
AudioA voice note or an audio file, as its own message.
DocumentThe one place a filename travels with the file. Elsewhere it is rejected.
WhatsApp templateAn approved template, filled in from the form the server returns — and the way back into a closed window.
Web widgetA preview conversation is read-only: it can be read, but nothing sends to it.
TextTyped in the composer, or inserted from one of your saved replies.
ImageThe one attachment the widget carries.
VideoWeb widget cannot send videos — only images.
AudioWeb widget cannot send audio files — only images.
DocumentWeb widget cannot send documents — only images.
InstagramThere is a reply window here too, and this build does not gate it — the error arrives on the message.
TextTyped in the composer. Comments and story replies land in the same thread.
ImageSent as its own message; a caption is a second one.
VideoInstagram and Facebook are the two channels that carry video.
AudioA voice note or an audio file, on its own.
DocumentInstagram cannot send documents — only images, videos and audio files.
FacebookVideo and audio go out; documents do not.
TextTyped in the composer, or inserted from one of your saved replies.
ImageUploaded the moment you pick it, then sent as its own message.
VideoUploaded first, then sent on its own like any other file.
AudioA voice note or an audio file, on its own.
DocumentFacebook cannot send documents — only images, videos and audio files.
TikTokTen messages every 48 hours before the contact writes back.
TextTyped in the composer. The cap is reported on the message, not on the box.
ImageThe one attachment TikTok carries, in either direction.
VideoTikTok cannot send videos — only images.
AudioTikTok cannot send audio files — only images.
DocumentTikTok cannot send documents — only images.

What arrives in the thread

A message is one interface with 73 concrete types across the five platforms, plus Chatfuel’s own system lines. These are the ones that are not simply text.

WhatsAppButtons, list rows and template buttons render under the bubble, never inside it.
Tapped a buttonThe contact chose a reply button instead of writing.
Tapped a template buttonA quick reply on a template the bot had sent earlier.
Chose a list optionThe row they picked out of a list message, with its own description.
Media WhatsApp withheldThe platform said media exists and never delivered it. There is nothing else to read.
Web widgetEvery button the contact tapped comes back as its own message.
Text with buttonsWhat the contact was offered, as a transcript. A reply button here is not pressable.
Tapped a buttonA continue-flow button in the website chat.
Tapped a link buttonThe link button they tapped, with its URL.
Tapped the call buttonThe call button they tapped, with the number.
InstagramPublic surfaces land in the same thread as the direct messages.
Comment on a postWith the post it was left on.
Comment on a reelWith the reel it was left on.
Comment on an adWith the ad it was left on.
Reply to a storyThe story is shown beside what they wrote.
Public reply to a commentWhat the bot or an operator posted publicly, tied to no post.
FacebookA file arrives with no filename — the schema does not carry one for it.
Comment on a postFrom your page, with the comment id.
FileAn inbound file. No filename exists on it, so there is nothing to label it with.
Public reply to a commentThe reply posted under the comment itself.
Unsupported Facebook messageSomething the schema does not model. The thread says so rather than printing nothing.
TikTokText and photos only — no video, no audio, no documents in either direction.
Comment on a postWith a link to the video it was left on.
PhotoThe one attachment TikTok carries.
Public reply to a commentThe reply posted under the comment itself.
SystemNot bubbles: centred lines about the conversation itself.
Opened by an operatorAn operator opened the live chat.
Handed over by an automationThe automation handed this chat to an operator.
Opened by a bookingA booking opened the live chat.
WhatsApp Business appOpened from the WhatsApp Business app.
Instagram appOpened from the Instagram app.
Facebook appOpened from the Facebook app.
TikTok appOpened from the TikTok app.
Closed automaticallyThe live chat closed automatically.
Conversation summaryThe summary the server attached to the conversation.
Conversion eventA conversion event was reported to Meta.

What it holds

The page sizes the client asks for, the caps it enforces, and the two clocks it cannot argue with.

Conversations per page50
Messages per page50
WhatsApp templates per page50
Attribute catalogue per page100
Files waiting to be sent10
Saved replies50
Saved views50
A saved reply’s name, or a view’s60 characters
A saved reply’s text2,000 characters
WhatsApp reply window24 hours
TikTok before the contact replies10 messages per 48 hours

FAQs

By handing it back to a flow. There is no plain close on this API — closing and choosing which flow picks the contact up are one action, so the menu asks which one. Mark as won and mark as lost live in the same menu but do something else: they set the contact’s sales stage and leave the conversation exactly as it was.

Flow Builder

One command, and the inbox is in your app

npx @chatfuel/wizard