artem
24.12.2012
54920

Настройка 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 — вернуть в работу указанный транк, сигнальную группу.

Сама настройка:

  1. Добавляем имя хоста Asterisk в node-names

change node-names ip
Вписываем IP-адрес хоста Asterisk и какое-нибудь имя. Кстати procr — LAN-интерфейс Avaya, к которому и будет подключаться Asterisk.

 Если ни один из существующих наборов кодеков не подходит, создаем свой, иначе пропускаем этот и следующий пункты. (смотрим номера существующих наборов кодеков командой list и выбираем незанятый номер)

change ip-codec-set 3

Вписываем нужные кодеки, F5 выдаёт полный список возможных.

Обратите внимание на опцию FAX на второй странице настроек. Если предполагается хождение факсов между Asterisk и Avaya, лучше сразу поставить off.

  1. Для использования созданного набора кодеков нужно создать новый 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

После создания сигнальной группы возвращаемся к созданному ранее транку и заполняем пункты, связанные с сигнальной группой, после чего настройка транка закончена. Теперь нужно направить вызовы в этот транк.

 

  1. Создаем маршрут в транк

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 прокси. Об этих схемах будет рассказано в последующих статьях.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.