WhatsApp virtual attendant with AI
The virtual attendant is a skill you install in your AI agent (Claude Code, Claude Desktop, Codex or Antigravity). It uses the Turbo Notify MCP server to read the messages customers send to your business number and to reply, using what you taught it about the business.
This guide is for owners of a business that sells products or services and wants to answer questions and move sales along on WhatsApp without writing code.
Who does what
| Role | Who | What they do |
|---|---|---|
| Virtual attendant | The AI | Answers customers, remembers what each one has said, and calls a person when it needs one. |
| Attendant | A team member who holds the phone of the connected number (or its WhatsApp Web) | Follows the conversations, approves or corrects answers, and takes over a conversation at any time. Needs no registration. |
| Administrator | A registered number | Teaches the business, pauses, erases a customer’s data and changes the mode. Writes to the business number from another phone. |
| Configurator | Whoever installed the skill in the agent | Does the first setup and decides who is an administrator. |
| Contact | The customer | Only chats. Can never see another customer’s data or give orders to the virtual attendant. |
In a one-person business, the same person is often the configurator, the administrator and the attendant.
Register as administrator a number that is not the connected number. The phone of the connected number belongs to the attendant, and keeping the two apart stops someone who only answers customers from also erasing data or changing rules. If you register the connected number itself, the skill warns you and the final decision is yours.
Before you start
- The main number connected, as in the Quickstart, or an extra number.
- The MCP server connected to your agent: signed in with your account (the plugin declares it) for the assisted mode, or with the key from the AI agent (MCP) template for the runner. See MCP server: Connection.
- Python 3.9 or newer on the computer where the agent runs. Without it the skill works in manual mode, with a person approving everything, and says so before it starts.
- Every answer from the virtual attendant uses the number’s message quota, like any send. See Quota and usage.
1. Install the skill
Pick your agent:
Claude Code
claude plugin marketplace add turbo-notify/agent-skills#v1claude plugin install turbo-notify@turbo-notifyClaude Desktop and Cowork: under Customize, Plugins tab, click Add, Add marketplace, Add from a repository and enter turbo-notify/agent-skills. Then, under Discover, pick turbo-notify and click Add. In Cowork, use a folder you chose.
Codex
codex plugin marketplace add turbo-notify/agent-skills --ref v1codex plugin add turbo-notify@turbo-notifyAntigravity
agy plugin install https://github.com/turbo-notify/agent-skillsThe code is open to read at turbo-notify/agent-skills (opens in a new tab) .
2. Set it up by chatting
Ask the agent: “set up the Turbo Notify virtual attendant”. It asks one thing at a time:
- The business name as customers know it, and the language of the people who run it (Portuguese or English).
- Whether it is just you or there are administrators (numbers with area code).
- Which of your numbers answers customers (the main number or an extra).
- What to teach about the business: the company, what it sells, prices, frequent questions, policies, tone of voice and when to call a person. For each topic it asks whether customers may read it or it is for the team only.
- Whether you have other MCP servers (catalog, agenda, CRM) and how they may be used. See Connect your other MCP servers safely.
Setup ends with a test: write “hi” to the number from a phone that is not a registered administrator’s (a friend, a second SIM) and watch the draft answer arrive. An administrator is never treated as a customer: what they write is a command.
3. Start in assisted mode
The virtual attendant starts in assisted mode: it prepares the answer and a person approves it before it goes out. Stay in it for at least the first week. The draft arrives in the number’s chat with itself (the “You” chat in WhatsApp) and goes to the administrators.
/send 1sends draft 1./send 1 your textsends your text instead./mode autostarts answering without approval. Only an administrator changes the mode, and automatic mode is meant for Claude Code or Codex with the runner (see what each agent can do).
How customers are served
- Direct chats only. Group messages are ignored.
- In the customer’s language. They write in Portuguese, English or another language and get the answer in the same one.
- It answers like a chat. The new message gets a normal answer, with no quote. The virtual attendant quotes an earlier message only when the answer depends on it.
- Each customer has their own memory. The skill keeps the conversation, a summary of earlier topics and a record of what the customer told it (name, interest, preferences). Long conversations are summarized on their own.
- Each customer sees only their own data. Another customer’s number, name or conversation never goes into an answer, and neither does text the team marked as internal.
- It calls a person when it has to. Instead of inventing a price or a deadline, it tells the customer someone from the team will continue and notifies the administrators. The reasons are in When the virtual attendant calls a person.
- A thank you gets no answer. A “thanks”, an “ok” or a 👍 at the end of the conversation is left alone and calls nobody: the customer’s next message is served as usual. If the message carries a question or anything beyond the thanks (“ok, and what about shipping?”), it is answered like any other.
- It stops when asked. A customer who says they want no more messages gets none until an administrator decides otherwise.
- It never pretends to be a person. If asked, the virtual attendant says it is a virtual attendant.
- It answers only people who wrote first.
When the virtual attendant calls a person
The customer gets a message saying someone from the team will continue, the administrators get a notice with the reason, and the virtual attendant stops answering that customer until someone uses /resume. This happens when:
- the answer is not in what you taught and the question is about a price, stock, a deadline, a promise, a commitment or a policy;
- the customer asks for a person or is upset;
- the request has nothing to do with your business;
- a payment problem, an exchange or refund request, a complaint or a legal matter comes up, or the customer asks the virtual attendant to promise or confirm something in writing (it may repeat the rule you wrote, but a person decides the case);
- two answers in a row did not help the customer;
- all that arrives is an image, an audio, a video or a file with no readable text (before that, it may ask for the question in writing);
- the skill cannot read the AI model’s answer, even after asking again once; the administrators get the reason.
A simple question about a rule you wrote, such as the exchange window or the accepted payments, is answered right away.
Taking over and handing back a conversation
When an attendant replies from the phone of the number or from WhatsApp Web, the virtual attendant understands that a person took over and stops answering that customer. To hand it back, the attendant writes /resume in the number’s chat with itself. An administrator can hand it back too. To have a conversation come back by itself when nobody writes for a while, set auto_resume_after_minutes (minimum 5, for example 30) in the memory-policy.json file of the data folder: the time counts from the last message a person wrote, it applies only to conversations a person took over (not to an administrator’s pause or to a customer who asked to stop), and the administrators get a notice when it happens.
Commands on WhatsApp
Commands start with /, in Portuguese or English. Administrators write to the business number from another phone. Attendants write in the number’s chat with itself. /help shows what each person can do.
Everyone (administrators and attendants)
| Command | What it does |
|---|---|
/help | Lists what you can do. |
/status | Last check for messages, queue, who is waiting for a person, mode and version. |
/queue | Who is waiting for a person, and the drafts. |
/send n [text] | Sends draft n, or your text instead. |
/digest | How many customers are in each state. |
/resume [n or number] | Hands a conversation back to the virtual attendant. |
/takeover n | A person takes over the conversation. |
/contact x | A customer’s record. |
/thread number [n] | A customer’s latest messages. |
/note number text | Saves a note about a customer. |
Administrators only
| Command | What it does |
|---|---|
/contacts [filter] | The customer list. |
/admins, /admin add, /admin remove | Who administers. |
/teach, /done, /public, /internal | Teach something to the virtual attendant. |
/kb | What the virtual attendant knows. |
/sources | Other systems it may consult. |
/pause | Pauses every customer, or one. |
/forget number | Erases a customer’s data. |
/mode assisted or /mode auto | Sets whether answers wait for approval. |
/lang pt or /lang en | Language of the commands. |
/policy | The memory numbers (for example, how many days to keep). |
A command that cannot be undone (erasing a customer’s data, removing an administrator) answers with a four-digit code. Send /confirm with the code within ten minutes.
Teach the business on WhatsApp
An administrator sends /teach prices, writes whatever they want across several messages and ends with /done. The text is stored word for word and starts as internal. Send /public so customers may read it, or /internal to keep it with the team. For one customer, /note number text saves a remark that applies only to them.
For every message, the virtual attendant always reads the files about the company, the tone of voice and when to call a person. Of the other public files it adds up to three: the ones that best match the words of the customer’s message and of the conversation so far (“pay” finds “payment”, “refund” finds “return”). Write one subject per file and use the words a customer would use in the subject’s name and at the start of the text.
Connect your other MCP servers safely
If you already have other MCP servers, such as a product catalog, an agenda or a CRM, the virtual attendant can use them to answer better (price, opening hours, the status of an order). With the runner it works from a dated copy of what the other system held when you set it up, and you ask it to refresh that copy from time to time. Current price and stock are looked up only in an open session. During setup the skill asks what each one is and you pick a class:
| Class | Who may receive the information |
|---|---|
| Public | Customers. Only for read-only sources with no personal data about customers (a catalog, opening hours). |
| Internal | The team (administrators and attendants). |
| Administrators only | Administrators (for example, finance). |
| Off | Nobody. This is what applies to a server nobody classified. |
Rules the skill follows:
- Read only. Other servers are for looking things up. Everything that goes to a customer leaves through Turbo Notify.
- Data about one customer (their orders, for example) goes only into drafts that a person approves, never into an automatic answer.
- Every answer is checked before it leaves: if it holds another customer’s number or name, internal text, an access key or personal data the customer did not give, the answer is blocked and becomes a request for a person.
You can change a classification at any time with /sources.
Where the data lives
Everything stays on the computer where the skill runs, in the folder you chose during setup (by default ~/.turbo-notify/attendant). Turbo Notify gets no copy. Anyone who can open that folder sees the conversations, the customer records and what you taught, so protect the computer with a password and disk encryption, and end the WhatsApp Web sessions of anyone who leaves the team.
- The text of customer conversations is kept for 90 days and then deleted. The summary of the conversations and the customer’s file stay until you use
/forget. The period (raw_retention_days) is in thememory-policy.jsonfile of the data folder, and/policyshows the current numbers. - A customer asked to be erased? Use
/forget number. The erasure leaves one log line (who asked, which number, when). - Your company’s privacy policy should say that you use an automated assistant.
- The first answer of each chat tells the customer that it comes from an AI, in the customer’s language. It comes back after a day without an answer. You cannot switch this off.
Keep the skill current
The skill checks its version about once an hour and messages the administrators when a new one exists, with the right command for your agent. If you install with #v1 (Claude Code) or --ref v1 (Codex), a change that breaks compatibility never arrives by itself. For the update commands of each agent, see Agent skills.
What each agent can do
- Claude Code and Codex: answer while the agent is closed and the computer is on, through the runner. They support automatic and assisted mode and keep a separate context per customer.
- Claude Desktop and Cowork: assisted mode only, with you present. Every answer needs approval.
- Antigravity: assisted mode only, in a session you keep open. Every answer needs approval.
In Claude Desktop, Cowork and Antigravity, nothing is answered while the app is closed, and every answer needs approval. If you need service at any hour, use Claude Code or Codex.
The runner is a short program of the skill that you leave running in a terminal. It asks Turbo Notify every 20 seconds and calls the AI model only when a message arrives, so while nobody writes it costs nothing from your AI plan.
Limits and care
- The computer has to be on and online. Messages that arrive while it is off are read when it returns, if they are still within your plan’s retention (1 hour by default on every plan). Restart quickly. See Retention.
- The virtual attendant follows the same sending limits: pacing between messages, plan quota and number protections. See Protect your number.
- Review the answers in assisted mode before moving to automatic, and go back to assisted if something changes in the business.
Next steps
- Agent skills: what a skill is, how to install and update it.
- Build an AI agent: the path with code, for building your own agent.
- MCP server: the tools, scopes and limits.