Asterisk и миграция на PJSIP

Не буду писать о том, что такое PJSIP и почему он теперь есть. И без меня писателей хватает, поэтому быстренько пробежимся по настройкам, и основным моментам для тех, кто использовал chan_sip.
Главная проблема при переходе заключается в том, что в PJSIP добавили гибкости, причем в таких количествах, что ей подавиться не сложно. Для каждого пира (теперь он называется endpoint) нужно сделать несколько секций (входящая и исходящая авторизация, регистрация, сам endpoint и еще несколько). Но, через какое-то время передумали и добавили модуль pjsip wizard, который, при загрузке сам сделает что нужно. На него-то и будем рассчитывать. В ubuntu-server 18.04 LTS Asterisk версии 13, древненько но пусть будет.

Первое, что нужно чтобы перейти на PJSIP – это отключить старый chan_sip, чтобы не мешался. Отключать будем весь модуль, строкой

noload => chan_sip.so

в modules.conf единственная настройка в конфиге pjsip.conf, которая понадобится – это настройка транспорта.

[udp-transport]
protocol=udp
bind=0.0.0.0

Тут все должно быть понятно. Эндпойнты настроем через pjsip_wizard.conf
Во-первых, для простоты писания создаем шаблон:

[office-template](!)
type=wizard
transport=udp-transport
accepts_auth=yes               
accepts_registrations = yes     
aor/qualify_frequency=300
aor/max_contacts=1
inbound_auth/auth_type=userpass
endpoint/disallow=all
endpoint/allow=alaw,ulaw
endpoint/dtmf_mode = rfc4733
endpoint/context = office
endpoint/direct_media=no

и начинаем создавать эндпойнты:

[office11](office-template)
inbound_auth/username=office11
inbound_auth/password=123435
 
[office12](office-template)
inbound_auth/username=office12
inbound_auth/password=12345

Конфиг каждого визарда состоит из «глобальной части» и настроек разных секций. В зависимости от accepts_auth или send_registration wizard сам генерирует нужные секции и свяжет их, а все настройки вида section/* — попадут прямо в указанную секцию. Тут кроется небольшой подводный камень: если конфиг написан не корректно (например, в какой-то секции указан не существующий параметр) при загрузке визард проверять этого не будет, но астериск не позволит создать косячную секцию и разрешит наделать остальные. Поэтому вполне может оказаться, что wizard создаст aor, auth, registration, но не сделает endpoint. Тут нужно внимательно читать логи — в них мелким шрифтом будет указано, что не нравится.
Перезагрузка настройка выполняется командой pjsip reload. А вот удобного аналога sip show peers нам не завезли (или я плохо искал), кто сейчас в онлайне посмотреть можно через pjsip show endpoints или pjsip show aors, но вместо удобной таблички там каша.
И не забываем, в диалплане использовать канал PJSIP:

exten => _1x,1,Dial(PJSIP/office${EXTEN},,t)

Ну и напоследок, волшебник для zadarma:

[zadarma]
type=wizard
sends_registrations=yes
sends_auth=yes
remote_hosts=sip.zadarma.com
transport=udp-transport
aor/qualify_frequency=1000
aor/max_contacts=3
outbound_auth/auth_type=userpass
endpoint/disallow=all
endpoint/allow=alaw,ulaw
endpoint/dtmf_mode=rfc4733
endpoint/context=incoming-zadarma
endpoint/direct_media=no
endpoint/from_user=1234
endpoint/from_domain=sip.zadarma.com
outbound_auth/username=1234
outbound_auth/password=secret
registration/retry_interval=60
registration/expiration=120

Таким же образом настраиваются 90% VoIP провайдеров