Booking Request Button Widget

A polished Book an appointment block for businesses without a booking system: visitors choose a service, a preferred date and time and enter their name, and the button opens WhatsApp, their email app or a text message with the request already written - or simply sends them to your own booking page.

Business & Contact Tool Runs in your browser Free · no ads

Customize your widget

Theme
Auto follows the visitor's light/dark setting.
Style
Attribution on your page
Optional and entirely your choice. The exact line is shown in the code below; it links to the tool with rel="nofollow".
More options
Starting values
One item per line. Long content is carried after the # in the embed code, so it never reaches a server.
Leave blank to use the widget's defaults. Visitors can still change every value.

Live preview

Exactly what your visitors will see

Embed code

<iframe src="https://a2z.tools/embed/w/booking-request-button" title="Booking Request Button by A2Z Tools" width="100%" height="584" style="border:0;width:100%" loading="lazy" allow="clipboard-write"></iframe>

A plain iframe. Works everywhere, including site builders that strip scripts. Adjust height if your content needs more room.

Works with

How it works

You choose one channel and one destination. For WhatsApp the number must be international - +44 7700 900123 becomes 447700900123, and a number starting with 0 is refused because the country code is missing; the link is https://wa.me/ followed by that number and ?text= with the encoded message. For email the widget writes mailto: with a subject such as Appointment request: Cut and finish on 2026-10-09 and the message as body, with line breaks sent as %0D%0A as RFC 6068 requires. For SMS it uses sms:<number>?body= from RFC 5724. With a booking link the button just opens your https page and appends nothing. Before opening anything it checks that a service is chosen, the date is today or later and within 12 months, a time is set and a name typed; each problem is written under its field. The message lists the service, the date in words plus its ISO form, the time and the name. There is no form element: the frame forbids form submission, and nothing needs one.

Method

  • WhatsApp: number -> digits, drop leading + or 00, must match ^[1-9]\d{6,14}$ ; https://wa.me/<number>?text=<encoded message>
  • Email: mailto:<address>?subject=<encoded>&body=<encoded message, newline -> %0D%0A>
  • SMS: sms:<+digits, 4-15>?body=<encoded message>
  • Encoding: encodeURIComponent plus ! ' ( ) * as %21 %27 %28 %29 %2A
  • Valid when: service chosen (if any listed), today <= date <= today + 365 days, time HH:MM (or morning/afternoon/evening), name not blank

Worked examples

WhatsApp request

Inputs: business Kai Hair Studio; WhatsApp +44 7700 900123; Cut and finish, 2026-10-09, 14:30, Sam

Result: https://wa.me/447700900123?text=Hello%20Kai%20Hair%20Studio%2C%20I%20would%20like%20to%20request%20an%20appointment.%0AService%3A%20Cut%20and%20finish%0A...

The plus sign is dropped, line breaks become %0A and the comma %2C.

Email subject and line breaks

Inputs: email [email protected]; Cut and finish on 2026-10-09

Result: mailto:[email protected]?subject=Appointment%20request%3A%20Cut%20and%20finish%20on%202026-10-09&body=...%0D%0A...

RFC 6068 requires CRLF (%0D%0A) between body lines.

National number refused

Inputs: channel whatsapp; to 07700 900123

Result: No link; preview note: give the full international number

A leading 0 means the country code is missing.

Limitations

  • It shows no real availability and cannot prevent double bookings; you confirm every request yourself.
  • SMS pre-filled text (the body= field) is ignored by some older phones, which then open an empty message.
  • The visitor must press Send in their own app; if they close it, no request is sent and the widget cannot tell.

Where publishers use it

  • A hair or beauty salon taking requests over WhatsApp instead of paying for booking software
  • A dentist, physio or vet clinic whose reception confirms appointments by email
  • A driving instructor, personal trainer or tutor who wants requests by text message
  • A restaurant or B&B pointing guests to its existing reservation page with one clear button
  • A tradesperson's site collecting visit requests with a preferred day and time window

Questions

Is the appointment booked when the visitor presses the button?

No, and the widget says so under the button: it sends a request, and the business confirms. The visitor's own app opens with the message filled in, and they still press Send there. Nothing reaches you until they do, and you reply to accept or offer another time.

Which channel should I choose?

WhatsApp suits businesses that already chat with customers on a phone - replies are fast and the customer's number arrives with the message. Email suits clinics and offices with a shared inbox and leaves a written record. SMS reaches anyone with a mobile but some older Android and iOS versions drop the pre-filled text. A booking link is right when you already use a scheduling tool, because only it can show real free slots.

How should I write the WhatsApp number?

Country code, then the number without its leading 0, for example +44 7700 900123 or +1 555 014 2200. Spaces, brackets and dashes are removed automatically. A number written in national form such as 07700 900123 is refused and the builder preview explains why, because WhatsApp cannot guess the country.

Can visitors pick a time of day instead of an exact time?

Yes. Set the time option to part and the time box becomes a choice of Morning (before 12:00), Afternoon (12:00-17:00) or Evening (after 17:00), which suits trades and home visits where an exact minute means little.

Does A2Z or anyone else see the requests?

No. The message is built from the fields in the visitor's browser and passed to their own app through a link; nothing is posted to a server. The frame's security policy even forbids form submission, so there is no hidden endpoint. A2Z counts only an anonymous load and first use of the widget.

What if the visitor's device has no WhatsApp or mail app?

After the button is pressed a Copy the message instead button appears, so the text can be pasted into any other channel. On a desktop without WhatsApp installed, wa.me opens WhatsApp Web.

Sources

  1. RFC 6068: The 'mailto' URI Scheme - IETF . subject and body header fields; line breaks in the body MUST be encoded as %0D%0A. Checked 2026-10-01.
  2. RFC 5724: URI Scheme for GSM Short Message Service - IETF . sms:<number>?body=<text> syntax used for the text-message channel. Checked 2026-10-01.
  3. RFC 3986: Uniform Resource Identifier (URI): Generic Syntax - IETF . Percent-encoding of reserved characters, which is why ! ' ( ) * are encoded in addition to encodeURIComponent. Checked 2026-10-01.

Cite or recommend this tool

If you reference this tool in an article, course or documentation, these formats are ready to copy. They are optional - nothing is added to your site unless you paste it.

A2Z Tools Booking Request Button
https://a2z.tools/embed/booking-request-button
  • Contact Buttons

    Business & Contact Tool New

    Large Call, Text, Email, WhatsApp and custom-link tap targets in a stack, row or pill bar.

    Get code
  • Business Hours

    Time & Date Clock & time

    Shows Open now or Closed and when you open next, in your business's own time zone.

    Get code
  • Price List Widget

    Business & Contact Tool New

    A service price list with categories, durations and a booking button for salons, clinics and trades.

    Get code
  • Add to Calendar Button

    Events & Weddings Tool New

    One button that opens a menu to save an event in Google Calendar, Outlook.com, Microsoft 365 or Apple Calendar.

    Get code
  • Business Card Widget

    Business & Contact Tool New

    A digital business card with call, email, website and directions buttons plus a .vcf contact download.

    Get code
  • Donation Tiers Card

    Business & Contact Tool New

    A giving card with suggested amounts, an optional monthly switch and a Donate link to your own page.

    Get code

Preview