Примеры интеграции | Документация для разработчиков
Примеры интеграции
Обновлено: 25 февраля 2026 г
В этом руководстве объясняется интеграция распространенных VoIP-платформ с API бизнес-звонков WhatsApp.
Данное руководство носит исключительно информационный характер и не предоставляет никаких гарантий или поддержки со стороны Meta или какого-либо поставщика. Существует множество способов интеграции, и в руководстве описан лишь один из них, исключительно в иллюстративных целях.
Asterisk с использованием SIP
Обзор
В этом руководстве объясняется, как настроить API для бизнес-звонков WhatsApp с использованием SIP-сигнализации в Asterisk—открытой АТС (частной телефонной станции). Вы узнаете, как настроить сервер Asterisk, подключить SIP-телефоны и обрабатывать как входящие, так и исходящие звонки WhatsApp.
Звонки, инициированные пользователем
Звонки, инициированные бизнесом
На этапе передачи данных от WA к Asterisk используется SDES для обмена ключами шифрования мультимедиа и Opus для аудиокодека
В соединении Asterisk с SIP UA для обмена ключами шифрования мультимедиа используется SDES, а для аудиокодеков — Opus или G711
Предварительные требования
Сборка и установка Asterisk
Данное руководство было протестировано с использованием Asterisk версии 22.5.2
Конфигурация Asterisk
Эти конфигурационные файлы находятся в каталоге /etc/asterisk/
extensions.conf
Замените следующие заполнители фактическими значениями
[c2b-sub-dial]
exten => s,1,NoOp()
same => n,Read(Digits,incoming_welcome,0,,5,500)
same => n,Dial(PJSIP/${Digits})
same => n,Hangup()[whatsapp]
exten => _10XX,1,NoOp()
same => n,Dial(PJSIP/${EXTEN})
same => n,Hangup();Расширениедля бизнес Meta SIP = b2c-sip,1,NoOp)
same > n,Read(Digits,outgoing_welcome,0,5,500)
same = n,Dial(PJSIP/whatsapp/sip:${Digits}@wa.meta.vc><wa-business-phone-number>-dial+);(Расширение приглашения отMeta на <asterisk-sip-server-dns>sub_Goto,<wa-business-phone-number>SIPзапросов@шлюза=sдля>,(exten
) - 11обработки,,c2bвходящих-звонковB2Cчерезшлюзexten>=Pjsip.conf
Замените следующие заполнители фактическими значениями
Файлы сертификатов следует размещать в папках /var/lib/asterisk/certs/fullchain.cer и /var/lib/asterisk/certs/cer.key
[transport-tls]
type=protocol=tls=0.0.0.0:5061=/var/lib/asterisk/certs/fullchain.cerSIP/var/lib/asterisk/certs/cer.key
cert_file=signaling=;-method-}addresssslv23priv_key_file==allow_wildcard_certs;Externaltransportaddresssignalling}-yes-=external_media_address{externalmedia{forexternal external_signaling_addressaddressbindСеть, которую следует считать локальной, используется для целей NAT local_net={local-net}[sdes_endpointtemplate](!)
type=endpoint context=whatsapp disallow=all allow=OPUS direct_media=no
rtp_symmetric=yes force_rport=yes rewrite_contact=no
media_use_received_transport=yes media_encryption=sdes
[authtemplate](!)
type=auth auth_type=userpass password={sip-ua-password}[aortemplate](!)
type=aor max_contacts=1
remove_existing=yes
[aoridentitytemplate](!)
type=identify match_header=X-FB-External-Domain: wa.meta.vc
;SDES users
[1000](sdes_endpointtemplate)
auth=1000_auth aors=1000[1000_auth](authtemplate)
username=1000[1000](aortemplate)[1000](aoridentitytemplate)
endpoint=1000[1001](sdes_endpointtemplate)
auth=1001_auth aors=1001[1001_auth](authtemplate)
username=1001[1001](aortemplate)[1001](aoridentitytemplate)
endpoint=1001[1002](sdes_endpointtemplate)
auth=1002_auth aors=1002[1002_auth](authtemplate)
username=1002[1002](aortemplate)[1002](aoridentitytemplate)
endpoint=1002[1003](sdes_endpointtemplate)
auth=1003_auth aors=1003[1003_auth](authtemplate)
username=1003[1003](aortemplate)[1003](aoridentitytemplate)
endpoint=1003[1004](sdes_endpointtemplate)
auth=1004_auth aors=1004[1004_auth](authtemplate)
username=1004[1004](aortemplate)[1004](aoridentitytemplate)
endpoint=1004[1005](sdes_endpointtemplate)
auth=1005_auth aors=1005[1005_auth](authtemplate)
username=1005[1005](aortemplate)[1005](aoridentitytemplate)
endpoint=1005;Эта конечная точка сопоставляется с IVR для вызовов C2B
[c2b-sip](sdes_endpointtemplate)[c2b-sip](aortemplate)[c2b-sip]
type=identify endpoint=c2b-sip match_header=X-FB-External-Domain: wa.meta.vc
;специальная конечная точка дляс Meta SIP Gateway интеграции
;Эта конечная точка соответствует IVR для звонков B2C
[b2c-sip](sdes_endpointtemplate)[b2c-sip](aortemplate)[whatsapp](sdes_endpointtemplate)
type=endpoint transport=transport-tls disallow=all allow=opus,ulaw,alaw aors=whatsapp from_user={wa-business-phone-number}
from_domain={domain-name}
outbound_auth=whatsapp
[whatsapp]
type=aor contact=sip:wa.meta.vc
[whatsapp]
type=identify endpoint=whatsapp
[whatsapp]
type=auth auth_type=digest password={meta-sip-user-password}
username={wa-business-phone-number}
realm=*rtp.conf
[общие];хостаили адрес определения STUN-сервера, используемого - и
порта по которому доступ к RTP-сессииНомерпорта является необязательнымЕсли .внешнегоон , по умолчанию значение 3478. использоваться.Эта опция отключенаумолчанию Разрешение пополучить.имен время загрузки,иесли DNS используется, опущенбудет TTL.;;например stundaddr=mystun.server.com:3478=rtpend;rtpstartпосле10000разрешение
stunaddr=stun.l.google.com:19302=воименпроисходитьмногократнобудет60000истечения
ИмядляIP
адреса,можноНастройка VoIP-телефона
Загрузите и установите программный телефонный клиент (например, Linphone)для тестирования как деловых, так и пользовательских звонков.
Настройка учетной записи
Итоговый контрольный список
Поиск неисправностей
Не удается зарегистрировать SIP UA
Убедитесь, что SIP-URL указан правильно и домен указывает на сервер Asterisk. Выполните команду `host {domain-name}`, чтобы проверить, что IP-адрес указывает на сервер Asterisk.
Отсутствие подтверждения (ACK) от Meta ИЛИ прерывание звука в Business примерно через 30 секунд ИЛИ Meta возвращает ответ 404 на BYE
При инициированном пользователем вызове Meta отправляет
SIP INVITE вашему SIP-серверу, который затем отвечает кодом 200 OK. Meta подтверждает ваш 200 OK кодом ACK , но вы его никогда не получаете. Поэтому ваш SIP-сервер продолжает повторно отправлять 200 OK , и в конечном итоге диалог SIP завершается из-за истечения времени ожидания ACK (обычно 32 секунды).Наиболее вероятная причина этой проблемы — некорректные
Record-Route в вашем 200 OK на Meta. 200 OK не должен изменять Record-Route , включенные в исходный INVITE. Ваш SIP-сервер может добавлять новые Record-Route , но не может изменять те, которые присутствуют в нашем INVITE.Решение этой проблемы заключается в изменении
параметра rewrite_contact=yes на rewrite_contact=no в конфигурации конечной точки WhatsApp в файле pjsip.conf. После этого убедитесь, что ваш ответ 200 OK в списке последних двух : заголовкиЭту проблему сложно обнаружить или диагностировать. Даже при наличии этой ошибки соединение устанавливается, и медиапоток передается с обеих сторон, но примерно через 32 секунды ваш SIP-сервер завершает вызов, и он не передается клиенту WhatsApp, потому что ваш запрос BYE содержит некорректные
Route . Поэтому пользователь WA перестает слышать деловой звук примерно через 32 секунды.Record-Route:<sip:wa.meta.vc>lr;transport=tls;lr>Record-Route:<sip:onevc-sip-proxy.fbinfra.net=transport:tls8191;;FreeSWITCH с использованием SIP
Обзор
В этом руководстве объясняется, как настроить API бизнес-звонков WhatsApp с использованием SIP-сигнализации и FreeSWITCH—коммуникационной платформы с открытым исходным кодом. Вы узнаете, как настроить сервер FreeSWITCH, подключить SIP-телефоны и обрабатывать как инициированные пользователем, так и инициированные компанией звонки WhatsApp.
Звонки, инициированные пользователем
Звонки, инициированные бизнесом
На участке WA — FreeSWITCH для обмена ключами шифрования мультимедиа используется SDES, а в качестве аудиокодека — Opus. На участке FreeSWITCH — SIP UA для обмена ключами шифрования мультимедиа используется SDES, а в качестве аудиокодеков — Opus или G.711
Предварительные требования
Сборка и установка FreeSWITCH
Данное руководство было протестировано с использованием FreeSWITCH версии 1.10.12. FreeSWITCH использует Sofia (библиотеку пользовательских агентов SIP с открытым исходным кодом). Для данного руководства использовалась Sofia версии 1.13.17
Конфигурация FreeSWITCH
Эти конфигурационные файлы находятся в каталоге /usr/share/freeswitch/etc/freeswitch
wa-biz-api-dialplan.xml
Разместите план набора номера в файле /usr/share/freeswitch/etc/freeswitch/dialplan/default/wa-biz-api-dialplan.xml
<include><extensionname="c2b_calls_sip_ivr"><!--Dial plan is selected if the SIP request is coming from Meta--><conditionполе="${sip_from_host}"выражение="^wa.meta.vc$"><!--Verify the IP from where the request is coming, compare the IP with the Meta allowlisted IPs--><actionapplication="check_acl"data="${network_addr} whatsapp_allow normal_clearing"/><!--Enable encrypted media using SDES--><actionapplication="set"data="rtp_secure_media=true"/><actionapplication="answer"/><!--Add silence stream for 1 sec so that the media path is established between whatsapp and freeswitch to avoid audio clipping--><actionapplication="playback"data="silence_stream://1000"/><actionapplication="play_and_get_digits"data="2 5 3 7000 # $${base_dir}/sounds/incoming_welcome.wav $${base_dir}/sounds/incoming_invalid.wav extension \d+"/><!--While the call is being bridged, play a ringtone for the caller--><actionapplication="set"data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--Offer G711 and Opus for FreeSWITCH-SIP UA leg --><actionapplication="export"data="nolocal:absolute_codec_string=PCMA,PCMU,OPUS@48000h@20i"/><actionapplication="bridge"data="user/${extension}"/><actionapplication="hangup"/></condition></extension><extensionname="b2c_calls_ivr"><conditionfield="destination_number"expression="^b2c-sip$"><!--Enable encrypted media using SDES--><actionapplication="set"data="rtp_secure_media=true"/><actionapplication="answer"/><actionapplication="playback"data="silence_stream://1000"/><actionapplication="set"data="caller_id_check=${caller_id_number}"/><actionapplication="play_and_get_digits"data="2 12 3 20000 # $${base_dir}/sounds/outgoing_welcome.wav $${base_dir}/sounds/outgoing_invalid.wav whatsapp_number \d+"/><actionapplication="log"data="INFO [whatsapp_number] is ${whatsapp_number}"/><!--While the call is being bridged, play a ringtone for the caller--><actionapplication="set"data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--Offer only OPUS--><actionapplication="export"data="nolocal:absolute_codec_string=OPUS@48000h@20i,OPUS@8000h@20i"/><!--Bridge the call by calling META SIP with the WA Number--><actionapplication="bridge"data="sofia/gateway/whatsapp/+${whatsapp_number}"/><actionapplication="hangup"/></condition></extension></include>Аудиофайлы следует размещать в папке /usr/share/freeswitch/sounds (не входит в комплект)
whatsapp.xml
Этот файл настраивает шлюз WhatsApp. Скопируйте его в /usr/share/freeswitch/etc/freeswitch/sip_profiles/external/whatsapp.xml
<!--Gateway configuration for Meta SIP--><!--replace {phone-number},{meta-sip-password} and {domain-name} before starting FreeSWITCH--><include><gatewayname="whatsapp"><paramname="username"value="{phone-number}"/><paramname="password"value="{meta-sip-password}"/><paramname="register"value="false"/><paramname="realm"value="wa.meta.vc"/><paramname="from-user"value="{phone-number}"/><paramname="from-domain"value="{domain-name}"/></gateway></include>Замените следующие заполнители фактическими значениями
acl.conf.xml
Откройте файл /usr/share/freeswitch/etc/freeswitch/autoload_configs/acl.conf.xml
Добавьте следующий список в
network-lists. элемент<!--IP addresses from Meta that are allowed to send SIP requests via the gateway. Keep this up to date--><listname="whatsapp_allow"default="deny"><nodetype="allow"cidr="31.13.24.0/21"/><nodetype="allow"cidr="31.13.64.0/18"/><nodetype="allow"cidr="45.64.40.0/22"/><nodetype="allow"cidr="57.141.0.0/21"/><nodetype="allow"cidr="57.141.8.0/22"/><nodetype="allow"cidr="57.141.12.0/23"/><nodetype="allow"cidr="57.144.0.0/14"/><nodetype="allow"cidr="66.220.144.0/20"/><nodetype="allow"cidr="69.63.176.0/20"/><nodetype="allow"cidr="69.171.224.0/19"/><nodetype="allow"cidr="74.119.76.0/22"/><nodetype="allow"cidr="102.132.96.0/20"/><nodetype="allow"cidr="103.4.96.0/22"/><nodetype="allow"cidr="129.134.0.0/16"/><nodetype="allow"cidr="147.75.208.0/20"/><nodetype="allow"cidr="157.240.0.0/16"/><nodetype="allow"cidr="163.70.128.0/17"/><nodetype="allow"cidr="163.77.128.0/17"/><nodetype="allow"cidr="173.252.64.0/18"/><nodetype="allow"cidr="179.60.192.0/22"/><nodetype="allow"cidr="185.60.216.0/22"/><nodetype="allow"cidr="185.89.216.0/22"/><nodetype="allow"cidr="204.15.20.0/22"/></list>vars.xml
Измените файл /usr/share/freeswitch/etc/freeswitch/vars.xml
Добавьте строку <X-PRE-PROCESS cmd="set" data="rtp_secure_media=mandatory"/> под <include>Замените<X-PRE-PROCESS cmd="set" data="default_password=1234"/>на(замените {sip_ua_password}на ваш пароль)<X-PRE-PROCESS cmd="set" data="default_password={sip-ua-password}"/>Замените<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>на(замените {domain-name}на вашего FreeSWITCH DNS)<X-PRE-PROCESS cmd="set" data="domain={domain-name}"/> Замените stun-set" data="external_sip_ip=stun:stun.freeswitch.org"/> с (замените {external-ip} на ваш публичный IP-адрес FreeSWITCH) set" data="external_sip_ip={external-ip}"/> Замените stun-set" data="external_rtp_ip=stun:stun.freeswitch.org"/> на (замените {external-ip} на ваш публичный IP-адрес FreeSWITCH) stun-set" data="external_rtp_ip={external-ip}"/>внутренний.xml
Измените файл /usr/share/freeswitch/etc/freeswitch/sip_profiles/internal.xml. Найдите:
<paramname="sip-trace"value="no"/>Замените это на
<paramname="sip-trace"value="yes"/>файл
/usr/share/freeswitch/etc/freeswitch/sip_profiles/external.xml
Замените<param name="sip-trace" value="no"/>на<param name="sip-trace" value="yes"/>Замените<param name="tls" value="$${external_ssl_enable}"/>на<param name="tls" value="true"/>Замените<!--<<param name="tls-cert-dir" value=""/>-->с<param name="tls-cert-dir" value="/usr/share/freeswitch/etc/freeswitch/certs"/>Убедитесь, что сертификаты размещены в папке /usr/share/freeswitch/etc/freeswitch/certs
Итоговый контрольный список
Поиск неисправностей
Не удается зарегистрировать SIP UA
Убедитесь, что SIP-URL указан правильно и домен указывает на сервер FreeSWITCH. Выполните команду `host {domain-name}`, чтобы проверить, что IP-адрес указывает на сервер FreeSWITCH.
Отслеживание SIP-сообщений
Запустите CLI (/usr/share/freeswitch/bin/fs_cli), чтобы просмотреть SIP-сообщения
FreeSWITCH использует Graph API с Janus
Обзор
В этом руководстве объясняется, как настроить WhatsApp Business Calling API, используя сигнализацию WhatsApp Cloud API с FreeSWITCH—открытым фреймворком для связи — и Janus—универсальным WebRTC-сервером. Вы узнаете, как настроить сервер FreeSWITCH, подключить SIP-телефоны и обрабатывать как входящие, так и исходящие звонки WhatsApp.

Звонки, инициированные пользователем
Звонки, инициированные бизнесом
Сервер Janus находится между WA и FreeSWITCH и преобразует медиафайлы из WA (совместимые с WebRTC и использующие обмен ключами DTLS) в медиафайлы, согласованные с FreeSWITCH (использующие обмен ключами SDES).
FreeSWITCH - Sip UA будет использовать SDES для обмена ключами шифрования мультимедиа и Opus или G711 для аудиокодеков
Предварительные требования
Интеграция с сигнализацией Cloud API
Вам потребуется реализовать интеграционный модуль, который будет выступать посредником между WA и Janus и преобразовывать сообщения Cloud API Signalling в сообщения плагина Janus SIP и наоборот.
Вам понадобится
Звонки, инициированные бизнесом
Звонки, инициированные пользователем
Сборка и установка системы Janus
См. https://github.com/meetecho/janus-gateway.
Данное руководство было протестировано с использованием версии 1.2.3.
Конфигурация Януса
janus.jcfg
Измените файл janus.jcfg, который находится по адресу /usr/share/janus/etc/janus/janus.jcfg. Установите параметр nat_1_1_mapping на публичный IP-адрес сервера Janus
Чтобы начать работу с Янусом
/share/janus/bin/janus --debug-janus.loglevel=6--libnice-debug/=on -Sstun.l.google.com:19302=//usrjanusshare---loglogvarfile=/etc/janusjanus.jcfg--config /usr////Сборка и установка FreeSWITCH
Данное руководство было протестировано с использованием FreeSWITCH версии 1.10.12. FreeSWITCH использует Sofia (библиотеку пользовательских агентов SIP с открытым исходным кодом). Для данного руководства использовалась Sofia версии 1.13.17
Конфигурация FreeSWITCH.
Эти конфигурационные файлы находятся в каталоге /usr/share/freeswitch/etc/freeswitch.
wa-biz-api-dialplan.xml
Разместите план набора номера в файле /usr/share/freeswitch/etc/freeswitch/dialplan/default/wa-biz-api-dialplan.xml
<include><extensionname="c2b_calls_ivr"><conditionfield="destination_number"expression="^c2b-sip$"><actionapplication="set"data="rtp_secure_media=true"/><actionapplication="answer"/><!--Add silence stream for 1 sec so that the media path is established between whatsapp and freeswitch to avoid audio clipping. TODO: Investigate if silence can be removed--><actionapplication="playback"data="silence_stream://1000"/><actionapplication="play_and_get_digits"data="2 5 3 7000 # $${base_dir}/sounds/incoming_welcome.wav $${base_dir}/sounds/incoming_invalid.wav extension \d+"/><!--While the call is being bridged, play a ringtone for the caller--><actionapplication="set"data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--WA calls bridged via Janus through extension 1000 only support OPUS. However, the callee might be restricted to other codecs for example G722--><!--Therefore , don't restrict to OPUS for C2B calls and offer more codecs to the caller. Transcoding between OPUS and the negotiated codec by the caller--><!--will happen in freeswitch--><actionapplication="export"data="nolocal:absolute_codec_string=PCMA,PCMU,OPUS@48000h@20i,G722"/><actionapplication="bridge"data="user/${extension}"/><actionapplication="hangup"/></condition></extension><extensionname="b2c_calls_ivr"><conditionfield="destination_number"expression="^b2c-sip$"><actionapplication="set"data="rtp_secure_media=true"/><actionapplication="answer"/><actionapplication="playback"data="silence_stream://1000"/><actionapplication="set"data="caller_id_check=${caller_id_number}"/><actionapplication="log"data="INFO [caller id ] is ${caller_id_check}"/><actionapplication="play_and_get_digits"data="2 12 3 20000 # $${base_dir}/sounds/outgoing_welcome.wav $${base_dir}/sounds/outgoing_invalid.wav whatsapp_number \d+"/><actionapplication="log"data="INFO [whatsapp_number] is ${whatsapp_number}"/><!--Add the whatsapp number entered by the user as a custom SIP header, Janus will use this WA user number in API request to Meta--><actionapplication="export"data="sip_h_X-WhatsApp-Number=${whatsapp_number"/><!--While the call is being bridged, play a ringtone for the caller--><actionapplication="set"data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--WA calls bridged via Janus through extension 1000 only support OPUS. However, the caller might be restricted to other codecs for example G722--><!--Therefore , don't restrict to OPUS for B2C calls and let caller select other codecs--><!--However, force transcoding to OPUS by only offering OPUS to Janus--><actionapplication="export"data="nolocal:absolute_codec_string=OPUS@48000h@20i,PCMU,PCMA"/><!--Bridge the call to extension 1000 to which capi-calling is registered via Janus to route calls to WhatsApp--><actionapplication="bridge"data="user/1000"/><actionapplication="hangup"/></condition></extension></include>Аудиофайлы следует размещать в папке /usr/share/freeswitch/sounds (не входит в комплект)
внутренний.xml
Измените файл /usr/share/freeswitch/etc/freeswitch/sip_profiles/internal.xml. Найдите:
<paramname="sip-trace"value="no"/>Замените это на
<paramname="sip-trace"value="yes"/>Настройка VoIP-телефона
Обратитесь к предыдущему разделу.
Итоговый контрольный список
Поиск неисправностей
Не удается зарегистрировать SIP UA
Убедитесь, что SIP-URL указан правильно и домен указывает на сервер FreeSWITCH. Выполните команду `host {domain-name}`, чтобы проверить, что IP-адрес указывает на сервер FreeSWITCH.
Отслеживание SIP-сообщений
Запустите CLI (/usr/share/freeswitch/bin/fs_cli), чтобы просмотреть SIP-сообщения
Asterisk с использованием Graph API и RtpEngine
Обзор
В этом руководстве объясняется, как настроить WhatsApp Business Calling API с использованием сигнализации WhatsApp Cloud API в сочетании с Asterisk—открытой АТС (PBX) — и RtpEngine—открытым прокси-сервером, используемым для ретрансляции, обработки и управления потоками RTP. Вы узнаете, как настроить сервер Asterisk, подключить SIP-телефоны и обрабатывать как входящие, так и исходящие звонки WhatsApp.
Звонки, инициированные пользователем
Звонки, инициированные бизнесом
RtpEngine выступает в роли медиапрокси и находится между потоком данных от WA (совместимого с WebRTC протокола с обменом ключами DTLS) и Asterisk (обмен ключами SDES)
Предварительные требования
Интеграция с сигнализацией Cloud API
Вам потребуется реализовать интеграционный модуль, который будет выступать в качестве моста между WhatsApp и Asterisk. Этот модуль будет:
Для данной настройки вам потребуются следующие компоненты, входящие в состав модуля интеграции

Звонки, инициированные бизнесом
Звонки, инициированные пользователем
Сборка и установка Asterisk
См. https://docs.asterisk.org/Getting-Started/Installing-Asterisk/Installing-Asterisk-From-Source/Building-and-Installing-Asterisk/
Данное руководство было протестировано с использованием Asterisk версии 22.5.2
Сборка и установка RtpEngine
обратитесь к https://github.com/sipwise/rtpengine. Данное руководство было протестировано с использованием версии RtpEngine 13.3.1.4.
Подробную информацию о протоколе управления ng можно найти по ссылке https://rtpengine.readthedocs.io/en/latest/ng_control_protocol.html
Для запуска RTPEngine выполните команду
/usr//rtpengine--listen -ng={local-ip}:22222--interface\={local-ip}!{public-ip}-f- EbinЗаменять
Конфигурация Asterisk.
Эти конфигурационные файлы находятся в каталоге /etc/asterisk/
extensions.conf
Замените следующие заполнители фактическими значениями
[handler];Установить заголовки для канала вызываемого абонента exten => addheader,1,Set(PJSIP_HEADER(add,X-WhatsApp-Number)=${DIGITS})
same => n,Return()[default]
exten => _10XX,1,NoOp()
same => n,Dial(PJSIP/${EXTEN})
same => n,Hangup()
exten => b2c-sip,1,NoOp()
same => n,Read(Digits,outgoing_welcome,0,5,500)
same => n,Set(GLOBAL(DIGITS)=${Digits});Перед звонка- добавьте заголовок WA клиента для хранения номера пользователя WA, полученного из цифр, введенных агентом (DTMF):
same => n,Dial(PJSIP/1000,b(handler^addheader^1))
same => n,Hangup()
exten => c2b-sip,1,NoOp()
same => n,Read(Digits,incoming_welcome,0,5,500)
same => n,Dial(PJSIP/${Digits})
same => n,Hangup()pjsip.conf
Замените следующие заполнители фактическими значениями
Примечание:
Добавочный номер 1000 используется для соединения вызовов WA с Asterisk (см. раздел « Интеграция с сигнализацией Cloud API»).
[global]
type=global
debug=yes ;Включить/отключить отладку SIP.Допустимые параметры: yesВнешнийIP-адресдляобработкиRTP
external_media_address={external-media-addresslocal_net| no [transport-tcp] type = transport protocol = tcp bind = 0.0.0.0;} ; адресВнешний длясигнализацииSIPexternal_signaling_address={external-signaling- address } ;Сеть,которуюследуетсчитатьлокальнойдляцелейNAT { local = - net}[endpointtemplate](!)type
=endpointcontext=default
disallow=all allow=OPUS,g722,g729,ulaw
;Нет звука если direct_media установлено, на yes direct_media=no
rtp_symmetric=yes use_avpf=yes media_encryption=sdes media_use_received_transport=yes rtcp_mux=yes
[authtemplate](!)
type=auth auth_type=userpass password={sip-ua-password}[aortemplate](!)
type=aor max_contacts=1
remove_existing=yes
[1000](endpointtemplate)
disallow=all
;расширение 1000используется для RtpEngineорганизации звонков WhatsApp
;WhatsApp поддерживает только OPUS. allow=OPUS auth=1000_auth aors=1000[1000_auth](authtemplate)
username=1000[1000](aortemplate)[1001](endpointtemplate)
auth=1001_auth aors=1001[1001_auth](authtemplate)
username=1001[1001](aortemplate)[1002](endpointtemplate)
auth=1002_auth aors=1002[1002_auth](authtemplate)
username=1002[1002](aortemplate)[1003](endpointtemplate)
auth=1003_auth aors=1003[1003_auth](authtemplate)
username=1003[1003](aortemplate)[1004](endpointtemplate)
auth=1004_auth aors=1004[1004_auth](authtemplate)
username=1004[1004](aortemplate)[1005](endpointtemplate)
auth=1005_auth aors=1005[1005_auth](authtemplate)
username=1005[1005](aortemplate)Настройка VoIP-телефона
Обратитесь к предыдущему разделу.
Итоговый контрольный список
Поиск неисправностей
Не удается зарегистрировать SIP UA
Убедитесь, что SIP-URL указан правильно и домен указывает на сервер Asterisk. Выполните команду `host {domain-name}`, чтобы проверить, что IP-адрес указывает на сервер Asterisk.
Asterisk со встроенным WebRTC, использующий Graph API
Этот подход аналогичен использованию Asterisk Graph API с RtpEngine,
за исключением того, что он использует встроенную поддержку WebRTC в Asterisk и, следовательно, не требует RtpEngine.
Таким образом, компонент RtpEngineClient в этом подходе не требуется
В плане конфигурации и настройки единственное отличие заключается в конфигурации расширения 1000, которая приведена ниже
...;Остальное содержимое опущено для краткости
[1000](endpointtemplate)
disallow=all
;расширение 1000используется поддерживает SIP интеграции модуля для организации WhatsApp звонков
;WhatsApp только OPUS allow=OPUS auth=1000_auth aors=1000
dtls_auto_generate_cert=yes webrtc=yes
;Установка webrtc=yes — это сокращение для установки следующих параметров:; use_avpf=yes
; media_encryption=dtls
; dtls_verify=fingerprint
; dtls_setup=actpass
; ice_support=yes
; media_use_received_transport=yes
; rtcp_mux=yes
Комментарии отсутствуют
Комментарии отсутствуют