http://www.voipinfo.org.ua/chgclid
Автор: Адаменко Юрий
Для чего-же конкретно нужен данный модуль.
В принципе на Asterisk PBX нет никаких проблем сделать подстановку
СallerID(num) и с помощью команды Set непосредственно в самом
dialplan-
е, брать соответствие номеров можно из любой базы данных или сделать в
самом dialplan-e. Но есть одно но, при данном подходе нужно
обязательно для каждого внутреннего телефона делать соответствующую
запись в базе данных, что представляет рутинную работу для любого
администратора. В данном модуле реализован подход подобно как в Aqua-
GK.
Как правило количество внутренних номеров телефонов (дальше будем их
называть внутренние CLID) превышает количество номеров выдаваемых
оператором внешней связи (дальше будем их называть внешние CLID).
Принцип работы модуля состоит в том, что при помощи <<регулярных
выражений>> можно сделать записи компактными и таким образом достичь
упрощения администрирования внешних CLID.
Установка:
* Распаковать архив в отдельную директорию;
* Далее make, make install;
* В директорию /etc/asterisk скопировать файл chgclid.conf.
Настройка.
Основной и единственный файл конфигурации является chgclid.conf.
Внимание!!! По мере совершенствования модуля конфигурационный файл
может претерпевать изменений.
На данный момент формат записи довольно таки простой.
В квадратных скобках обозначаются направления или имя сервис
провайдера, предоставляющего услуги, к примеру, внешней связи.
Пример:
[telekom]
Пока что единственной командой есть команда translate
translate => внешний CLID(условное выражение внутренних CLI n1[|
условное выражение внутренних CLI n2|.....])
Пример:
translate => 444570000(1101|110[3-578]|100X)
Все правила читаются с верху в низ, срабатывает первое попавшиеся.
Как видно из примера все номера, которые подходят под условные
выражения (условные выражения разделены между собой знаком ' | ')
находящиеся в скобках будут транслированы в номер 444570000. Правила
составления условных выражений те-же, что и при составлении extension
в файле extensions.conf.
Пример файла chgclid.conf.
[teleckom1]
translate => 444570000(1101|110[3-578]|100X)
translate => 444570001(1102|110[69]|)
[telekom2]
translate => 485250000(1101|110[3-578]|100X)
translate => 485250001(1102|110[69]|12XX)
Связующим звеном между dialplan-ом и и конфигурацией chgclid является
команда dialplan-а ChgClid(), аргументом которой является имя
направления (в нашем случае это сервис провайдер)
Пример в файле extensions.conf.
[macro-dial]
exten => s,1,ChgClid(${ARG4})
exten => s,n,Set(CDR(userfield)=${CALLERID(num)})
exten => s,n,Dial(${ARG3}/${ARG1}@${ARG2},,wW)
exten => s,n,Hangup()
[na_telekom1]
exten => _9XXXXXXX,2,Macro(dial, {EXTEN:1}, cisco, SIP, telecom1)
[na_telekom2]
exten => _9XXXXXXX,2,Macro(dial, {EXTEN:1}, cisco, SIP, telecom2)
Ну или простой вариант
[prosto]
exten => s,1,ChgClid(telecom1)
exten => s,n,Set(CDR(userfield)=${CALLERID(num)})
exten => s,n,Dial(SIP/{EXTEN:1}@cisco)
exten => s,n,Hangup()
Как видно из конфигурационных файлов в результате прохождения вызова,
через файл extensions.conf, найдя, к примеру, команду exten => s,
1,ChgClid(telecom1), будет произведена замена CallerID(num) согласно
правил находящихся в блоке telecom1 файла chgclid.conf. Если это был-
бы номер 1104 то он бы транслировался в номер 444570000. Если номера в
блоке правил не существует номер не претерпевает изменений.
На странице закачек можно скачать исходный код модуля для версии
asterisk 1.4 и 1.6.
http://www.voipinfo.org.ua/downloads
30.05.08 выложено обновление модуля. Добавлена новая функция drop. Она
отбрасывает вызовы не найденных СallerID(num). В настройках ChgClid()
добален аргумент "s". При включенном аргументе функция возвращает
переменную FWSTATUS из Dial-plan двух значений: CALLACCEPT и
CALLREJECT, при этом обрывание вызова не происходит, а при отсутствии
аргумента "s" присходит прекращения вызова (hangup).