Практически с самого открытия интернет-магазина, а может даже и раньше, остро стоял вопрос IP-телефонии, с помощью которой предстоит решить следующие проблемы:
- единый многоканальный номер для приема звонков (с возможностью приветствия, очереди, ожидания, переключения между операторами и т.д.);
- удобная, недорогая внутренняя связь между сотрудниками;
- сокращение затрат на исходящие звонки (в особенности на мобильные, и в другие города);
Сперва мы пользовались удобным сервисом, предоставляемым оператором MangoOffice, но пришло время сделать еще один шаг в пользу гибкости, удобства и экономии с помощью FreePBX.
Преимущества собственной IP-АТС
Работать с виртуальной АТС конечно удобно, и это достаточно хороший выбор, т.к. они, как правило легкие в настройке, надежны и обладают достаточно широкими возможностями. Но если вы сталкиваетесь с проблемой минимизации расходов на телефонию, этот вариант не подойдет.
Во-первых потому, что зачастую вы привязаны к одному поставщику услуг IP-телефонии, и выбрав виртуальную АТС лишаетесь возможности выбирать самые дешевые тарифы на различные направления среди многих компаний. Во-вторых, вы вынуждены платить за дополнительные услуги: очередь, ожидание, запись разговора и т.д. В третьих, вы оплачиваете так же внутренние разговоры сотрудников по небольшому, но все-таки тарифу.
Настроив собственную IP-АТС у вас нет необходимости осуществлять дополнительные платежи. Вы платите оператору за аренду телефонного номера (если Вам нужен прямой городской номер), и выбираете сколь угодно много операторов для исходящих звонков по различным направлениям с самыми низкими ценами.
Например:
- PCtel — все звонки по России 1 рубль — с него будем звонить на мобильные и в регионы
- SipNet — бесплатные звонки на московские и питерские номера (акция) — с него звоним на городские
Когда акция закончится можно переключиться на другого оператора, например кого-то из линейки BetaMax. - Zadarma — дешевые прямые номера. Бесплатные звонки на Московские городские (с некоторым лимитом).
Установка FreePBX
Итак, за основу было решено взять систему на Windows 2008 R2, с виртуальной машиной, на которой установлен сам FreePBX. Машина находится во внутренней сети, за роутером DIR-320, который имеет выделенный статический IP адрес.
FreePBX бесплатно скачивается с сайта разработчика в виде iso дистрибутива, и без проблем устанавливается на виртуальную машину. Процесс установки с дистрибутива полностью автоматизирован, система только поинтересуется настройками сети. Но, т.к. на нашем роутере работает DHCP-сервер заморачиватся с настройками особенно не пришлось. Хотя, вручную прописать сетевые настройки при установки операционной системы никакой сложности так же не представляет.
Настройка сети для IP-телефонии
В windows server 2008 сетевой адаптер настраивается таким образом, что бы виртуальная машина FreePBX могла его использовать параллельно с windows. Таким образом получаем отдельный внутренний IP адрес для виртуальной машины.
На этот внутренний адрес пробрасываем порты на роутере:
- Порт 5060 — для подключений
- Диапазон портов 10000 — 20000 — для голосовой информации
После установки FreePBX пришлось настроить внутренний firewall CentOS — это легко делается с помощью утилиты
system-config-securitylevel-tui
Без этой настройки FreePBX отказывалась принимать подключения даже из внутренней сети.
В панели управления FreePBX, в меню Settings -> Asterisk SIP Settings ставим:
- NAT -> yes
- IP Configuration -> Static IP
- External IP -> ваш внешний IP адрес
- Local Networks -> IP адрес машины внутри сети / маска
При тестировании, для просмотра событий и ответа сервера Asterisk можно воспользоваться командой
asterisk -r
или логом в FreePBX (Reports -> Asterisk Logfiles).
После этого настройку сети можно считать законченной. Вы сможете подключиться к АТС и из внутренней сети, и из внешней.
Если FreePBX устанавливается на виртуальную машину Huper-V могут возникнуть трудности с синхронизацией времени. А на АТС это особенно актуально, т.к. в зависимости от времени звонки могут распределятся по разным направлениям. Подробнее о решении этой проблемы тут.
Настройка FreePBX
- Создаем внутренние номера пользователей (Applications -> Внутренние номера)
— После этой настройки подключенные абоненты уже смогут общаться с друг другом, но звонить на внешние телефоны пока не смогут.
Так же нужно создать номер для голосовой почты. Для этого нужно создать новый SIP номер, например 500, и в его настройках, разделе «Голосовая почта», поле «Статус» поставить «Включен».
Имя внутреннего номер ставим «VoiceMail» .
После сохранения опять заходим в настройки этого номера, и в последнем разделе настроек «Опциональные назначения» ставим переадресацию во всех случаях на «Голосовую почту»:
<500> VoiceMail (no-msg). - Создаем SIP транки для входящих и (или) исходящих звонков (Connectivity -> Транки)
Для этого необходимо зарегистрировать аккаунты у выбранных провайдеров SIP -телефонии. О настройке некоторых транков я уже писал тут. - Создать правила для исходящих звонков (Connectivity -> Исходящая маршрутизация)
Эти правила сводятся к тому, что необходимо выбрать параметры набора номера для выхода на того или иного оператора телефонии (например, можно при звонке через «0» — пользоваться услугами одного ператора, а через «9», или напрямую — другого. Так же возможны более сложные настройки) и порядок перебора этих операторов внутри маршрута.
— После этой настройки абоненты внутренней телефонной сети смогут звонить на внешние — городские и сотовые номера. - Загрузка приветствия
Приветствия нам понадобятся для проигрывания при входящих звонках. Загрузить приветствие можно в формате wav, на странице Admin -> System Recording. - Загрузка музыки при ожидании
Для того, что бы ваши клиенты, при звонке к вам и ожидании в очереди слушали музыку, а не гудки, необходимо создать «музыкальный плей-лист», и загрузить туда записи. Это делается в разделе Settings -> Music On Hold. Тут Вы можете загрузить ваши записи в категорию «по умолчанию», или создать несколько музыкальных потоков.
Несколько потоков может пригодится например, для проигрывания различной музыки при входящем звонке на разные номера. - Создание группы вызовов (автоответчик)
В данном случае мы применяем группы вызова для настройки автоответчика. Дело в том, что я не нашел, где настраивается приветствие, проигрываемое автоответчиком. Для решение этой проблемы была создана «Группа вызовов», при попадании в которую проигрывается сообщенее, далее звонок переадресовывается на голосовую почту. Уверен, что есть более разумные решения проблемы, предусмотренные создателями Asterisk и FreePBX, но мне их найти не удалось.
Заходим в Aplications -> Ring Groups и создаем новую группу вызовов. Название: VoiceMail. В поле «Extension List» ставим несуществующий внутренний номер. В поле «Приветствие» (Announcement) — выбираем загруженное ранее нами приветствие. А в последнем разделе настроек «Назначение, если никто не ответил» (Destination if no answer) выбираем «Голосовая почта», и созданный нами для голосовой почты номер 500: <500> VoiceMail (no-msg). Сохраняем.
Таким образом, при поступлении звонка на эту группу вызовов проигрывается сообщение, после Asterisk пытается его переадресовать на несуществующий номер, но у него ничего не получается и он переадресовывает вызов на голосовую почту, не проигрывая дополнительных сообщений. Со стороны звонящего это выглядит как обычный автоответчик. - Создание очереди
Если у вас несколько операторов, и нужно, что бы звонки обрабатывались по очереди, нужно ее создать. Делается это в Applications -> Queues. Создаем новую очередь, вводим название. В поле Static Agents вводим по одну на строке внутренние номера операторов, на которых будем переадресовывать звонок. Выбираем стратегию дозвона (Ring Strategy). Существует несколько стратегий. Можено задать, что бы телефоны всех операторов звонили одновременно, или обзвон шел линейно (по очереди) и т.д. У нас используется линейный обзвон. Ври необходимости ставим значение YES в свойстве «Пропускать занятых операторов» (Skip Busy Agents), и выбираем, какую музыку будем проигрывать при ожидании (Music on Hold Class). Так же необходимо задать сообщение при попадании (Join Announcement): это как раз недавно загруженное нами приветствие.
Очереди имеют множество настроек, поэтому с остальными, при необходимости, придется познакомится самостоятельно.
В самом конце странице ставим маршрут, куда будет переадресовываться вызов при отсутствии ответа операторов. Обычно вызовы адресуются на голосовую почту. Для этого в выплывающем списке выбираем «Группы вызова», и созданную нами группу, соответствующую голосовой почте. - Создание временной группы
Для того, что бы в рабочее время звонки переадресовывались на операторов, а в нерабочее на автоответчик, необходимо настроить временные группы и правила по времени.
Для создания временной группы заходим в Applications -> Time Groups и создаем группу, согласно времени работы офиса. Например
Название: Rabota-Otdih
Время начала: 10:00, Время окончания: 20:00
День недели начала: понедельник, День недели окончание: пятница
И сохраняем созданную группу. - Создание правила по времени
Для того, что бы звонки переадресовывались согласно временной группе, необходимо создать правило по времени. Applications -> Time Conditions.
Тут нужно задать название правила, Временную группу для него, и маршруты, куда будут переадресовываться звонки, при попадании в рабочее и не рабочее время.
В рабочее время звонки переадресовываются в созданную очередь, а в нерабочее в «Группу вызовов» соответствующую голосовой почте. - Создание правил для входящих звонков
В разделе Connectivity -> Inbound Routes создаем новый входящий маршрут. Для этого указываем название маршрута и правило перенаправления. Например, для того что бы маршрут направления зависил от времени звонка, нужно в группе «правило по времени» (Time conditions) выбрать созданное на предыдущем этапе правило. Так же можно перенаправить звонок напрямую в очередь, или по указанному внутреннему номеру, или использовать другие возможности переадресации.
Сохранив маршрут, все входящие вызовы поступающие на транки будут переадресовываться, согласно настройкам данного маршрута.
Для разделения поступающих на транки вызовов по различным маршрутам (например, если необходимо, что бы при звонках на разные номера проигрывались различные сообщения, или звонки направлялись ра разные очереди), необходимо в настройках маршрута в соответствующее поле ввести номер DID, соответсвующий данному маршруту. Подробнее об этом тут.
Возможные проблемы
Возможные проблемы при настройке и работы FreePBX описаны в дополнительных статьях:
Обновление 13.02.2015
Недавно появился не столь подробный, но наглядный видео обзор по настройке FreePBX. Для тех, кто лучше воспринимает информацию визуально:

