Подключение WhatsApp Calling к FreePBX (Asterisk)

Для подключения звонков WhatsApp в CRM Битрикс24 воспользуйтесь этой инструкцией: Подключение звонков WhatsApp в Битрикс24


С июля 2025 года компания Meta предоставляет возможность приёма звонков из WhatsApp на любой сервер IP телефонии. В данной инструкции мы рассмотрим процесс подключения WhatsApp Calling к FreePBX 17, работающему на Asterisk версии 22.5

Схема звонка

Сервер Meta (wa.meta.vc) ---> Ваша SIP АТС

Этот вариант будет удобен тем компаниям, в которых есть опытный специалист по IP телефонии, чтобы настроить и поддерживать подключение.

Обязательные требования для получения возможности работать со звонками:

  1. Кредитка привязана к аккаунту WhatsApp в качестве платежного средства
  2. Номер WhatsApp имеет лимит (Tier) для исходящих сообщений 1000 и больше в сутки

При первом подключении к WhasApp Cloud номер будет иметь лимит в 250 исходящих сообщений в сутки. Чтобы увеличить лимит можно использовать два способа:

  1. Пройти верификацию бизнеса
  2. Отправить 1000 и больше исходящих сообщений за месяц на уникальные номера и не попасть в бан

Активация WhatsApp Calling на вашем номере

  1. Подключите ваш номер к WhatsApp Cloud API на этой странице
  2. Перейдите в настройки номера, кликнув по нему в общем списке подключенных номеров
  3. Поле " Направление звонка" - "На SIP сервер", поля домен и порт заполните значениями, соответствующими вашему серверу
  4. Нажмите "Отправить"
  5. Если не будет ошибок, то в поле "Пароль SIP" будет отображаться пароль. Чтобы поменять пароль в поле "Направление звонка" выберите "Отключено", сохраните настройки и подключите сервер заново с п. 3

Enable whatsapp calling

  • Откройте в приложении WhatsApp номер, который подключили и проверьте что в его профиле появилась кнопка "Call". Попробуйте совершить звонок
  • Если кнопка не появилась, снова перейдите в настройки номера и проверьте код в поле "Ошибка" . Расшифровка кодов ошибок доступна здесь.

Подготовка сервера FreePBX

  1. Сервер FreePBX должен быть доступен из интернета по порту 5061 TCP
  2. Присвойте вашему серверу FreePBX доменное имя, например pbx.example.com
  3. На странице Admin > Certificate Management создайте или загрузите сертификат для вашего домена
Screenshot from 2025-08-17 13-11-47
  • На странице Settings - Asterisk SIP Settings вкладка SIP Settings [chan_pjsip]
    - в блоке TLS/SSL/SRTP Settings выберите ваш сертификат
    - SSL Method - tlsv1_2
    - Verify Client - No
    - Verify Server - No
    - в блоке Transports активируйте tls
    - в блоке 0.0.0.0 (tls) значение параметра Port to Listen On - 5061
    Сохраните настройки
Screenshot from 2025-08-17 13-16-48

Проверка настроек сервера IP-телефонии Asterisk

С внешнего сервера проверьте корректность подключения командой

openssl s_client -quiet -verify_hostname {hostname} -connect {hostname}:{port}

Результат успешной проверки будет выглядеть примерно так:

$ openssl s_client -quiet -verify_hostname pbx.example.com -connect pbx.example.com:5061
Connecting to 64:ff9b::68f8:b0b8
depth=2 C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority
verify return:1
depth=1 C=AT, O=ZeroSSL, CN=ZeroSSL RSA Domain Secure Site CA
verify return:1
depth=0 CN=example.com
verify return:1

Создание SIP транка для подключения WhatsApp Calling к Asterisk

  • Connectivity > Trunks > Add PJSIP Trunk
  • Trunk Name - meta
  • pjsip Settings > General
    - Username: ваш номер в формате +77776665544
    - Secret: Пароль SIP, полученный при активации звонков
    - Authentication - Outbound
    - Registration - None
    - SIP Server - wa.meta.vc
    - Transport - 0.0.0.0-tls
freepbx whatsapp sip trunk

Получить адреса всех подсетей WhatsApp Cloud API для сопоставления

whois -h whois.radb.net -- '-i origin AS32934' | grep ^route: | awk '{print $2}' | grep -v ":" | sort -u
  • pjsip Settings > Advanced
    - From Domain: домен вашего сервера, указанный при активации звонков
    - From User: ваш номер в формате +77776665544
    - Match (Permit) - 69.171.224.0/19, ... адреса WhatsApp Cloud API через запятую
    - Media Encryption - SRTP via in-SDP
whatsapp sip trunk freepbx asterisk

  • pjsip Settings > Codecs
    - opus
Screenshot from 2025-08-22 11-33-13

Сохраните настройки транка и создайте входящий маршрут где в качестве DID укажите номер вашего WhatsApp с которого планируете принимать звонки в формате +77776665544

Screenshot from 2025-08-17 13-34-13

Настройка исходящих звонков через транк WhatsApp Cloud

Настройте исходящий маршрут для созданного транка

freepbx whatsapp outbound call route

ВНИМАНИЕ! Без предварительного разрешения вызываемого абонента совершить исходящий звонок нельзя!

То есть не получится просто взять и начать звонить всем подряд из своей CRM или 2гис.

Для того чтобы иметь возможность совершать исходящие звонки своим клиентам необходимо выполнить следующие условия:

  1. Привязать банковскую карту к аккаунту WhatsApp в качестве платёжного средства
  2. Получить предварительное разрешение от абонента на звонок. Разрешение на входящий звонок клиент может выдать самостоятельно в вашем профиле WhatsApp или оно будет автоматически выдано на 7 дней, если клиент сам позвонит вам со своего WhatsApp
whatsapp cloud call_permission_request

Пример настроек Asterisk для WhatsApp Calling без FreePBX

# pjsip.transports.conf
[0.0.0.0-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
external_media_address=123.123.123.123
external_signaling_address=123.123.123.123
ca_list_file=/etc/ssl/certs/ca-certificates.crt
cert_file=/etc/asterisk/keys/example.com-fullchain.crt
priv_key_file=/etc/asterisk/keys/example.com.key
method=tlsv1_2
verify_client=no
verify_server=no
allow_reload=no
tos=cs3
cos=3
local_net=10.8.0.0/24


# pjsip.conf
[wa.meta.vc]
type=aor
qualify_frequency=60
contact=sip:wa.meta.vc

[wa.meta.vc]
type=endpoint
transport=0.0.0.0-tls
context=from-meta
disallow=all
allow=opus
aors=wa.meta.vc
send_connected_line=no
rtp_keepalive=0
language=en
user_eq_phone=no
t38_udptl=no
t38_udptl_ec=none
fax_detect=no
trust_id_inbound=no
t38_udptl_nat=no
direct_media=no
media_encryption=sdes
rtp_symmetric=yes
dtmf_mode=auto

[wa.meta.vc]
type=identify
endpoint=wa.meta.vc
match=69.171.224.0/19