VoipSwitch. Class 5 BDSM VoIP Platform. True Enterprise.

Posted: 2015-12-19 in IT, Software
Метки:,

Всем привет.
Сегодня я напишу много букв про одну очень необычную софтину. По этой софтине я не нашел вообще ни одного русскоязычного обзора, что учитывая её специфику — не удивительно. Операторские платформы IP-телефонии попадают в обзоры настолько редко, что по каждой из них детальную техническую инфу надо вытаскивать клещами и по крупицам. Админы тоже крайне редко делятся своими впечатлениями и опытом работы с такими системами в паблике. А уж выцепить суть и истину из потока маркетоидного бреда от компании-производителя платформы (отделить зерна от плевел, образно говоря) — и вовсе крайне сложно.
Герой сегодняшней заметки — VoipSwitch Class 5 SoftSwitch. Это который с интегрированным биллингом, клиентским порталом, виртуальными АТС, сценариями и прочими «Rich Communications».

Если вы ещё не уснули, а ваш интерес только усилился — приятного чтения =)

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

Досталась она «в наследство», вместе с кучей модулей, слегка разросшейся базой, кучей косяков внутре, и что самое ценное — с хоть как-то доступной тех-поддержкой производителя. Перед тем, как изложить свои впечатления, я немного расскажу про основы, чтобы не искушенные в сетевых и телекомовских делах читатели тоже не слишком сильно зевали =).

Системы такого класса (Softswitch Class 5) — это специальные комплекты софта и железа, с помощью которых оказываются услуги IP-телефонии конечным клиентам. То есть весь довольно обширный комплекс задач — регистрация пользователей, отслеживание балансов, управление телефонными вызовами через пачку аплинков, личные кабинеты, приём платежей, всякие расширенные услуги типа переадресаций, голосовых меню, голосовых почт, виртуальных факсов и автоответчиков — всё это реализует подобная платформа и модули к ней.
Вот именно это воипсвитч и делает.

VoipSwitch, VoipBox и CRM.

С технической части — это целый пакет программ, использующий уйму конфигов, несколько баз данных, веб-сервер от микрософта и много другой подобной магии, чтобы это хоть как-то работало. Из сильных сторон именно VoipSwitch — плотная интегрированность платформы. Это решение «всё-в-одном» — и voip-свитч, и биллинг, и клиентский портал, и готовые сценарии, и много чего ещё. Однако при детальном рассмотрении всё оказалось вовсе не столько радужно и гладко, как написано на сайте у разработчика. Так что не верьте счастливым манагерским лицам на рекламке — манагеры курят чай Липтон, тогда как программисты курили явно что-то намного более мощное.

Перед тем, как я начну радовать скриншотами, ещё немного истории. Суть приобретения такова — платится баблос, и выдается доступ к своему заранее подготовленному серверу с уже установленной виндовс. Инженеры из воипсвитча всё это ставят, настраивают и отдают клиенту доступы. Да, вы не ослышались. Работает это на виндовс. Как работает — читайте дальше.

Поскольку данный софт весьма тру-ынтерпрайзен (в худшем смысле этого слова), то есть крив, сложен и ужасен — то баги, глюки и неочевидные особенности там неизбежны, как осенний дождик. А значит, постоянные переписки с саппортом, багофиксы, хот-патчи, срочные и не очень срочные исправления идут ещё вполне длинной чередой. Также практикуется такая вещь, как выплата части стоимости софта в рассрочку.
Я впервые познакомился с этой софтиной, когда как раз подходили к концу последние ежемесячные выплаты по рассрочке. Судя по набору фич, была куплена чуть ли не около-максимальная версия с прицелом под дальнейшее развитие. Первое, с чем я столкнулся, были лицензионные ключи. На время рассрочки эти ключи выдавались каждый месяц. Если ключ с периода рассрочки не продлить вовремя — платформа выпадала и больше не запускалась. Совсем. Никакого graceful degrade типа работы в рид-онли / лимита на число звонков и прочего — сразу хуяк — и клиентской телефонии разом нет.

Ключи обновлять могли только некоторые манагеры в этой конторе, поэтому несмотря на заявленную поддержку 24/7, обновление вполне могло затянуться на пару дней даже при своевременной оплате. Проебать этот момент было — как нефиг делать. Завершив выплаты, компания получила постоянный лицензионный ключ, но как наверное уже догадались наши читатели, приключения на этом не закончились.

