Explainer

WhatsApp food ordering system.
Take orders for free.

Three ways to take food orders on WhatsApp, from the free catalog and cart to an AI agent that takes each order in conversation, reads it back, and logs it in a Google Sheet your kitchen can see. With the script and instructions to copy.

Wapzen teamUpdated 9 min read

Quick answer

  • Free and manual: the WhatsApp Business catalog and cart. Customers send a cart; you confirm each order yourself.
  • Automatic: an AI chat agent reads your menu, takes the order in plain conversation, and saves it to a sheet with an API tool.
  • No Business API needed for either. Ordering platforms on the API add in-chat menus and payments, with monthly and per-message costs.

Three ways to take food orders on WhatsApp

Customers already message restaurants on WhatsApp to order. The question is what happens next: who replies, who checks the order against the menu, and where it ends up so the kitchen sees it. There are three setups:

Three ways to run a WhatsApp food ordering system
Business catalog and cartOrdering platformAI agent (Wapzen)
How orders arriveCustomers add dishes to a cart and send it to youThrough a menu link, buttons, or a bot flowCustomers type their order; the AI checks it, confirms it, and logs it
Who answers “is it spicy?”YouFixed menus, or your staffThe AI, from your menu
Needs the Business APINoUsuallyNo
CostFreeA monthly plan, often plus Meta’s message feesFree right now
Best forA few orders a dayChains and high volumesBusy kitchens that want orders logged

Most small kitchens start with the first and outgrow it at dinner rush, when replies pile up and orders get lost in chats. This post covers all three, then builds the third step by step: an AI agent that takes orders in plain conversation and writes each one to a Google Sheet.

The free way: the WhatsApp Business catalog and cart

The WhatsApp Business app has a built-in menu, called the catalog, and a cart:

  1. Add your dishes to the catalog in the app’s business tools, each with a photo, price, and a line on what’s in it.
  2. Check that carts are on in the catalog settings. WhatsApp turns them on by default, and a change can take up to 24 hours to show.
  3. Customers order by tapping the shopping button in your chat, adding dishes to the cart, and sending it to you.
  4. You confirm the order in the chat, with the total, delivery time, and how to pay. WhatsApp says an order isn’t final until the seller confirms it.

Quick replies save typing the same confirmation every time, and labels (New order, Paid, Out for delivery) help you keep track. The catch: you still answer every question and confirm every order by hand, which is the part that breaks at 8 pm on a Friday.

Ordering platforms on the Business API

Dedicated ordering platforms run on Meta’s WhatsApp Business API. They send menus with buttons, carts, and payment links, and push orders into a dashboard or POS. They suit chains and high volumes.

The trade-offs are cost and setup: a monthly plan, Meta’s per-message fees on top (see WhatsApp Business API pricing), and a number moved onto the API. Many still answer free-text questions like “can you make it less spicy?” with a menu or a person.

An AI agent that takes the order

The third way keeps ordering conversational. Customers type the way they always have, and an AI chat agent handles the order:

  1. A customer writes: “2 paneer rolls, extra spicy, and a lime soda to Baner.”
  2. The agent checks the dishes and the delivery area against your menu, and asks for anything missing: name, address, contact number, how they’ll pay.
  3. It reads the order back with the total and waits for a “yes”.
  4. It sends the order to your sheet with a tool and replies with the order number and the time it’ll be ready.

With Wapzen, this runs on the number customers already use, linked by QR code, with no Business API. Setting it up takes four steps.

Step 2: Send orders to a Google Sheet

The agent needs somewhere to send each order. A Google Sheet is free, and the kitchen can keep it open on a tablet:

  1. Create a sheet, rename the tab Orders, and add headers: Time, Name, Contact, Items, Address, Total, Payment, Notes, Status.
  2. Open Extensions › Apps Script and paste the script below. Change KEY to a long random word.
  3. Click Deploy › New deployment, choose Web app, set Execute as: Me and Who has access: Anyone, and authorise it.
  4. Copy the web app URL and add ?key= plus your key to the end.
// In your Orders sheet: Extensions › Apps Script. Paste this, change KEY,
// then Deploy › New deployment › Web app (Execute as: Me, Who has access: Anyone).
const KEY = "replace-with-a-long-random-word";

function doPost(e) {
  if (e.parameter.key !== KEY) return reply({ ok: false, error: "wrong key" });
  const order = JSON.parse(e.postData.contents);
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Orders");
  const lock = LockService.getScriptLock();
  lock.waitLock(10000);
  try {
    sheet.appendRow([new Date(), order.customer_name, order.contact_number, order.items,
      order.address, order.total, order.payment, order.notes || "", "New"].map(safe));
    return reply({ ok: true, order_number: sheet.getLastRow() - 1 });
  } finally {
    lock.releaseLock();
  }
}

// Customers type this text: never let it start a formula.
function safe(value) {
  return typeof value === "string" && /^[=+\-@]/.test(value) ? "'" + value : value;
}

function reply(data) {
  return ContentService.createTextOutput(JSON.stringify(data))
    .setMimeType(ContentService.MimeType.JSON);
}

Each order becomes a row with the status New; change it to Cooking or Sent as you go. The key in the URL keeps strangers from adding rows. Zapier, Make, n8n, or your POS’s own API work the same way if you prefer them: anything with a URL that accepts JSON.

