[Asterisk] Asterisk от 1.8 до 16
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Лет 10 назад у нас в компании была станция без поддержки sip и первый Asterisk 1.6 подключен по PRI потокам. В последующем захотелось переадресаций с подстановкой номера и управления категориями и был найден chan_ss7 от netfors, который после подпиливания напильником это все мог. Время шло и вышел PJSIP в 13 версии Aterisk, а chan_ss7 собирался только под 1.8. Да и переодически раз в полгода возникали проблемы с прерываниями, которые проявлялись в пропадающем голосе. Они сами появлялись и сами проходили.
Основная станция заменилась и научилась sip и было решено обновить Asterisk до 16.
Установка производилась на чистый debian 10. В репозиториях версия 16.2.1, поэтому собирать будем из исходников. Качаем последний Asterisk 16, у меня это был 16.12.0:
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
Распакуем в папку и перейдем в нее:
tar xzvf asterisk-16-current.tar.gz
cd asterisk-16.*
Установим теперь все необходимые зависимости в debian. Перебирать вручную их нет необходимости. Все зависимости собраны в скрипте, который надо запустить.
contrib/scripts/install_prereq install
Дальше скачаем исходники mp3, которые нужны для сборки mp3 модуля.
contrib/scripts/get_mp3_source.sh
Все зависимости установлены и можно переходить к сборке.
./configure
make menuselect
К тому, что установлено по-умолчанию, я добавляем:
- На первой вкладке format_mp3.
- В Core Sound Packages указываю русские звуки RU-WAV.
- В Extras Sound Packages выбираю английский EN-WAV, русского, к сожалению, нет.
Продолжаем, после принятия настроек, нажатием на Save & Exit. Компилируем:
./configure
make
Затем соберем и установим пакет с помощью checkinstall:
checkinstall
Заполняем версию, имя пакета и т.д. Я имя пакета пишу asterisk-16, чтобы он не конфликтовал с тем который в репозиториях.
checkinstall
Добавим пользователя для запуска Asterisk и даем права на папки:
adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk" asterisk
usermod -a -G dialout,audio asterisk
chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk
Настраиваем Asterisk на запуск под этим пользователем. Для этого добавляем в конфиг /etc/default/asterisk параметры:
AST_USER="asterisk"
AST_GROUP="asterisk"
После редактируем /etc/asterisk/modules.conf. Убираем лишнее, например:
noload => chan_sip.so
Стартуем asterisk в консоли и проверяем что нет ошибок:
asterisk -cvvv
Если все нормально, то добавляем службу в автозагрузку и запускаем:
systemctl enable asterisk
systemctl start asterisk
На это установка завершена и переходим к настройке.
В PJSIP координально поменялся синтаксис и просто скопировать конфиг не получиться. Есть конвертер конфига в папке с исходниками contrib/scripts/sip_to_pjsip/sip_to_pjsip.py, но формат с отдельными aor, identify и т.д. не удобен и был найден выход с pjsip_wizard. Нам только нужно создать transport в /etc/asterisk/pjsip.conf добавим:
[transport-udp]
type = transport
protocol = udp
bind = x.x.x.x
external_media_address = x.x.x.x
external_signaling_address = x.x.x.x
Меняете x.x.x.x на IP адрес на котором будете слушать.
Создаем шаблон для пользователя:
[main-template](!)
type=wizard
transport=transport-udp
accepts_auth = yes
accepts_registrations = yes
aor/qualify_frequency = 100
aor/max_contacts = 1
aor/remove_existing = yes
inbound_auth/auth_type = userpass
endpoint/disallow = all
endpoint/allow = alaw
endpoint/dtmf_mode = rfc4733
endpoint/deny = 0.0.0.0/0
endpoint/context = city_out
endpoint/direct_media = no
endpoint/device_state_busy_at = 1
endpoint/language = ru
endpoint/sdp_session = MySDp
И тогда обычный пользователь уже будет иметь конфиг:
[100](main-template)
endpoint/permit=192.168.100.1
inbound_auth/username=100
inbound_auth/password=P@$$Word123
endpoint/callerid='' <100>
А это уже очень похоже на формат chan_sip, и меняем названия параметров в редакторе заменой слов.
Для клиентов за натом вместо nat=yes сделаем отельный шаблон с добавлением строк:
endpoint/rtp_symmetric=yes
endpoint/force_rport=yes
endpoint/rewrite_contact=yes
Для поведения pjsip аналогичного с chan_sip, т.е. один пир одно устройство добавляем. Некоторые китайские телефоны иногда присылают зачем то вторую регистрацию с другого порта при действующей первой и это позволяет обойти этот баг.
aor/max_contacts = 1
aor/remove_existing = yes
Одна из фишек PJSIP это мнодественная регистрация, которая не поддерживалась в chan_sip. Меняем aor/max_contacts на нужное количество и в диалплане звоним:
exten => _XXX,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})})
Очень удобно стало что можно задавать группы перехвата по имени, а не цифрами как раньше:
endpoint/named_call_group = aveks
endpoint/named_pickup_group = aveks
В старом chan_sip был параметр call-limit, который ограничивал количество разговоров пиру. В новом chan_pjsip такого нет, во всех чатах рекомендуют ограничивать вызовы по параметру GROUP. Почему то нигде в мануалах не использует параметр endpoint/device_state_busy_at и добавляем в extensions.conf во входящий и исходящий контекст:
exten => _X.,1,GoSub(subDeviceBusy,s,1(${EXTEN},${CALLERID(num)}))
[subDeviceBusy]
exten => s,1,NoOp(PJSIP/${ARG1} has state ${DEVICE_STATE(PJSIP/${ARG1})})
exten => s,n,NoOp(CallerId is ${ARG2})
exten => s,n,ExecIf($["${DEVICE_STATE(PJSIP/${ARG1})}" = "BUSY"]?Hangup(17))
exten => s,n,Return
Посмотреть линии можно в консоли Asterisk:
pjsip show endpoint 100
Endpoint: 100/100 Not in use 0 of 1
InAuth: 100-iauth/100
Aor: 100 3
Contact: 100/sip:100@192.168.0.10:5062 c34b4c2d4d Avail 7.981
Transport: transport-udp udp 0 0 192.168.0.1:5060
Здесь 0 of 1 показывает сколько линий занято из возможных.
В 16 Asterisk макросы стали устаревшими поэтому пришлось переписать их на Gosub.
Чтобы при звонке передавался номер звонящего добавляем в INVITE заголовок Diversion при звонке:
exten => 2222222,n,Dial(PJSIP/8XXXXXXXXXX@trunk,,tTb(add_diversion^${EXTEN}^1)
[add_diversion]
exten => _XXXXXXX,1,Set(PJSIP_HEADER(add,Diversion)=<sip:XXX${EXTEN}@x.x.x.x>\;reason=unconditional\;screen=yes\;privacy=off)
exten => _XXXXXXX,n,Return()
Здесь 2222222 гоородской номер на котором стоит переадрессация, 8XXXXXXXXXX номер на который переадресация и если нужно то добавляем код города вместо XXX sip:XXX${EXTEN}@x.x.x.x>
С файлами конфигурации очередей особо проблем не возникло, меняем только members c SIP на PJSIP.
Не забываем пользоваться документацией
pjsip_wizard.conf
pjsip.conf
===========
Источник:
habr.com
===========
Похожие новости:
- Доступна коммуникационная платформа Asterisk 18
- [IT-инфраструктура, Сетевые технологии, Asterisk, Сетевое оборудование] Микро DECT гарнитура Snom A150 — обзор
- [*nix, Asterisk] Как мы переводили MIKOPBX с chan_sip на PJSIP
- [Python, Asterisk, Социальные сети и сообщества, Flask] Реализация аудиоконференций в Telegram + Asterisk
- [Asterisk, IT-инфраструктура, Сетевое оборудование, Сетевые технологии] I want to break free. Обзор беспроводной DECT гарнитуры Snom A170
- [Сетевые технологии, CRM-системы, Системное администрирование, PHP, Asterisk] Разбираемся с FreePBX и интегрируем его с Битрикс24 и не только
- [Asterisk, IT-инфраструктура, Сетевое оборудование, Сетевые технологии] Младшенький. Обзор IP-телефона Snom D315
- [CRM-системы, IT-компании, Разработка систем связи, Сетевые технологии] Как мы интегрировали amoCRM с Виртуальной АТС от МегаФона
- [IT-инфраструктура, Сетевые технологии, Asterisk, Сетевое оборудование] Надёжный среднячок. Обзор IP-телефона Snom D345
- [Разработка систем связи, Growth Hacking, Монетизация мобильных приложений, Аналитика мобильных приложений, Голосовые интерфейсы] Объединяем закрытый WhatsApp и открытый SIP – Часть 1
Теги для поиска: #_asterisk, #_asterisk, #_voip, #_asterisk
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:04
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Лет 10 назад у нас в компании была станция без поддержки sip и первый Asterisk 1.6 подключен по PRI потокам. В последующем захотелось переадресаций с подстановкой номера и управления категориями и был найден chan_ss7 от netfors, который после подпиливания напильником это все мог. Время шло и вышел PJSIP в 13 версии Aterisk, а chan_ss7 собирался только под 1.8. Да и переодически раз в полгода возникали проблемы с прерываниями, которые проявлялись в пропадающем голосе. Они сами появлялись и сами проходили. Основная станция заменилась и научилась sip и было решено обновить Asterisk до 16. Установка производилась на чистый debian 10. В репозиториях версия 16.2.1, поэтому собирать будем из исходников. Качаем последний Asterisk 16, у меня это был 16.12.0: cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz Распакуем в папку и перейдем в нее: tar xzvf asterisk-16-current.tar.gz
cd asterisk-16.* Установим теперь все необходимые зависимости в debian. Перебирать вручную их нет необходимости. Все зависимости собраны в скрипте, который надо запустить. contrib/scripts/install_prereq install
Дальше скачаем исходники mp3, которые нужны для сборки mp3 модуля. contrib/scripts/get_mp3_source.sh
Все зависимости установлены и можно переходить к сборке. ./configure
make menuselect К тому, что установлено по-умолчанию, я добавляем:
Продолжаем, после принятия настроек, нажатием на Save & Exit. Компилируем: ./configure
make Затем соберем и установим пакет с помощью checkinstall: checkinstall
Заполняем версию, имя пакета и т.д. Я имя пакета пишу asterisk-16, чтобы он не конфликтовал с тем который в репозиториях. checkinstall
Добавим пользователя для запуска Asterisk и даем права на папки: adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk" asterisk
usermod -a -G dialout,audio asterisk chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk Настраиваем Asterisk на запуск под этим пользователем. Для этого добавляем в конфиг /etc/default/asterisk параметры: AST_USER="asterisk"
AST_GROUP="asterisk" После редактируем /etc/asterisk/modules.conf. Убираем лишнее, например: noload => chan_sip.so
Стартуем asterisk в консоли и проверяем что нет ошибок: asterisk -cvvv
Если все нормально, то добавляем службу в автозагрузку и запускаем: systemctl enable asterisk
systemctl start asterisk На это установка завершена и переходим к настройке. В PJSIP координально поменялся синтаксис и просто скопировать конфиг не получиться. Есть конвертер конфига в папке с исходниками contrib/scripts/sip_to_pjsip/sip_to_pjsip.py, но формат с отдельными aor, identify и т.д. не удобен и был найден выход с pjsip_wizard. Нам только нужно создать transport в /etc/asterisk/pjsip.conf добавим: [transport-udp]
type = transport protocol = udp bind = x.x.x.x external_media_address = x.x.x.x external_signaling_address = x.x.x.x Меняете x.x.x.x на IP адрес на котором будете слушать. Создаем шаблон для пользователя: [main-template](!)
type=wizard transport=transport-udp accepts_auth = yes accepts_registrations = yes aor/qualify_frequency = 100 aor/max_contacts = 1 aor/remove_existing = yes inbound_auth/auth_type = userpass endpoint/disallow = all endpoint/allow = alaw endpoint/dtmf_mode = rfc4733 endpoint/deny = 0.0.0.0/0 endpoint/context = city_out endpoint/direct_media = no endpoint/device_state_busy_at = 1 endpoint/language = ru endpoint/sdp_session = MySDp И тогда обычный пользователь уже будет иметь конфиг: [100](main-template)
endpoint/permit=192.168.100.1 inbound_auth/username=100 inbound_auth/password=P@$$Word123 endpoint/callerid='' <100> А это уже очень похоже на формат chan_sip, и меняем названия параметров в редакторе заменой слов. Для клиентов за натом вместо nat=yes сделаем отельный шаблон с добавлением строк: endpoint/rtp_symmetric=yes
endpoint/force_rport=yes endpoint/rewrite_contact=yes Для поведения pjsip аналогичного с chan_sip, т.е. один пир одно устройство добавляем. Некоторые китайские телефоны иногда присылают зачем то вторую регистрацию с другого порта при действующей первой и это позволяет обойти этот баг. aor/max_contacts = 1
aor/remove_existing = yes Одна из фишек PJSIP это мнодественная регистрация, которая не поддерживалась в chan_sip. Меняем aor/max_contacts на нужное количество и в диалплане звоним: exten => _XXX,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})})
Очень удобно стало что можно задавать группы перехвата по имени, а не цифрами как раньше: endpoint/named_call_group = aveks
endpoint/named_pickup_group = aveks В старом chan_sip был параметр call-limit, который ограничивал количество разговоров пиру. В новом chan_pjsip такого нет, во всех чатах рекомендуют ограничивать вызовы по параметру GROUP. Почему то нигде в мануалах не использует параметр endpoint/device_state_busy_at и добавляем в extensions.conf во входящий и исходящий контекст: exten => _X.,1,GoSub(subDeviceBusy,s,1(${EXTEN},${CALLERID(num)}))
[subDeviceBusy] exten => s,1,NoOp(PJSIP/${ARG1} has state ${DEVICE_STATE(PJSIP/${ARG1})}) exten => s,n,NoOp(CallerId is ${ARG2}) exten => s,n,ExecIf($["${DEVICE_STATE(PJSIP/${ARG1})}" = "BUSY"]?Hangup(17)) exten => s,n,Return Посмотреть линии можно в консоли Asterisk: pjsip show endpoint 100
Endpoint: 100/100 Not in use 0 of 1 InAuth: 100-iauth/100 Aor: 100 3 Contact: 100/sip:100@192.168.0.10:5062 c34b4c2d4d Avail 7.981 Transport: transport-udp udp 0 0 192.168.0.1:5060 Здесь 0 of 1 показывает сколько линий занято из возможных. В 16 Asterisk макросы стали устаревшими поэтому пришлось переписать их на Gosub. Чтобы при звонке передавался номер звонящего добавляем в INVITE заголовок Diversion при звонке: exten => 2222222,n,Dial(PJSIP/8XXXXXXXXXX@trunk,,tTb(add_diversion^${EXTEN}^1)
[add_diversion] exten => _XXXXXXX,1,Set(PJSIP_HEADER(add,Diversion)=<sip:XXX${EXTEN}@x.x.x.x>\;reason=unconditional\;screen=yes\;privacy=off) exten => _XXXXXXX,n,Return() Здесь 2222222 гоородской номер на котором стоит переадрессация, 8XXXXXXXXXX номер на который переадресация и если нужно то добавляем код города вместо XXX sip:XXX${EXTEN}@x.x.x.x> С файлами конфигурации очередей особо проблем не возникло, меняем только members c SIP на PJSIP. Не забываем пользоваться документацией pjsip_wizard.conf pjsip.conf =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:04
Часовой пояс: UTC + 5