Signal · New

Reply YES to confirm.
CANCEL to release.

Your ticket lands on WhatsApp with a one-line ask. Attendees reply YES, CANCEL, or RESCHEDULE — no app, no login, no form. The bot updates their registration, replies with a warm confirmation, and frees the seat for the waitlist. The keyword bot that clears your no-show list in the channel Indian attendees actually read.

WhatsApp · RSVP
SignupDesk Bot
Online · typically replies instantly
YES
Confirmed. See you at TechSummit '26 on 12 Nov. Reply CANCEL if plans change.
haan aana hai
Confirmed. See you at TechSummit '26 on 12 Nov.

Five intents. Case-insensitive. Hinglish-aware.

YES → confirmed
yes · y · confirm · attending · coming · haan · aana hai · zaroor. Sets rsvp_status = confirmed, timestamps it, sends a warm confirmation reply.
CANCEL → seat released
cancel · no · not coming · nahi · nahin · skip · stop. Sets rsvp_status = cancelled. Waitlist auto-promote picks it up on the next tick.
RESCHEDULE → note
reschedule · change · move · postpone · shift. Logs the intent for the organiser to reach out. No status change on its own.
?
HELP → options
help · menu · ? · options · info. Replies with the four keywords the attendee can use.
Unknown → gentle nudge
If we can't match a keyword, we reply "reply YES, CANCEL, RESCHEDULE or HELP" without changing state. Nothing worse than a bot guessing wrong.
📞
Unmatched number
If the sender's mobile doesn't match any registration, the bot asks for the email they signed up with and points them to the organiser. Nothing crashes.

Two-layer webhook auth. Per-tenant creds.

🤝
Verify handshake
During Meta's initial webhook subscription, they hit GET /webhooks/whatsapp?hub.verify_token=…. We only echo the challenge back if the token matches a tenant's whatsapp_verify_token.
🔐
Signature check
Every inbound POST carries X-Hub-Signature-256. We HMAC the raw body with the tenant's whatsapp_app_secret and compare with hash_equals. Mismatched messages get logged and dropped.
🏷
Tenant routing
A single webhook URL serves every tenant. We disambiguate by the phone_number_id in the payload — one unique index on the tenants table means we can't accidentally route to two.

Because email dies, WhatsApp gets read.

Every event organiser in India has this problem. Registrations open, 400 people sign up in a week, everyone gets an email confirmation. Comes event day, 260 show up. That's a 35% no-show rate on a "confirmed" list — and the wait list attendees who would have shown up got nothing because the seat was technically taken.

The gap is that email confirmation is not the same thing as an RSVP. Nobody scrolls a mailbox at 9pm the night before an event. What they DO read is WhatsApp. So we made the ticket ask the question there. One line. YES or CANCEL. If they cancel, the waitlist tick picks it up within minutes and someone else gets the seat and the same nudge.

We built it around the two things Indian attendees actually do: reply in Hinglish and skip filling forms. Keyword match handles the first. Zero forms handles the second.

Where the bot matters most.

📥
Every CANCEL triggers the waitlist ticker. The next person in line gets an invite before the seat gets cold.
💬
Outbound tickets and reminders go via the same Meta Business Cloud channel. The bot listens on the same number for replies.
🎯
Higher-quality RSVP data means better queue prediction on event day. The operator dashboard uses the confirmed count, not the registered count.

Questions we get

Do I need a Meta Business account?
Yes. WhatsApp Business Cloud API requires a Meta Business Manager account, a verified WhatsApp Business phone number, and a Meta app with the WhatsApp product enabled. Once you have the phone-number-id, permanent access token, verify token, and app secret, paste them into Admin → Signal → WhatsApp Bot.
What if attendees reply in Hindi or Hinglish?
The keyword matcher recognises haan, nahi, nahin, aana hai, zaroor alongside English words. Case-insensitive substring match, so the reply doesn't have to be exact.
How is the webhook secured?
Two layers. The verify token proves the subscription came from you during Meta's handshake. Every inbound message carries an X-Hub-Signature-256 HMAC of the raw body computed with your app secret — we verify it server-side before touching the payload.
Can I use one Meta app for many tenants?
Yes. The single webhook URL at /webhooks/whatsapp routes to the right tenant by phone-number-id from the inbound payload. Each tenant stores its own credentials.
What happens if a sender is not on my attendee list?
The bot replies with a friendly nudge to send the email they registered with, or contact the organiser. No state change, no crash. The unmatched conversation still shows up in the admin log so you can spot patterns.
Stop guessing who's coming.
See the WhatsApp RSVP bot + waitlist auto-promote in 5 minutes.