Pull to refresh

Офисная телефония на Asterisk+FreePBX

Reading time 6 min
Views 78K
Предыстроия

По неким политическим причинам передо мной встала задача по переводу телефонии нашего офиса с гибридной аналоговой АТС Panasonic KX-TDA200 на SIP. Упрощало задачу наличие в офисе СКС, а усложняло использование операторами панелей с кнопочками для быстрого переключения звонков.

Рассматривались варианты:
  • Проапгрейдить АТС до серии KX-TDE
  • Купить что-нибудь железное, например Cisco или Avaya
  • Поставить Asterisk

Будучи сторонником свободного ПО, я уговорил начальство принять третий вариант. Тем более, что у меня как раз освободился сервер, который можно было задействовать под эту задачу.

Закупки и подготовка

Для связи с городскими телефонными сетями была приобретена плата OpenVox DE130E. Телефоны были закуплены фирмы Grandstream.

На сервер я поставил:
  • Актуальную версию debian
  • dhcp3-server — для раздачи адресов и параметров телефонам
  • ntp — для предоставления телефонам актуального времени
  • tftp — для предоставления телефонам прошивок и конфигураций
  • mysql,apache,php — для FreePBX
  • build-essential — для сборки Asterisk

Сборка

Asterisk я решил брать не из пакета, а собрать из исходников, так как не было уверенности, что из пакета она заработает с платой OpenVox.

Драйвер DAHDI для OpenVox

Инструкция по сборке и настройке DAHDI драйвера выложена на сайте openvox (PDF). Никаких засад встречено не было. Железяка сразу же увидела поток.

Asterisk

Asterisk я взял версии 10.9.0 (да, они недавно сменили принцип нумерации версий). Скачал, распаковал, сказал ./configure; make menuconfig, совсем как в былые времена для ядра. Засада первая — для menuconfig нужны ncurses, newt или GTK. Причем, так как мы собираем из исходников, нужны -dev версии библиотек (это актуально и для всех остальных доставляемых в процессе пакетов).
menuconfig у asterisk понятный и удобный, если какой-то компонент не может собраться, то написано, что нужно добавить, чтобы сборка получилась. Так, например, для факса пришлось доставить libspandsp-dev. Не забываем после доустановки библиотек перезапускать ./configure. Если для сборки требуется скачать дополнительные файлы, они будут скачаны автоматически.

Для работы FreePBX необходимо, чтобы у Asterisk присутствовал manager interface. Этот модуль надо не забыть включить, и перед установкой FreePBX поставить вменяемый пароль и разрешения в файле /etc/asterisk/manager.conf.

Итак, все компоненты выбраны, можно запускать стандартные make; make install. Установка FreePBX потребует от нас уже запущенного asterisk'а, так что скажем еще и make samples.

Внимание! После этого при запуске вы получите абсолютно живой asterisk в конфигурации «для примера», которая не является образцом безопасности. Иными словами — перекройте файрвол.

FreePBX требует, чтобы Asterisk и Apache крутились от одного и того же пользователя, так что создаем юзера и группу asterisk, прописываем их в конфиг апачу. Пермишены на файлы FreePBX откорректирует самостоятельно.

FreePBX

На удивление, никаких граблей не появилось. Скачал, строго по инструкции создал базу, пользователя, прогнал скрипты, запустил. Можно идти на интерфейс настройки.

Настройка


Начальная настройка

На первом же экране интерфейса администрирования в области «FreePBX Notices» вывалилась куча сообщений о том, что в /etc/asterisk лежит множество конфигурационных файлов, которыми должен управлять сам FreePBX. Я удалил эти файлы (сохранил копии). При нажатии большой красной кнопки «Apply Config» FreePBX сгенерировал нужные файлы сам.

Выбор модулей FreePBX

Пошел в «Admin — Module Admin». Отметил репозитории Basic, Extended и на всякий случай Unsupported. Нажал на «Check Online» и получил возможность набрать себе модулей. Помимо установленных по умолчанию, я выбрал:
  • Call Recording — для записи разговоров
  • Conferences — для организации конференций с паролями и т.д.
  • Ring Groups — для групповой обработки звонков (секретари)
  • PBX End Point Manager — для создания конфигураций телефонов
  • Fax Configuration — для настройки факса


Подготовка настроек телефонов

Групповые настройки телефонов очень удобно делаются при помощи End Point Manager.

В Connectivity — End Point Configuration надо выбрать производителя и модели телефонов, которые у нас используются. Только для начала стоит кликнуть «Check for Updates», так как проект довольно живой и постоянно выпускает новые модели.

Потом в Connectivity — End Point Advanced Settings надо прописать путь к каталогу, откуда tftp раздает файлы. И вот теперь есть несколько вариантов:
  • Можно подключить все телефоны, дождаться загрузки и просканировать сеть из «Connectivity — End Point Device List»
  • Можно при вводе устройства заполнить раздел End Point Manager, указав MAC адрес и модель устройства
  • Можно добавлять устройства по одному