Система защиты — это первое, хоть и неочевидное слабое место. Лицензия данной софтины привязана к внешнему IP-адресу сервера и аппаратной конфигурации. И если новый IP можно перепривязать (платно, естественно), то в случае аппаратной проблемы быстро поднять сервер без содействия разработчика не получится даже при наличии бэкапов. Так что железо надо самое надёжное, какое сможете захапать под это дело =)
Это прелюдия. Теперь к основной части.

Основной процесс, ядро системы — VoipSwitch.exe. Это ДЕСКТОПНОЕ win32-приложение. То есть ни разу не служба, запускаться может только из-под залогиненного пользователя. Да, уймите свой дергающийся глаз. Мы об операторских решениях — тут один процесс и звонки маршрутизирует, и за балансами следит, и тут же логи удобно прямо в интерефейсе рисует, и статистику текущую выводит. Вот такой вот замечательный процесс. Иногда правда, его может немного приколбасить, и число онлайн-клиентов будет немного странным:

voipswitch_strange_numbers_of_clients

Да, эти 7 мелких окошек относятся к одному процессу VoipSwitch.exe, который и является ядром телефонного сервера и главной мониторилкой его состояния. Вспомнив классиков и отправив сей радостный скриншот разработчикам, ждём патча. Через три дня разработчики присылают патч, число клиентов нормализуется, зато через некоторое время видим странное количество установленных исходящих вызовов:

voipswitch_strange_numbers_of_out-calls

Зато прямо в окошке «Calls» можно в реальном времени смотреть процесс обработки звонка. Если ситуация штатная, там даже будут вполне понятные логи и статусы, по которым можно быстро понять проблему:

Normal_Error_Codes

Но иногда софтина откровенно пугает. Например, поставил ты обновления безопасности (или ещё какое обcлуживание сделал), ребутнул, а там такое при загрузке:

Error__InternalException

Ничего страшного, это ещё не ошибка, а так, мелкий пустячок :D. Жмём «Click here» в поисках просветления и новых запретных знаний, видим скрижали для медитации во имя мудрости:

Error_Internal_Exception-2

Закрываем, сервер продолжает работать. Срочно пишем в саппорт ради получения патча. Ффух. Пронесло, типа. Но это вовсе не значит, что глюки на этом закончились. Это же труЪ-ынтерпрайз решение под виндовс-платформу, а я ещё и тысячи слов не написал =)

Прилетает заявка — при звонках не некоторые префиксы межгорода в трубке шумы и связь может порваться. Вот так вот.
Смотрим логи, чешем репу, курим бамбук:

Error_leg_no_media__and_noise_in_channel

Сделав несколько тестовых звонков через другие системы, убеждаемся, что проблема таки в воипсвитче, а вовсе не у магистрала, не в сотовой сети, не в помехах и даже не в офисном астериске. Ставим Wireshark на сервер, включаем, снова делаем контрольный тестовый звонок, стопаем. Дамп траффика вместе со скриншотами и детальным описанием проблемы шлём разработчикам. На этот раз они не столь оперативны, и патч приходит через пару недель. Без дампа траффика даже смотреть не будут. Вроде, летим и даже не падаем.

Проходит неделя. Может, две, три или даже четыре. БЛЯЯ-Я-яяя!!!!!!!!!!!!! Выясняется — в новой версии сломали перевод входящих звонков между внутренними номерами в PBX (это виртуальные АТС которые). Причём сломали очень хитро — проявляется только при звонке с определённых номеров и не у всех PBX-клиентов. Апдейт при этом затронул структуру базы — откат на месяц назад, мягко говоря, ОЧЕНЬ-ОЧЕНЬ нежелателен, вот совсем.
Пробую воспроизвести на тестовом аккаунте — не воспроизводится. Ладно, помучаем клиента тестовыми звонками, добиваемся хоть какой-то воспроизводимости проблемы, да и Wireshark запылился явно. Попутно выкурив Dial-Plan (два раза), и не найдя во внутреннем диалплане PBX ничего криминального (или хотя бы сильно отличного от других PBX, где та же функция работает), начинаем строчить письма любви и мира во всём мире.

Смотрим лог, сохраняем дамп, готовим отправить всё это в поддержку.
Поддержка — в Польше.
Слава всем богам, что не в Эстонии.

