Администратор писал(а):
Можете вкратце описать, что изменяет патч в поведении Астериска и по какому полю 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