CRM Trilan

Компания «ТриЛан» разрабатывала CRM для собственных нужд. Огромное число проектов, находящихся в работе у специалистов, подразумевает не меньшее количество клиентов. Поэтому для осуществления наиболее эффективного менеджмента было принято решение о разработке собственной системы управления взаимоотношениями с клиентами.

Дата публикации — декабрь 2012 года

Бюджет: от 2 000 000 рублей
Команда
Ольга Круглова Арт-директор
Ольга Борисова Программист
Виталий Плотников Заместитель руководителя отдела разработки
Наталья Юматова Ведущий программист
Технологии Python Django Redis Ansible PostgreSQL Chef Nginx HaProxy SockJS Node.js Backbone Handlebars Stylus CoffeeScript Sentry Celery Jenkins

Услуги

Специалистами нашей компании был проделан весь спектр работ от проектирования интерфейса системы до её воплощения в программном коде.

Проблемы и их решения

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

Решение:

Может показаться, что это невыполнимая задача и качество продукта пострадает. Да, невозможно знать все, но владеть серверной и клиентской частью одинаково хорошо — допустимо. Последние тенденции web-разработки таковы, что знание html, css, js, python (или другого языка программирования для серверной части) — это базовые требования для разработчика web-студии, работающей над крупными проектами.

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

Решение:

В такой ситуации выгодней использовать сервер, работающий в асинхронном неблокирующем режиме. Основное требование заключается в том, чтобы клиент воспринимал Django и Асинхронный сервер как один сервис. Для решения этой задачи мы использовали прокси-сервер, который перенаправлял запросы на сервисы согласно их предназначениям: статику — на nginx, запросы к API — на Django.

Выбор платформы для полнотекстового поиска.

Решение:

Среди возможных вариантов платформ мы рассматривали Xapian, Sphinx, Solr и ElasticSearch. Выбор пал на последнюю. На тот момент ElasticSearch большего всего подходила под наши задачи из-за её хорошей поддержки русского языка, простоты в установке и настройке, удобной работы с индексами, приятного Query DSL. Свою роль сыграл и Elasticutils от Mozilla — библиотека для Python, предоставляющая удобное API для ElasticSearch, а также некоторые другие инструменты, облегчающие интеграцию приложения с этой платформой.

Выполнение задачи по генерации отчётов в формате PDF сопровождалось некоторыми сложностями. Во-первых, отчёты должны были содержать графики. Во-вторых, нам нужно было в сжатые сроки проработать более 600 страниц спецификации по формату. В-третьих, при формировании PDF нужно обеспечивать точное байт смещение (PDF - complex indexed binary format). В общем, отчёты в этом формате генерировать намного сложнее, чем HTML.

Решение:

Для выполнения задач были выбраны: ReportLab (http:// www.reportlab.com/software/opensource/) — низкоуровневая библиотека для генерации PDF; Pdfdocument (https://github.com/matthiask/ pdfdocument) — надстройка над ReportLab, упрощающая генерацию отчетов. С помощью pdfdocument сейчас оформляется текст, таблицы и т.п., а на уровень ReportLab приходится опускаться для отрисовки диаграмм и графиков. Приятным сюрпризом стало общение с Matthias Kestenholz (@unsocialrider) в twitter. Matthias — разработчик Pdfdocument из Цюриха, он приветливо и оперативно отвечал на вопросы по тонкостям работы с его библиотекой. Его советы ускорили работы по внедрению Pdfdocument в CRM.

Стороны о проекте

Наталья Юматова
Наталья Юматова Аналитик

CRM стала для меня источником вдохновения для многих мини-конференций по разработке в «ТриЛан Вологда». Стек используемых технологий и множество нетривиальных задач всегда с лёгкостью позволяли подобрать интересную тему для доклада.

Ход работы

Над системой работала группа всего из трёх специалистов, куда вошли ведущий разработчик Наталья Юматова, программист Ольга Борисова и арт-директор Ольга Круглова. Координировал их деятельность руководитель проекта Виталий Плотников.

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

В процессе создания системы сотрудниками «ТриЛан» была применена масса оригинальных решений, разработанных конкретно для этой CRM.

Навигация, основные разделы

После прохождения процедуры авторизации перед пользователем открывается главная страница TriLan CRM, на которой находится Панель управления, где отображены список действий («Мои действия») и список заявок («Мои заявки»).


Главная страница

В левом углу шапки интерфейса располагается логотип TriLan CRM, при щелчке на который пользователь попадает на главную страницу. Правее логотипа находятся кнопки быстрого создания, позволяющие перейти к созданию заявки, письма, комментария или звонка. В правом углу шапки страницы — Пользовательское меню, позволяющее сменить пароль, обратиться к документации или выйти из CRM.


Страница добавления заявки

Процесс создания заявки в TriLan CRM довольно прост. Для этого нужно воспользоваться кнопкой быстрого создания «Создать заявку». Перед пользователем откроется форма для быстрого добавления нового потенциального клиента. Нужно заполнить необходимую информацию в отведённых графах: наименование, сайт, ФИО контакта, должность телефон и адрес электронной почты. К указанию обязательна категория заявки, канал её получения и источник информации.

Вернёмся к навигации главной страницы. Под её шапкой находится Подменю, где расположена ссылка на Панель управления; доступ к распределению заявок, поступающих с сайта и от бизнес-партнёров; а также список всех клиентов TriLan.

Здесь же расположена строка для ввода поискового запроса. Она отвечает за глобальный поиск в «TriLan CRM». Пользователю достаточно просто ввести в поле строки свой запрос и нажать Enter. Для поиска по части слова использьзуется символ *.


Строка поиска

В итоге откроется страница с результатами поиска. На ней будет ещё одно поисковое поле, предзаполненное запросом — оно дублирует поисковое поле из Подменю. Для уточнения параметров поиска пользователь может поставить галочки только напротив тех типов объектов, которые его интересуют.

На всех страницах TriLan CRM предусмотрены хлебные крошки. Этот простой инструмент поможет сориентироваться в том, где пользователь находиться сейчас, и быстро перейти к предыдущему разделу, если возникнет такая необходимость.

Панель управления

Как уже упоминалось выше, доступ к основным объектам системы осуществляется с главной страницы «TriLan CRM», где расположена Панель управления менеджера по продажам, включающая в себя блоки «Мои действия» и «Мои заявки». Разберём работу пользователя с Панелью управления подробнее.

В блоке «Мои заявки» представлены заявки, за выполнение которых ответственен менеджер по продажам. По умолчанию в блоке включён фильтр «Активные», поэтому заявки, находящие в статусе «Сделка не заключена», не видны.


Блок «Мои заявки»

Информация блока «Мои заявки» распределена по столбцам «Обновлено», «Описание», «Запланировано» и «Выполнено». Графа «Обновлено» содержит данные о дате последнего обновления заявки, графа «Описание» — название заявки, её текущий статус, основной контакт и имя ответственного менеджера по продажам. В столбце «Запланировано» представлена информация о двух ближайших задачах или встречах, а в столбце «Выполнено» — два последних выполненных действия.

В блоке «Мои действия» отображаются действия по заявкам. Под действиями понимаются задачи, встречи, письма, звонки и комментарии. Для списка действий по умолчанию включен фильтр «Не выполненные», таким образом, здесь  отображается только актуальная информация.


Блок «Мои действия»

Действия в списке отображаются в соответствии с приоритетом: выше расположены просроченные. Чем больше срок, на который просрочена задача или встреча, тем выше она в списке. То есть задача, просроченная на месяц, будет ближе к началу списка, чем задача, просроченная на день. После просроченных задач следуют запланированные. Здесь работает тот же принцип: чем ближе плановая дата, тем выше задача или встреча в списке. Замыкают список приоритетов выполненные задачи. Выполненные недавно действия будут ближе к началу списка, чем действия закрытые давно.

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

В столбце «Клиент» отображается наименование клиента, к которому относится действие, его текущий статус и основной контакт. В столбце «Тип» —  описание действия.

Блок «Мои действия» предусматривает несколько фильтров: «Действия», «Тип» и «План». Их можно использовать как по одиночке, так и в совокупности. Например, чтобы получить запланированные на завтра встречи нужно: в фильтре «Действия» выставить значение «Не выполненные», в фильтре «Тип» — значение «Встречи», в фильтре «План» — значение «Завтра».

Над списком действий и заявок предусмотрено поле для поиска. Чтобы начать поиск, нужно ввести свой запрос и нажать Enter. Для поиска по части слова используется *.

Работа с заявкой

Все объекты системы TriLan CRM имеют форму для просмотра и редактирования. Заявка не является исключением.

Просмотр карточки заявки

В форме для просмотра заявки могут отображаться дополнительные данные, которые не доступны при редактировании «Общей информации». Эти информационные поля позволяют сформировать полное представление об объекте  и обобщить в одном месте все важные сведения. Примером такого поля являются сведения об основном контакте.

Рассмотрим карточку заявки подробнее. В самом верху формы располагается её наименование, текущий статус (например, «Выявление потребностей»), дата обновления карточки и комментарий к смене статуса.

Правее расположены кнопки «Редактировать», «Реанимировать» и кнопка смены статуса. Кнопка «Редактировать» открывает форму для редактирования общей информации по заявке. Кнопка «Реанимировать» позволяет забрать заявку себе для возобновления отношений с клиентом. Она отображается, если заявка находится в статусе «Сделка не заключена». Кнопка смены статуса расположена слева от кнопки «Редактировать». Как следует из её названия, она применяется для изменения статуса заявки. Например, если заявка находится в состоянии «Выявление потребностей», то подписью к кнопке будет «Выявить потребности».

Ниже на зелёном фоне располагается общая информация о заявке. Под ней – связанные с ней объекты.

Связанные объекты

Из карточки заявки можно получить доступ связанным с ней объектам: действиям, контактам, реквизитам, предложениям, файлам. Списки этих объектов находятся под блоком с общей информацией.

Жизненный цикл заявки (смена статусов заявки). Стандартный сценарий.

Пошагово рассмотрим, какие стадии проходит заявка на протяжении своего жизненного цикла.

На первом этапе происходит выявление потребностей. Заявка переходит менеджеру в работу в статусе «Выявление потребностей», так как этот статус задаётся автоматически при её создании.

Отображается статус на кнопке в верхней части формы заявки справа от кнопки «Редактировать». Чтобы его сменить, необходимо щёлкнуть на кнопку «Выявить потребности». Откроется окно с соответствующей формой. Для смены статуса нужно выбрать дату связи с клиентом, написать комментарий и указать направления деятельности, в которых заинтересован клиент. Если известна ориентировочная стоимость предложений, то лучше указать и её.

После смены статуса, начинается второй этап жизненного цикла заявки - «Формирование КП». При переходе в этот статус автоматически создается системная задача «Сформировать КП». Она есть в списке действий по заявке. Для смены этапа нужно щелкнуть по кнопке «Отправить КП». Откроется  окно с формой для изменения статуса, где пользователю нужно выбрать предложения для отправки клиенту, указать их цены и прикрепить файлы с КП.

Далее следует стадия активных переговоров. При переходе в этот статус автоматически создается системная задача «Связаться с клиентом по поводу КП». Она также есть в списке действий по заявке. Для перехода к следующему этапу нужно щелкнуть по кнопке «Согласовать КП» – откроется соответствующая форма для смены статуса, где необходимо выбрать действия, которые требуется произвести с предложениями. Пользователь может принять или отклонить задачи в зависимости от условий договора.

После выбора условий заявка переводится в статус «Согласование договора», автоматически создаётся соответствующая задача, которая отражается в списке действий. Для смены статуса и закрытия системной задачи нужно щелкнуть по кнопке «Согласовать КП». Откроется соответствующая форма, где нужно будет выбрать дату связи с клиентом; действия, которые необходимо произвести с предложениями, а также указать или уточнить номера договоров предложений и прикрепить окончательный вариант договора, после чего заявка переходит на следующую стадию – «Получение оплаты».

При переходе в этот статус автоматически создается системная задача «Связаться с клиентом для получения оплаты». Она также находит отражение в списке действий по заявке.

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

Затем заявка переходит в статус «Новый клиент», и доступ на редактирование карточки для менеджера по продажам закрывается.

Результат

Результатом работы стала удобная и быстрая система CRM Trilan, которая позволяет уведомлять пользователя (клиентское приложение) о произошедших на сервере событиях в режиме реального времени, осуществлять качественный полнотекстовый поиск, генерировать отчеты в формате PDF (в том числе с применением графиков), а также осуществлять большое количество других операций, которые значительно упрощают работу с клиентами.


Пример PDF-отчёта