Build a WhatsApp Business Assistant with n8n and Zabio
Set up an n8n workflow that answers WhatsApp customers in text or voice, reads screenshots, remembers each conversation and hands chats to a person, with Zabio for every AI step.
Updated November 2026
This template turns a WhatsApp Business number into an assistant for one business: a clinic, a shop, an agency, a restaurant. It answers questions about your hours, prices, services and policies, and nothing else. Customers who write get a text reply. Customers who send a voice note get a voice note back. Customers who send a photo or screenshot get an answer about what’s in it. When someone needs a person, you get an alert on Telegram and the bot steps aside.
Every AI step runs through one Zabio key: the answers, the transcription of voice notes, the image reading and the spoken replies. Zabio picks the lowest-cost model that can do each job and moves to a stronger one only when a question needs it.
How it works
| The customer sends | The assistant does | The customer gets |
|---|---|---|
| A text message | Answers with model: auto | A text reply |
| A voice note | Transcribes it, answers, turns the answer into speech | A voice note |
| A photo or screenshot | Reads the image and any caption, answers | A text reply |
| A sticker, document or location | Explains what it can handle | A text reply |
| “I want to talk to a person” | Replies, alerts you, stays quiet with that customer for 12 hours | A text or voice reply, then a human |
Each customer’s conversation is stored on Zabio, not in n8n. The workflow keeps one row per phone number in an n8n data table with the conversation ID, the last model used, the cost of each turn and the running total.
What you need
| Item | Where | Notes |
|---|---|---|
| n8n | Your own n8n, or n8n on a RemarkableCloud AI server | Must be reachable over HTTPS so Meta can deliver messages. The template uses built-in nodes only. |
| A Meta developer account | developers.facebook.com | Free. Gives you a test WhatsApp number to start with. |
| A Zabio API key | zabio.ai | New keys include the scopes the template needs. |
| A Telegram bot (optional) | @BotFather in Telegram | For handoff alerts. You can swap these nodes for email or Slack. |
Tip: A RemarkableCloud AI server comes with n8n installed and managed, plus Zabio credits to get you started.
Step 1: Import the template
Download the workflow file from the template page. In n8n, open Workflows, choose Import from File and select it. It arrives inactive, with empty credentials.
Step 2: Create the data table
In n8n, go to Data tables and create a table named whatsapp_conversations with these columns:
| Column | Type |
|---|---|
phone | String |
contact_name | String |
conversation_id | String |
handoff_until | Date |
last_model | String |
last_cost_micros | Number |
total_cost_micros | Number |
escalations | Number |
turns | Number |
voice_disclosed | Boolean |
Use exactly that name: the Find Conversation and Save Conversation nodes look the table up by name.
Step 3: Set up a Meta app and the test number
You don’t need a WhatsApp Business account or a new SIM to test. Your personal WhatsApp acts as the customer.
- On developers.facebook.com, create an app of type Business and add the WhatsApp product. Meta gives the app a free test number.
- Open WhatsApp > API Setup. In the To field, add your personal number and confirm the code WhatsApp sends you.
- Copy the Temporary access token and the WhatsApp Business Account ID from the same page.
- Open App settings > Basic and copy the App ID and App Secret.
Note: The test number can only message up to 5 verified numbers, and the temporary token expires after about 24 hours. Both are fine for testing. See Going live with your own number for production.
Step 4: Add the credentials
| n8n credential | Used by | What to enter |
|---|---|---|
| WhatsApp OAuth (trigger) | New WhatsApp Message | Client ID: your App ID. Client Secret: your App Secret. |
| WhatsApp Business | All WhatsApp send and media nodes | Access Token and Business Account ID from Step 3. |
| Zabio API key (Header Auth) | Ask Zabio, Transcribe With Zabio, Generate Voice Reply | Name Authorization, Value Bearer YOUR_ZABIO_KEY. |
| Telegram account | Forward to Staff, Alert Staff | Your bot token from @BotFather. |
You don’t set a webhook URL or verify token in Meta. When you activate the workflow, n8n registers the webhook with Meta itself.
Step 5: Edit Business Settings
Open the Business Settings node. This is the only node you need to edit.
| Field | What it does |
|---|---|
business_name | How the assistant introduces itself. |
business_profile | Everything the assistant is allowed to say: hours, address, services, prices, booking rules, payment, policies. Plain text. The assistant won’t invent anything that isn’t here. |
owner_telegram_chat_id | Where handoff alerts go. Message @userinfobot on Telegram to get your ID. |
handoff_hours | How long the bot stays quiet after handing a customer to a person. Default 12. |
retention_days | How long Zabio keeps each conversation after the last message. Default 30. |
voice_replies | Answer voice notes with voice notes. Set to false to always answer in text. |
voices | The voice for each reply language, for example es and en. See Voice replies. |
default_voice | The voice used for any language not in the list. |
Keep business_profile specific. “Cleaning $60, Saturday 9am to 1pm” gives better answers than “affordable prices, flexible hours”.
Step 6: Activate and test
- Activate the workflow.
- On your phone, save the test number as a contact and send it a text: “What time do you open on Saturday?”
- Send a voice note asking about a price.
- Send a screenshot with a caption.
- Write “I want to talk to a person” and check that the Telegram alert arrives.
Each message appears under Executions in n8n, so you can see exactly which node did what. After a few messages, open the whatsapp_conversations table to see the model used and the cost of each turn.
Voice replies
Voice notes are transcribed with Zabio’s transcription endpoint. The answer is spoken back with Zabio’s speech endpoint as an mp3, using the voice set for the reply’s language in voices. The template ships with these:
| Language | Voice |
|---|---|
Spanish (es) | ef_dora |
English (en) | af_heart |
Portuguese (pt) | pf_dora |
French (fr) | ff_siwis |
Italian (it) | if_sara |
You can use any voice Zabio lists for its speech models. If a voice isn’t available, the customer still gets the answer, as text.
The first voice reply to each customer opens by saying it comes from an AI assistant. The voice providers require you to tell people their voices are AI-generated, and the template handles it once per customer.
Conversation memory
The assistant doesn’t use an n8n memory node. Each customer’s history lives in a Zabio conversation, so it survives n8n restarts, model changes and workflow edits.
A conversation is kept for retention_days after the customer’s last message, and the clock restarts on every message. A customer who writes at least once a month keeps the same conversation indefinitely. When a conversation expires, the workflow starts a new one on the customer’s next message instead of failing.
Very long conversations are summarized automatically by Zabio when they no longer fit a model’s context window, so you don’t need to trim them.
What it costs
Each turn’s cost is written to the data table in micro-dollars (last_cost_micros, total_cost_micros): 1,000,000 micros is one US dollar. It includes the answer and, for voice notes, the transcription.
A few things move the number:
- Text questions usually run on a fast, low-cost model. Zabio moves to a stronger model only when the question needs it, and the
escalationscolumn counts how often that happened. - Voice notes add a transcription and a speech call, both priced by length. Short replies keep them low.
- Images cost more than text, and they stay in the conversation, so later turns in the same chat send them again. A long chat with several photos costs more than one with none.
Zabio’s models page lists the current price of every model.
Going live with your own number
When testing works, move to a real number:
- In WhatsApp > API Setup, add your business phone number and verify it. A number registered this way stops working in the regular WhatsApp app, so use one that isn’t your personal number.
- Replace the temporary token with a permanent one: in Meta Business Suite, create a System User, give it the
whatsapp_business_messagingandwhatsapp_business_managementpermissions, and generate a token that doesn’t expire. - Update the WhatsApp Business credential with the new token.
WhatsApp only allows free-form replies within 24 hours of the customer’s last message. The assistant always replies inside that window. If a person on your team picks up a handed-off chat more than 24 hours later, they need an approved message template to restart it.
Missed calls and voicemail
n8n can’t take live calls. If you enable WhatsApp calling on your number, turn on voicemail as well: recorded voicemails reach the workflow as voice notes, so the assistant answers them with a voice reply.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Nothing shows under Executions | The workflow isn’t active, or n8n isn’t reachable over HTTPS | Activate it and check that your n8n URL opens from outside your network. |
| Replies fail with error #131030 | The recipient isn’t one of the test number’s verified numbers | Add the number in WhatsApp > API Setup. |
| Replies stop after a day | The temporary access token expired | Generate a new one, or switch to a System User token. |
| The customer gets “I am having trouble answering right now” | The Zabio call failed | Open the Ask Zabio node in the execution. 401 means the key is wrong. 402 insufficient_credits means the balance is empty. |
| Voice notes get a text reply | The voice for that language isn’t available | Check the Generate Voice Reply node for unsupported_value and change the voice in voices. |
| Voice notes get “I could not process that message” | Transcription failed | Open Transcribe With Zabio in the execution for the error. |
| No Telegram alerts | Empty or wrong owner_telegram_chat_id | Start a chat with your bot first, then use the ID from @userinfobot. |
Still stuck? Open a ticket. If your n8n runs on a RemarkableCloud server, an engineer can look at the workflow with you.