Airtime MediaCustomer portal

Menu bot setup guide

Every step in plain words: about one hour, two free accounts, no programming. Support is included for 30 days: info@airtimemedia.eu.

Is your bot hosted by us? Then skip everything about Cloudflare. Do only the Meta part: step 3 (create your Meta app), step 4 (connect your number), step 5 (permanent access token and app secret) and step 9 (go live). Then log in to this customer portal and paste the app ID, app secret, token, phone number ID and WhatsApp Business Account ID under your purchase. We connect the webhook for you.

You are about to run a menu bot that belongs to you. It lives in your Cloudflare account, talks to WhatsApp through your Meta app, and nobody else, including us, can see your messages or your access token. Set aside 45 to 60 minutes. You need no programming knowledge, only patience with two dashboards.

Included: 30 days of setup help. Stuck? First open your bot's /check page (step 7). It tests every setting and tells you in plain words what to fix. Still stuck: mail info@airtimemedia.eu with a screenshot of that page and we answer within two working days. Want your menu changed? Mail us what should be different and we send you the new menu to paste in. If we cannot get your bot running within 30 days of purchase, you get your money back.

Before you start: three things to know

  1. The bot needs a phone number that is not in use in the WhatsApp or WhatsApp Business app. A number connected directly to the WhatsApp Business Platform cannot be open in the phone app at the same time. Most owners use a second number for the bot (a spare SIM, a landline or a virtual number that can receive one SMS or call) and keep their existing number in the app for talking to people. The bot hands customers over to that number with a link.
  2. What it costs to run. Cloudflare's free plan is enough for roughly 300 to 400 customer messages a day. Meta charges nothing for the first 1,000 replies per month per number (rule from 1 October 2026; before that date replies are free without a limit). Beyond that, Meta charges a small fee per reply and asks for a payment method on your WhatsApp Business Account. The optional notification template (step 8) is charged per message from the first one.
  3. What the bot does. It answers people who write to you: menu, replies, questions, a summary to you. It never starts conversations and never sends marketing, so it needs no opt-in list.

1. Your menu is already inside

This download was built for you: the menu you made and tried on webonwhatsapp.com is written into worker.js. There is nothing to copy. menu.json in this folder is the same menu, for your own records.

Not happy with a text or an option? For 30 days after your purchase you can change the menu as often as you like: see "Changing the menu later" at the end of this guide.

2. Create the bot on Cloudflare

  1. Create a free account at dash.cloudflare.com.
  2. Workers & PagesCreateWorker → start from "Hello World" → name it (for example menubot) → Deploy.
  3. Edit code, delete everything in the editor, paste the whole of worker.jsDeploy.
  4. Note the address of your Worker: https://menubot.YOUR-NAME.workers.dev. This is your callback URL.
  5. Storage & DatabasesKVCreate a namespace called menubot-state.
  6. Back in the Worker: SettingsBindingsAddKV namespace → variable name STATE (exactly, in capitals) → choose menubot-stateDeploy.

3. Create your Meta app

  1. Go to developers.facebook.com, log in with your Facebook account and register as a developer.
  2. My AppsCreate App → use case "Connect with customers through WhatsApp" → choose or create your business portfolio → finish.
  3. In the app, open WhatsAppAPI Setup. Meta gives you a test number to try things with. Under "To", add your own mobile number as a recipient and confirm the code: while the app is in development mode the bot can only answer numbers on this list.
  4. Note the Phone number ID shown on this page (a long number, not the phone number itself).

4. Connect your real number (can also be done after testing)

On the same page choose Add phone number, enter your business name and the number from "Before you start", and confirm it by SMS or call. Meta reviews the display name. Use the Phone number ID of this number from now on.

5. Get a permanent access token

