BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 май 2024, 11:34

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
СообщениеДобавлено: 14 апр 2008, 00:54 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Суть в следующем: имеем астериск, который шлет пакеты аккаутнинга в BGRadiusVoip. Астериск работает с несколькими провайдерами, расценки на одни и те-же направления у провайдеров разные. Астериск по некоему алгоритму выбирает, через какого провайтера делать исходящий звонок. Возникает вопрос - как биллинг может тарифицировать звонки в зависимости от того, через какого провайдера прошел звонок?

Несколько вариантов, которые пока мне пришли в голову, это:

1. Самый предпочтительный вариант, ибо он должен работать с любым софтсвичем, а не только с теми, у которых можно изменять исходный код. Создать несколько услуг в модуле ВОИП (по одной для каждого провайдера) и создать тарифы для каждой услуги. В дальнейшем анализировать в скрипте предобработки получаемые атрибуты и соответственно устанавливать требуемый serviceid.
Вопрос - как его установить? В конфигурации НАСа он прописывается жестко, функции его изменения в документации не нашел.

2. Аналогично предыдущему варианту создать несколько услуг и соответствующих тарифов. Создать несколько НАСов (по одному для каждого провайдера) с одинаковыми адресами IP, но с разными NAS_ID, прописать для каждого соответствующую услугу. Подправить астериск на предмет выдачи определенного NAS_ID для каждого провайдера. Вариант кривой, но терпимый.
Вопрос - биллинг каким-то образом обращает внимание на NAS_ID при определении НАСа?

3. Повесить на астериск несколько адресов IP и заставить его слать запросы для каждого провайдера с разных адресов. В биллинге, соответственно, завести несколько НАСов со своими serviceid ну и т.д. Работать это уже точно будет, но править астериск до такой степени явно не хочется, да и вообще вариант самый кривой! :(

Господа уважаемые, посоветуйте пожалуйста решение для данной проблемы? Может оно на поверхности, а я не туда долблюсь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 апр 2008, 16:34 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Проще всего реализуемый 1ый вариант. Только в voip радиусе сейчас скриптом нельзя установить код услуги. Можно только установить режим поиска и направление вызова.
Но можем исправить и помочь с написанием скрипта :) Даже в текущей версии. Но от вас тогда - подробное описание в wiki.bgbilling.ru как вы Asterisk скрестили с биллингом.
Если согласны - пишите описание того что есть, затем мы делаем доработку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 апр 2008, 05:41 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Всеми руками за ваше предложение! Тем более, что аналогичная проблема у меня сейчас стоит при связке биллинга с CommuniGatePro. К своему стыду, я так и не нашел, где в wiki создаются новые странички, поэтому помещаю информацию сюда, ну а уж вы с ней, я думаю, разберетесь, если она будет того стоить... Кстати, в модуле телефонии у вас присутствует опция привязки тарифов к порту АТС, может быть для в качестве решения на поставленный мною вопрос более правильно будет портировать эту опцию в модуль IP-телефонии?

---
Статья перенесена:
http://wiki.bgbilling.ru/index.php/%D0% ... _BGBilling
...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 апр 2008, 13:12 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
ArtKZ писал(а):
я так и не нашел, где в wiki создаются новые странички

Там вверху каждой страницы есть кнопка Править, в теле страницы создается ссылка на новую страницу, потом страница сохраняется. При переходе по ссылке на новую страницу открывается редактор.

Можете вкратце описать, что изменяет патч в поведении Астериска и по какому полю RADIUS запроса определить услугу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 апр 2008, 14:31 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Администратор писал(а):
Можете вкратце описать, что изменяет патч в поведении Астериска и по какому полю RADIUS запроса определить услугу?


В логику работы ядра Астериска патч никаких изменений не вносит. Изменения касаются только модуля, отвечающего за взаимодействие Астериска с Радиусом, а именно:
- Заменяются атрибуты вендора Digium (22736) на аналогичные атрибуты вендора Cisco (9)
- Если в поле accountcode стандартной статистики Астериска (CDR) присутствует какое-либо значение, то оно подставляется в атрибут User-Name, если значения нет, то User-Name не выдается
- В каждый пакет добавляется атрибут h323-call-type=voip
- Если в поле userfield стандартной статистики Астериска (CDR) присутствует значение "answer", то оно подставляется в атрибут h323-call-origin, при ином значении или отсутствии значения в поле userfield, Радиус получит h323-call-origin=originate

