WhatsApp

What is a WhatsApp click-to-chat link, and how do I build one?

A click-to-chat link is a URL that opens a WhatsApp chat with your business.

The first message can be typed for the person in advance. The link needs no integration and goes wherever a link goes, including a page, an email, a bio or a printed advert.

It opens a chat with your number. It sends nothing.

WhatsApp states the behaviour:

By clicking the link, a chat with the person automatically opens. Click to chat works on both your phone and WhatsApp Web.

The person lands in a chat thread with your number. Any prefilled text sits in the input field. They still press send, so an inbound message arrives only when they choose to send one.

How do I build one?

Put your number in the path, digits only, and any prefilled message in a text parameter.

WhatsApp gives the number form:

Use https://wa.me/<number> where the <number> is a full phone number in international format. Omit any zeroes, brackets, or dashes when adding the phone number in international format.

Its own examples are "Use: https://wa.me/1XXXXXXXXXX" against "Don't use: https://wa.me/+001-(XXX)XXXXXXX". Between them they rule out the plus sign, the punctuation and the trunk zero.

The prefilled message goes in a parameter:

Use https://wa.me/whatsappphonenumber?text=urlencodedtext where whatsappphonenumber is a full phone number in international format and urlencodedtext is the URL-encoded pre-filled message.

Encode the text yourself. WhatsApp's own example encodes every space. Meta accepts a raw space and then encodes it a second time, storing a b as a%2520b, which resolves to a different address. Bird refuses an unencoded space on a template button before the template reaches Meta.

A third form carries no number:

To create a link with just a pre-filled message, use https://wa.me/?text=urlencodedtext

That one behaves differently: "After clicking on the link, you'll be shown a list of contacts you can send your message to." It shares your message onward rather than reaching your business, so it is the wrong form to print.

A short link is https://wa.me/message/<code>, where the code stands in for your number.

Meta generates it for a business phone number and holds the prefilled message on its own side rather than in the URL. Three things follow:

  • The number is not in the link. A link on a billboard publishes no dialable number.
  • The message stays editable. "The new short links enable prefilled messages associated with a link to be edited or deleted at any time." A hand-built ?text= link is fixed once published.
  • It has an API. "You can view, create, edit and delete QR codes and short links in the WhatsApp Business Management API or in the Business Manager UI."

Two limits apply, from the same page: "Prefilled messages can contain up to 140 characters of text", and "A single WABA phone number cannot be associated with more than 2,000 QR codes and short links." The second binds when you mint a link per campaign.

A template's URL button cannot hold one. Meta rejects the template.

Meta refuses a URL button that links back into WhatsApp, under error subcode 2388081. The rule covers api.whatsapp.com and chat.whatsapp.com alongside wa.me, so changing the host does not pass it.

Bird checks the host before submission and refuses the button with:

WhatsApp refuses a button linking back into WhatsApp; give an address outside the conversation.

For a reply from inside a conversation, use interactive messages. What is a WhatsApp message template covers the button types a template may carry.

What happens on my side when someone taps one?

An inbound message arrives, and it opens the 24-hour customer service window.

Inside that window you reply with ordinary messages rather than approved templates. A click-to-chat link therefore turns a page visitor into a customer-initiated conversation. What is the 24-hour customer service window covers when it opens and closes, and what Bird does at the boundary.

Two things a tap does not do. It is not consent to send marketing later, which is a separate permission with its own record. It is not proof the number can receive WhatsApp: how do I check whether WhatsApp will accept a phone number is that check.

In short

  1. A tap opens a chat and sends nothing.

    The chat opens with the number in the link, on a phone or on WhatsApp Web. The person still presses send.

  2. The number goes in as digits only.

    A full phone number in international format with no plus sign, brackets, dashes or leading zeroes.

  3. A prefilled message is percent-encoded.

    Meta encodes a raw space a second time, storing a b as a%2520b, which resolves to a different address.

  4. A short link carries a code instead of your number.

    Meta's short-link form masks the number, and its prefilled message can be edited or deleted after the link is published.

  5. A template button cannot hold one.

    Meta refuses a template URL button that points back into WhatsApp, under error subcode 2388081.

Build on the same network.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Start with one channel.
Add the others when you're ready.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours:

Cursor