#Fluid conversations
A fluid conversation is one where the AI agent answers what the person meant, not each message as it lands. People write in fragments, send voice notes and add a photo afterwards, and an agent that replies to every fragment answers questions nobody has finished asking. Vatio groups messages that arrive together, waits for a quiet moment and for media still being processed, keeps everything in the order it was sent, and paces the reply for each channel. You describe the agent in one vatio.yml; the runtime does the rest on WhatsApp, Instagram and the web.
#How people actually write
Nobody writes to a business in one tidy paragraph. Someone says “hi”, explains the problem across two messages, sends a voice note because typing is slow, then adds a photo. To them it is one turn in a conversation. To a system that treats every inbound message as a request, it is four requests, and each one gets an answer.
#Why answering every fragment fails
Here is the same customer twice. First, with an agent that answers each message as it arrives:
Customer: hi
Agent: Hi! How can I help you today?
Customer: the lamp I ordered arrived today
Agent: Great to hear it arrived! Is there anything else I can help you with?
Customer: the base is cracked
Agent: I’m sorry about that. Can you send me your order number so I can start a refund?
Customer: (photo of the cracked base)
Customer: it’s 4471. I’d rather have a replacement than a refund
Three replies, and each one answered a question that did not exist yet. The agent celebrated a delivery that was really a complaint, asked for an order number the customer was about to give, and offered a refund to someone who wanted a replacement. Every one of those replies was also a model call, sometimes a tool call, spent on half a question. On WhatsApp it feels like being interrupted three times while explaining.
The same customer, on an agent running on Vatio:
Customer: hi
Customer: the lamp I ordered arrived today
Customer: the base is cracked
Customer: (photo of the cracked base)
Customer: it’s 4471. I’d rather have a replacement than a refund
Agent: Sorry about that, I can see the crack in the photo.
Agent: Order 4471 can be replaced. I’ve requested it: the new lamp ships with a prepaid label to return the broken one.
The messages arrived close together, so Vatio treated them as one turn. It waited for the photo to finish downloading, the agent made one call to the store’s tool that checks an order and requests a replacement, and the reply went out as two short messages with typing indicators in between.
#What happens between a message and the reply
#Fragments are grouped, then Vatio waits for a quiet moment
Vatio groups messages that arrive together and waits for a quiet period before generating a response. The agent gets the whole question, and the customer gets room to explain. The wait is a quiet period, not mind-reading: someone who stops long enough gets an answer to what they had sent, and whatever they add afterwards is the next turn.
That wait is for WhatsApp and Instagram, where people write in bursts and replies go out as paced messages. On the web, in an iOS app and in the CLI the agent starts answering right away, and a message that arrives while it is answering gets an answer too.
#Media still in flight is waited for
A voice note has to be downloaded and transcribed; a photo or a PDF has to be downloaded before the model can read it. Vatio waits for attachments that are still being downloaded or processed instead of answering the text that came alongside them. Supported images, audio and PDFs up to 8 MB per file reach the agent. Anything unsupported or larger stays available to supervisors in the inbox, and the agent is told it cannot read it.
#Messages stay in the order they were sent
A voice note can take longer to process than the text sent after it. Vatio keeps each message’s send time, shows the conversation in the order it happened, and checks for messages still in transit before answering. The agent does not read “it’s 4471” before the voice note that explained what 4471 is about.
#Replies are paced for the channel
| Channel | How a reply arrives |
|---|---|
| WhatsApp and Instagram | Short plain-text messages, with pauses and typing indicators |
| Web widget | One complete reply in Markdown, rendered progressively |
| CLI | All at once, as soon as it is ready |
These are delivery styles, not separate agents. You write one set of instructions and Vatio handles the mechanics of each channel. On every channel the reply is text: the agent reads media but does not generate or send files.
#A person can step in, in the same thread
When a supervisor replies from the inbox, or from the WhatsApp Business app on your own number, Vatio pauses the agent on that conversation and keeps the whole history in the same thread, so nobody starts over. The supervisor hands it back from the inbox, or the takeover expires 8 hours after the customer’s last message. The agent can also ask for a person itself when you declare handoff; Vatio does not notify anyone yet, so the conversation waits in the inbox.
#What Vatio cannot know
WhatsApp does not tell anyone that a person has started recording a voice note: the Cloud API exposes no recording-start signal. Vatio learns about the audio when the sent message arrives, and from that moment it can wait while the file downloads and is transcribed. Anticipating a message that has not been sent yet can only be inferred from context and observed timing.
#Per-person waiting is in development
Some people send everything in one message; others need four voice notes. Ideally the wait would learn each person’s rhythm. That is not available today. The wait currently depends on the channel’s reply style and on whether media is still being processed.
Vatio is adding measurements of message intervals, attachment types and response timing. They are the foundation for calibrating the wait and, later, adapting it to each person. Until that ships, nothing in your agent should rely on it.
#Conversation fulfillment
An online store decides what to sell and what to promise its customers. A fulfillment provider picks, packs and ships each order. The buyer’s experience depends on both, and neither does the other’s job.
An agent works the same way. You decide what it can do, which systems it queries and which actions it takes. Vatio handles the operations around those decisions: receiving messages, gathering context, handling media, dispatching replies and coordinating human support. That is what we call conversation fulfillment: caring for the whole journey from what a customer sends to the reply they receive.
#What you build and what Vatio operates
| You build | Vatio operates |
|---|---|
| Instructions and personality | Receiving messages on WhatsApp, Instagram and the web |
| Tools that call your API | Grouping fragments and waiting for a quiet moment |
| Knowledge entries | Waiting for voice notes, images and PDFs |
handoff conditions | Send order, pacing and typing indicators |
| Which tools need a signed-in visitor | Verifying visitor tokens, safeguards, the inbox and takeover |
| Preview and live deployments, and rollback |
You never write a buffer, a webhook handler or a typing indicator. You still own whether the answer is right: quality depends on your instructions, tools and knowledge, which is what the improve loop is for.
#Write for how the conversation arrives
A few choices in vatio.yml work with the runtime rather than against it:
- Ask for brevity. A personality such as “brief, short messages” suits paced delivery on WhatsApp and Instagram; a wall of text arrives as many messages.
- Answer the whole turn. Because fragments arrive together, tell the agent to address everything the customer raised, not only their last message.
- Do not ask for what was already sent. “Check the conversation and any photo or voice note before asking for an order number” saves a round trip.
- Never promise a file. The agent reads media but replies only in text, so the instructions should never offer a PDF, an image or a voice reply.
#Test it the way people write
vatio chat answers as soon as a reply is ready, so it tests what the agent says, not how it is delivered. To see grouping and pacing, use a real channel: add your phone as a test number on the shared WhatsApp preview number, with no Meta account needed, as the WhatsApp guide shows. Then send what customers send: “hi”, two half-sentences, a voice note, a photo. Open the conversation in the inbox, or read it with vatio chat show CHAT_ID to see every tool call the agent made.
Frequently asked questions
Why does my WhatsApp bot answer every message separately?
Because it treats each inbound message as a complete request. People write in fragments, so a bot that replies to each one answers half-questions. Vatio groups messages that arrive together and waits for a quiet moment before generating one reply.
Does Vatio know when someone is recording a voice note on WhatsApp?
No. The WhatsApp Cloud API does not expose a signal for when someone starts recording. Vatio learns about the audio when the sent message arrives, and can then wait while it is downloaded and transcribed. Anticipating a message that has not been sent can only be inferred from context and timing.
Does the wait adapt to how each person writes?
Not yet. Per-person adaptive waiting is in development and not available. Today the wait depends on the channel's reply style and on whether media is still being processed; Vatio is adding measurements of message intervals, attachment types and response timing as the foundation for adapting it later.
Do I have to program message buffering and delivery myself?
No. Grouping messages, waiting for media, keeping send order and pacing replies are part of Vatio's runtime. You describe the agent, its tools and its knowledge in vatio.yml.
What happens to the conversation when a person takes over?
Vatio pauses the agent on that conversation and keeps the whole history in the same thread, so the customer never starts over. A supervisor takes over by replying from the inbox or from the WhatsApp Business app, and hands it back from the inbox when done.
Updated: