Skip to content

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

RoleWhoWhat they do
Virtual attendantThe AIAnswers customers, remembers what each one has said, and calls a person when it needs one.
AttendantA 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.
AdministratorA registered numberTeaches the business, pauses, erases a customer’s data and changes the mode. Writes to the business number from another phone.
ConfiguratorWhoever installed the skill in the agentDoes the first setup and decides who is an administrator.
ContactThe customerOnly 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#v1
claude plugin install turbo-notify@turbo-notify

Claude 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 v1
codex plugin add turbo-notify@turbo-notify

Antigravity

agy plugin install https://github.com/turbo-notify/agent-skills

The 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:

  1. The business name as customers know it, and the language of the people who run it (Portuguese or English).
  2. Whether it is just you or there are administrators (numbers with area code).
  3. Which of your numbers answers customers (the main number or an extra).
  4. 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.
  5. 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 1 sends draft 1.
  • /send 1 your text sends your text instead.
  • /mode auto starts 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)

CommandWhat it does
/helpLists what you can do.
/statusLast check for messages, queue, who is waiting for a person, mode and version.
/queueWho is waiting for a person, and the drafts.
/send n [text]Sends draft n, or your text instead.
/digestHow many customers are in each state.
/resume [n or number]Hands a conversation back to the virtual attendant.
/takeover nA person takes over the conversation.
/contact xA customer’s record.
/thread number [n]A customer’s latest messages.
/note number textSaves a note about a customer.

Administrators only

CommandWhat it does
/contacts [filter]The customer list.
/admins, /admin add, /admin removeWho administers.
/teach, /done, /public, /internalTeach something to the virtual attendant.
/kbWhat the virtual attendant knows.
/sourcesOther systems it may consult.
/pausePauses every customer, or one.
/forget numberErases a customer’s data.
/mode assisted or /mode autoSets whether answers wait for approval.
/lang pt or /lang enLanguage of the commands.
/policyThe 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:

ClassWho may receive the information
PublicCustomers. Only for read-only sources with no personal data about customers (a catalog, opening hours).
InternalThe team (administrators and attendants).
Administrators onlyAdministrators (for example, finance).
OffNobody. 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 the memory-policy.json file of the data folder, and /policy shows 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