Хорошая инструкция, но я так и не понял как сделать следующее. Необходимо чтобы при звонке на номер(скажем 300) звонки попадали в меню IVR. Подскажите пожалуйста кратко как это сделать?
Добрый день, php!
В данной инструкции нет ничего про IVR. К сожалению, с ходу я не смогу ответить на ваш вопрос, т.к. небыль задачи делать такие настройки. Возможно, допишу в дальнейшем, когда появится необходимость.
Доброго
Появилась необходимость подключить софтфон на андроид из вне (мегафон 3g)
но регистрация ни в какую не проходит.
если подключаться внутри локальной сети, то клиент подключается, звонит, принимает вызовы..
в чем беда может быть?
Добрый день, Антон!
Вы подключаетесь к своему серверу PBX?
Если так, проблема скорее всего в пробросе портов с роутера на сервер.
Самое простое (но не самое безопасное) решение — выделить PBX сервер в «димилитаризованную зону», на большинстве роутеров есть такая функция.
Если подключаетесь напрямую к SIP провайдеру, возможно, оператор блокирует SIP трафик в вашем регионе. Хотя в Мск сам пользовался Мегафоном, таких проблем нет.
Про dmz я в курсе, но не по феншую это)
С DMZ все работает
С регистрацией вопрос решил таки
клиент залогинился, вызов проходит, но звука нет в мобилке — ни в динамике, ни микрофон не передает звук
вот так сейчас выглядят настройки iptables роутера
ACCEPT tcp — anywhere 192.168.0.60 multiport dports www
ACCEPT udp — anywhere 192.168.0.60 multiport dports sip
ACCEPT tcp — anywhere 192.168.0.60 multiport dports sip
ACCEPT udp — anywhere 192.168.0.60 multiport dports 20000
Чего не хватает?
Раз с dmz работает, значит проблема точно в этом. )
По iptables не большой специалист, к сожалению.
На сколько я понимаю, открыт порт 20000, а нужен:
— Диапазон портов 10000 — 20000 — для голосовой информации.
«dport 10000:20000»
Вот от сюда: http://forum.ubuntu.ru/index.php?topic=257012.0
дада))
Поздравляю!
Пишите, если интересный опыт по использованию SIP.
Или просто впечатления. Буду очень благодарен!)
Проговориться иногда полезно)) вопрос решился
ACCEPT tcp — anywhere 192.168.0.60 multiport dports www
ACCEPT udp — anywhere 192.168.0.60 multiport dports sip
ACCEPT udp — anywhere 192.168.0.60 multiport dports 10000:20000
Проговориться иногда полезно. Вопрос решился
ACCEPT tcp — anywhere 192.168.0.60 multiport dports www
ACCEPT udp — anywhere 192.168.0.60 multiport dports sip
ACCEPT udp — anywhere 192.168.0.60 multiport dports 10000:20000
Кто знает подскажите
пожалуйста: хотим в офисе использовать частично аналоговые телефоны через SIP
адаптер,Из статьи ВестКолл http://www.westvirt.ru/faq/chto_takoe_sip_telephoniya.php
узнал о дополнительных возможностях
приближающих его к IP телефону.Подскажите кто знает как это сделать.
Добрый день, Иван.
Очень уж ваш пост смахивает на рекламу. Это статья никак не про адаптеры. SIP адаптеров много, используют их часто. В т.ч. и я использую на нескольких телефонах. «О дополнительных возможностях приближающих его к IP телефону» не слышал, да и не очень представляю, чего там приближать. Если вы узнали — расскажите, нам будет интересно.
[…] FreePBX нужно зайти в по новому IP в броузере. Подробно о конфигурировании FreePBX я писал одноименной в статье. И хоть на вашем Raspberry Pi […]