Модуль канала Zap



exclaimОбратите внимание, что релизы Asterisk ветки 1.4 с версией выше 1.4.21, и все релизы ветки 1.6, автоматически будут использовать DAHDI вместо Zaptel, даже если Zaptel все еще установлен и присутствует в системе.

О том, как перейти с Zaptel на DAHDI можно почитать тут.



Модуль канала Zap обеспечивает интерфейсный уровень между сервером Asterisk с одной стороны, и драйвером интерфейса Zaptel и/или ZapHFC с другой. Эти драйвера, в свою очередь, позволяют использовать интерфейсные карты для соединения Вашей АТС к традиционным аналоговым или цифровым телефонным сетям:

Asterisk <--> Модуль Zap <--> Драйвер Zaptel <--> Интерфейсная карта Digium <--> Телефон/Коммутатор/Телефонная сеть
Asterisk <--> Модуль Zap <--> Драйвер ZapHFC <--> ISDN Карта с чипсетом HFC <--> Телефонная сеть


Конфигурация каналов Zap


Конфигурация канала Zap осуществляется редактированием файла zapata.conf file. Смотри:



Использование команды Dial для каналов Zap


Формат команды Dial выглядит так:

Dial(type/identifier,timeout,options)

Для каналов Zap , параметр type - имеет всегда значение Zap.
Параметры timeout и options описываются в описании команды Dial.

Параметр identifier может состоять из нескольких частей. Наиболее комплексный формат выглядит так:

chanspec [ c ][ d ][ rcadence ][ /phonenumber ]

  • chanspec - указывает какой нужно использовать Zap канал или группу, они описываются в файле конфигурации zapata.conf. Этот параметр может быть следующих типов:
    • Если за цифрой следует один из символов: g, G, r, or R, то это означает, что нужно использовать группу Zap каналов с указанным номером. Смотри главу: "Совершение вызовов с использованием групп",
    • Если нужно использовать аналоговый Zap интерфейс: укажите просто номер канала. Например: 1 - что будет соответствовать Zap каналу номер 1.
    • Для цифровых Zap интерфейсов PRI: span номер, затем, через дефис, номер порта. Например: 1-2 соответствует: Zap span 1, порт 2.

  • Если, далее, следует буква c, тогда будет требоваться "Подтверждение ответа" (Answer Confirmation), при этом вызов не будет рассматриваться как отвеченный, пока вызываемый абонент не нажал #.

  • Если, далее, следует буква d, и у нас ISDN PRI канал, то канал будет сделан цифровым "made digital", независимо оттого, что бы это значило. Если Вы не получаете сигнализацию состояния вызова абонента или его занятости (ringing/busy) на Вашем канале PRI, то использование опции 'd' может помочь решить эту проблему!

  • Если, далее, следует буква r и номер, то номер определяет стиль "используемого сигнала вызова". Смотри главу: "Стили сигналов вызова". Заметьте, что указание стиля для вызывного сигнала имеет смысл только, когда Вы вызываете внутренние екстеншены (например, телефоны, подключенные через FXS интерфейсы).

  • phonenumber, если указан, определяет, с каким номером телефона Вы желаете соединиться. Заметьте, что указание номера телефона имеет смысл, если Вы совершаете вызовы через телефонные линии (FXO или PRI интерфейсы), а не на внутренние екстеншены. В телефонном номере, Вы можете использовать специальный модификатор w для создания полусекундной задержки при наборе номера. Вы можете использовать его для создания паузы ожидания сигнала КПВ или для создания задержек при наборе цифр номера. "w - обычно означает создание паузы в наборе номера, но помещение этого символа в конец номера, приводит к тому, что сервер asterisk предполагает, что номер до этого символа "указан полностью"!"(~markster). Это используется в ситуациях, когда усекаются cdr записи из-за использования донабора номера. Вы также можете использовать специальный модификатор c, для использования PRI параметра "clear channel connections".



Ниже приведены примеры использования команды Dial, которые можно использовать в Вашем плане набора:

exten => s,1,Dial(Zap/1) ; Вызов екстеншена на канале 1
exten => s,1,Dial(Zap/1r2) ; Вызов екстеншена на канале 1с использованием вызывного сигнала #2
exten => s,1,Dial(Zap/1,30) ; Вызов екстеншена на канале 1 с таймаутом в 30 секунд
exten => s,1,Dial(Zap/2/5551234) ; Набор номера 5551234 через канал 2
exten => s,1,Dial(Zap/2c/5551234) ; Набор номера 5551234 через канал 2 с подтверждением соединения
exten => s,1,Dial(Zap/2/ww5551234) ; Пауза в 1 секунду и набор номера 5551234 через канал 2
exten => s,1,Dial(Zap/2/5551234w) ; Предполагаем, что номер задан полностью, далее набираем номер 5551234 через канал 2
exten => s,1,Dial(Zap/g1/5551234) ; Набор номера 5551234 через первый доступный канал в группе 1
exten => s,1,Dial(Zap/1-2/1234) ; Набор номера 1234 через span 1, порт 2
exten => s,1,Dial(Zap/1-2/c1234) ; Набор номера 1234 через span 1, порт 2, с использованием PRI опции "clear channel connections"


Совершение вызовов с использованием групп


В файле конфигурации модуля канала Zap - ( zapata.conf), Вы можете определить группы Zap каналов, которые будут обрабатываться в команде Dial как один канал. В ней Вы определяете, каким из четырех методов будет пользоваться модуль канала Zap для выбора не занятого канала из группы, с помощью одного из префиксов, указанного до номера группы: g, G, r, или R:

  • g: выбор незанятого Zap канала с наименьшим номером (aka. поиск по возрастанию в группе).
  • G: выбор незанятого Zap канала с наибольшим номером (aka. поиск по убыванию в группе).
  • r: использование round-robin поиска, начиная с большего номера канала, чем тот, что был использован в предыдущий раз (aka. циклический поиск по возрастанию).
  • R: использование round-robin поиска, начиная с меньшего номера канала, чем тот, что был использован в предыдущий раз (aka. циклический поиск по убыванию).

Использование поиска с алгоритмом round-robin заставляет модуль Zap канала начинать поиск свободного канала каждый раз, начиная с различных номеров канала. Для каждой группы каналов, модуль Zap канала сохранят начальную точку последнего поиска, если используется алгоритм round-robin, и в следующий раз начнет проверку или со следующего (меленькая буква r)) или с предыдущего (большая буква R) канала в группе. Номер найденного доступного канала (если такой есть) ни как не влияет на начальную точку следующего поиска с использованием алгоритма round-robin. Вызов команды Dial, с использованием обычных методов поиска канала (g или G) так же никак не влияет на начальную точку следующего поиска с алгоритмом round-robin.

Например, если Вы определили группу каналов с номером 2, которая содержит Zap каналы: 1, 2, 5 и 8, и последний round-robin поиск свободного канала для этой группы (номер 2) начинал поиск с канала номер 5, то далее приводиться порядок поиска, который будет использоваться модулем Zap для четырех из возможных методов:

  • Dial(Zap/g2...): Будет искать свободный канал в последовательности: 1, 2, 5, 8
  • Dial(Zap/G2...): Будет искать свободный канал в последовательности: 8, 5, 2, 1
  • Dial(Zap/r2...): Будет искать свободный канал в последовательности: 8, 1, 2, 5
  • Dial(Zap/R2...): Будет искать свободный канал в последовательности: 2, 1, 8, 5


Стили сигналов вызова


Четыре различных стиля для сигналов звонка (вызова), которые может генерировать драйвер Zaptel, для телефонов, которые подключены через каналы Zap, это:
  1. Быстрый короткий, потом длинный звонок
  2. сигнал звонка в Британском стиле
  3. три быстрых коротких звонка
  4. короткий звонок, следующий за длинным
