WhatsApp SIP Calling Integration

Overview

WhatsApp now supports SIP calling via the WhatsApp Cloud API, enabling voice calls using SIP over TLS/SRTP.

This enables native integration between WhatsApp and 3CX, extending the existing messaging-only integration to also support WhatsApp voice calls, which can be routed to 3CX extensions, queues, IVRs, or AI Agents.

Note that the current implementation for voice calls will support only incoming WhatsApp calls to 3CX.

Prerequisites

  • Enabling WhatsApp SIP requires a Live WhatsApp Application in Meta's Developer portal with messaging permissions for the business phone number you want to enable SIP for.
  • If you don't have the above set up already, please follow the steps explained on our WhatsApp Integration Guide and obtain your Phone number ID and User Access Token explained in the guide above, needed for authenticating the required requests to Meta's Graph API for enabling SIP.
  • Since enabling SIP Calling on your WhatsApp application is not currently available through Meta’s UI portal, you must use a third-party tool such as Postman to send POST requests to Meta’s Graph API.
  • To integrate multiple WhatsApp phone numbers simultaneously, each number must be associated with its own distinct WhatsApp Application within the Meta for Developers portal. The setup process detailed in this guide, from creating a WhatsApp Application to configuring the SIP Trunk on 3CX, must be repeated for each WhatsApp phone number you wish to integrate.
  • You can read more on the Official Guide for WhatsApp SIP.

Step 1: Create a WhatsApp Application

  • If you already have WhatsApp Messaging configured on your 3CX, you can skip this step and obtain your Phone number ID and User Access Token from your already configured WhatsApp in 3CX in Admin Console > Voice & Chat > Your WhatsApp Messaging Trunk
  • If not, please follow the steps explained on our WhatsApp Integration Guide and obtain your Phone number ID and User Access Token

Step 2: Enabling SIP on your WhatsApp Number

  • Send the following POST request to Meta's Graph API using curl or any other tool.
  • You can import the curl command directly into Postman by navigating to "File → Import" and pasting:

curl -X POST "https://graph.facebook.com/v24.0/<PHONE_NUMBER_ID>/settings" \

  -H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \

  -H "Content-Type: application/json" \

  -d '{

    "calling": {

      "status": "ENABLED",

      "callback_permission_status": "ENABLED",

      "call_icon_visibility": "DEFAULT",

      "srtp_key_exchange_protocol": "SDES",

      "sip": {

        "status": "ENABLED",

        "servers": [

          {

            "hostname": "<YOUR_3CX_FQDN>",

            "port": <YOUR_SIPS_PORT>

          }

        ]

      }

    }

  }'

  • Make sure to replace the following with your own details in the command above before sending it:
  • <PHONE_NUMBER_ID> = The Phone Number ID you obtained on Step 1 above
  • <YOUR_ACCESS_TOKEN> = The User Access Token you obtained on Step 1 above
  • <YOUR_3CX_FQDN> = Your 3CX PBX FQDN; for example:  mypbx.3cx.com
  • <YOUR_SIPS_PORT> = Usually 5061 if your PBX is using default ports
  • If the request is successful:

{"success":true}

  • You should get a success response in curl

  • Or in Postman

Step 3: Verify your SIP Configuration

  • Send the following GET request to Meta's Graph API:

curl -X GET "https://graph.facebook.com/v17.0/<PHONE_NUMBER_ID>/settings?fields=calling&include_sip_credentials=true" \

  -H "Authorization: Bearer <YOUR_ACCESS_TOKEN>"

  • Make sure to replace the following with your own info in the command above before sending it:
  • <PHONE_NUMBER_ID> = The Phone Number ID you obtained on Step 1 above
  • <YOUR_ACCESS_TOKEN> = The User Access Token you obtained on Step 1 above
  • If the request is successful, you should get something similar to the following response:

{

    "calling": {

        "status": "ENABLED",

        "call_icon_visibility": "DEFAULT",

        "callback_permission_status": "ENABLED",

        "srtp_key_exchange_protocol": "SDES",

        "sip": {

            "status": "ENABLED",

            "servers": [

                {

                    "app_id": 112233445566778,

                    "hostname": "pbx.3cx-example.com",

                    "port": 5061,

                    "sip_user_password": "aabbccddeeffgghhiijjkkllmmnnoopp"

                }

            ]

        }

    },

    "storage_configuration": {

        "status": "DEFAULT"

    }

}

  • In curl

  • Or in Postman

Step 4: Enable Call Settings in WhatsApp Business Manager

  • If Phone Numbers is not shown, click on All tools

  • Open the Call Settings tab and make sure you have enabled these options:
  • Allow voice calls
  • Allow callbacks
  • Display call buttons

Step 5: Create a SIP Trunk on 3CX

To create your new WhatsApp SIP Trunk:

  • Download the WhatsApp template from here
  • In your 3CX Admin Console, go to the "Admin → Advanced → Templates → Provider Templates" tab
  • Click the Import Provider button, select the template you downloaded above, and click the Import button:

  • Set a Name for your new WhatsApp SIP Trunk
  • Set the Default route for incoming WhatsApp SIP calls
  • Uncheck the Create an outbound rule checkbox
  • Set the Main Trunk Number to your WhatsApp number
  • Leave all other fields at their default values
  • Click the Save button
  • You will now be able to accept incoming WhatsApp calls of your WhatsApp Number and will be delivered to the selected 3CX destination.

Alternatively, you can create a Generic SIP Trunk on 3CX manually, making sure you are using the following configuration:

  • Authentication Type: IP-based
  • Host: wa.meta.vc
  • Port: Auto discovery
  • Transport Protocol: TLS
  • SRTP Mode: Enforced
  • Codecs: OPUS

See also

Last Updated

This document was last updated on 3 August 2026

https://www.3cx.com/docs/whatsapp-sip-calling-integration/