SIP trunk documentation
Quick start
1. Create a workspace → https://console.whatsmcp.com/register
2. Link a WhatsApp number → Console → Pair device (scan the QR with your phone)
3. Put it on a plan with calls → Console → the number → Plan (see Voice plans)
4. Connect SIP → Console → the number → SIP
WhatsMCP bridges WhatsApp voice calls to SIP. A WhatsApp call to your number rings your PBX or a softphone; a call you place from SIP goes out as your own WhatsApp number. The bridge decodes WhatsApp’s Opus and MLow audio and hands your side ordinary G.722 or G.711 — your phone system never learns that MLow exists.
Two ways to connect, same result: take a hosted SIP line (we run the phone system) or bring your own PBX. Both are configured on the number’s SIP page in the console.
This is not the WhatsApp Business Calling API. WhatsMCP links a regular WhatsApp number as a device and speaks the protocol directly — no Meta business verification. It is unofficial, not affiliated with Meta, and outside WhatsApp’s terms of service: numbers can be blocked. See About this service.
How it works
The bridge registers to a SIP server like any ordinary extension — no module, agent or fork of your PBX, and no inbound firewall rule for signalling. On one side it holds a SIP registration; on the other it holds your linked WhatsApp session. A call is live only when both are up: SIP registered and WhatsApp connected.
SIP phone / PBX / CRM ⇄ WhatsMCP bridge ⇄ WhatsApp
G.722 / G.711 transcode Opus / MLow (encrypted)
One WhatsApp number carries one call at a time. A second call while one is up is refused as busy — add numbers for parallel calls.
Voice plans and call direction
Calls are part of a number’s plan: one flat monthly price per number covering its messaging and its calls, with no per-minute billing. A number needs a plan that includes calls before its SIP page unlocks — without one, the SIP page stays locked with “SIP needs a voice plan.” Prices are on the plans page.
The plan also sets the direction the bridge will carry:
| Plan includes | WhatsApp → SIP | SIP → WhatsApp | Use it for |
|---|---|---|---|
| Incoming and outgoing | ✅ rings your extension | ✅ dials out as your number | Full two-way calling |
| Outgoing only | — declined | ✅ dials out as your number | Click-to-call, outbound campaigns |
| Incoming only | ✅ rings your extension | — refused (403) | A support line that only receives |
Change a number’s plan or its direction in Console → the number → Plan; the bridge picks up the new mode on its next start.
Option A: Hosted SIP line
You don’t need your own PBX. We run the phone system; you register any SIP phone or softphone to the line we give you.
- Open Console → the number → SIP and choose Hosted line.
- The console provisions the line and shows its credentials once — host, port, username and password. Copy them now; the password is stored only as a hash and can be rotated, never shown again.
- Register a softphone (or a phone, or your CRM’s dialer) with those credentials.
Your username is your WhatsApp number in E.164 digits without the + (so +44 7700 900123
registers as 447700900123).
| SIP domain | sip.whatsmcp.com |
| Signalling | TLS on port 5061, with SRTP media — the recommended setup |
| Fallback | Plain UDP for phones that cannot do TLS |
| Media | SRTP (TLS) — the WhatsApp side of every call is always encrypted regardless |
WhatsApp calls to your number ring that phone; calls you dial from it go out as your WhatsApp number. To try a line without a physical phone, the SIP page also has a browser test dialer that registers in the tab and places or answers one call — handy for confirming setup before you wire up a device.
Option B: Bring your own PBX
Point the bridge at your existing Asterisk, FreePBX, 3CX, or the phone system inside your CRM. It registers outbound to your registrar as a normal extension, so there is no inbound firewall rule to open for signalling.
Open Console → the number → SIP, choose Your own PBX, and enter:
| Field | What to put |
|---|---|
| Registrar | Your SIP server, host or host:port |
| Username | The extension the bridge logs in as |
| Password | Its secret — stored encrypted (AES-256-GCM) |
| Realm | Optional — set it only if your server uses a realm other than the host |
| Ring target | The extension a WhatsApp call should ring, e.g. 101. caller rings a hunt entry named after the WhatsApp caller; 9:caller prefixes a group |
Before it saves, the console runs a live REGISTER probe against your server, so wrong
credentials are caught at setup instead of crash-looping the number later. Test connection on
the SIP page re-runs it and shows the bridge’s live sip_registered state.
Transport is UDP by default, or TLS where your server offers it.
Making and receiving calls
Receiving (WhatsApp → SIP). An incoming WhatsApp call is answered by the bridge and dialed to your ring target; your extension rings, and media is bridged once you pick up.
Dialing out (SIP → WhatsApp). From your extension, dial the WhatsApp number as E.164 digits
with no leading + — 447700900123 reaches +44 7700 900123. The call goes out as your linked
WhatsApp number. If the number is not on WhatsApp, the call is rejected (and that result is cached
for about three months, so a repeat dial fails fast). A call that WhatsApp does not answer within
the post-dial window (about 12 seconds) is cleared.
Whichever direction, only one call per number runs at a time; a second is refused as busy.
Codecs
Your phone system never sees WhatsApp’s audio formats. The bridge decodes WhatsApp Opus and MLow (the proprietary codec WhatsApp falls back to on constrained networks — no PBX decodes it) and offers your side, in order:
| Offered | Detail | |
|---|---|---|
| G.722 | wideband · 16 kHz | Offered first — the call stays wideband all the way to your phone |
| G.711 µ-law | PCMU · 8 kHz | The fallback every SIP phone, softphone and PBX speaks |
| G.711 A-law | PCMA · 8 kHz | Accepted when your side prefers it |
A phone that only speaks G.711 still works, at narrowband — a clean landline-quality call. Opus toward the PBX is not offered yet.
Egress
You can control where a number’s WhatsApp-side traffic exits to the internet, per account: nominate a WireGuard peer or a SOCKS5 proxy in the console and that number’s WhatsApp traffic leaves through your node instead of the default egress. It changes where the traffic goes, not what WhatsApp does with the account — WhatsApp’s terms still apply.
AI voice agent
Coming soon — not yet available. This section describes planned behavior. A plan may already list “AI agent calls” as an entitlement, but the runtime that answers a call with an AI voice is still in development; listing it reserves it, it does not switch it on today. For a live agent that talks over the phone now, connect your SIP line to a voice bot on your own PBX.
The AI voice agent will let a WhatsApp caller talk to a conversational AI without any PBX or SIP device in between. The planned shape:
- Bring your own voice provider (ElevenLabs first). You add your provider’s agent and a write-only API key on the number’s Voice agent card in the console; WhatsMCP holds no vendor key of its own beyond what you supply.
- Answer incoming calls with the agent — a toggle per number.
- Place outbound calls to an agent endpoint, driven from the MCP server or REST API, gated by the plan’s outgoing-calls entitlement.
We will document the exact configuration here when it ships. Until then, treat this as a roadmap item, not a feature you can turn on.
Limits and troubleshooting
| Symptom | Cause / fix |
|---|---|
| SIP page is locked | The number has no plan with calls — see Voice plans |
| Outbound calls refused | Your plan is incoming-only, or the number you dialed is not on WhatsApp |
| Inbound WhatsApp calls declined | Your plan is outgoing-only |
403 on an inbound SIP INVITE | Your plan is incoming-only — outbound SIP dialing is off for that mode |
| Registration fails at setup | The REGISTER probe rejected the credentials — re-check registrar, username, password and realm, then Test connection |
| Second call comes back busy | One call per number is the limit — add numbers for parallel calls |
| No audio / one-way audio | A NAT or firewall is blocking RTP; for hosted lines prefer TLS+SRTP on 5061 |
Every call needs the bridge SIP-registered and WhatsApp connected at the same time; Test connection on the SIP page shows both.
About this service
WhatsMCP links a regular WhatsApp number as a secondary device via a QR scan — your phone stays the primary device and you keep using WhatsApp on it. Because it speaks the WhatsApp protocol directly, there is no Meta business verification and no WhatsApp Business Calling API involved.
It is unofficial, not affiliated with or endorsed by Meta, and its use is outside WhatsApp’s terms of service — a number can be blocked. A dedicated number that lives only on the trunk is available on request. Weigh that before putting a number you depend on onto the bridge.