16. Настройка Asterisk сервера¶
Для того чтобы настроить Calculate Directory Server в качестве IP-АТС используется Asterisk. Asterisk — компьютерная ATC под лицензией GPL поддерживающая большое количество VoIP протоколов. Настройка Asterisk производится путем редактирования файлов находящихся в директории /etc/asterisk .
Разберем настройку Asterisk-сервера на примере несложной конфигурации.
Постановка задачи¶
- Мы имеем один настроенный Asterisk-сервер в первом офисе, нам надо настроить второй сервер для нового офиса
- На наш новый сервер мы получаем две телефонные линии по аналогу
- Одна линия используется для телефонных разговоров, вторая для факсов
- В сервере установлена плата Digium AEX804E — PCI-E плата на 8 портов, в которую установлен один модуль на 4 FXO-порта и модуль эхоподавления
- Имеющийся сервер находится в Санкт-Петербурге, новый будет в Москве
- Сервера должны быть связаны между собой и иметь единую систему нумерации внутренних номеров
- На московском сервере должна быть следующая схема очередей звонков при поступающем вызове на основную линию:Поступил звонок → проигрываем приветствие и предлагаем набрать добавочный номер → если добавочный номер не был набран, то переводим звонок на секретаря в СПБ → если секретарь не ответил, то переводим звонок на абонентов московского сервера → если московские абоненты не ответили, то переводим звонок на петербургских абонентов.
- При звонках поступающих на факсовую линию — они должны адресоваться на факс
- Для подключения факса по SIP нам необходим FXS-шлюз, например, Linksys SPA2102
- Исходящие звонки должны совершаться по первой свободной линии. Если основная телефонная линия занята, то звонок идет через факсовую.
- Звонки с московского сервера в Санкт-Петербург(код 812) должны проходить через сервер в Петербурге
- Все нижеприведенные настройки тестировались и применимы для следующих версий пакетов:
- net-misc/asterisk-1.6.2.17.3
- net-misc/dahdi-2.4.1
- net-misc/dahdi-tools-2.4.1
Установка сервера Asterisk¶
Для начала работы нам необходимо установить в систему Calculate Directory Server пакет сервера Asterisk и сопутствующие пакеты.
Конфигурация USE-флагов для устанавливаемых пакетов¶Создадим файл /etc/portage/package.use/asterisk — в нем мы пропишем все необходимые USE-флаги для нужных нам пакетов.
Для пакета net-misc/asterisk мы добавляем флаги dahdi (для работы с платой телефонии), span (для факсов) и vorbis (опционально для поддержки кодека vorbis). У остальных пакетов мы прописываем поддержку всех доступных кодеков.
Установка пакетов¶Теперь, когда мы установили необходимые USE-флаги, приступим к установке.Вводим команду:
Мы получим такой список пакетов для установки:
Соглашаемся на установку пакетов и ждем. После того, как все будет установлено, можно будет приступать к настройке.
Базовая настройка SIP¶
Задача поставлена — приступим к настройке нашего нового сервера.
Создание учетных записей¶Сперва добавим несколько локальных SIP-абонентов. Для этого нам необходимо редактировать файл /etc/asterisk/sip.conf
Сначала добавим шаблон для общих настроек sip-телефонов:
- type — тип соединения ( peer — только исходящие вызовы, user — входящие вызовы, friend — входящие и исходящие вызовы)
- context — контекст в /etc/asterisk/extension.conf в который будет выполняться при звонке с телефона
- secret — пароль для SIP телефона
- host — имя хоста телефона (dynamic динамическое имя хоста)
- nat — сетевая трансляция адресов
- qualify — проверка функционирования телефона
- canreinvite — прямой доступ телефона к другому телефону минуя Asterisk
- callgroup — номер телефонной группы
- pickupgroup — номер группы захвата звонков
- dtmfmode=auto — dtmf режим ( auto|inband|info|rfc2833 )
- disallow=all — запрещает все кодеки
- allow=g722 — разрешает использование кодека g722
Теперь добавим секции для каждого телефона:
Для факса мы переопределяем используемые кодеки, т. к. факсовый сигнал нормально проходит лишь при использовании кодека g711(alaw и ulaw) и t38pt_udptl=yes разрешает использование протокола t.38 для передачи факсов.
Базовая настройка плана набора¶
Наши телефоны и FXS-шлюз теперь могут зарегистрироваться на сервере, но звонить пока они еще не могут. Для этого нам надо создать контекст [outcoming-sip ] в файле /etc/asterisk/extensions.conf
Конфигурация внутренних вызовов¶Для удобства выделим локальные номера в отдельную секцию:
И сделаем секцию завершающую вызов:
В секцию [outcoming-sip] теперь подключим наши секции:
Теперь перезагрузив настройки Asterisk мы сможем звонить по номерам внутри сервера 800, 801 и 802 соответственно. Перезагрузка настроек asterisk выполняется следующим образом. Запускаем консоль управления Asterisk-сервером командой asterisk -r и прописываем в консоли reload — это заставит Asterisk перечитать все настройки, либо же можно перечитать их по отдельности прописав sip reload для перезагрузки настроек sip и dialplan reload для перезагрузки настроек плана набора.Введя команду sip show peers мы можем посмотреть, какие абоненты у нас могут присутствовать на сервере и кто сейчас зарегистрирован и с какого IP.
Настройка связи между двумя серверами и вызовов между ними¶
Наши абоненты уже звонят друг-другу, но у нас есть еще и абоненты на нашем сервере в Петербурге, нам надо чтобы они могли звонить и им тоже. Для этого нам надо для начала настроить связь между нашими двумя серверами Asterisk.
Установка связи между двумя Asterisk-серверами по протоколу SIP¶На сервере в Москве прописываем в файле /etc/asterisk/sip.conf следующее:
В секции [general]:
И в конце создаем новую секцию:
На сервере в Санкт-Петербурге пишем очень похожим образом:
В секции [general]:
И в конце создаем новую секцию:
Теперь рассмотрим подробнее что-же мы такое написали и для чего.
Это указывает нашему московскому серверу зарегистрироваться на петербургском сервере 192.168.0.30/spb_asterisk с логином msk_asterisk и паролем XXXXXXXXX .Эти логин и пароль мы как раз задали, создав секцию [msk_asterisk] на нашем сервере в Петербурге. И соответственно петербургский сервер регистрируется на московском 192.168.1.25/msk_asterisk с логином и паролем указанными секцией [spb_asterisk] в конфигурации московского сервера.
Конфигурация плана набора для связи между серверами¶Связь между серверами установлена — необходимо описать план набора для того чтобы московские абоненты могли звонить петербургским и наоборот.
В файле /etc/asterisk/extensions.conf на московском сервере создаем секцию [spb-local-phones] , в который мы пропишем наших петербургских абонентов:
Отметим небольшую разницу с тем, как мы прописывали локальных абонентов.Если локальным абонентам мы звонили exten => 800,2,Dial(SIP/001,120,Tt) , то есть набрав номер 800 мы совершали абоненту, который зарегистрирован с логином 001, то в данном случае exten => 500,1,Dial(SIP/spb_asterisk/500,120,Tt) мы звоним абоненту находящемуся на сервере spb_asterisk с телефонным номером 500.
В имеющуюся секцию [outcoming-sip] добавляем включение новой секции с локальными номерами петербургского сервера:
И создаем секцию [spb_incoming] для обработки вызовов поступающих с петербургского сервера:
На сервере в Петербурге прописываем аналогичным образом:
Перегружаем настройки SIP и плана набора. Теперь наши абоненты в Москве и Петербурге (на обоих серверах установлена система Calculate Directory Server c пакетом Asterisk) могут общаться между собой.
Настройка платы Digium AEX804E и конфигурация плана набора¶
Наши абоненты звонят друг-другу, звонят абонентам петербургского сервера, но они пока еще не могут звонить на городские телефоны. Приступим к настройке нашей платы телефонии.
Настройка системы для работы с платой телефонии¶Для работы платы телефонии необходимы пакеты net-misc/dahdi и net-misc/dahdi-tools . Когда они установлены, то закоментируем строку с модулем для нашей платы в файле /etc/modprobe.d/dahdi.blacklist.conf для того чтобы модуль для нее загружался системой.
Файл примет следующий вид:
В нашем случае нам необходим модуль wctdm24xxp — этот модуль используется платами TDM2400P/AEX2400, TDM800P/AEX800 и TDM410P/AEX410.
Теперь настроим каналы на нашей плате. Для этого нам необходимо отредактировать файл /etc/dahdi/system.conf
В нашей плате установлен модуль на 4 FXO канала, с номерами каналов от 5 до 8(если смотреть на плату, то это 4 левых гнезда. На этой плате нумерация каналов идет справа налево. Восьмой канал — крайний левый, первый канал — крайний правый.
В конфигурационном файле прописываем следующее:
Это указывает нам, что для каналов с 5-го по 8-й у нас используется сигнализация fxsks.
Объяснение понятий FXO и FXS¶ Настройка FXO-каналов на Asterisk-сервере¶Теперь мы запускаем демон dahdi /etc/init.d/dahdi start и смотрим, что у нас все работает как надо командой dahdi_cfg -vv
Теперь необходимо настроить каналы в самом Asterisk-сервере. Для этого мы редактируем файл /etc/asterisk/chan_dahdi.conf
В нем нам необходимо отредактировать секцию [channels] :
- usecallerid=yes — активирует возможность передачи CallerID
- hidecallerid=no — указывает, что для исходящих вызовов будет передаваться CallerID
- callwaiting=no — деактивирует отложенный вызов
- threewaycalling=yes — активирует возможность подключения третьего абонента
- transfer=yes — разрешает переадресацию вызова
- echocancel=yes — активирует эхоподовление
- echotraining=yes — активирует режим измерения эха для ускорения настройки эхоподавления
- signaling=fxs_ks — указывает на использование сигнализации fxs
- group=1 — группа каналов
Первый контекст указывает как будет обрабатываться вызов для 7-го канала, второй для 8-го. Седьмой канал мы используем для основной линии, восьмой — для факсов. Параметр group=1 для обоих каналов объединяет их в одну группу. Это позволит нам совершать вызовы через первую свободную линию.
Конфигурация плана набора для приема вызовов¶Настроим прием вызовов на наши линии.Создаем контекст [incoming_fxo] в файле /etc/asterisk/extensions.conf :
Здесь мы отвечаем на вызов и отправляем его в необходимую очередь. Queue(welcome,n. 12) отправляет звонок в очередь welcome на 12 секунд, параметр «n» позволяет набор во время нахождения в очереди и проигрывается музыка ожидания(Music On Hold, MOH). В очереди welcome мы проигрываем приветственное сообщение — это будет описано ниже. GotoIfTime(19:15-8:00,*,*,*?allRing:default) — проверяется условие, если сейчас время от 19:15 вечера до 8:00 утра, то мы переходим к метке allRing , иначе к метке default . Это делается для того, чтобы в то время, когда большинства работников нет в офисе звонили все телефоны, а в рабочие часы — в установленном порядке. Далее под меткой default у нас звонок сначала на 6 секунд идет на секретаря, затем на 10 секунд на московских менеджеров и потом на 600 секунд на петербургских менеджеров. Параметр «r» в вызове Queue() отвечает за то, что вместо MOH звонящий слышит гудки, как при звонке (ringing).
Также нам нужен контекст для второй линии — создадим секцию [incoming_fxo_fax] в файле /etc/asterisk/extensions.conf :
На этой линии мы просто отправляем поступивший звонок на факс на 600 секунд.
Создание очередей вызова¶Теперь рассмотрим, как именно описываются очереди. Они описываются в файле /etc/asterisk/queues.conf .
- strategy — стратегия по которой обрабатываются поступающие вызовы, может принимать несколько значений:
- ringall — вызываются все доступные участники до тех пор, пока кто-то из них не ответит на вызов (по умолчанию)
- leastrecent — вызывается участник очереди, который вызывался меньшего всего
- fewestcalls — вызывается участник очереди, ответивший на наименьшее количество звонков
- random — случайным образом из участников очереди вызывается свободный
- rrmemory — циклический вызов с памятью, запоминается последний ответивший участник очереди
Для обработки добавочного номера в очереди welcome мы указали контекст [all-local-sip] — он должен включать в себя все локальные московские и петербургские номера, создадим для него запись в файле /etc/asterisk/extensions.conf
Постановка звонка в очередь и обработка происходит следующим образом:Функцией Queue(welcome,n. 12) в плане набора мы отправляемый поступивший звонок на обработку в очередь welcome . В ней в течении 12 секунд звонящий слышит приветственное сообщение и, так как мы передали параметр "n", может набрать добавочный номер, который обрабатывается контекстом all-local-sip . По истечении 12 секунд, если не был набран добавочный номер, звонок выходит из данной очереди и идет на следующий шаг обработки в плане набора.При вызове функции Queue(msk-manager1,r. 10) звонок переходит на обработку в очередь msk-manager1 на 10 секунд. При нахождении в очереди, так как мы указали параметр "r", звонящий слышит гудки. В это время звонок обрабатывается в соответствии с заданной стратегией — в данном случае ringall (звонят телефоны у всех указанных членов очереди). Если кто-то из членов очереди берет трубку, то устанавливается соединение. В противном случае, если за 10 секунд трубка взята не была, то обработка вызова снова переходит к следующему шагу в плане набора.
Установка своей музыки (сообщения) ожидания (Music On Hold, MOH)¶У нас уже обрабатываются входящие на наши городские линии и мы проигрываем приветственное сообщение, указав для очереди welcome музыкальный класс welcome — рассмотрим, как именно он задается. Музыка ожидания описывается в файле /etc/asterisk/musiconhold.conf
При установке asterisk он имеет следующий вид:
Нам надо добавить в него следующую секцию:
В данной записи мы говорим Asterisk-серверу проигрывать файлы в алфавитном порядке из директории /etc/asterisk/moh1 . В эту директорию мы помещаем записанное сообщение. Для уменьшения нагрузки на сервере предварительно сконвертируем при помощи ffmpeg (пакет media-video/ffmpeg предустановлен в системе Calculate Linux Desktop) наше сообщение в наиболее часто используемые кодеки alaw, ulaw, g722, g729, gsm и в Asterisk Native SLN из которого Asterisk сможет конвертировать сам налету.Например конвертация в Native SLN при помощи ffmpeg делается следующим образом:
Сконвертировать имеющиеся mp3 файлы в mono wav и ulaw pcm можно следующим образом:
Конфигурация плана набора для совершения исходящих вызовов¶Теперь нам осталось настроить исходящие вызовы на городские номера. В файле /etc/asterisk/extensions.conf создаем секцию [city-calls] :
И подключаем ее к секции [outcoming-sip] :
- DAHDI — указывает на то, что мы совершаем звонок через нашу FXO-плату
- g1 — группа каналов 1 (мы это задавали при конфигурации FXO-каналов), звонок совершается через группу для того чтобы, если основная линия занят он шел через факсовую линию
- $ и $ — номер, который был набран. Полный синтаксис команды $ , где x — начальное положение и y — количество возвращаемых цифр.
Заключение¶
Таким образом мы настроили Asterisk-сервер в базовой конфигурации, соответствующей поставленной задаче. Это лишь основные настройки, позволяющие совершать и принимать необходимые вызовы. Сервер телефонии Asterisk предоставляет неограниченные возможности по настройке и конфигурации офисной IP-АТС. Надеемся, что данная статья поможет вам разобраться с настройкой Asterisk и послужит фундаментом, основываясь на котором, вы сможете создавать свою собственную конфигурацию.