Я прописал по одному телефону каждой модели, отредактировал шаблоны настроек, а дальше при вводе каждого устройства указывал его MAC адрес и выбирал модель и шаблон. После этого End Point Manager сгенерировал правильные cfgMAC файлы и положил их в каталог для раздачи по tftp.

Настройка DHCP

Чтобы телефоны правильно подхватывали свои конфиги, надо сообщить им об этом. Вот кусочек из файла /etc/dhcp/dhcpd.conf:
subnet 192.168.xxx.0 netmask 255.255.255.0 {
  range 192.168.xxx.10 192.168.xxx.240;
  server-name "192.168.xxx.1";
  option domain-name "my.domain";
  option domain-name-servers 192.168.xxx.1;
  option domain-search "my.domain";
  option routers 192.168.xxx.1;
  option nntp-server 192.168.xxx.1;
  option tftp-server-name "192.168.xxx.1";
  next-server 192.168.xxx.1;
}

Обратите внимание на то, где есть кавычки, а где нет. 192.168.xxx.1 — адрес сервера, на котором крутится вся система.

Окончание настройки

Для настройки линий связи с внешним миром служит экран «Connectivity — Trunks». Там прописываются и ваши связи с SIP провайдерами, и, в моем случае, поток через плату OpenVox.
Чтобы расписать, как будут обрабатываться входящие звонки, настраивайте «Connectivity — Inbound Routes». У меня там для потока указано, на какие входящие номера куда отправлять звонок (в каком формате будет приходить DID номер уточняйте у оператора).
Чтобы расписать, как обрабатывать исходящие звонки, используйте «Connectivity — Outbound Routes». Здесь можно настроить, например, межгород через sipnet, или выбор оператора по набираемому префиксу.

Дополнительные вкусности

FreePBX автоматически генерирует все конфигурационные файлы, но что же делать, если хочется странного? К счастью, разработчики предусмотрели и такие желания. В каждом используемом контексте, макросе или подпрограмме, есть обязательное включение элемента имяэлемента-custom.
Помещать свои дополнительные фишки надо в файл /etc/asterisk/extensions_custom.conf. Я. например, добавил вот что:
; Talking clock for Russian
[sub-hr24format-custom]
exten => ru,1,Playback(at-tone-time-exactly)
exten => ru,n,SayUnixTime(${FutureTime},,kM)
exten => ru,n,Return()

; Directed FAX
[app-fax-custom]
exten => 667,1,Set(FAX_FOR_NUM=${CONNECTEDLINE(num)})
exten => 667,n,NoOp(Directed call transfer from ${CALLERID(all)} for ${FAX_FOR_NUM})
exten => 667,n,GoTo(ext-fax,${FAX_FOR_NUM},1)

С первым блоком все понятно, из коробки просто нет настройки для русского языка часов. А вот второй блок может оказаться интересным. По умолчанию системный факс находится на номере 666 (да, авторы FreePBX явно считают факсы злом). При соединении с этим номером факс принимается и отправляется на e-mail, указанный в системе как «системный получатель факса» (у меня это общая папка в Exchange, но туда кроме спама обычно ничего не попадает). А что делать, если факс в ручном режиме хочет принять наш главбух Иван Иванович? И светить его в общей папке он, разумеется, не хочет. У меня в настройках телефона Ивана Ивановича стоит:
Fax: Enabled
Fax Email: Ivan.Ivanov@my.domain

И теперь, если Иван Иванович переводит звонок на номер 667, то принятый факс будет отправлен на его личную почту. Не забудьте только поставить GhostScript, чтобы бедный Иван Иванович не мучился, пытаясь открыть tiff.

Выводы

  • FreePBX оказался очень удобным инструментом для настройки Asterisk. Рутинные задачи решаются просто, а для нестандартных проблем предусмотрена возможность ручного написания конфигов.
  • Проблем с платой OpenVox не оказалась абсолютно никаких. Взлетела моментально.
  • Телефоны Grandstream оказались, с одной стороны, удобными и легко настраиваемыми. С другой стороны качество сборки — просто ужас. Сдал по гарантии больше 10% аппаратов — у всех не работала трубка, у некоторых динамик, у других микрофон. Отдельно не рекомендую их DECT телефон DP715.


Планы на будущее

Поставить hylafax и отправлять факсы, а не только принимать.
Поставить модуль Phonebook, сделать общеофисную телефонную книгу и показывать не только номер, но и имя звонящего при входящих звонках.
Поставить TAPI драйвер и дать людям возможность звонить по контактам прямо из Outlook'а.

Многие очевидные для меня подробности я в этой статье опустил, с удовольствием отвечу на вопросы.
Tags:
Hubs:
+9
Comments 26
Comments Comments 26

Articles