Integrations · Wati

Wati + AI voice calls: WhatsApp follow-ups from your Wati number

If your team answers WhatsApp in Wati, keep it that way. A Vyora AI agent makes the calls; when a call is missed, or right after one that connected, Wati sends your approved template with the lead's name and what they told the agent, and the conversation continues in the Wati team inbox.

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.
01

Set it up

  1. 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.
  2. 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).
  3. 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.
  4. 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)".
02

The request Vyora sends to Wati

Method
POST
Address
https://live-mt-server.wati.io/api/ext/v3/messageTemplates/send
Header
Authorization: Bearer YOUR_WATI_API_TOKEN

What 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.

03

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.

Wati template text
custom_params entry
Sent as
Hi {{name}}
{ "name": "name", "value": "{{callee_name}}" }
Hi Rahul
for {{course}}
{ "name": "course", "value": "{{answer.course_interest}}" }
for Data Science

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}}" }
      ]
    }
  ]
}
04

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.

You put
Wati receives
Notes
"91{{callee_number_local}}"
919876543210
Recommended
"{{callee_number}}"
+919876543210
Works if your Wati account accepts "+"
"{{callee_number_local}}"
9876543210
No country code: not for Wati
05

Test it and read the run log

Run log says
Fix
Sent to live-mt-server.wati.io (200)
Wati accepted it; 200 is not delivery. Open the broadcast in Wati, or its Template Message Failed webhook, to see what happened next.
live-mt-server.wati.io refused it (401 / 403)
Token wrong, expired, or missing template-send permission. Check the header starts with "Bearer ".
live-mt-server.wati.io refused it (400)
Template name not found, a custom_params name that isn't in the template, an extra field Wati doesn't accept, or an invalid number.
live-mt-server.wati.io refused it (429)
Rate or usage limit reached on your Wati plan.
live-mt-server.wati.io didn't answer within 15 seconds
Wati was slow. The workflow continues; that message is not retried.
06

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.

Related

We use cookies to improve your experience. By continuing to use this site, you agree to our Privacy Policy.