Если Вы не указали стиль сигнала звонка, тогда будет использован стиль в зависимости от того, какой код страны вы определили директивой defaultzone в Вашем файле конфигурации zaptel.conf. Стиль сигнала звонка, используемый по умолчанию, для указанной страны, может быть одним из четырех вышеприведенных, или это может быть пятый стиль.

idea Вы можете также добавить свои собственные стили для сигнала звонка, определив его в параметре "cadence=" в файле конфигурации zapata.conf.
Формат этой команды: "время генерации вызова, время паузы, время генерации вызова, время паузы .... и т.д.", в миллисекундах.
Вашему новому стилю сигнала будет присвоен свой номер для использования с опцией 'r', начиная с 5 и далее, в зависимости от числа строк с директивой "cadence=" в Вашем файле конфигурации.

Стили для сигналов звонка могут быть также жестко заданы в исходных кодах сервера asterisk, в файле chan_zap.c

Стили вызовов для Zap каналов НИГДЕ НЕ ОПИСАНЫ в исходных кодах драйвера Zapata.

exclaim Стили сигнала звонка (а также определения сигналов "dialtone", "busy", "ringing", и других тональных сигналов) определены в драйвере Zaptel. Вы не можете изменить эти определения без перекомпиляции драйвера zaptel (см: Инсталляция драйвера ядра Zaptel). Установки в Вашем файле конфигурации: indications.conf не имеют никакого эффекта на тональные сигналы и стили звонков, генерируемых драйвером Zaptel.


Детектирование различных типов звонков при входящих вызовах


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

Модуль канала Zap может быть сконфигурирован на предмет детектирования трех различных типов звонков в дополнение к стандартному поведению при поступлении вызова. Прежде всего, Вам необходимо разрешить детектирование различных типов звонков, установив директиву: usedistinctiveringdetection=yes в Вашем файле zapata.conf. Далее, вы можете использовать директивы: dringn и dringncontext для описания: (a) образец сигнала звонка, поступающий от Вашего телефонного оператора, и (b) в какой контекст плана набора попадет вызов, если он попадает под данный образец. Вызовы, которые не совпадают ни с одним образцом, будут обрабатываться в контексте, который задан по умолчанию для этого канала.

Функция детектирования различных типов звонков находится все еще в экспериментальной стадии разработки. Очевидно она предполагает, что Вам телефонный оператор использует для совершения вызовов различные стили сигналов звонка, Вы также должны получать от него информацию о вызывающем абоненте (caller*ID), что, конечно, не совсем правильное допущение. Если Вас занесло в США, то у Вас обнаружение различных типов вызовов должно работать намного лучше, чем у всех остальных пользователей.

Заметьте, что при включении функции детектирования различных типов сигнала звонка приведет к тому, что серверу Asterisk для его детектирования потребуется два или три "звонка" для определения его стиля. Только после этого он примет решение, в какой контекст направить вызов для дальнейшей обработки. Таким образом, Вам может показаться, что Вы сняли трубку после первого звонка, но вызывающий абонент может сказать Вам, что он ждал, пока Вы снимите трубку, примерно в течение четырех сигналов вызова.

Вы можете описать образец для определения поступающего сигнала звонка в Asterisk, указав в параметре три целых числа. Очевидно, что единственный путь, с помощью которого Вы можете подобрать нужные значения для образца - это использование повышенного уровня протоколирования событий в консоли сервера Asterisk. При поступлении вызова, сервер Asterisk сообщит эти три цифры, которые соответствуют поступающему вызывному сигналу, и Вы, в дальнейшем, можете использовать их в директиве dring. Например, если вы получили в консоли, при поступлении сигнала звонка, значения: 325, 95, 0, тогда Вы можете использовать их в Вашем файле zapata.conf:

usedistinctiveringdetection=yes
dring1=325,95,0
dring1context=mycontext

Если Вам необходимо определить несколько шаблонов для различных сигналов вызова, то Вы можете их определить в директивах: dring2 и dring3.

