HelpOnClick

Крупный проект, обеспечивающий своих клиентов функционалом онлайн-консультатна. Продукт разрабатывает и развивает компания ExtPoint, в которой я работаю.

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

Должность в проекте
Ведущий веб-разработчик
Время в проекте
С 2013 года
Масштабы проекта
~ 20 000 активных аккаутов
Более 3 000 посетителей онлайн
Промо-сайт (eng)
helponclick.com
Русский ресселер
hoc.su

Моё участие в проекте

Рефакторинг

Я вошел в проект, когда он уже имел хорошую нагрузку и очень много кода. Почти весь серверный код (PHP) был написан в рамках одного контроллера — более 10 000 строк кода! Поэтому много времени было потрачено на уменьшение связанности кода, повышение надежности кода и внедрение новых технологий.
Клентская часть (ExtJS, jQuery, Backbone) так же потерпела множество изменений, хотя и выглядела гораздо лучше. В основном рефакторинг был направлен на реализацию MVC, уменьшение дублирования кода и адаптацию под текущую бизнес логику.

Уход в сторону Node Js + Redis.

Проект периодически упирался в планку производительности и необходимость в новых серверах. Основная причина тому — использование пингов на php сервера в качестве транспорта для обновления динамических данных. Мной был введен в проект Node Js сначала для более быстрого отклика сервера, а затем переведен на него основной функционал проекта. Транспорт переведен на websocket/long pooling (абстракция для библиотек sockjs и socket.io).

Юнит тесты

До моего участия, в проекте вообще отсутствовали тесты. После перевода части функционала на Node Js, мной были написаны тесты, покрывающие базовые сценарии приложения.

Непрерывная интеграция (автоматизация выгрузки)

Проект размещен на нескольких серверах (продакшен), а так же имеются stage, preview и бета версии. Чтобы все это хозяйство максимально быстро обновлять и откатывать на любую предыдущую версию, мной были реализованы скрипты деплоя (bash), которые используются в CI Jenkins.
Автоматизированный процесс деплоя включает в себя билда приложения, запуск юнит-тестов, выгрузку на сервера, мгновенное переключение на новую версию и проверку работоспособного состояния приложения.
Preview и Stage версии обновляются автоматически при коммите в основную ветку в git.

Технологии

Сервер
PHP, Node JS, MySQL, Redis, Sphinx
Операторская панель
ExtJS
Встраиваемый виджет
jQuery, Underscore, Backbone, RIA Builder
Мобильная версия
PhoneGap (Apache Cordova), Sencha Touch
Десктоп версия
Qt (WebView)

Скриншоты

Открытый чат в операторской панеле, виджете и отдельном окне.

Встраиваемый на сторонних сайтах виджет

Операторская панель с открытым чатов на левой панеле. На правой панеле видны настройки всплываемых приглашений в зависимости от указанных правил.

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