Webitel

Сегодня состоялась внутренняя презентация нового поколения Webitel для работы с CRM системой bpmonline. Продукт был переписан с «0», что и заняло достаточно много времени для его запуска. Серверная часть теперь только Linux и да, мы работаем с WebRTC (голос и видео). Используются современные адаптивные кодеки OPUS и VP8, что позволяет передавать голос в CD качестве.

Выглядит это так:
Знімок екрана 2014-04-03 о 17.37.57

На текущий момент аудио и видео (WebRTC) работает в следующих браузерах (проверял лично):

  • Chrome 33
  • Firefox 28
  • Opera 20

Попробовать и Вы можете! Для этого достаточно перейти по ссылке Demo стенда Webitel и сделать несколько звонков (Demo — логин и пароль).

Тестируем!

Как бы я этого не хотел, но с факсами сталкиваемся. В этой заметке хочу описать как можно организовать принятие факсов в Webitel с дальнейшей отправкой на Email.

Нам понадобится утилита convert.exe из пакета ImageMagick. Утилиту забрасываем в папку CallManager\ (с ее помощью будим конвертировать TIF в PDF для отправки на Email). Так же, создадим папку CallManager\htdocs\storage\FAX — тут будут хранится оригиналы полученных факсов в TIF формате. Не забываем про настройки SMTP клиента, иначе ничего никуда не отправится!

Собственно Lua-скрипт довольно простой:

t38 = "false";
CallerID = session:getVariable("caller_id_number");
FaxDir = session:getVariable("storage_dir").."/FAX/";
FaxFile = FaxDir..os.date("%Y").."_"..os.date("%m").."_"..os.date("%d").."_"..os.date("%H").."-"..os.date("%M").."_"..CallerID..".tif";

session:answer();
session:sleep(1000);
session:execute("playback", "users/auto_fax.wav");
session:execute("playback", "users/press_start_to_receive_a_fax.wav");
session:execute("set", "fax_enable_t38_request="..t38);
session:execute("set", "fax_enable_t38="..t38);
session:execute("playback", "silence_stream://2000");
session:execute("rxfax", FaxFile);

freeswitch.email("to@webitel.ua",
	"from@webitel.ua",
	"subject: FAX from "..CallerID.."\n",
	"Приветствую!\n\nВам отправили FAX, который я прикрепил во вложение.\n\n--\nВаш, Webitel",
	FaxFile,
	"convert.exe",
	"pdf");

session:hangup();

Осталось назначить внутренний номер для этого скрипта и все факсы будут сохранятся на сервере:

Принятые Факсы
Принятые Факсы

А так же, приходят на Email:

Факс на Email
Факс на Email

Для IP-телефонии критичны задержки пакетов в сети, хотя технология обладает некоей толерантностью (устойчивостью) к потерям отдельных пакетов. Так, потеря до 5 % пакетов не приводит к ухудшению разборчивости речи. Максимальное отклонение между последовательной передачей пакетов в сети Интернет не должны превышать 50 мс. Максимальный процент потерь при передачи пакетов в сети Интернет – не более 3%.

Причины задержек в передаче голосовых данных по сети IP в большой степени связаны с особенностями транспорта пакетов. Протокол TCP обеспечивает контроль доставки пакетов, однако достаточно медленный и потому не используется для передачи голоса. UDP быстро отправляет пакеты, однако восстановление потерянных данных не гарантируется, что приводит к потерянным частям разговора при восстановлении (обратном преобразовании) звука. Немалые проблемы приносит джиттер (отклонения в периоде поступления-приёмки пакетов), появляющийся при передаче через большое число узлов в нагруженной IP-сети. Недостаточно высокая пропускная способность сети (например при одновременной нагрузке несколькими пользователями), серьёзно влияет не только на задержки (то есть рост джиттера), но и приводит к большим потерям пакетов.

Между конечными точками пользователей и серверами IP-телефонии, а также между серверами IP-телефонии и оборудованием оператора связи (поставщика VoIP) программных или аппаратных устройств, канал должен отвечать описанным выше требованиям.

Проверить пропускную способность каналов можно с помощью простой утилиты iperf-2.0.5. Предположим, что мы хотим гарантировать 10 одновременных разговоров с использованием G.711 кодека. Рекомендуемое требование к каналу составляет 1 Мбит/с.

На сервере запускаем iperf с параметрами (ожидать на стандартном порте 5001 входящие UDP запросы):
iperf -u -s

На клиенте запускаем тестирование UDP c длиной 160 байт со скоростью 1 Мбит/с в течение 180 секунд на сервер 10.10.10.119:
iperf -u -c 10.10.10.119 -l 160 -b 1M -t 180

Получаем результат:

Канал пригоден для 10 одновременных соединений.

Icons_39x39_RoutingВ разделе [Маршрутизация] мы можем указать префикс для набранного направления либо несколько префиксов через разделитель «|». К примеру, что бы указать выбор направлений на оператора Life, можем задать: 063|093. Но, что делать, если наши пользователи не придерживаются стандарта? А могут набрать номер того же Life в несколько способов: +38063 , 38063, 8063 или 063.

«Можно создать сразу 4 маршрута», — скажите Вы.
«Достаточно создать только 1 маршрут», — отвечу я 🙂

Для этого воспользуемся регулярными выражениями. В системных настройках Terrasoft, активируйте ключ «WebitelConfigExpertMode»:

WebitelConfigExpertMode

Перезапустите Terrasoft. Теперь в настройках Маршрутизации мы можем использовать регулярные выражения. Все наши 4 варианта можно прописать одной строкой:

Life_RegExp

Обратите внимание! Теперь в направлениях у Вас будет открыт доступ к управлению того, что надо отдавать на шлюз. Здесь достаточно указать сколько последних цифр из выражения отправлять. Если нам не нужны с Life «+38», тогда поставим просто 10 — десять последних знаков в строке. Выглядит это так:

Dialplan

В переменной ${destination_number} храниться то, что набрал пользователь. Из этой переменной я вырезаю 10 последних цифр: (\d{10})$ и результат возвращаю в первую переменную канала (то, что пойдет к оператору): %1

VoiceMailПродолжаю рассказ о новых функциях Terrasoft Webitel 1.3. В этой заметке речь пойдет о голосовой почте.

В новой версии работать с голосовой почтой так же удобно, как и с обычными Email. Все сообщения хранятся в новом разделе и доступны пользователям Terrasoft Webitel. Каждый может видеть сообщения адресованные только ему, а администратор системы — все:

Vmail_Grid

Из интерфейса Вы можете сохранить голосовое сообщения на локальный диск (скачать себе), либо прослушать из системы:

VMail_Save

Как и в почте, доступно меню с пометками:

VMail_Mark

Удаление сообщений происходит через «Корзину», с которой Вы можете восстановить либо полностью удалить:

Vmail_Restore

Если SIP-телефон поддерживает MWI, то он Вас проинформирует о новом сообщении:

VMail_on_Yealink

Вы так же можете позвонить на IVR-меню управления голосовой почтой (по-умолчанию, номер 400) и прослушать либо удалить сообщение с помощью DTMF.

Ну и конечно, если в настройках пользователя Вы указали свой Email, то ждите сообщение в формате MP3 и там:

VMail2EMail

А Вы уже используете голосовую почту?

До официального релиза Webitel 1.3 осталось еще не много, а я уже сейчас хочу начать рассказывать о всех тех новых фишках, что мы в него добавили. Первая на очереди небольшая функция «Маршрут звонка».

Нас часто спрашивали: а как узнать где уже был звонок? Либо: а можно оператору сразу в карточке показать, что абонент был в IVR, потом поговорил с другим оператором, потом его переключили опять на IVR, а с него он попал на другого оператора?

Теперь это все возможно! В карточке звонка оператора доступна новая вкладка «Маршрут», а в разделе [Статистика] — кнопка, нажав на которую, Вы увидите историю прохождения звонка:

Roadmap

На снимке экрана видно, как абонент позвонил на пользователя, который переключил абонента на IVR-меню, после он попал на входящую очередь КЦ, где его обслужил оператор КЦ.

Как Вы думаете: насколько будет полезной эта функция?

Используя телефоны Yealink, никогда особо не обращал внимание на такую полезную функцию как Мелодии:

Мелодии
Мелодии

Прелесть этого функционала заключается в том, что Вы можете создать группы (до 10) с индивидуальными звуковыми файлами. Все, что нужно, так это на стороне CallManager отправить в SIP пакете заголовок «Alert-info» с указанием нужной группы. И телефон зазвонит!

На Webitel мы можем строить любые сценарии поведения звонка с помощью LUA-скриптов. Если я хочу, чтобы при определенном входящем вызове зазвучала мелодия из группы test4, я вызываю всего 1 строчку в скрипте:

session:execute("export", "alert_info=< http://localhost/>;info=test4")

Теперь, для разных групп абонентов из Terrasoft CRM, я могу установить разные мелодии. Правда, удобно? 😉

Каждый, кто успел попробовать Webitel CallManager, обратил внимание, что в версии 1.0 отсутствует понятие очередей. Этот досадный момент будет решен с выходом 1.1. В этой небольшой заметке хочу описать, как построен механизм создания входящей очереди.

Входящая очередь
Входящая очередь

Что здесь самое интересное?