Ниже приведены некоторые шаблоны для определения типа вызывного сигнала, присланные другими пользователями:

  • 95,0,0
  • 325,95,0
  • 367,0,0
  • 247,0,0

В SBC\Wisconsin используются следующие вызывные сигналы:
  • 337,0,0 - Distinctive Ring 1
  • 337,312,0 - Distinctive Ring 2

Они могут подходить и для других типов АТС, если у Вас есть желание, то Вы можете пополнить этот список для различных типов АТС!


Имена для установленных соединений через канал Zap


Если у Вас имеются уже установленные соединения через каналы Zap, то имена этих каналов будут в следующем формате:

Zap/channel-instance

channel - это номер канала.
instance - это номер от 1 до 3, сообщающий, какой из трех логических каналов, связанных с одним физическим каналом сейчас используется.

Zap/1-1 Первый вызов через Zap канал номер 1
Zap/3-2 Второй вызов через Zap канал номер 3

Обратите внимание, что команда ChanIsAvail будет возвращать имена каналов именно в этом формате.

Для извлечения типа канала из его полного имени можно воспользоваться командой Cut . Предположим, что переменная Foo имеет значение - "Zap/1-2":

Cut(ChannelType=Foo,/,1)

Теперь, переменная ChannelType имеет значение "Zap". Вы можете использовать команду GotoIf для проверки того, что вызов поступил через канал типа Zap:

GotoIf($[${ChannelType} = Zap]?10)

Если Вам нужно получить номер канала из его имени, то Вы можете использовать две команды Cut. Если переменная Foo имеет значение "Zap/1-2", тогда после выполнения нижеприведенных команд, переменная Bar будет иметь значение - "1":

Cut(Bar=Foo,/,2})
Cut(Bar=Bar,-,1)


Встроенные номера екстеншенов


Существуют некоторые "номера екстеншенов", которые встроены в модуль Zap канала. Вы можете переопределить их действия в Вашем плане набора, т.е., они будут использоваться модулем канала, только если эти номера не используются Вами в плане набора.

*0 Отправка сигнала "flash".
*67 Запрещение Caller*ID.
*69 Сообщить номер последнего позвонившего абонента ("call return").
*70 Выключить уведомление о втором вызове (call waiting).
*72 Включить безусловное перенаправление всех вызовов (call forward immediate).
*73 Выключить безусловное перенаправление всех вызовов (call forward immediate).
*78 Включить функцию "Не беспокоить" (Do Not Disturb).
*79 Выключить функцию "Не беспокоить" (Do Not Disturb).
*80 Добавить последний полученный caller*ID в черный список.
*82 Включить Caller ID (только, если был выключен с помощью *67).

Кроме того, есть другие коды, которые не являются специфичными только для модуля канала Zap:

*8# Перехватить вызов, поступивший в "группу вызовов" (Callgroup pickup).


Импульсный набор


Драйвер канала Zap более менее нормально поддерживает импульсный набор номера. Смотри:



Сервис передачи данных ISDN


Если Вы подключаете ISDN интерфейс через канал Zap, и желаете предоставить сервисы передачи данных интерфейса ISDN (PPP через ISDN), тогда Вам необходимо обратить внимание на команду ZapRAS , и на следующие четыре директивы файла конфигурации zapata.conf: idledial, idleext, minunused, minidle.

Поддержка этого сервиса GR303 для каналов Zap включена, начиная с Июня 2004.


Caller*ID


Драйвер ZapHFC помечает вызовы со скрытым или недоступным номером вызывающего абонента, устанавливая переменную ${CALLERIDNUM} в значение: "CID withheld" или "No CID available". Следовательно, переменная ${CALLERIDNUM} может содержать пробелы, и применяя такие команды, как 'GotoIf', Вы должны принимать это во внимание (например, заключая переменную ${CALLERIDNUM} в кавычки).


Ссылки по теме: