Развертывание ip-телефонии для небольшой компании

26
Июн
2014
Category: Nix / Other   /   Tags: , , , , ,

Случилось мне столкнуться с заданием: настроить ip-телефонию для небольшой компании (в городе А) с филиалом (только для заключения договоров) в другом городе (городе Б).
Тех. задание было простое: есть sip номер города филиала с тремя линиями, нужно заставить его работать для экономии денежных средств из основного офиса города А абонентам города Б + обеспечение внутренней связи между офисом и филиалами и запись разговоров.
Задача поставлена, начнем реализацию.

Подбор оборудования и ПО

Компания небольшая, сотрудников менее 30, значит подойдет машина не старше 5ти лет (CPU 2.5-3GHz, RAM 4Gb, HDD 1Tb). В работе было использовано следующее железо:
CPU AMD Athlon 64 X2 3GHz
RAM 2x2Gb
HDD 1x1Tb

С ПО вопрос решился моментально — это Asterisk в ввиду его бесплатности и большой базе знаний, да и на слуху именно он, но т.к. я с этим сталкиваюсь впервые, то мне нужен был GUI, а тут выбор богат (FreePBX, Elastix, TrixBox, Asterisk GUI, etc.)

Выбор дистрибутива

Первое что я попробовал был Aserisk NOW с FreePBX в качестве GUI, но как-то не задалось с ним изначально — очень тяжело для первоначального изучения.
Вторым дистрибутивом стал Elastix. Были скачены Elastix 3.0.0 RC 1 и Elastix 2.4.0 Stable.

Все дистрибутивы я качал только 64-битные

Первая была установлена версия Elastix 3.0.0 RC 1 и она мне визуально очень понравилась, НО изменения в web-интерфейсе не отражались в конфигурационных файлах и, как выяснилось позднее, отсутсвуют многие пункты меню. В общем, из-за этих косяков я потратил пару дней и решил накатить версию Elastix 2.4.0 Stable. Вся дальнейшая настройка будет именно в этой версии.

Разворачивание дистрибутива

Установить Elastix 2.4.0 Stable не составит труда. Пишем скаченный образ на диск и загружаемся с него. В начале отвечаем на простые вопросы (имя машины, как будем получать IP адрес, выбрать город для установки часового пояса, разметка диска). Перезагрузка. Задаем пароль root, пароль root для MySQL и пароль для admin от web морды Elastix.
После установки рекомендую подключиться к серверу по ssh и обновиться (на все вопросы отвечаем Y):

После обновления проверяем версии

Настройка IP-АТС

Допустим, SIP-провайдер (mtt.ru) выдал нам:
номер 74995647814
логин 74995647814
пароль 1234567890
адрес подключения voip.mtt.ru

Заходим в web-интерфейс https:/// с логином admin и паролем, который забили самый последний (пароль для superadmin).
Дашборд можно немного настроить под себя, скрыв ненужные для вас аплеты.

voip-01

Для смены пароля/заведения новых пользователей web-морды идем в System — Users. Там же можно создать свои группы и назначить им права.

В System — Backup/Restore делаем бекапы с возможностью разворачивания.

Основная настройка происходит в меню PBX — PBX Configuration

Создание транка

Первое, что нужно сделать — это подключить выданный sip-номер.
Заходим в PBX — PBX Configuration — Trunks и создаем новый SIP-транк

voip-02

Заполняем поля:
Секция General Settings
Trunk Name — пишем название нашего транка (я обозвал его tr74995647814)

Секция Outgoing Settings
Trunk Name — пишем название нашего транка (я обозвал его tr74995647814)
PEER Details — параметры подключения к sip-провайдеру, кодеки и пр.
; — знак комментария

Секция Incoming Settings
Очищаем все поля

Секция Registration
Register String — строка подключения, имеет вид: login:pass@voip.mtt.ru/login

Сохраняем — Submit

voip-03

Создание входящих/исходящих правил

Создадим исходящее правило
Исходящие правила создаются в меню PBX — PBX Configuration — Outbound Routes


Идем в PBX — PBX Configuration — Outbound Routes и начинаем заполнять поля:
Route Name: — название правила (я обозвал его out74995647814)
Поля Dial Patterns that will use this Route заполняем так:

Этим мы разрешили звонить на +7 и сделали автозамену +7 на 8.

Из выпадающего списка номер 0 Trunk Sequence for Matched Routes выбираем наш транк — tr74995647814

Сохраняем — Submit

voip-04

Создадим входящее правило
Входящие правила в PBX — PBX Configuration — Inbound Routes
Идем в PBX — PBX Configuration — Inbound Routes и начинаем заполнять поля:
Description — название правила (я обозвал его in74995647814)
Language — указываем ru
В секции Set Destination пока выберем Terminate Call — Hungup

Сохраняем — Submit

voip-05

Создание внутренних номеров

Для начала нужно определиться с форматом внутренних номеров, я делал так:
100, 200,300 и т.д — это номера отцела целиком
101-199, 201-299, 301-399 и т.д. — номера сотрудников отделов
Думаю, что идея понятна.

Внутренние номера создаются в меню PBX — PBX Configuration — Extensions
Жмем Add Extension, выбираем Device — Generic SIP Device и жмем Submit

voip-06

Секция Add Extension
User Extension — внутренний номер абонента
Display Name — отображаемое имя при звонке

Секция Device Options
secret — пароль

Секция Language
В поле Language Code прописываем ru

Секция Recording Options
В полях Record Incoming и Record Outgoing выбираеем Always

voip-07

Сохраняем — Submit

Создаем нужное количество внутренних номеров.

Работа с очередями

Очереди позволяют организовать для поступающих звонков ожидание освободившегося оператора, возможность предоставить абоненту, ожидающему соединения, переход из очереди в интерактивное меню. С их помощью удобнее всего организовывать call-центры.
Очереди создаются в меню PBX — PBX Configuration — Queues

Секция Add Queue
Queue Number — номер очереди (у меня это номер отдела)
Queue Name — название очереди (наизвание отдела, например)
Static Agents — сотрудники отдела. Поле заполняется при выборе из выпадающего списка параметра Extension Quick Pick.

Секция Queue Options
Max Wait Time — максимальное время нахождения звонящего в очереди на ожидании
Max Callers — максимальное количество абонентов, ожидающих в очереди
Ring Strategy — определяет стратегию дозвона в очередь: ringall — звонят все телефонные аппараты в очереди, leastrecent — поступление звонка на наименее загруженного оператора, fewestcalls — поступление звонка на оператора с наименьшим количеством законченных разговоров, random — звонок поступает на случайным образом выбранного оператора, rrmemory — поступает на любого доступного оператора с учетом последнего ответившего, rrordered — похоже на предыдущую стратегию, но с учетом агентов в конфиг файле, linear — звонок поступает на агентов в том порядке в котором они перечислены, для динамических агентов — в порядке их регистрации, wrandom — звонок поступает на случайно выбранного оператора с учетом занятости.
Agent Timeout — время поступления звонка на оператора, до выдачи сообщения о недоступности
Skip busy agents — пропуск занятых операторов

Секция Caller Position Announcements
Отвечает за оповещение звонящего, каким по счету он является в очереди
Frequency — частота оповещения
Announce Position — оповещать о позиции в очереди
Announce Hold Time — оповещать о примерном времени ожидания

Секция Fail Oxer Destination
Выбираем куда отправится звонок по истечению времени ожидания (никто не ответил)
Пока выберем Terminate Call — Hungup (положить трубку)

voip-08

Создаем нужное количество групп

Создание голосового меню (IVR)

Для голосового меню нам нужны записаные фразы, записываем в любой любимой программе (например, Sound Forge) в формате PCM Encoded, 16 Bits, at 8000Hz.
Записать нужно:
1) Приветствие (01-hello.wav) — Здравствуйте, вы позвонили в компанию РиК.
2) Меню (02-menu.wav) — Нажмите 1 для связи с отделом А. Нажмите 2 для связи с отделом Б. Или дождитесь ответа.
3) Если никто не берет трубку (03-buzy.wav) — Извините, в данный момент все заняты, ожидайте.
4) Если долго никто не берет трубку (04-buzy_call_later.wav) — Извините, все операторы заняты, перезвоните позже.
5) Время работы компании (05-work_time.wav) — Наша компания работает с понедельника по пятницу с 9:00 до 17:00.

Теперь нужно все эти записи передать Asterisk, для этого идем в меню PBX — PBX Configuration — System Recordings
Выбираем файл hello.wav и присваеваем имя нашей записи в поле Name this Recording (например, Hello)
Сохраняем — Save

voip-09

Так же загружаем оставшиеся файлы.

Теперь можно приступить к созданию самого голосового меню
Голосовые меню создаются в меню PBX — PBX Configuration — IVR
Для создания нажимаем Add IVR
Change Name — название меню
Announcement — выбираем наше приветствие (01-hello)
Timeout — время ожидания нажатия клавиши (в секундах)
Enable Direct Dial — ставим галочку, если нужно, чтобы дозвонившийся мог набрать внутренний номер сотрудника
Дальше создаем наше меню:

Цифра 1 — отправляем звонок в очередь 100
Цифра 2 — отправляем звонок в очередь 200
Цифра 3 — отправляем звонок на номер 301 (секретарь)
Если ничего не нажато после 10 секунд отправляем звонок на секретаря
Если нажата любая другая клавиша (кроме 1,2 и 3) отправляем звонок на секретаря

Сохраняем — Save

voip-10

Создадим дополнительные анонсы для нашего меню
Переходим в меню PBX — PBX Configuration — Announcements
Создаем анонс — Add Announcement
Description — название (All buzy call later)
Recording — выбираем нашу хапись 04-buzy_call_later
В секции Destination after playback выбираем:

Сохраняем — Submit Changes

voip-12

Создадим еще одно меню IVR-CALL-LATER
Announcement — выбираем 04-buzy_call_later
Timeout — 1
Enable Direct Dial — галочку не ставим
В опицях указываем:

При переходе в это меню будет сказана фраза, чтобы перезвнили позже и через 1 секунду повесится трубка.

voip-11

Отредактируем наши очереди.
Открываем очередь 100 и секции Fail Over Destination выбираем IVR IVR-CALL-LATER и сохраняем. То же проделываем с остальными очередями.

Не забываем после внесеныых изменений принимать их, нажимая на Apply Configuration Changes Here.

Голосовое меню в рабочее и не рабочее время

Создадим анонс WorkingTime с нашим звуковым файлом 05-work_time в меню PBX — PBX Configuration — Announcements

Перейдем в меню PBX — PBX Configuration — Time Group и создадим группу:
Description — название (TG-WorkingTime)
Time to start — 09:00
Time to finish — 17:00
Week Day Start — Monday
Week Day finish — Friday

Сохраняем — Submit

voip-13

Переходим в меню PBX — PBX Configuration — Time Condition и создаем условие:
Time Condition name — название (TC-WorkingTime)
Time Group — выбираем созданную группу TG-WorkingTime
Destination if time matches — назначение при совпадении времени с тем, что указано в TG-WorkingTime.

Destination if time does not match — назначение при несовпадении времени с тем, что указано в TG-WorkingTime.

Сохраняем — Submit

voip-14

Устанавливаем русские звуки

Скачиваем необходимые голосовые фразы: стандартные и расширенные
Сохраняем и разархивируем во временной директории на локальном компьютере
Содержимое архива закачиваем на Elastix в директорию /var/lib/asterisk/sounds/ru
В sip_general_custom.conf добавляем строку language=ru (отредактировать файл можно через веб-интерфейс, меню PBX-Tools-Asterisk File Editor)
Сохраняем — Save

voip-19

Прием факсов

Для того, чтобы научить наш Elastix/Asterisk принимать факс, необходимо следующее:
Переходим в меню PBX — PBX Configuration — Extensions
Создаем Generic IAX2 Device
Прописываем номер в User Extension (например, 901)
Даем имя в Display name (например, Fax)
Задаем пароль в secret

Секция Recording Options
Record Inbound — Never
Record Outbound — Never

Сохраняем — Submit

voip-15

Далее зайдем и отредактируем созданный номер:
Секция Device Options
disallow — all
allow — alaw

Сохраняем — Submit

voip-16

Переходим в меню Fax — New Virtual Fax
Virtual Fax Name — название
Associated Email — e-mail куда будет отсылаться факс
Fax Extension (IAX) — созданный выше Extension
Secret (IAX) — пароль
Country Code — префикс страны (8)
Area Code — код города

Сохраняем — Save

voip-17

Если очень хочется, то можно руссифицировать письмо с факсом в меню Fax — Email Template

voip-18

Вызов внешнего номера

Что бы сделать вызов внешнего номера из голосового меню, необходимо узнать номер голосого меню (ivr), присвоенный системой, для этого идем в файл extensions_additional.conf и просматриваем наличие [ivr-<номер>], т.к. в этой статье создали два меню, то можно будет обнаружить два таких фрагмента. Определить нужный просто. Тот где много строк — нужный (например, [ivr-2]).
Необходимо, чтобы внутри массива ivr была строка include => ivr-<номер>-custom (например, include => ivr-2-custom)
После того, как узнали номер IVR, нужно в конце файла extensions_custom.conf прописать

где _9 — цифра вызова внешнего номера
SIP/{Trunk} — это строка SIP/tr74995647814 (см. создание транка)
{number} — внешний номер

voip-20

Работает это так: звонит клиент, ему что-то говорится в меню, он нажимает 9 и Asterisk перекидывает звонок на внешний номер, а сам кладет трубку.

Работа за NAT

Для полноценной работы за NAT требуется доступ к портам 5060/UDP, 10000-20000/UDP и следующее содержание файла sip_nat.conf

externip — внешний IP-адрес
localnet — внутренний IP-адрес/маска сети

Своя мелодия при ожидании

Как и для голосового меню мелодии нужно сохранить в формате PCM Encoded, 16 Bits, at 8000Hz.
Имея 2-3 готовых файла идем в меню PBX — PBX Configuration — Music on Hold
Создаем новую категорию — Add Music Category, вводим в поле Category Name название и жмем Submit Changes.
Переходим в созданную категорию и заливаем наши файлы с мелодиями. Если хотите, чтобы каждый раз проигрывалась произвольная мелодия, необходимо прожать Enable Random Play.
Не забываем применить настойки кликом на Apply Configuration Changes Here.

voip-21

Дальше необходимо отредактировать все очереди
Секция Queue Options
Music on Hold Class — выбираем созданную группу с мелодиями

Сохраняем — Submit Changes

Мониторинг транков

Мониторить состояние транков можно в консоле командой:

Смена RTP портов

RTP порты прописаны в файле rtp.conf

Звонки в разные города с разных SIP номеров

После развертывания АТС обнаружилось, что нужно совершать звонки в другой город, например Томск (код города 3822), а звонить с московского номера (в примере 74995647814) дорого. Для минимизации расходов было принято решение приобрести томский sip номер. Сказано — сделано.
Допустим, SIP-провайдер (mtt.ru) выдал нам:
номер 73822555555
логин 73822555555
пароль 1234567890
адрес подключения voip.mtt.ru

Заводим новый транк как делали это выше
После этого создадим исходящее правило для нового транка, но в полях секции Dial Patterns that will use this Route указываем следующее:

В секции Trunk Sequence for Matched Routes выбираем наш новый транк.
Этими правилами мы указываем, что при исходящем звонке на номера вида +7(3822) XX-XX-XX набор пойдет через томский номер +7(3822) 55-55-55

Так же не стоит забывать, что правила применяются сверху вниз, а это значит, что пока мы наше новое правила не поставим выше предыдущего все звонки будут идти с московского номера +7(499) 564-78-14, т.к. в исходящем правиле out74995647814 у нас прописаны строки вида

Что бы поставить правило out73822555555 выше out74995647814 нужно в выпадающем списке Route Position выбрать First before out4995647814 и сохранить изменения.

Таким образом мы подключили два sip номера к Asterisk и настроили исходящие звонки для всех внутренних номеров в Томск через томский номер, а все остальные звонки — через московский номер.

Яндекс.Метрика