WhatsApp calling
Nexafon answers and places WhatsApp voice calls on the business’s own number, in the browser, inside your product.
Embedded users take calls in the softphone or <nexafon-app>, and start them with a
<nexafon-call-button> or Nexafon.call(phone).
Before calls work
Section titled “Before calls work”- Calling is turned on for the workspace’s WhatsApp number (in the dashboard’s WhatsApp settings). Meta only allows
it on numbers with a messaging limit of at least 2,000; otherwise you get
whatsapp.calling_cannot_be_enabled. - The member’s role includes
calls:answer, and for embedded users the signing secret key’s scopes include it too. - The browser has a microphone and the user allows it. The SDK frames carry
allow="microphone; autoplay".
Customers calling the business
Section titled “Customers calling the business”A call to the business number rings the team its call routing picks, with that team’s ring strategy
(everyone at once, in order, or priority on plans that include it). The first member to answer takes it; the others
see that someone answered. Unanswered calls end as missed and show in the call history. Your page hears
call.ringing, call.answered and call.ended (events); your server gets call.ringing,
call.answered, call.ended and call.missed webhooks.
The business calling a customer
Section titled “The business calling a customer”WhatsApp lets a business call a customer only after the customer allowed it:
| Rule (set by WhatsApp) | |
|---|---|
| Asking for permission | One request a day and two a week per customer, until a call connects (call_permission_request_limit) |
| Inside the 24-hour window | The request is a message with Allow / Don’t allow buttons |
| Outside the window | Only an approved template with a call permission button can ask (call_permission_template_missing) |
| How long it lasts | 7 days, unless the customer makes it permanent; they can also refuse |
| Without permission | Calling answers call_permission_missing |
The inbox shows the permission state of each customer and offers the request when it is allowed. Other WhatsApp limits Nexafon passes on:
- A daily cap on connected business-initiated calls per number, and per customer
(
whatsapp.business_call_limit), and a cap on simultaneous calls (whatsapp.call_concurrency_limit). - Business-initiated calls are not available from business numbers in some countries (currently the United States,
Canada, Egypt, Vietnam, Nigeria and Türkiye):
whatsapp_call_country_unsupported. Customers there can still call the business. - WhatsApp can pause calling on a number for low quality (
whatsapp.calling_disabled_low_quality).
Outbound calls are billed per minute to the workspace wallet; with a low balance or past-due billing they pause
(insufficient_balance, billing_past_due) while customers can still call in. See billing.
Recording
Section titled “Recording”On plans with call_recording, calls can be recorded once answered. WhatsApp calls need a recording announcement
chosen in the WhatsApp call settings first (call_recording_consent_missing). Recordings are listed by the
recordings API.
Prayer times
Section titled “Prayer times”Ringing can pause during prayer times, which Nexafon calculates for the workspace’s location (Umm al-Qura method by
default); a call that ends this way has endReason: "prayer".