Integrations · Wati
Wati + AI voice calls: WhatsApp follow-ups from your Wati number
What you need
- — A Wati account with an approved template.
- — A Wati API token with permission to send template messages.
- — A Vyora Business plan (Workflows). On another plan, see the webhook route on the WhatsApp integrations page.
Set it up
- 01
Get the template approved in Wati
Create the template in Wati and wait for Meta approval. Note its name and the names of its variables. - 02
Create an API token
In Wati open Connector → API → Create API Token, give it template-send permission, and copy it (Wati shows it once). - 03
Add the step in a Vyora Workflow
After the Call (and If / else "They didn't answer" for missed calls only), add "Send to another app" with Wati's v3 address, the Bearer header and the JSON body. - 04
Test with your own number, then publish
Run a test, let it ring out, and check the run log reads "Sent to live-mt-server.wati.io (200)".
The request Vyora sends to Wati
MethodAddressHeaderWhat to send (JSON)
{
"template_name": "missed_call_followup",
"broadcast_name": "vyora_missed_call",
"recipients": [
{
"phone_number": "91{{callee_number_local}}",
"local_message_id": "{{call_id}}",
"custom_params": [
{ "name": "name", "value": "{{callee_name}}" }
]
}
]
}local_message_id is optional; setting it to the Vyora call id lets you match Wati's delivery webhooks back to the call. Wati's v3 schema rejects fields it doesn't know, so add only the ones shown here.
Named parameters, not numbered ones
Unlike AiSensy and Interakt, which take an ordered list, Wati matches each value to a template variable by name. Order doesn't matter; spelling does.
For a call that connected, an edtech recap can carry the course and batch the lead chose on the call. Those two values come from the agent's Post-Call Analysis fields course_interest and preferred_batch:
{
"template_name": "call_recap",
"broadcast_name": "vyora_call_recap",
"recipients": [
{
"phone_number": "91{{callee_number_local}}",
"custom_params": [
{ "name": "name", "value": "{{callee_name}}" },
{ "name": "course", "value": "{{answer.course_interest}}" },
{ "name": "batch", "value": "{{answer.preferred_batch}}" }
]
}
]
}Phone number format
Wati wants the country code with the number. Vyora gives you both forms; the guide uses the digits-only one that matches Wati's examples.
Test it and read the run log
Frequently asked questions
Which Wati API does this use?
Wati's v3 "send template messages" endpoint at live-mt-server.wati.io/api/ext/v3/messageTemplates/send. It needs no tenant id in the address. Wati's older v1 endpoints put a tenant id in the path; if you already use those, the same step works with that address instead.
What phone format does Wati expect?
Wati's documentation asks for the country code and its examples use digits only, without "+". "91{{callee_number_local}}" produces exactly that (919876543210). If your Wati account accepts the "+" form, {{callee_number}} works too.
Why does every follow-up show up as a broadcast in Wati?
Wati's template API always files sends under a broadcast_name you choose. Use one name per purpose, such as "vyora_missed_call", and Wati groups delivery and read numbers for all of them in one broadcast report.
My template has a variable called {{name}}. What do I send?
Wati templates use named variables, so send custom_params with "name": "name" and the value you want. The names must match the template's variables exactly.
Does the Wati token expire?
Only if you set an expiry when creating it. If the step suddenly starts failing with 401, generate a new token in Wati and paste it into the step's header.