Author: Vitaly Kovalyshyn

IT-SFERA and Webitel
Managing Partner

Web: kovalyshyn.pp.ua

На этой неделе начали тестировать Webitel CTI — небольшая web-панель, которая позволит совершать звонки с любого веб-решения. Первая версия выйдет под bpmonline и вот что мы уже сейчас имеем:

С помощью набора JavaScript библиотек, мы подключаем нашу панель:

main

Сегодня состоялась внутренняя презентация нового поколения 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 — логин и пароль).

Тестируем!

Після певних подій, сайти УГКЦ підпали під потужний DDoS штурм. Важко було не те, що на сайт зайти, а й підключитися по SSH до консолі. Боротьба тривала кілька днів. Розповім, що саме мені допомогло подолати цю напасть.

Тюнінг iptables
На рівні мережевого екрану, я додав додаткові правила:

# DDoS
# Не відповідаємо на ping
iptables -A INPUT -p icmp -j DROP --icmp-type 8
# Блокуємо більше 2-х звернень на головну сторінку з одного IP за 10 сек.
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "GET / HTTP" --algo kmp --to 1024 -m recent --set --name httpddos --rsource
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "GET / HTTP" --algo kmp --to 1024 -m recent --update --seconds 10 --hitcount 2 --name httpddos --rsource -j DROP
# Блокуємо більше 32 конектів з 1 IP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 32 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Це дозволило трохи розвантажити Apache.

IMG_0048Цими днями, прибув я на Майдан. Не зміг стояти осторонь подій, що відбуваються у нашій Країні. Прогулявся по Хрещатику, відчув подих змін. Наша Батьківщина вже давно потребує очищення. Очищення від совкових правил, старих звичок та терпіння, що колись буде краще. Не буде, якщо постійно терпіти, а не міняти!

Переступаєш кордон барикад і ти потрапляєш у своєрідний Ватикан всередині Києва, зі своїми законами та правилами. Дороги прибрані від снігу (на відміну від основної частини Києва), сміття збирається та вивозиться, люди доброзичливо посміхаються. Довкола сюреальна атмосфера: не то революція з барикадами, не то масові гуляння з піснями та танцями.

Как бы я этого не хотел, но с факсами сталкиваемся. В этой заметке хочу описать как можно организовать принятие факсов в 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

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