Сначала маленькая предыстория. Не так давно наша фирма практически лишилась городской связи, один телефонный оператор, что-то не поделил с другим и в результате между ними перестали проходить звонки. Было принято решение, раз уж так произошло полностью отказаться от обычной телефонной связи и полностью перейти на ip-телефонию.
Постановка задачи:
1) Организовать телефонную связь;
2) Запись разговоров;
3) Очередь звонков;
4) Голосовое меню;
5) GSM-шлюз, так-как должны обрабатываться и звонки с мобильных операторов.
6) Минимальная стоимость решения, так как ситуация форс-мажорная и бюджет выделен не был.
Никогда раньше я с телефонией не работал, задача встала срочная, попытаюсь подробно рассказать как ее решал лично я, про грабли на которые наступил, если что сделано не совсем оптимально или вообще криво буду благодарен за исправления и дополнения, и так поехали.
Выбор платформы.
Первым делом решил посмотреть готовые сборки, указанные на сайте asterisk.ru, были скачаны готовые образы AsteriskNOW, FreePBX, Elastix, про остальные просто прочитана документация. TrixBox был сразу откинут из-за своей платности, так как противоречил 6 пункту. AsteriskNOW показался сыроватым и не доработанным, FreePBX, Elastix понравились оба, логичные и удобные сборки, но не захотели дружить с имеющимся в наличии модемом Huawei E173, а также были собраны на CentOS с достаточно старым ядром и не вписывались в общий парк серверов на Debian. Принял решение собирать все с нуля, тем самым получив бесценный опыт.
Сборка рабочего окружения, связывание элементов и настройка.
Итак имеем свежеустановленный Debian 6 Squeeze, минимальная установка.
Добавляем необходимые в дальнейшем репозитории в
Устанавливаем ключи
Обнобляемся.
Из бэкпортов ставим свежее ядро, которое необходимо для корректной работы GSM модема
Перезагружаемся
Ставим web сервер.
Так как нагрузка на веб сервер планируется разовая и небольшая, было лень ставить отдельно apache + php + нужные модули, решил воспользоваться неплохой, на мой взгляд, сборкой Zend Server CE.
Ставить будем все и сразу.
Настройка веб-сервера Zend
Изменяем пользователя из под которого работает апач, на asterisk.
Изменяем параметры php (можно через специальную админку сервера, доступную по ссылке _https://IP:10082/ZendServer или _http://IP:10081/ZendServer.).
Скачиваем необходимые исходники
Собираем их для удобства дальнейшего обновления сразу в пакеты.
Отключаем ненужные модули, вообще мне dahdi был не нужен, но на форумах и в документации советуют все равно собирать с ним.
если планируем включить mp3 выполняем
если нет, сразу
Включаем в menuconfig следующие опции;
app_mysql, app_saycountpl, cdr_mysql, format_mp3, res_config_mysql, EXTRAS-SOUNDS-EN-GSM EXTRAS-SOUNDS-RU-GSM (нужные кодеки и языки) ну и другие нужные опции.
Если получили ошибку не существующей директории
и снова
Создаем и заполняем базу данных необходимую для FreePBX
Запускаем Астериск перед установкой FreePBX
Конфигурируем FreePBX для работы с Asterisk:
Используем все параметры по умолчанию только путь задаем /var/www/freepbx/, который мы создали ранее.
Теперь небольшое отступление, на сайте FreePBX доступна версия freepbx-2.10.0, но ее инсталятор под Debian вел себя очень странно, пришлось наложить несколько патчей из багрепортов, но дальнейшее его поведение также не понравилось и было принято решение использовать freepbx-2.9.0 для установки, а потом обновиться. После успешной установки заходим на веб интерфейс по адресу _http://IP-сервера/freepbx и обновляем систему, процесс обновления хорошо описан в самом интерфейсе и вынесена отдельная ссылка, так что подробно останавливаться на этом не буду, обновление проходит быстро и гладко и через 10 минут имеем у себя последнюю версию системы.
Прикручиваем модем huaway E173
Модем был предварительно разлочен на всех операторов и в нем были разблокированы голосовые функции. На этом моменте подробно останавливаться не буду, все достаточно тривиально и не входит в описываемую тему, но если кому интересно отвечу.
Для определения вменяемого имени модема
Вставляем модем и выполняем
Получаем вывод похожий на
Если не заработало, выясняем идентификатор устройства:
Проверяем наличие файла «12d1:*» в /etc/usb_modeswitch.d, в одном из файлов
должно быть упоминание продукта «1446». Например:
Если файла нет, то его можно создать по вышеприведенному примеру, просто изменив DefaultProduct на:
Перегружаемся, после чего модем имеет вменяемое имя, продолжаем связывать его с Asterisk
Настраиваем параметры модуля под наш модем:
в самом низу конфигурационного файла удаляем все данные (Ctrl+k) после последней черты и вставляем данный конфиг
записываем изменения Ctrl+O и выходим из редактора nano Ctrl+X
Создаем контент в диалплане (Не забываем выключить пинкод на SIM):
Перезапускаем Asterisk
Проверка состояния модема:
Теперь в админке FreePBX добавляем маршруты для этого модема.
Исходящий маршрут:
В веб интерфейсе (FreePBX 2.10) — Connectivity — > Trunks -> Add Custom Trunk
Trunk name — Пишем имя чтоб не забыть например GSM-modem
Последний пункт — Custom dial string — указать
где 0000000000000 — IMEI модема (виден в предыдущем пункте).
В веб интерфейсе (FreePBX 2.10) — Connectivity -> Outbound routes -> ADD route
Назвать например Outbound (Исходящий)
match patern ->. (ставим точку в это поле),
в Trunk Sequence for Matched Routes выбираем наш транк.
Входящий маршрут:
В веб интерфейсе (FreePBX 2.10) — Connectivity -> Inbound routes -> ADD Incoming route
Назвать например Inbound (Входящий)
Номер DID -> 0000000000000 (IMEI модема)
в 'Set destination' выбрать получателя звонков, поступающих на модем.
Включаем русскоязычную озвучку для протоколов, например для SIP, через WEB-интерфейс
Settings -> Asterisk SIP Settings -> language -> ru
Создаем скрипт автозапуска FreePBX: /etc/init.d/amportal-startup
Даем ему права на выполнение
Добавляем в автозагрузку.
FreePBX частично переведен на русский язык, но его включение у меня изначально не работало, чтоб его починить проделываем следующие манипуляции.
Исправляем файлик /usr/share/locale/locale.alias
Удаляем строку с кодировкой для russian и добавляем 3 строки вместо нее:
затем перегенерируем локаль
и все начинает работать.
На этом рабочий день закончился, остальная работа перенесена на завтра, прошу прощения за некоторый сумбур в мыслях, пишу по горячим следам и приятным чувством что система заработала, совершила тестовый звонок с модема и приняла вызов на модем, связь чистая, описание настройки продолжу по мере включения и проверки.
Для настройки использовал документацию с сайтов FreePBX, asterisk-pbx, blog.911.in.ua, официальная документация проектов и поисковые системы.