Step 3: Create the save_order tool

Open Tools, click Create Tool, and choose API Request:

  • Name: save_order
  • Description: “Save a confirmed food order. Use only after the customer has confirmed the items and total.”
  • Method: POST, and URL: your web app URL with ?key=…
  • Parameters: add these, each marked required except notes:
Parameters for the save_order tool
TypeDescription to give the agent
customer_namestringThe customer’s name.
contact_numberstringA phone number for the delivery rider, with the country code.
itemsstringEvery item with quantity and options, e.g. “2 x Paneer roll (extra spicy), 1 x Lime soda”.
addressstringThe full delivery address, or PICKUP for collection.
totalnumberThe order total, including the delivery fee.
paymentstringHow the customer will pay, e.g. cash on delivery.
notesstring (optional)Allergies, cutlery, or delivery instructions.

The agent fills each parameter from the conversation, and Wapzen sends them to your URL as JSON. The sheet’s reply, with the order number, goes back to the agent so it can tell the customer.

The agent doesn’t see the customer’s WhatsApp number, which is why it asks for a contact number. The rider needs one anyway, and it may not be the number they’re chatting from.

Step 4: Write the ordering instructions and go live

With the dashboard in Chat mode, open Chat Agents, click New chat agent, and paste instructions like these into its system prompt, filling in the brackets:

You are the WhatsApp ordering assistant for [Restaurant], a [cuisine] kitchen in [area]. You take delivery and pickup orders and answer questions about the menu.

Use only the menu, prices, and delivery rules in your knowledge base. If something isn't there, say a person will reply shortly.

To take an order:
1. Ask what they'd like. Check every dish and option against the menu, and say so if a dish is sold out.
2. Ask: delivery or pickup? For delivery, get the full address and check it's in our delivery area.
3. Ask for their name and a contact number for the rider.
4. Ask how they'll pay: [cash or UPI on delivery].
5. Read the order back with the total, including any delivery fee, and ask them to confirm.
6. Only after they confirm, use save_order. Then give them the order number from its response and say it will be ready in [35–45 minutes].

Rules: short replies, one question at a time. Never invent dishes, prices, or discounts. Complaints, refunds, and catering go to a person: say [Name] will reply shortly.

Attach the menu knowledge base and the save_order tool. Then open Phone Numbers, click New Number, scan the QR code from WhatsApp’s Linked devices screen, and pick this agent for the number. The chatbot guide shows that step with screenshots.

Test with five real orders from another phone, including a dish that doesn’t exist, an address outside your area, and a change of mind halfway through. Check each row in the sheet.

Customers who’d rather call can order by voice too: a Wapzen voice agent with the same save_order tool answers WhatsApp calls and takes the order out loud.

Tips that prevent wrong orders

  • Always read the order back with the total before saving. Most mistakes are caught right there.
  • Put the delivery area and minimum order early in the conversation, not after the customer has chosen five dishes.
  • Give a time range (35–45 minutes), not a promise.
  • Hand over complaints and refunds. A short apology and “the owner will reply” beats an AI arguing about a cold pizza.
  • Read the day’s chats for a week and add every unanswered question to the knowledge base.
  • Keep an eye on carts. The chat agent answers text messages, not voice notes or images, so if you also use the catalog, check carts yourself.

Selling products rather than meals? The same pattern works for stores, and COD order confirmation calls cut fake cash-on-delivery orders. For bookings instead of orders, see WhatsApp appointment booking.

Wapzen is an independent product, not made by Meta or WhatsApp. It links your number as a device. Use it to answer customers who message you, never to send bulk messages: WhatsApp restricts numbers that do.

Frequently asked questions

Can I take food orders on WhatsApp for free?

Yes. The WhatsApp Business app's catalog and cart are free: customers pick dishes and send the cart to you. To have orders taken and logged automatically, Wapzen's AI chat agent is currently free and can save each confirmed order to a Google Sheet or any other webhook.

How do I take orders on WhatsApp Business?

Add your dishes to the catalog in the WhatsApp Business app with photos and prices, and make sure carts are on in the catalog settings. Customers browse with the shopping button, add items to a cart, and send it to you. The order isn't final until you confirm it in the chat.

Can a WhatsApp bot take food orders automatically?

Yes. An AI chat agent can answer menu questions, take the order in a normal conversation, read it back with the total, and send the confirmed order to your system through an API request tool. With Wapzen it works on your existing number, without the Business API.

Where do the WhatsApp orders go?

Wherever your tool sends them. A free option is a Google Sheet with a short Apps Script that adds a row per order. The same tool can post to Zapier, Make, n8n, or your POS system if it accepts orders through an API.

How do customers pay for WhatsApp food orders?

Most small kitchens take cash or a card or UPI payment on delivery, or share a payment link before dispatch. Wapzen's agent doesn't take payments itself; it can tell customers how to pay, using the options in your instructions.

Do I need the WhatsApp Business API for a food ordering system?

No. The catalog and cart work in the free WhatsApp Business app, and an AI agent can take orders on a number linked by QR code. Ordering platforms built on the Business API add features like in-chat menus and payments, but also monthly plans and Meta's per-message fees.

Keep reading.
More from the blog.

Orders in, even at rush hour.
Answered by AI.

Create a free AI chat agent, upload your menu, and connect your WhatsApp number by QR code. It starts taking orders right away.