Настройка VoIP-транка между Avaya и Asterisk
Нередко возникает задача интеграции IP-АТС Asterisk и IP-АТС Avaya. Причин этому может быть немало: как начиная с задач модернизации Avaya, так и расширение возможностей за счет Астериск. Ведь, как известно, Avaya имеет не все возможности, которые есть у Asterisk ( и наоборот), а если такие возможности в Avaya и есть, то нередко есть лицензионные ограничения: подключение функции в Avaya может стоить больших денег. В этой статье мы рассматриваем настройку транка между станциями двух вендоров.
Статей о настройке транка между Asterisk и Avaya в интернете можно найти немало, но, когда я сам столкнулся с этой проблемой, ни одно из описанных решений до конца не подошло, поэтому и пишу статью с описанием настроек в своём конкретном случае.
H.323-транк между Asterisk и Avaya.
Лицензии на подключение новых номеров к АТС Avaya закончились, и клиент решил расширить количество корпоративных абонентов за счет подключения АТС на базе Asterisk. Лицензии на SIP-транки у клиента не оказалось и её приобретение изначально не рассматривалось, поэтому остался только вариант с H.323. С нашей стороны — сборка FreePBX с некоторыми доработками, которые не повлияют на приведенные настройки, звонки наружу — тоже через Avaya.
Итак, я получил адрес, порт, логин и пароль для подключения к Avaya по SSH и тут же появилась первая проблема — для подключения нужен софт от Avaya (его у меня, естественно, нет, и в свободном доступе он обнаружен не был) или эмулятор терминала. Эмулятор, к счастью, быстро нашелся — такой терминал поддерживает программа TuTTY (http://putty.dwalin.ru/?downloads). Для linux TuTTY нет, но под wine работает прекрасно.
Сразу несколько слов об управлении консолью Avaya. Кнопки внизу подписаны, но, всё равно, привожу краткое описание:
F1 — отменить внесенные изменения и выйти из текущего меню настроек, полностью стереть набранную команду.
F2 — обновить (не пользовался)
F3 — применить внесенные изменения и выйти из текущего меню настроек (изменения сразу же сохраняются и вступают в силу, дополнительных манипуляций не требуется)
F4 — очистить поле, в котором стоит курсор
F5 — помощь по полю, в котором стоит курсор, или набранной команде (выводит возможные значения как ‘?’ у cisco)
F6 — редактировать (не пользовался)
F7, F8 — для пролистывания вперед/назад многостраничных меню и результатов команд.
Также:
Shift+Tab — стереть одно слово
R, ввод — повтор последней введенной команды.
Некоторые основные команды:
logoff — выход из консоли
list — вывести список элементов, например «list trunk-group» выводит список транков
display — вывести настройки конкретного элемента, например «display trunk-group 10» выводит настройки транка 10.
change — изменить настройки элемента
busyout trunk, busyout signaling-group — сделать недоступным указанный транк, сигнальную группу (необходимо для изменения настроек транка, сигнальной группы, находящихся в работе).
release trunk, release signaling-group — вернуть в работу указанный транк, сигнальную группу.
Сама настройка:
- Добавляем имя хоста Asterisk в node-names
change node-names ip
Вписываем IP-адрес хоста Asterisk и какое-нибудь имя. Кстати procr — LAN-интерфейс Avaya, к которому и будет подключаться Asterisk.
Если ни один из существующих наборов кодеков не подходит, создаем свой, иначе пропускаем этот и следующий пункты. (смотрим номера существующих наборов кодеков командой list и выбираем незанятый номер)
change ip-codec-set 3
Вписываем нужные кодеки, F5 выдаёт полный список возможных.
Обратите внимание на опцию FAX на второй странице настроек. Если предполагается хождение факсов между Asterisk и Avaya, лучше сразу поставить off.
- Для использования созданного набора кодеков нужно создать новый ip-network-region (выбираем следующий незанятый номер)
change ip-network-region 3
Опции:
- Location — ставим номер LAN-интерфейса, к которому будет привязан регион сети (в моём случае он один, получить список можно командой «list ip-interface all»)
- Name — вписываем любое имя
- Codec Set — вписываем номер набора кодеков, созданного на шаге 2
- «Intra-region IP-IP Direct Audio» и «Inter-region IP-IP Direct Audio» ставим «no», без этого голос у меня не пошел.
Создаем транк (как и в предыдущих случаях выбираем следующий незанятый номер)
add trunk-group 3
Заполняем как на изображении.
Опции:
- Group Name — произвольное имя
- «Member Assignment Method», «Signaling Group», «Number of Members» пока не трогаем, т.к. сигнальная группа еще не создана. После создания сигнальной группы возвращаемся и вписываем «Signaling Group» — номер сигнальной группы, «Number of Members» — количество одновременных вызовов в транке.
- TAC — код доступа к транку. Для этих кодов в диалплане должно быть создано правило типа dac. Если на АТС есть другие транки, можно посмотреть их TAC и выбрать незанятый из того же диапазона. Если же нет, нужно создать правило в диалплане. Пример:
change dialplan analysis
Листаем на 3-ю страницу и заполняем как на изображении:
На АТС были настроены кириллические Caller ID и на Asterisk приходила белиберда вместо звонящего номера, поэтому «Send Name» установлено в «n», а «Format» — в «unk-pvt». Так Avaya посылает на Asterisk только номер.
Создаем сигнальную группу
change signalling-group 3
Опции:
- «Trunk Group for Channel Selection» и «Trunk Group for NCA TSC» — ставим номер транка из пункта 4.
- Far-end Node Name — вписываем имя узла из пункта 1
- Near-end Listen Port — может быть 1720, 5000-5999. Впишите номер порта не занятый другими сигнальными группами.
- Far-end Network Region — введите номер региона сети из пункта 3
После создания сигнальной группы возвращаемся к созданному ранее транку и заполняем пункты, связанные с сигнальной группой, после чего настройка транка закончена. Теперь нужно направить вызовы в этот транк.
- Создаем маршрут в транк
change route-pattern 3
Опции:
- Grp No — номер транка.
- FRL — 0, если транк к внутреннем номерам, 1 — если к провайдеру.
- Numbering Format — для правильного отображения Caller ID нужно выставить lev0-pvt, если транк к внутренним номерам, natl-pub или pub-unk, если транк к провайдеру.
Направим в полученный транк номера 2400-2599.
change dialplan analysis
change uniform-dialplan 2
change aar analysis 2
Route Pattern — номер маршрута в транк
Перенаправляем входящие звонки на Asterisk, если это нужно
change inc-call-handling-trmt trunk-group 1 (здесь 1 — номер транка к провайдеру)
Number Len — длина внешнего номера
Number Digits — внешний номер
Del — количество цифр, удаляемых из внешнего номера
Insert — цифры, вставляемые в номер
В данном случае вызов снаружи направляется на номер 2400
Настройка на стороне Asterisk.
Для работы по протоколу H.323 я использовал модуль chan_ooh323.so. Создаем файл /etc/asterisk/ooh323.conf
[general]
class="PreformattedText console">;Define the asterisk server h323 endpoint
disallow=all
allow=alaw
;The port asterisk should listen for incoming H323 connections.
;Default — 1720
port=1720 ;должен соответствовать порту, указанному в Far-end Listen Port в пункте 5
;The IP address, asterisk should listen on for incoming H323
;connections
;Default — 0.0.0.0: tries to find out local ip address on it's own
bindaddr=0.0.0.0 ;Лучше указать конкретный адрес для привязки
;Alias address for for asterisk server
;Default — «Asterisk PBX»
h323id=ObjSysAsterisk
;e164=100
;CallerID for the asterisk originated calls
;Default — Same as h323id
callerid=PBX
;This parameter indicates whether channel driver should register with
;gatekeeper as a gateway or an endpoint.
;Default — no
;gateway=no
;Whether this asterisk server will use gatekeeper.
;Default — DISABLE
;gatekeeper = DISCOVER
;gatekeeper = a.b.c.d
gatekeeper = DISABLE
;Whether asterisk should use fast-start and tunneling for H323 connections.
;Default — yes
faststart=yes
h245tunneling=yes
;Whether media wait for connect for fast start call
;Default — no
mediawaitforconnect=yes
;Location for H323 log file
;Default — /var/log/asterisk/h323_log
logfile=/var/log/asterisk/h323_log
;Following values apply to all users/peers/friends defined below, unless
;overridden within their client definition
;Sets default context all clients will be placed in.
;Default — default
context=from-trunk
;Sets rtptimeout for all clients, unless overridden
;Default — 60 seconds
rtptimeout=60 ; Terminate call if 60 seconds of no RTP activity
;when we're not on hold
; dtmf mode to be used by default for all clients. Supports rfc2833, q931keypad,
; h245alphanumeric, h245signal.
;Default — rfc 2833
dtmfmode=rfc2833
[avaya]
type=peer
context=from-internal ;На АТС Avaya внутренние номера
ip=1.2.3.4 ;IP-адрес АТС Avaya
port=5001 ;Должен соответствовать Near-end Listen Port, указанному
;в пункте 5
disallow=all
allow=alaw
allow=ulaw
t38mode=disable
dtmfmode=rfc2833
Набирать номера в транк можно так
Dial (OOH323/avaya/${EXTEN})
После непродолжительного тестирования оказалось, что, если входящий вызов со стороны Avaya переходит в состояние «занято», то канал этого вызова продолжает висеть неопределённое время, каждый из таких повисших каналов грузит одно из ядер процессора на 100%. Типичная картина:
pbx*CLI> core show channels Channel Location State Application (Data) OOH323/avaya-3 s-CHANUNAVAIL@macro- Busy Congestion (10) OOH323/avaya-5 s-CHANUNAVAIL@macro- Busy Congestion (10) 2 active channels 6 calls processed
Даже в таком виде схема рабочая, и несколько повисших каналов не нарушают работу Asterisk. Чтобы повисших каналов не становилось слишком много, можно подвесть такой скрипт в cron на выполнение каждую минуту:
#!/bin/bash ASTERISK=/usr/sbin/asterisk CHAN= «avaya» while read CHANNEL; do if [[ $CHANNEL =~ ^ (OOH323/$CHAN-[0-9]+) ([^!]*!){5} (Busy|Congestion) ([^!]*!){6} ([0-9]+).* ]]; then if [ ${BASH_REMATCH[5]} -ge 20 ]; then $ASTERISK -rx «channel request hangup ${BASH_REMATCH[1]}» fi fi done <<<» `$ASTERISK -rx »core show channels concise»`»
Впрочем, гораздо более лучшим решением является использование модуля chan_h323.so вместо chan_ooh323.so или Yate в режиме H.323 — SIP прокси. Об этих схемах будет рассказано в последующих статьях.
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.