- PVSM.RU - https://www.pvsm.ru -
По неким политическим причинам передо мной встала задача по переводу телефонии нашего офиса с гибридной аналоговой АТС Panasonic KX-TDA200 на SIP. Упрощало задачу наличие в офисе СКС, а усложняло использование операторами панелей с кнопочками для быстрого переключения звонков.
Рассматривались варианты:
Будучи сторонником свободного ПО, я уговорил начальство принять третий вариант. Тем более, что у меня как раз освободился сервер, который можно было задействовать под эту задачу.
Для связи с городскими телефонными сетями была приобретена плата OpenVox DE130E [1]. Телефоны были закуплены фирмы Grandstream [2].
На сервер я поставил:
Asterisk я решил брать не из пакета, а собрать из исходников, так как не было уверенности, что из пакета она заработает с платой OpenVox.
Инструкция по сборке и настройке DAHDI драйвера выложена на сайте openvox (PDF [3]). Никаких засад встречено не было. Железяка сразу же увидела поток.
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 Notices» вывалилась куча сообщений о том, что в /etc/asterisk лежит множество конфигурационных файлов, которыми должен управлять сам FreePBX. Я удалил эти файлы (сохранил копии). При нажатии большой красной кнопки «Apply Config» FreePBX сгенерировал нужные файлы сам.
Пошел в «Admin — Module Admin». Отметил репозитории Basic, Extended и на всякий случай Unsupported. Нажал на «Check Online» и получил возможность набрать себе модулей. Помимо установленных по умолчанию, я выбрал:
Групповые настройки телефонов очень удобно делаются при помощи End Point Manager.
В Connectivity — End Point Configuration надо выбрать производителя и модели телефонов, которые у нас используются. Только для начала стоит кликнуть «Check for Updates», так как проект довольно живой и постоянно выпускает новые модели.
Потом в Connectivity — End Point Advanced Settings надо прописать путь к каталогу, откуда tftp раздает файлы. И вот теперь есть несколько вариантов:
Я прописал по одному телефону каждой модели, отредактировал шаблоны настроек, а дальше при вводе каждого устройства указывал его MAC адрес и выбирал модель и шаблон. После этого End Point Manager сгенерировал правильные cfgMAC файлы и положил их в каталог для раздачи по tftp.
Чтобы телефоны правильно подхватывали свои конфиги, надо сообщить им об этом. Вот кусочек из файла /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.
Поставить hylafax
и отправлять факсы, а не только принимать.
Поставить модуль Phonebook
, сделать общеофисную телефонную книгу и показывать не только номер, но и имя звонящего при входящих звонках.
Поставить TAPI драйвер и дать людям возможность звонить по контактам прямо из Outlook'а.
Многие очевидные для меня подробности я в этой статье опустил, с удовольствием отвечу на вопросы.
Автор: 6opoga
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ip-telefoniya/19661
Ссылки в тексте:
[1] OpenVox DE130E: http://www.openvox.cn/en/products/t1e1j1-cards/de130e.html
[2] Grandstream: http://www.grandstream.com/
[3] PDF: http://downloads.openvox.cn/pub/manuals/V2.2/English/D130E%20DE130E_on_DAHDI_User_Manual.pdf
[4] Источник: http://habrahabr.ru/post/158057/
Нажмите здесь для печати.