The token on the API Setup page expires after 24 hours. For a bot you need one that does not:

  1. business.facebook.comSettingsUsersSystem usersAdd → name menubot, role Admin.
  2. Assign assets: your app (full control) and your WhatsApp account (full control).
  3. Generate token → select your app → expiration Never → tick whatsapp_business_messaging and whatsapp_business_management → copy the token. It is shown once.
  4. In your Meta app: App settingsBasicApp secret → Show → copy it.

6. Give the bot its settings

In Cloudflare: Worker → SettingsVariables and SecretsAdd. Use type Secret where marked.

Name Type Value
PHONE_NUMBER_ID Text from step 3 or 4
WHATSAPP_TOKEN Secret the permanent token from step 5
APP_SECRET Secret the app secret from step 5
VERIFY_TOKEN Secret any phrase you make up, e.g. blue-kettle-42
CHECK_KEY Secret another phrase you make up; it opens your check page
OWNER_NUMBER Text, optional your own WhatsApp number with country code; completed requests are sent there
NOTIFY_URL Text, optional a web address (Zapier, Make, Google Sheets script) that receives each request

Press Deploy after adding them.

7. Connect WhatsApp to the bot, and check

  1. Meta app → WhatsAppConfigurationWebhookEdit: callback URL = your Worker address from step 2, verify token = the VERIFY_TOKEN phrase → Verify and save.
  2. Under Webhook fields, subscribe to messages.
  3. Open https://menubot.YOUR-NAME.workers.dev/check?key=YOUR_CHECK_KEY. Every line should say OK. A line that says FIX tells you what to change.
  4. From your mobile, send "hi" to the bot's number. The menu should answer within a second or two. Reload the check page: "Messages arriving from Meta" now shows the time.

8. Notifications that always arrive (recommended)

The bot sends each completed request to OWNER_NUMBER as a normal message. WhatsApp only allows that within 24 hours of your last message to the bot. Two ways to deal with it:

9. Go live

In the Meta app, switch App mode from Development to Live (Meta asks for a privacy policy URL; your website's policy is fine). From now on the bot answers everyone, not only the numbers on your test list. Put the bot's number on your website with a chat button or link from webonwhatsapp.com/tools/.

Changing the menu later

Within 30 days of your purchase: make the new menu in the generator on webonwhatsapp.com, choose "I already bought" under the price, and enter the licence key from your Gumroad receipt. You get a fresh download with the new menu inside. In Cloudflare, open your Worker, Edit code, replace everything with the new worker.js, Deploy. Your settings stay as they are.

At any time, by hand: open menu.json, change the texts, and paste the whole content into a new variable called MENU_JSON (type Text) under SettingsVariables and Secrets, then Deploy. A MENU_JSON variable always wins over the menu inside the file.

Opening hours (optional). By default the bot always sends your greeting. To send the away message outside your hours, use the MENU_JSON way above and replace "schedule": null with your times (24-hour clock, your time zone):

"schedule": { "tz": "Europe/London", "days": { "mon": ["09:00", "17:30"], "tue": ["09:00", "17:30"], "wed": ["09:00", "17:30"], "thu": ["09:00", "17:30"], "fri": ["09:00", "17:30"] } }

Days you leave out are closed.

How the bot behaves

You can try all of this before you install anything: the chat in step 2 of the generator runs the same logic as your bot.

If something does not work

What you see Usual cause
Check page: token invalid or expired You used the 24-hour token from API Setup. Make the permanent one (step 5).
Check page: recipient not on the allowed list App still in development mode and your phone is not under "To" (step 3), or go live (step 9).
Check page: no messages arriving Webhook not verified, or the messages field not subscribed (step 7).
"Verify and save" fails in Meta The verify token differs from VERIFY_TOKEN, or you forgot to Deploy after adding it.
Bot answers you with "Notifications are on" You are writing from OWNER_NUMBER. Send MENU to try the menu, or test from another phone.
A customer's messages arrive as "Message for the team" A handover happened: the bot passes their messages on to you until they send MENU, a greeting or a menu choice.