Проблему и свои действия по решению нужно описывать максимально детально, иначе получите ответ типа «перезагрузите сервер» после недельной переписки. И на скриншоте лучше поясняющие надписи не забыть, иначе проблему будут решать совсем уж неприлично долго:

VoipSwitch_Error_call_transfer_fail

А вот тут в логе появляется второй крупный компонент системы — VoipBox. Это такая софтина, в которую вынесены ряд функций, таких как сценарии PBX, транскодирование потоков, проигрывание голосовых приветствий и прочего. Логи тоже в главном окне, правда, гораздо менее детальные:

VoipBox_nice_logs

Сама по себе — черный ящик, настройки берёт из воипсвитча. Выпадает гораздо реже, чем ядро системы — всего лишь раз в два-три месяца.

Для более быстрого пинания помимо почты существует ещё IM. IM тоже не абы какой, а Yahoo Messenger. Ставят они его вместе с сервером, и сообщают, что поддержка через него, почту и их местный CRM, про который я тоже скажу несколько ласковых слов.
На одном из прошлых скриншотов его видно даже. Увидев ЭТО на voip-сервере, я малость офигел. Впрочем, это был не самый пик офигевания. Заходишь так под конец рабочей пятницы на сервер посмотреть логи — а там от этого мессенджера реклама с потным негром на весь экран 😀 😀 Впрочем, мессенджер как раз никаких проблем не создал.

На некоторых версиях (вы уже догадались, что их было немало ?) прокрутка логов после долгого аптайма (больше недели :D) могла обвалить сервер с разрывом всех звонков. Да, именно так. Прокрутил лог вверх-вниз — и сервер выпал. Звонки оборвались.

В какой-то момент разработчики решили, что просто прислать исправляющий патч — это слишком просто, и что даже на самый маленький чих надо делать обязательно заявку в их местной CRM. Ладно, мне не сложно из почты скопипастить. Я не буду отдельно распинаться, насколько у них ушибленная и неудобная CRM, и сколько раз мне хотелось её разработчиков скормить львам.

Несколько позже их явно кто-то укусил. При отправке очередного бага узрел вот такое:

CRM_NeedMoney_for_BugReport

Да, вам не померещилось. Чтобы сообщить о проблеме в ИХ СОБСТВЕННОМ продукте, предлагается сперва купить платный пакет расширенной поддержки! Платный баг-репортинг — это круть. Типичнейший AS IS в самом его наихудшем варианте!

Впрочем, через некоторое время CRM пофиксили — и теперь там стало принципиально невозможно оставить тикет о проблеме в продукте. Только о проблеме в сторонних модулях:

CRM__VoipSwitch_cannot_have_problems

Прекрасная поддержка для продукта такого класса, правда ведь ?

Ну и один из последних замеченных глюков — полное прекращение работы телефонии, как входящей, так и исходящей.
Краткий лог такой:

Error_Call-duration-limit__All-calls-failed

Симптомы — вызов устанавливается, держится долю секунды и сразу рвётся.
Рестарт воипсвитча и воипбокса не помог. Настройка лимита длительности звонка — 60 минут на месте. Помог только перезапуск сервера целиком. Прощай, аптайм =)
Кстати, учитывая просто катастрофическую падучесть софта (не исправленную до сих пор!!), воипсвитч и воипбокс пришлось обернуть простыми защитными скриптами вида:

# cat VoipBox.bat
@echo off
title VoipBox monitor

:LOOP
echo %date% %time%: Starting VoipBox
CD \
CD «Program Files (x86)\VoipBox 1.0\»
VoipBox.exe
echo %date% %time%: VoipBox RESTARTED >> crashlogBox.log
GOTO LOOP

# cat VoipSwitch.bat
@echo off
title VoipSwitch monitor

:LOOP
echo %date% %time%: Starting VoipSwitch
CD \
CD «Program Files (x86)\VoipSwitch\VoipSwitch 2.0\»
VoipSwitch.exe
echo %date% %time%: VoipSwitch RESTARTED >> crashlog.log
GOTO LOOP

Типа, быстро поднятый сервер не считается упавшим, даже если это операторская телефония =)
Так что если у вас при вызове внезапно разорвалась связь, а при повторном вызове всё ок — значит вполне возможно, что где-то на пути вашего звонка оказался подобный по качеству продуктЪ =)
Как я уже писал, воипбокс выпадал редко — раз в 2-3 месяца :D. После одного из крупных обновлений он выпадать почти перестал. Воипсвитч менее предсказуем — может и месяц проработать, а потом выпасть 4 раза за сутки. Основываясь на своём опыте общения с системой и разработчиками, предположу, что до окончательного фикса падучести ещё весьма далеко.