Я так понимаю, что обычно для идентификации шлюза, через который проходит звонок, используется h323-gw-id? Я предполагаю доработать патч, чтобы в этот атрибут помещалось значение идентификатора канала Астериска, например h323-gw-id=SIP/pbxpress. Но при этом наверно не совсем удачным решением будет жестко привязывать service к этому атрибуту, лучше все-таки иметь функцию для установки service (какой-нибудь setServiceId()), доступную из скрипта предобработки запросов Радиуса. В этом случае можно будет сделать, к примеру, следующее:

1. В Астериске прописывать peer по правилу [peer_name-service], например [pbxpress-5]. Астериск поместит в h323-gw-id=SIP/pbxpress-5.
2. В скрипте предобработки отрезать "-5" от полученного значения и установить service=5
3. Если в скипте предобработки мы не установили значение service, то используется код услуги, указанный в конфигурации НАСа

Если же по каким причинам, явно обозначить код услуги в Астериске будет невозможно, то тогда просто прийдется в скрипте предобработки выстраивать таблицу соответствия идентификатора канала Астериска и кода услуги биллинга, типа:

if (h323-gw-id == "SIP/pbxpress")
setServiceId(5);
if (h323-gw-id == "SIP/cgp")
setServiceId(6);

(в примере описана просто логика, а не пример на BGBS)

В дополнение к предлагаемому функционалу, можно также сделать упрощенный вариант, введя дополнительные опции в конфигурацию НАСа, например:

service.gw.1=SIP/pbxpress
service.1=5
service.gw.2=SIP/cgp
service.2=6
service.default=7

значения SIP/pbxpress и SIP/cgp в этом случае будут однозначно браться из h323-gw-id


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 20 апр 2008, 00:29 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Цитата:
Я так понимаю, что обычно для идентификации шлюза, через который проходит звонок, используется h323-gw-id?


Тут я, конечно, был не прав... из описания на http://www.cisco.com/en/US/docs/ios/voice/vsa/developer/guide/vsaig3.html:
Код:
h323-gw-id=value
 33
 Character string
 bowie.cisco.com , AS5300_5
 Domain name server (DNS) name or local name of the voice gateway that is sending the VSA.

Наиболее подходящим из атрибутов Cisco для этих целей на мой взгляд могут быть:

Код:
h323-remote-address=value
 23
 Numerals in dotted decimal notation: nnn.nnn.nnn.nnn
 156.221.17.128
 IP address of the remote gateway.


Код:
h323-remote-id=value
 1
 String
 joshi4.mydomain
 DNS name or locally defined hostname of the remote gateway


Код:
out-portgrp-id=text
 1
 ASCII string associated with the port on the gateway used by this call.
 <Service Provider ID>
 Description associated with the outgoing hardware telephony port that is used with this leg of the call.

Note Replaced by out-intrfc-desc in Cisco IOS Release 12.2(11)T.


Код:
out-intrfc-desc
 1
 String (replaces out-portgrp-id)
 desc-B
 Description assigned to the voice port of the outgoing call.


Код:
out-carrier-id
 1
 String
 carrier B
 Carrier ID field of the trunk group through which the call leaves the gateway or the partnering voice services provider identifier of the outgoing VoIP call.


Последний атрибут мне кажется наиболее подходящим для этой цели, но хотелось-бы все таки услышать мнение гуру... может кто выскажется?

P.S. Реализовал на практике и добавил в Wiki статью Интеграция Asterisk и BGBilling (Accounting) посредством скрипта предобработки запросов Radius, получается даже проще, чем править Астериск... жаль только, что нет функции removeVendorAttributes(int vcode, int code)! Кстати, для этого метода интеграции совершенно необязательно подбирать какой-либо атрибут для идентификации исходящего канала, поскольку у Digium он уже есть, и остается только установить код услуги на его основании.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 апр 2008, 12:35 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Цитата:
- Заменяются атрибуты вендора Digium (22736) на аналогичные атрибуты вендора Cisco (9)

А для чего это делается? А давайте может попробуем без патчей, средствами биллинга сделать? Нам такое решение более интересно будет. Со своей стороны я так понял, нужно только в find.mode сделать поддержку поиска по атрибутам нескольких вендоров.
Ну и установку скриптом кода услуги.
У вас есть возможность, например, воткнуть 4.5 радиус тестовый? Я бы вносил правки - а вы пробовали.
Вот еще товарищ с аналогичной проблемой:
http://bgbilling.ru/forum/viewtopic.php?t=1003
Биллинг определяет NAS по атрибуту NAS-IP-Address, NAS-Identifier


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 апр 2008, 15:41 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Цитата:
А давайте может попробуем без патчей, средствами биллинга сделать?

