Интеграция c Cisco Call Manager Express (CME)
Материал из BiTel WiKi
Cisco Call Manager Express (CME)
Происходит тарификация исходящих звонков по внутенему номеру
Прежде всего нужно в конфиге модуля задать новые режимы поиска. Режим поиска по имени пользователя (User-Name), скорее всего он у вас уже есть.
findmode.1.title=Поиск по User-Name=ALIAS findmode.1.value=User-Name=ALIAS
создать новый тип логина. у нас он называется "для корпоративной телефонии". На закладке типы логинов нажать плюсик. И для нового типа логина выбрать режим поиска для всего по User-Name=ALIAS тарификацию звонков по вызываемому номеру и обсчет баланса по желанию.
создать новый нас. На закладке "Редактор NASов" нажать плюсик. И для нового насса указать имя, тип Cisco, ип адрес, секрет радиуса. Создать конфигурацию НАСа где указать
acct.out=voip/originate;telephony/originate service=<sid> find.order=1
1 это номер findmode который мы указали в конфиге модуля
<sid> это код услуги из модуля VoIP
и добавить следущий скрипт пред обработки
import bitel.billing.server.radius.*; // Имя пользоателя, куда сыпать внутренние звонки и тп. String rejectedusername = "corp-inner-calls"; username = null; numberto = null; attributes = request.getVendorAttributes( Vendors.CISCO, 1 ); // <attribute add="no" name="cisco-avpair" type="string" code="1"/> nasport = request.getVendorAttributes( Vendors.CISCO, 2 ); // <attribute name="cisco-NAS-Port" type="string" code="2"/> callorigin = request.getVendorAttributes( Vendors.CISCO, 26 ); // <attribute name="h323-call-origin" type="string" code="26"/> calltype = request.getVendorAttributes( Vendors.CISCO, 27 ); // <attribute name="h323-call-type" type="string" code="27/> calledid = request.getStringAttribute( RadiusStandartAttributes.Called_Station_Id ); // <attribute name="Called-Station-Id" type="string" code="30"/> if ( nasport != null ) { nasports = nasport.toString(); } if ( callorigin != null ) { callorigins = callorigin.toString(); } if ( calltype != null ) { calltypes = calltype.toString(); } if( attributes != null ) { for( it = attributes.iterator(); it.hasNext(); ) { ra = (RadiusAttribute)it.next(); value = ra.getStringValue(); // Определяем был ли Transfer/Conference, выносим короткий номер "крайнего" в User-Name if ( value.indexOf("feature-vsa") >= 0 && value.indexOf("fwder:") > 0 ) { username = value.substring((value.indexOf("fwder:")+6),value.length()); username = username.substring(0,username.indexOf(",")); break; } // Выносим короткий номер в User-Name, если не было Transfer/Conference if ( value.indexOf("gw-rxd-cgn") >= 0 ) { username = value.substring((value.indexOf("#:")+2),value.length()); break; } } } if ( callorigin != null && calltype != null ) { if ( nasport != null && callorigins.indexOf("originate") >= 0 && calltypes.indexOf("Telephony") >= 0 ) { // "Убираем" внутренние звонки (локальный - локальный) if ( nasports.indexOf("EFXS") >= 0 ) { username = rejectedusername; } // Если звонок вышел через FXO порты, приводим номер к E.164 if ( nasports.indexOf("FXO") >= 0 ) { if ( calledid.startsWith("9810") ) { numberto = calledid.substring(4); } else if ( calledid.startsWith("98") ) { numberto = "7" + calledid.substring(2); } else if ( calledid.startsWith("9") ) { numberto = "73952" + calledid.substring(1); } else if ( calledid.matches("8[0-5]") ) { numberto = "000000" + calledid;} } } // "Убираем" звонки в голосовую почту else if ( callorigins.indexOf("originate") >= 0 && calltypes.indexOf("VoIP") >= 0 ) { if ( calledid.matches("88100") ) { username = rejectedusername; } } } if ( numberto != null ) { request.setStringAttribute( RadiusStandartAttributes.Called_Station_Id, numberto); } if ( username != null ) { request.setStringAttribute( RadiusStandartAttributes.User_Name, username); }
в этом скрипте нужно поправить преобразование набраного номера в e.164 в районе строчек calledid.startsWith("xxx")
после этого можно добавлять клиентов. Добавте к договору услуги из модуля VOIP, выбирете модуль VOIP, нажмите плюсик что бы добавить новый логин. В поле alias укажите внутрений номери в поле тип выберете "для корпоративной телефонии".
все готово.
конфиг на CME
aaa new-model aaa accounting exec h323 start-stop group radius aaa accounting connection h323 start-stop group radius ! aaa session-id common ! radius-server host xx.xx.xx.xx auth-port xxx acct-port xxxx non-standard timeout 4 retransmit 2 key xxxx radius-server vsa send cisco-nas-port radius-server vsa send accounting radius-server vsa send authentication