Размер
16. Настройка Asterisk сервера¶
Play

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 и послужит фундаментом, основываясь на котором, вы сможете создавать свою собственную конфигурацию.