С удовольствием поработаю с Вами по всем этим вопросам, но позвольте сначала задать несколько вопросов-предложений:

1. Я правильно понимаю, что Вы хотите фактически вписать в тело модуля ВоИП логику, описанную мною в скрипте предобработки? Если да, то не окажется-ли это не совсем гибким решением? Если нет, то прошу Вас поделиться алгоритмом работы предлагаемого вами решения.

2. У Диджиума отсутствуют атрибуты и средства, необходимые для аудентификации и авторизации через радиус. Сейчас я тестирую и планирую выложить в ближайшие дни на Вики решение, использующее сторонее приложение для астериска. Это приложение работает с атрибутами h323-... Нормально-ли с точки зрения логики (и БГБиллинга) при этом будет, если для аудентификации и авторизации будут использоваться атрибуты cisco, а для аккаунтинга (в соответствии с предлагаемым Вами решением) - атрибуты digium?

Все эти вопросы сводятся к одному - а не лучше-ли будет (во всяком случае до тех пор, пока Астериск не обзаведется полноценной поддержкой радиуса) обрабатывать пакеты аккаунтинга одним из двух предложенных мною методов, тем более что в одном из них Астериск править совершенно необязательно? Или по другому: учитывая, что пока не существует ни одной распространенной бинарной сборки астериска с поддержкой радиуса (во всяком случае я о таких не знаю), то в любом случае избавиться от компиляции исходного кода Астериска и radiusclient-ng не удастся, тем более, если будет необходимость работы со всеми ААА, то есть-ли вообще смысл вносить изменения в код БГБиллинг для поддержки нескольких нестандартных атрибутов? Может действительно стоит ограничиться функциями установки кода услуги и удаления ненужных атрибутов (чтобы логи не засоряли)?


Цитата:
У вас есть возможность, например, воткнуть 4.5 радиус тестовый?

Да могу, при условии, что он совместим с сервером 4.4
Цитата:
Вот еще товарищ с аналогичной проблемой:
http://bgbilling.ru/forum/viewtopic.php?t=1003

Вообще-то это ссылка на мой пост :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 апр 2008, 17:31 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Ошибся ссылкой :)
http://bgbilling.ru/forum/viewtopic.php?p=5785

1. Нет, будем делать скрипты предобработки. Просто сейчас там нету возможности вообще код услуги ставить, даже в скрипте. И еще режимы поиска логинов тяжело делать, если приходят различные атрибуты от разных NAS-ов с разными вендорами.

2. Хм, насчет отсутствия бинарной сборки не знал. Просто хотелось решить проблему вообще максимально гибко и максимально на стороне биллинга (чтобы люди патчами морочились поменьше), и в т.ч. решить проблему по вышеуказанной ссылке..

4.5 радиус должен совмещатся с 4.4 севером без проблем..

P.S. В федоре предлагает какой-то пакет asterisk-radius:
Код:
[root@gate etc]# yum search asterisk
asterisk-oss.i386 : Modules for Asterisk that use OSS sound drivers
asterisk-jabber.i386 : Jabber/XMPP resources for Asterisk
asterisk-fax.i386 : FAX applications for Asterisk
asterisk-ices.i386 : Stream audio from Asterisk to an IceCast server
asterisk-alsa.i386 : Modules for Asterisk that use Alsa sound drivers
asterisk-skinny.i386 : Modules for Asterisk that support the SCCP/Skinny protocol
libpri.i386 : An implementation of Primary Rate ISDN
asterisk-odbc.i386 : Applications for Asterisk that use ODBC (except voicemail)
libpri-devel.i386 : Development files for libpri
asterisk-devel.i386 : Development files for Asterisk
asterisk-voicemail-imap.i386 : Store voicemail on an IMAP server
asterisk-festival.i386 : Festival application for Asterisk
libpri.i386 : An implementation of Primary Rate ISDN
asterisk-curl.i386 : Modules for Asterisk that use cURL
asterisk-snmp.i386 : Module that enables SNMP monitoring of Asterisk
asterisk-voicemail.i386 : Common Voicemail Modules for Asterisk
asterisk-firmware.i386 : Firmware for the Digium S101I (IAXy)
asterisk-zaptel.i386 : Modules for Asterisk that use Zaptel
libpri-devel.i386 : Development files for libpri
asterisk-conference.i386 : Audio/video conferencing application for Asterisk
asterisk-radius.i386 : Applications for Asterisk that use RADIUS
asterisk-voicemail-plain.i386 : Store voicemail on the local filesystem
asterisk-voicemail-odbc.i386 : Store voicemail in a database using ODBC
asterisk-misdn.i386 : mISDN channel for Asterisk
asterisk.i386 : The Open Source PBX
asterisk-postgresql.i386 : Applications for Asterisk that use PostgreSQL
asterisk-mobile.i386 : Asterisk channel driver for bluetooth phones and headsets
asterisk-tds.i386 : Modules for Asterisk that use FreeTDS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 апр 2008, 19:37 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Цитата:

Как я понял из этого поста, товарищ Sergey Murzin остановился на проблеме с подчисткой уже не нужных атрибутов AudioCodes? Если так, то это еще один аргумент в пользу removeVendorAttributes(int vcode, int code)! :)
Цитата:
1. Нет, будем делать скрипты предобработки. Просто сейчас там нету возможности вообще код услуги ставить, даже в скрипте. И еще режимы поиска логинов тяжело делать, если приходят различные атрибуты от разных NAS-ов с разными вендорами.

А скрипт, предложенный в Интеграция Asterisk и BGBilling (Accounting) посредством скрипта предобработки запросов Radius чем-то не подходит? За исключением того, что в нем не устанавливается код услуги?
Цитата:
2. Хм, насчет отсутствия бинарной сборки не знал.
P.S. В федоре предлагает какой-то пакет asterisk-radius:

Тут уже я лажанулся :oops: Под бинарными сборками я подразумевал AsteriskNow, TrixBox и прочие... Действительно, в указанных Вами сборках присутствует модуль cdr_radius, он делает аккаунтинг с использованием атрибутов Digium. Значит это еще один довод в пользу скрипта предобработки!
Цитата:
4.5 радиус должен совмещатся с 4.4 севером без проблем..

Тогда с Вас ссылочку на то место, где его можно взять, ну и Changelog не помешал-бы...

Резюме всего вышесказанного:
1. Требуется функция установки кода услуги
2. Требуется функция удаления атрибутов вендора, отличного от текущего


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 апр 2008, 17:27 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
1. Брать радиус здесь ftp://bgbilling.ru/pub/bgbilling/4.5
2. Сделал установку в скрипте кода услуги
Код:
request.setOption( "service", число )

3. ChangeLog а нет, это фактически неизмененный 4.4 радиус. Ну разве что вот добавил установку услуги.
4. По установки постронних атрибутов - уточните сигнатуру метода. Только код вендора, либо код вендора + код параметра (второй вариант не очень понимаю).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 апр 2008, 20:06 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Администратор писал(а):
4. По установки постронних атрибутов - уточните сигнатуру метода. Только код вендора, либо код вендора + код параметра (второй вариант не очень понимаю).


В идеале функция должна поддерживать 2 варианта:
removeVendorAttributes(int vendorCode) - удаляет все атрибуты данного вендора
removeVendorAttributes(int vendorСode, int attributeCode) - удаляет только один (указаный во втором параметре) атрибут данного вендора


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 апр 2008, 10:49 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Администратор писал(а):
2. Сделал установку в скрипте кода услуги
Код:
request.setOption( "service", число )



После установки BGRadiusVoip 4.5, при обработке Accounting Stop появилась ошибка:
Код:
==> radius.out <==
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'emid' in 'where clause'
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3124)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1149)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1262)
        at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:205)
        at bitel.billing.server.contract.bean.ContractManager.getRealtimeTariffTreeSet(ContractManager.java:367)
        at bitel.billing.server.contract.bean.ContractManager.getRealtimeTariffTreeSet(ContractManager.java:316)
        at bitel.billing.server.processor.voiceip.VoiceIpProcessor.accountingProcess(VoiceIpProcessor.java:203)
        at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:147)
        at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:48)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 апр 2008, 11:38 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Вы можете поднять отдельно BGBilling 4.5 и туда дублировать аккаунтинг? Воип радиус то не менялся, зато API ядра поменялось и структура БД. Не учел :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 апр 2008, 17:16 
Не в сети

Зарегистрирован: 28 ноя 2006, 14:47
Сообщения: 64
Откуда: Костанай, Казахстан
Карма: 0
Администратор писал(а):
Вы можете поднять отдельно BGBilling 4.5 и туда дублировать аккаунтинг?

Попробую.... как сделаю - отпишусь!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.047s | 46 Queries | GZIP : On ]