WhatsApp Messaging
Send WhatsApp messages from a live call or from a journey, using your own WhatsApp Business provider
Lemu can send WhatsApp messages on your behalf — either while a voice agent is on a call, or as a step inside a journey. Both paths use the same organization-level WhatsApp configuration, so you only connect a provider once.
There are two ways WhatsApp sending shows up in the product:
- A "Send Message" tool you attach to an agent node, so the model can send a WhatsApp message (a link, a confirmation, a follow-up) to the caller mid-conversation.
- A
messagenode inside a journey, so a workflow can text someone as one of its steps — for example after a call ends, or when a trigger condition fires.
WhatsApp sending must go through an approved WhatsApp Business Solution Provider (BSP). Lemu does not provide WhatsApp numbers or templates itself — you connect your own provider account.
Connect a WhatsApp provider#
Configuration lives on Telephony → Messaging in the dashboard. Choose one of the supported providers and save its credentials:
| Provider | Credentials |
|---|---|
| WATI | API endpoint, API token |
| Meta Cloud API | Phone number ID, access token, and (optional) WhatsApp Business Account ID — needed to list templates |
| Gupshup | API key, source WhatsApp number, and (optional) app name — needed to list templates |
| Twilio WhatsApp | Account SID, auth token, WhatsApp-enabled from number — or reuse your existing telephony Twilio credentials |
Saved secrets (API tokens, access tokens, auth tokens) are masked once stored — the dashboard shows them back as asterisks, and re-saving the form without touching a masked field keeps the existing value.
Once a provider is connected, use Test send on the same page to send a real WhatsApp template message to a number you specify, confirming your credentials and template are working before wiring them into a call or journey.
Session messages vs. template messages#
Every WhatsApp send is one of two kinds:
session— a free-form text message. This only works if the recipient has messaged your WhatsApp number within the last 24 hours (WhatsApp's session window).template— a pre-approved WhatsApp message template. This works at any time, which makes it the right choice for anything business-initiated (outbound reminders, payment links, confirmations).
Templates must already be approved in your WhatsApp Business account. Lemu lists your approved templates by calling your provider's API — it doesn't create or submit templates for approval.
Working with templates#
Wherever you configure a WhatsApp send — the in-call tool or a journey node — you pick a template from a searchable picker that:
- Loads your approved templates from the connected provider
- Shows a WhatsApp-style preview of the template body, with
{{variable}}placeholders highlighted - Lets you fill in a value (or a template expression like
{{context.name}}) for each variable the template defines - Shows a URL button suffix field if the template has a URL button, so you can fill in the dynamic part of the link (for example, a payment or callback URL)
If no approved templates are found, the picker falls back to a plain text field for the template name and shows a hint pointing back to the messaging configuration page.
Sending WhatsApp during a call#
Attach a Send Message tool to an agent node so the model can send a WhatsApp message while the call is active. In the tool's configuration you set:
- Destination — either the current caller (the tool defaults to the phone number on the call) or the model provides the number (the model must pass a phone number as an argument)
- Message kind — session or template, and if template, which template and its variables/URL button suffix (via the same template picker described above)
- Spoken line before sending — optional; None, or a custom line the agent says before it sends the message (for example, "I'm sending that on WhatsApp now.")
At runtime, the model can still pass a link or name argument when it calls the tool — these fill in remaining template variables (a URL button suffix, or a name variable) even if you didn't set them at configuration time. If the destination is set to "current caller", Lemu resolves the recipient's number from the call itself; you don't need the model to know or repeat it.
Session messages sent from this tool only succeed if the caller has an open 24-hour WhatsApp session with your number — otherwise, use a template.
Sending WhatsApp from a Journey#
Inside a journey, a message node sends a WhatsApp message as one step in the workflow. Its configuration includes:
| Field | Purpose |
|---|---|
to / to_field | Recipient phone number, or a template expression that resolves to one (e.g. {{context.phone}}) |
kind | session or template |
template_name | Which approved template to send (required for template) |
language | Template language code (defaults to en) |
template_params | Values for the template's variables, keyed by variable name or position (e.g. {"1": "{{context.name}}"}) |
button_url_suffix | Dynamic part of the template's URL button, if it has one |
A message node fails validation (and won't run) if it's missing a recipient, or a template send is missing a template, or a session send is missing a body.
See Journey Nodes & Triggers for how the message node fits alongside other journey steps.
Phone number format#
Recipient numbers should be in E.164 format (e.g. +919876543210). Lemu normalizes numbers before sending and will reject an unsendable number — a 10-digit US-style number without a + is assumed to be +1; anything else without a recognizable country code is treated as invalid.
Troubleshooting#
- "No organization on this call; cannot send a message" — the call isn't associated with an organization; this shouldn't happen in normal use.
- Messaging not configured — no WhatsApp provider has been saved for your organization yet, or the saved configuration is incomplete. Go to Telephony → Messaging and save valid credentials for a provider.
- No approved templates found — your provider account has no templates in an approved state, or a piece of provider config needed to list them is missing (Meta Cloud API needs a WABA ID; Gupshup needs an app name). Outbound WhatsApp must use an approved template outside the 24-hour session window.
- Invalid recipient — the phone number couldn't be normalized to E.164. Check the number (or the field/expression supplying it) includes a country code.
- Provider rejected the send — Lemu surfaces the upstream provider's error message as-is; check the template's approval status and parameter count against what the provider expects.
Support#
If you run into an issue connecting a provider or sending a message, reach out to ashish@lemuai.com.