Я описал далеко не все встретившиеся проблемы. Очень часто бывало так, что обновление исправляло одну проблему, но ломало другую часть системы. Иногда это обнаруживалось при тестах сразу, и тогда систему откатывали. Иногда же ломалось только через продолжительное время, и тут приходилось искать обходные пути (ваш астериск с самописными скриптами всегда должен стоять на запасном пути) и усиленно пинать саппорт.

С двумя главными компонентами системы — ядром VoipSwitch и модулем VoipBox мы бегло познакомились.

Теперь же я немного расскажу про другие части системы. Они несколько проще, не такие падучие, но тоже забавные и стоят нескольких слов.

Факсы, VoipTunnel и диалеры.

Про факсы я уже писал ранее. ПоциЭнт одной ногой в могиле, но ещё шевелится.

В воипсвитче есть две крупных подсистемы, касающиеся факсов.

Первая — это настройки кодеков и протокола T.38 в свойствах клиентов и аплинков. Опция там ровно одна — [x] Включить T.38.
Попытка его задействовать привела к очень изрядному геморрою, длинным историям переписки и перелопачиванию кучи логов и дампов траффика. Разумный выбор — выключить T38 нафиг и оставить умирающего зомби на милость G711.

Вторая относится к T.37 (Fax-Email), виртуальному факс-серверу и прочему.
Из настроек тут только емейл в профиле клиента и пара скудных опций в настройках PBX.
За работу с почтой отвечают две мега-софтины:

FAX-nedo-servers

Пациент скорее мёртв, чем жив. Поддержка воипсвитча продинамила вообще все вопросы по этой части. Впрочем, учитывая нулевую востребованность данного сервиса (те, кому нужен факс — сидят до сих пор на старой технике, воткнутой в шлюзы с PassThru), это была небольшая проблема. Распросив коллег, удалось выяснить, что стабильно ЭТО никогда и не работало, и нефиг насиловать разложившийся труп.

Следующая занятная штука — туннелирование.
Дело в том, что протокол SIP относится к сложным протоколам в смысле прохождения через NAT, а также он легко детектируется L7-DPI.
Первое актуально при работе из сетей с выходом в интернет через кривые или неправильно настроенные роутеры, второе — в случае нахождения абонента в какой-нибудь нарушающей сетевой нейтралитет стране.
Для преодоления такой неприятности используется туннелирование. В этом случае как голосовой траффик, так и служебная сигнализация пропускаются через UDP-туннель. Защита там как правило номинальная — простейшее шифрование или минимальная обфускация. Этого вполне достаточно, чтобы DPI начала распознавать наш траффик как UDP-General вместо SIP-Signaling и RTP.
Со стороны сервера каждый такой туннель — отдельное приложение:

UDP_Tunnels

Очевидно, что для работы через такой туннель (голый UDP на нестандартном порту, с хз как обфусцированным траффиком) стандартные клиенты непригодны, и требуется специализированное приложение — диалер, которое и будет общаться с сервером через такой туннель.

Диалеры от VoipSwitch требуют отдельного описания.
Изначально идея была такая. Поскольку из мобильных платформ простая и нативная поддержка SIP-аккаунтов есть только у Андроида (начиная с 4.0 точно), то у нас возникает сразу несколько поводов сделать своё кастомное приложение. С технической стороны тут преодоление кривых файерволов и решение проблемы отсутствия встроенной поддержки SIP-акаунтов на девайсах типа йа-фонов, виндовс-мобайлов и прочих симбианов. Со стороны маркетинга — возможно запилить свои логотипы, уведомлялки о балансе, рекламки, напоминалки и прочие свистоперделки с целью понравиться клиенту.
Однако и тут не всё смогло пройти гладко. По контракту, задача писать такие диалеры — целиком на стороне разработчиков платформы, и эта услуга отдельно оплачивается. В реальности же оказалось следующеее:

* каждый диалер компилится под клиента. Там нет конфигов — настройки жестко вкомпилены в приложение.
* Вместо DNS-имени вшит IP адрес. РОВНО ОДИН. Опция работы «в кластере» такому диалеру при отказе ноды не поможет никак. Ну а смена IP-адреса сервера вообще превратится в целую эпопею с долгой-долгой поддержкой старого легаси.
* У яббла нет совместимости по приложениям между мобильными плафтормами. Вышел новый айфонЪ с новой ай-осью и модифицированной ай-хренью — просьба заплатить бабос за сборку нового диалера под новую платформу.
* Если ябблу ваше приложение не понравилось, и его выпиздили из АппСторе — то разработчики просто забьют хуй и денег не вернут. Типа AS IS. Мы вам приложение собрали, но его отверг яббл. Пинайте яббл самостоятельно.

Хорошая идея разбилась о проблемы совершенно нетехнического плана.

Личный кабинет и админские интерфейсы.

Логично предположить, что у такой системы, как телефонный сервер, должно быть просто охренительное количество настроек. А значит, самое время посмотреть на интерфейсы управления.
Самый простой — личный кабинет обычного клиента.

WebCabinet__Retail

Тут клиент может проверить состояние баланса, заказать номер, настроить переадресацию на мобильник и даже поставить дополнительное голосовое приветствие. Тут же доступны отчёты по входящим и исходящим звонкам, платежам и прочему. Из интересных функций — встроенный веб-телефон. Говорить по нему ужасно, но для проверки доступности линии (сделать тестовый вызов, увидеть дошедший до клиента входящий) сойдет. Написано это на б-гомерзком флеше, который может в любой момент умереть, что иногда и происходит:

WebCabinet_CrashedFlash

Упасть в браузере может любая из веб-админок, ибо говно-флеш + упоротые разрабы.

Для PBX-клиентов интерфейс уже несколько другой, и размещен по другому адресу:

WebCabinet__PBX1

Выглядит всё вполне круто, а вот на практике может сломаться в самых неожиданных местах. Например, после настройки внутреннего диалплана клиенты виртуальной АТС смогут звонить другу другу по номера 1001, 1002 итд, а вот перевести входящий звонок может и не получиться. Особый геморрой — голосовые приветствия. Могут не проигрываться, а чаще — проигрываться не до конца. Голосовые меню тут обслуживает уже знакомый нам VoipBox. Иногда в нём что-то ломается, и он перестаёт воспринимать тональные сигналы от нажатых клиентом кнопок. При том, что в аналогично настроенной учётке та же функция работает без проблем. Если кратко, то PBX в исполнении воипсвитча — боль. Функции вроде есть, но большая часть может сломаться совершенно неожиданно и на ровном месте.

Есть и веб-админка. Работает на флеше, как и личные кабинеты.

Пароли клиентов хранятся открытым текстом:

WebAdmin_FullyOpenClientPasswords

Технически это необходимо для работы Digest-аутентификации, но на кой чёрт их массово светить в интерфейсе и гонять по сети ?!
Интерфейс поиска вызывается нажатием на крохотную кнопку.
Данные ищутся LIKE-ом в MySQL, замена шаблонов не реализована. Так что вместо привычной звёздочки в шаблоне поиска ставим знак процента:

WebAdmin__Search_with_percent

SQL-инъекции ? Наверняка есть, но проверять их наличие на такой могучей системе в пятницу вечером желания не было 😀

В админке нет нормального отчёта по клиентским платёжам. Посмотреть платежи можно… по кнопочке [Add payment]. Только осторожно, чтобы случайно не внести платёж вручную.

Данная админка может быть кастомизирована под каждого из операторов настройками, в которых будут указаны доступные секции и права доступа. Не знаю, насколько это надёжно, учитывая поиск со знаком процента, но буду надеяться на лучшее. Также есть ощущение, что данная админка была разработана много позже, а основной админ-интерфейс у них — десктопное win32-приложение с прямым коннектом к базе:

MgmtFeature_How_to_find_client_payment_in_voipswitch

Настроек тут гораздо больше, и в отличие от веб-админки на флеше, она обычно не падает. Хотя клиентские платежи по-прежнему доступны только через [Add payment]. Что означают представленные на скриншоте цифры (баланс-до-платежа, баланс-после-платежа или же внесённую сумму) — предлагаю читателям догадаться самостоятельно по неким соображениям и банальной эрудиции =)

Тут тоже не обошлось без своих фич. Например, за автоматические списание абонентской платы, уведомления и прочую автоматику отвечает своя часть — «Event Manager». Управляется он исключительно отсюда:

Mgmt_EventManager

Иногда может выпасть, или даже выключиться после какого-нибудь обновления, подарив клиентам немного халявы. Проверять после апдейта обязательно.

Следующая прикольная «багофича» тоже способна добавить седых волос.
Есть такая штука — Least Cost Routing. Идея в чём — в систему добавлены тарифы всех аплинков, и когда надо сделать исходящий вызов, первым будет попробован аплинк с наименьшей стоимостью минуты. Также есть опция, запрещающая вызов в том случае, если цена аплинка оказалась выше, чем в клиентском тарифном плане (защита от звонков в убыток). Но поскольку в диалплане (а в воипсвитче LCR — это часть диалплана) часто применяются правила модификации номера, то этот LCR может сработать непредсказуемо.

Mgmt_Least-Cost-Routing_number-mods-rules

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

Ну и как обычно, префиксы в Латвию и Кирибати лучше закрыть нафиг.

Изучая отчёт по звонкам в этом интерфейсе, можно заметить весьма странные вещи. Несмотря на включенный LCR и вышесказанное, некоторые вызовы считаются сделанными в убыток.

MgmtError__Discharges_in_different_currency

Впервые обнаружив такое, есть отчего запаниковать. Однако детальный анализ звонков, логов и состояний баланса вкупе с тестовыми вызовами на отдельной учётке выявили следующее: несмотря на заявленную мультивалютность, в отчете часть колонок выводятся в рублях, а часть — в американских долларах. При этом в клиентских интерфейсах всё ок, проблема затрагивает только выгрузку в данном интерфейсе. Поскольку на территории РФ расчёт с клиентами только рублёвый, то делается простой хак — курс фиксируется в системе разово при установке, а дальше все при выгрузке переводится в рубли. Отчетность в этом случае сходится, а экспериментировать тут желания нет.

Теперь немного про применение настроек. Такая система подразумевает работу 24/7 и возможность менять большинство параметров «на лету», не разрывая текущие вызовы. Однако не все параметры относятся к таковым. Например, ряд таймаутов не могут быть изменены на лету:

MgmtError_Need-Voipswitch-reboot

Особенно болезненно данная софтень среагировала на добавление IP-алиаса:

MgmtError_Change_IP_Parameters

«Reload Configuration» там конечно есть, но учитывая общую глючность платформы, иногда может потребоваться «restart voipswitch» и даже «restart server».

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

MgmtError__-Local-DIDs-Management-Cannot-load-date-from-database

«Невозможно прочитать данные из базы данных» — не самое приятное алерт-сообщение, получаемое от сервера телефонии. Однако, это совершенно штатное поведение для любого незанятого внешнего номера ;).

Второе, и уже явное нарушение целостности (а не ложный алерт) — акционный пакет минут, привязанный к несуществующему клиенту N/A:

MgmtError_No-data-consistency

Весело до усрачки, улыбаемся и скачем.
Вот мы подошли к следующей части.

База данных.

Скорее, «даза банных». Впрочем, движок базы там отличный. MySQL 5.5 надёжен, как советский танк, и ни разу не вызвал никаких проблем со своей стороны.
А вот то, что туда залил воипсвитч, достойно отдельных скриншотов.
Я не буду о том, что балансы у обычных и PBX-пользователей хранятся в разных таблицах, причем иногда в паре копий. Я не буду про то, что в базе нет Foreign-ключей, и изучение её структуры держится на логе запросов и общей интуиции. Просто несколько скриншотов.

Пароли админов и операторов открытым текстом:

MySQL_Open-Admin-passwords-Voipswitch

Ладно пароли клиентов — они нужны для работы SIP. Но админские-то что мешало похэшить ?!

Как это общепринято в мире виндовс-разработки, каша из кодировок — любиморе блюдо. Записать юникодные данные в cp1251-таблицы — норма жизни.

MySQL-Voipswitch-Unicode-in-cp1251-DB

Иногда (условия не выяснены) данные могут убиться в мясо:

MySQL-VoipSwitch-3F3F3F-crashed-data-in-DB

Судя по всему, это старый шаблон какого-то уведомления, поскольку за всё время использования это ни разу не проявилось. Но никто не может гарантировать, что не проявится в будущем =)
Если же вы вдруг почувствовали себя мастером Йодой с черным поясом по SQL, на этот случай у воипсвитча припасено комбо-фаталити под названием «XML c кривой кодировкой во все поля».

MySQL-Voipswitch-XML-in-DataBase
Данная табличка относится к встроенной телефонной книжке, доступной из веб-кабинета и некоторых версий диалеров.

Вот так и живём. Ощущения — как от чемодана без ручки. Тащить тяжело, выбросить жалко, заменить — геморно.
Объем данной статьи приблизился к 3500 слов. Думаю, этого достаточно, чтобы у вас сложилось определённое впечатление о продукте. Если в будущем я найду ещё какие-либо замечательные глюки столь ентерпрайзнутого продукта — поделюсь. Ибо поддержка у них к 2015-му году окончательно вымерла.

Если ты, мой дорогой читатель, вдруг оказался собратом по несчастью — вот тебе небольшая подборка скриптов в утешение:
https://github.com/Aminuxer/Voipswitch-Additions

Там есть скрипт для конвертирования CSV-файлов с переименовыванием тарифных префиксов в транслит. Ведь эта гребаная софтина принципиально не умеет работать с тарифом, если в названии префикса есть хоть один не-английский символ! Ну и парочка SQL-запросов, чтобы уменьшить количество страданий.

Сколько стоит поучаствовать в таком бета-тесте на живых клиентах ?

Самая минимальная версия без PBX и прочих плюшек с новогодней скидкой стоит у них 3.5 тысячи. Баксов, естественно. Наша же версия обошлась десятикратно дороже, с учётом всех выплат, пакетов поддержки, оплаченных модулей, диалеров, дополнительных сервисов и прочего и прочего.

За это мы получили уйму геморроя, еле живую поддержку и крайне сырой и глючный продукт, в котором даже базовые PBX-функции работают через жопу или не работают совсем.
Поддержка крайне упорота. Если надо сделать совместную диагностику сложно воспроизводимой проблемы, для которой надо сделать звонок именно со стороны клиентского железа, они обязательно назначат своего инженера на 9 вечера по Москве, когда ни у нас, ни у клиентов никого уже нет в офисе, и полноценное тестирование невозможно. Несмотря на наши претензии и поток жалоб, лишь пару раз удалось получить поддержку в адекватное время.

Кратко:
— по диалерам компания воипсвитч не выполнила свои обязательства с просрочкой больше года
— по факсовым сервисам забила болт вообще
— внедрение «Rich Communications» поломало кучу старого, ранее работавшего функционала.
— Поддержку надо реально ловить и поджидать в чате. 24/7 — чисто условно там.
— Запись голосовых вызовов из интерфейса клиента не управляется. Включить можно только в админ-панели. Самая жесть — файлы пишутся в одну кучу, и если включена запись больше чем у трёх клиентов — по одним только именам файлов найти нужные записи неимоверно трудно. При этом ещё и каждое направление пишется в свой wav-файл! Вообщем, получить цельную запись разговора без применения звукового редактора нереально совсем.
— CRM и веб-модули аццкое лагучее и падучее говно. Дичайше неудобное.
— Прислать нерабочие и глючные приложения — в порядке вещей. От диалеров и мобильных приложений и до ядра системы — редко когда апдейт окажется хорошим и ничего не поломает.
— Проблемы в тарификации. От багофич в LCR до странных проблем с округлением минут лишь у некоторых клиентов, что весьма стрессово. Что характерно — PBX-клиенты опять оказались в зоне повышенного риска.
— Иногда креш-дампы писались столь часто и обильно, что на диске заканчивалось место. И даже скрипты ежесуточной ночной очистки могли иногда не успеть справиться.
— Огромное количество багов в интерфейсе и ядре системы
— Многие критически важные отчёты (анализ тарифов, использование номерной ёмкости) пришлось писать самим, разбираясь в очень кривой и недокументированной базе с кучей дублированных данных, XML-ем в полях и битовыми флагами для некоторых настроек.
— Структура базы напоминает авгиевы конюшни до прихода Геракла.

Пожелать такой продуктЪ, тем более по таким ценам и таким качеством поддержки, я могу разве что заклятому врагу.

Фикс из будущего: в 2023 году страдания с виндой закончились, жуткий сервер выключен. Телефония была перенесена на открытую платформу:

OpenSource :: замена телефонного сервера.

Обсуждение закрыто.