Send a WhatsApp message from a Zap without a template
Send a WhatsApp message from a Zap in the words you actually wrote, with no template approval, the moment a lead, order or booking appears in another app. There is no customer-service window either. Webhooks by Zapier posts the text to Wapito with the recipient and the body mapped from the trigger, and a Filter step keeps the Zap from messaging anyone it should not.
Before you start
- A Zapier plan that includes Webhooks by Zapier, which is a premium app.
- A Wapito channel that is connected, and its channel token.
- A trigger app whose records carry a phone number in international format and the fields you want to mention in the message.
Step by step in Zapier
Choose the trigger and filter out records with no number
Pick the trigger that means a message is due, for example New Lead in your CRM or New Order in your shop. Add a Filter by Zapier step immediately after it that only continues when the phone field exists and starts with a plus sign, so the Zap never spends a task on a record it cannot message and never hands Wapito a value that is not a phone number.
Field map Wapito field Where it comes from phoneTrigger field — must exist and start with + for the Filter to continue Add Webhooks by Zapier with a Custom Request
Add a Webhooks by Zapier action and pick the Custom Request event, which is the one that lets you set the method, the headers and the raw body. Set the method to POST and the URL to https://api.wapito.com/v1/messages/text. Leave Wrap Request In Array off and Unflatten off, because the body you are about to write is already the exact JSON Wapito expects.
Field map Wapito field Where it comes from MethodPOST URLhttps://api.wapito.com/v1/messages/text Set the two headers
Under Headers add Authorization with the value Bearer followed by your channel token, and Content-Type with the value application/json. The token is the only secret in the Zap; if you share the Zap with a teammate, they can read it there, so rotate it from the Wapito dashboard when someone leaves and update this one step.
Field map Wapito field Where it comes from AuthorizationBearer wpt_… (your channel token) Content-Typeapplication/json Write the JSON body with mapped fields
In the Data field write the JSON object by hand and insert the trigger fields with the field picker: the phone number as the recipient, the message as the body, and a small typing time so the message arrives at a human pace. Quote every mapped string, and if a field can contain a double quote, run it through Formatter by Zapier first to escape it, or the body will not parse.
Field map Wapito field Where it comes from bodyHi {{First Name}}, thanks for your order {{Order Number}}. We will confirm shipping here. to{{Phone}} — the trigger's phone field, for example +15551234567 typing_time3 Test the step and store the message id
Run Test step with a real trigger sample whose phone is your own. Zapier shows the parsed response; the field named id is the message id and status reads sent, which means accepted for delivery rather than delivered. Map that id into a later step, such as an Update Record action on the trigger app, so you can match a status webhook to this send later.
Field map Wapito field Where it comes from message_idid from the Webhooks response — write it back to the triggering record Decide what happens when the send is refused
Open the Zap's settings and turn on autoreplay so a transient error is retried, then add a Paths step or a second Filter on the response code for the errors that should not be retried. A 423 reachout_timelocked means WhatsApp has paused reach-outs from this number, and a 429 send_rate_limited means the queue is saturated; both call for slowing the Zap down, not for sending again.
Field map Wapito field Where it comes from error.codeerror.code from the Webhooks response on a non-2xx status
Test it
Turn the Zap on and create a test record in the trigger app with your own number. The Zap history should show the Webhooks step succeeding with a message id, and the text should arrive on your phone within a few seconds with the mapped fields filled in.
Errors you may hit
- invalid_recipient 400Recipient is not valid
- reachout_timelocked 423Reach-outs timelocked
- send_rate_limited 429Send queue saturated
- unauthorized 401Missing or invalid token
- channel_not_connected 409Channel not connected
Frequently asked questions
Why can I not use one of the WhatsApp apps listed in Zapier?
The WhatsApp apps in Zapier's directory are built on Meta's official Cloud API, which only sends pre-approved templates outside a 24-hour customer-service window. The message in this recipe is free text to anyone the number is allowed to write to, which the official platform does not offer, so it goes through Webhooks by Zapier against Wapito instead.
Can the Zap send to someone who has never messaged the number?
Yes, and that is exactly the case to be careful with. A first message to a stranger is a reach-out, and a number that sends many of them from cold is the pattern WhatsApp restricts. Wapito refuses cold sends on a channel that is still warming up and reports a timelock when WhatsApp applies one; the recipe's Filter step is where you keep the Zap to people who asked to hear from you.
How do I send an image or a PDF instead of text?
Use the same Custom Request with the media endpoint for the type, for example the image or document path, and put a public URL to the file or a media id in the body alongside the recipient. Upload once and reuse the media id when the same file goes to many people, because a fresh upload on every task is slower and counts against the same quotas.
Related
Endpoints this recipe calls
Try it on your own number
Create a channel, link a WhatsApp number by QR or pairing code, and call the API in a couple of minutes. The Sandbox plan is free and needs no card.