вторник, 10 июня 2008 г.

chgclid - модуль для Asterisk PBX

10.06.08 выложено обновление модуля версия 0.0.3 для версии 1.6. Функционал даного модуля аналогичен функционалу для версии астериска 1.4. Подробное описание в разделе проекты.

06.06.08 выложено очередное обновление модуля версия 0.0.3 для версии 1.4. Добавлены команды translam и prefix. Команда translam производит трансляцию номера по маске, которая имеет большую длину. Команда prefix добавляет префикс к внутреннему номеру. Подробное описание в разделе проекты.

30.05.08 выложено обновление модуля. Добавлена новая функция drop. Она отбрасывает вызовы не найденных СallerID(num). В настройках ChgClid() добален аргумент "s". При включенном аргументе функция возвращает переменную FWSTATUS из Dial-plan двух значений: CALLACCEPT и CALLREJECT, при этом обрывание вызова не происходит, а при отсутствии аргумента "s" присходит прекращения вызова (hangup).

26.05.08 выложен chgclid модуль для Asterisk PBX, как по мне то очень полезный. Принцип работы его состоит в том, что он умеет менять СallerID(num) на Asterisk PBX. Более подробную информацию о данном модуле можно узнать в разделе проекты.

Сначала объясню для чего-же конкретно нужен данный модуль.

В принципе на 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.

Комментариев нет: