Как я писал свою crm
Данный сказ о том, как я потратил кучу времени на разработку своей crm, которая до сих пор не приносит ни малейшего выхлопа. Не повторяйте моих ошибок.
Как то раз, в одной компании, в которой я работал, появилась необходимость в системе обработки заявок от клиентов (штатный персонал
1к человек). Почему-то руководством не рассматривался вариант использования готового решения. Нам нужны были те же яйца, только в профиль.
Моя задача тогда заключалась в создании системы, которая позволит принять заявку от штатного сотрудника, назначить ее специалисту, отследить время реагирования и затраченное время, а потом всех уведомить о завершении работ. Естественно были другие ветви развития событий и все это было описано. Все это должно было быть в вэбе.
Скажу так: данная система была сделана за год и она отлично работает по сей день. Надо сказать, что на данный момент там около 80к заявок.
Так родилась система Jet Desk
На данном этапе, а это уже спустя год, я зациклился на улучшении архитектуры и практически не наращиваю функционал. Есть система заявок, роли участников, история действий над заявкой для отслеживания времени реакции, теги и поиск по ним, статусы заявок и различные изменения этих статусов (назначение, отказ, утверждение. ). Так же есть база клиентов с контактными данными.
Дойдя до клиентов, я понял что нужно пересмотреть как саму архитектуру, так и логику работы самой системы.
Натянул покрасивее дизайн (bootstrap), добавил pure json, перекинул все на MVC, сделал базовый функционал на Android (java) и застрял. То ли желание пропало, то творческие силы иссякли.
Как я начал разрабатывать CRM-систему
С 2008 года я занимаюсь программированием, изначально я разрабатывал сайты. Но мое мнение о сайтах сейчас не лучшее, с точки зрения разработки, обязательно напишу об этом статью. А пока вернусь к тому, как я начал разрабатывать CRM.
Это был уютный вечер 19 августа 2017 года, когда ко мне обратились в третий раз за неделю по поводу разработки индивидуальной CRM-системы. И тут я понял, что разрабатывать с нуля несколько проектов одновременно я просто не смогу. Поэтому я сел и решил написать собственную базу для разработки CRM-систем.
Началось все с выбора оформления, так как сам я больше люблю разработку и максимально предпочитаю не открывать Фотошоп и ни в коем случае не верстать (благо 8 лет опыта разработки позволяет отойти от верстки), то я выбрал уже готовый шаблон админки, и начал разрабатывать свой модуль CRM на базе фреимворка Yii2.
Первым делом была реализована система авторизации: вход, регистрация, восстановление пароля, уведомления и подтверждения на почту, учет количества попыток входа, reCaptcha и бан на полчаса, если слишком много попыток. В общем, получилась приятная и удобная авторизация, которую я теперь использую в проектах.
Для себя реализовал внутри системы парсер с первого сайта фриланса, на котором часто нахожу заказы. Сейчас список новых заказов загружается в систему автоматически, через Cron-задачу. Я могу делать пометки, отвечать на проекты, либо скрывать их. Каждое действие учитывается в дальнейшей аналитике, которая позволяет мне оценивать эффективность данного канала, и с помощью этого корректировать действия.
В данный момент ведется работа над стандартными модулями каталога и заявок. В одном из проектов, над которыми я сейчас тружусь для заказчиков, реализуется связка CRM-системы с IP-телефонией. Заказчик использует onlinePBX. И я обязательно расскажу, как прошла интеграция, когда все будет закончено. Об обновлениях и новинках с удовольствием буду сообщать. Также в планах реализовать пакетные решения для нескольких сфер деятельности, чтобы помочь автоматизировать процессы и сосредоточиться на заработке денег, а не на поиске doc или excel файлов по всему компьютеру, или стикеров с номером клиента.
По техническим характеристикам скажу кратко: nginx + php-frm, PHP7.1, PostgreSQL.
С огромным удовольствием помогу и отвечу на вопросы всех желающих. И буду рад новым знакомствам и сотрудничеству.
Разработка своей CRM со стороны программиста.
Добрый день. Меня зовут Роман.
Занимаюсь разработкой проектов для бизнеса около 5 лет.
Хочу поделится тем, как выглядит разработка своих решений изнутри. Возможно это будет полезно тем, кто хочет организовать свой бизнес или имеет уже рабочий, но нет возможности вести учет заявок. Или для приобретения понятия как можно делать. Я не буду углубляться в особенности программирования, просто, на пальцах распишу как это работает.
Интерактивные элементы: Yandex карта и SEO. Так же на разных страницах меняется порядок блоков, на некоторых страницах есть уникальные блоки. Было дано ТЗ от SEO специалистов, по метатегам и ключевым словам.
Так вот, как это работает :
Пользователь заходит на сайт, решает подать заявку через основную, короткую форму, заявку на обратный звонок или пытается сохранить данные о кредите, рассчитанные в калькуляторе. Далее заявка попадает в CRM, где подключенная кредитная компания получает заявку и берет в работу лида.
1. Отредактировать информацию по заявке.
2. Оставить комментарий к заявке.
3. Изменить статус заявки.
4. Изменить статус отказа.
Какая информация о лиде отображается в CRM.
1. Имя.
2. Город.
3. Дата.
4. Авто.
5. Телефон.
6. Желаемая сумма.
7. Выданная сумма.
8. Источник.(форма или звонок).
9. Источник трафика(поисковик, рекламная компания и тд).
На странице отображения лидов сделаны фильтры для того, чтобы можно было упорядочить заявки по каждому из полей. Так же, есть поиск по полям и настройка количества отображаемых заявок на одной странице. Можно отображать заявки только с определенным статусом.
К CRM подключена телефония. При звонке на номер телефонии отправляет запрос с информацией о лиде на сайт, который складывается с список заявок.
Помимо CRM, есть ещё мини админка для добавления новых городов. Опять же, сделан простой интерфейс, заполняя поля в котором на выходе имеется новая страница города, генерируемая из шаблона дизайна.
Станицы генерируются из блоков. Изменяя блок в одном месте, все изменения применяться на всех страницах, где есть этот блок (страниц более 500).
В самом сайте минифицированы все скрипты и стили, ужата графика. Карта подгружается не сразу, а через некоторое время после загрузки страницы. В результате получилось сделать довольно шуструю загрузку.
На самом сайте есть калькулятор кредита, который считает суммы выплат и ежемесячный платеж по формуле аннуитетного платежа. Эту информацию можно представить в виде графика ежемесячных платежей.
Если будет интересно, то опишу другие свои проекты. Обязательно отвечу на вопросы.
Спасибо за внимание, хорошего дня!
А нас например своя телефония в виде хардварного решения и свои сервера без доступа в инет из инета, чем ваше решение лучше того же сахарка?
Занимательная арифметика для любых переговоров
Звонит мне знакомый программист на днях.
— Слушай, мы тут нашли крутого заказчика в Британии, можешь мне срочно прямо сегодня сделать для него договор на английском языке? Ну там с приложениями, все дела.
— Ну, кхм, если бросить всё и заняться прямо сейчас, то могу.
— Ок, сколько времени и денег нужно?
— Четыре часа и десять тысяч рублей.
— Блин, долго и дорого чего-то, а можешь сделать за пять тыщ, но за два часа?
В общем, работа так и не состоялась, зато у меня появился универсальный ход для любых переговоров.
Моя мини-CRM, часть 2
Прошёл год с публикации первого поста про CRM, которую я разрабатываю сам, для своего магазина запчастей и автосервиса.
С тех пор появилось много фишек, и я созрел на написание нового поста. Текст я поделил на 2 части: мои размышления о необходимости внедрения ПО, и собственно новые возможности CRM. Сразу хочу предупредить, что в ближайшее время я не намерен продавать свой софт, этот пост пишу скорее «по просьбам трудящихся», а также возможно он будет полезен тем, кто захочет сделать для себя (или для продажи) что-то подобное.
Часть 1: а зачем вообще CRM для розницы?
Почему-то принято считать, что для розницы не нужна CRM, причём так считают, видимо, и разработчики софта, и сами собственники розничного бизнеса. Я считаю, что это не так, и в этом посте расскажу, какая может быть польза от CRM.
Начнём с определения CRM: customer relationship management, то есть управление отношениями с клиентами. Именно под эту формулировку и подходит моя CRM. В первых страницы нашей «книги продаж» (что-то вроде учебника, устава, и руководства) я написал: самое главное, что есть у нашего магазина – это наши клиенты. И первый функционал CRM был создан именно для ведения учёта клиентов, ну об этом я писал в первом посте год назад. Всё остальное было создано именно на костяке клиентской базы.
Не сочтите за выпендрёж, просто статистика: я за 2016 год увеличил продажи на 30%, за 2017 год – на 48-52% (смотря как считать, с оптовыми продажами или без), и считаю что это в большей части заслуга CRM. На самом деле, до этого мы работали просто потому что вроде всё идёт нормально – вроде имелся рост процентов 10-15 к прошлому году, вроде клиенты довольны, вроде склад запчастей хороший, вроде мы молодцы. И становится обидно, когда я осознаю, сколько лет наш магазин потерял в этом состоянии вроде.
Недавно читал «Обнимите своих клиентов» Джека Митчелла – он пишет о своём магазине одежды в США. Вот что меня удивило: к мысли о необходимости внедрения современных (на то время) технологий он пришёл ещё в начале 70-го года. Тогда он обратился к IBM, и начал компьютеризировать свой магазин. И когда спустя почти 50 лет я вижу, как в магазине ведётся учёт в тетрадке или в Excel, я недоумеваю – как такие магазины вообще работают?
Ну и ещё небольшая отсылка к американским авторам: в первых же главах в «Клиентах на всю жизнь» Карл Сьюэлл пишет, что измеряет всё, что только можно измерить. Именно это я и считаю одной из важнейших способностей CRM. Вот что я знаю благодаря ПО:
— количество клиентов – общее, активное (активными считаются те, кто покупал запчасти или ремонтировался в течение года);
— количество добавленных новых клиентов – общее и в разрезе по менеджерам;
— источники новых клиентов;
— имена, номера телефонов, марки-модели их автомобилей;
— дату последнего визита клиента;
— дату покупки расходников: свечей, фильтров, ремня ГРМ;
— да вообще-то я знаю всю историю покупок и ремонтов каждого клиента;
— сумму покупок и ремонтов – общую, каждого клиента по отдельности, в разрезе марки-модели;
— среднюю частоту покупок – общую, каждого клиента по отдельности, в разрезе марки-модели;
— средний чек покупок/ремонта клиента – общий, за какой-то период, в разрезе менеджеров, марок-моделей авто;
— количество звонков: принятых, пропущенных, пропущенных и не обработанных после (по каждому пропущенному должны перезвонить);
— конверсию из звонка в покупку/заказ/ремонт – общую и в разрезе менеджеров;
— среднюю продолжительность звонка – общую и в разрезе отделов, менеджеров;
— процент выкупа заказов – с предоплатой и без (конечно, заказы с предоплатой забирают намного быстрее);
— среднюю продолжительность заказа;
— точность выполнения заказа (если обещали в пятницу – привезли ли в пятницу или опоздали) – общую и в разрезе менеджеров;
— сумму поступивших и ещё не выкупленных заказанных товаров – общую и в разрезе по менеджерам;
— эффективность рекламных кампаний (разослали рекламные СМС – через месяц смотрим, сколько клиентов совершило покупку, опять же: средний чек покупки, марки-модели клиентов, и тд);
— среднюю оценку от клиентов: общую, и в разрезе отделов, менеджеров;
— конверсию из осмотров ходовой в последующий ремонт ходовой.
Все эти показатели так или иначе важны, все они анализируются – что-то каждый день, что-то каждый месяц, что-то каждые полгода-год. Не стану описывать, зачем нужен каждый, просто приведу несколько примеров применения.
Будим «уснувших» клиентов СМС-ками вроде «Владимир Владимирович, мы заметили что Вы давно не навещали наш магазин. У нас есть для Вас подарок, заберите его до 18 марта. Кстати, на Вашей карте накоплено 500 млрд бонусных баллов». Плюс потом замеряем конверсию в покупку по таким СМС.
Видим, что у менеджера упал показатель по конверсии звонков в покупки – слушаем звонки, выявляем проблемы и работаем над устранением. И наоборот: анализируем успешные звонки, тоже делаем выводы.
Я знаю, какая модель автомобиля для меня самая прибыльная, а значит – каких клиентов мне нужно привлечь в первую очередь.
В более масштабном варианте: я знаю, какой процент клиентов магазина пользуются услугами автосервиса. А значит, я могу рассчитывать что благодаря рекламной кампании, если я получу обычных новых клиентов, определённый процент этих клиентов станет клиентами автосервиса. Могу рассчитать, сколько в среднем денег они оставят за год в магазине и сервисе, и таким образом запланировать прибыль от каждого потенциального покупателя.
Я решил что не буду объяснить, зачем нужно знать все эти цифры и как их можно применить. Если не придумаете им применение – должно быть, вам действительно это не нужно. По правде говоря, поначалу я тоже отслеживал некоторые показатели из интереса, «просто потому что могу», потом начал пытаться влиять на них, и иногда с удовольствием наблюдал, что действительно могу влиять на них.
Часть вторая: новая функциональность моей CRM
Ещё раз напомню, что продавать не намерен, обзор делаю чтобы почесать своё ЧСВ и возможно помочь кому-то, кто хочет сделать подобное. Честно, буду рад, если кому-то поможет.
В прошлом году почти сразу после написания первого поста я смог найти толкового «тыжпрограммиста» для 1С, вместе с которым мы смогли разработать связь между CRM и 1C. Да, кстати, если кто не в курсе: CRM – это веб-приложение, так что менеджеры работают и в 1С и в CRM. Многих это разочаровывает, но мои менеджеры ни разу не жаловались, да и мне кажется что всё достаточно удобно.
Теперь из 1С в CRM попадают данные о покупках клиентов, о поступлениях товаров, выгружаются остатки, ну и вдобавок мы сделали полуавтоматическую загрузку поступлений в 1С, на основе документов которые отправляют на почту.
Если раньше ребятам приходилось в CRM вручную писать список покупок, то теперь они указывают в 1С номер карты, и всё. У Джека Митчелла это заняло 15-20 лет (с момента внедрения технологий до полной записи истории покупок), у нас – 1.5 года.
Доработки системы заказов
Подружив CRM с 1C, получил немного автоматизации: теперь при проведении документа поступления CRM может сама разослать клиентам СМС о том, что их заказы пришли – раньше приходилось отмечать поступление заказов вручную.
Вдобавок недавно мы ввели внутренние бланки заказов, которые прикрепляем к товарам на полке заказов. CRM помогает и тут: когда приходят товары, она сама определяет что из этого заказное, и предлагает распечатать эти самые бланки.
Причём если поначалу бланки печатались поштучно, и иногда приходилось печатать сразу штук 15, то впоследствии печать стала автоматической, сразу всех заказов, с возможностью не печатать выбранные.
Система оценок от покупателей
Тоже внедрил прошлым летом, причём пришлось заморочиться. Смысл такой: на следующий день после покупки или ремонта клиент получает СМС с просьбой отправить в ответ оценку от 1 до 10. Проблема была в том, что отправить СМС – проще простого, а вот принят обратно и обработать – намного сложнее.
Решение реализовано не самое изящное, но работающее: на android-смартфон нашлось приложение, которое работает со своим сервером. CRM отправляет запрос на сервер, сервер отправляет запрос на смартфон: отправь СМС. Когда приходит ответное СМС от клиента, цепочка обратная: смартфон – своему серверу, сервер – в мою CRM.
Оценка от клиентов – это мой любимый показатель, который почти в реальном времени отображает качество нашей работы. Поначалу оценка была около 8.5, я звонил всем кто поставил ниже 8 и спрашивал, что не так. Обычно оценка была или 9-10, или 1-5. Жаловались в основном на срывы сроков заказов, невозможность дозвониться, и отсутствие товара на складе. Забегая вперёд, скажу что по всем 3 проблемам было найдено решение с помощью CRM.
Постепенно оценка подросла, сейчас в районе 9.7, иногда проседает где-то до 9, если кто-то остался недоволен и поставил нам «кол».
Перезваниваем всем, кто ставит ниже 9, правило такое: звонит не тот менеджер, которому поставили низкую оценку. Иногда ставят «пятёрку», имея в виду «пять из пяти», такие исправляем на «десятку». Также иногда пишут оценку текстом, или просто «всё классно».
Я ещё считаю индекс NPS по оригинальной формуле, но вопрос при этом я задаю неправильно (я просто прошу поставить оценку, а по NPS нужно сказать, какова вероятность что он посоветует нас друзьям). Я просто считаю, что если у клиента нет друзей с китайским автомобилем (а у нас, напомню, магазин для «китайцев»), то вероятность что он нас кому-то посоветует, стремится к нулю.
Система отслеживания заказов
Я отметил, что иногда на нас сердились из-за срыва сроков заказов: обещали через неделю – привезли через две. Корней у этой проблемы две: человеческий фактор – менеджер в запаре мог просто оформить заказ в CRM, но не заказать запчасть у поставщика, даже я пару раз так косячил. Вторая проблема – это отказ поставщика (кто не в курсе – иногда поставщик не может привезти запчасть, потому что её нет, или потому что она сломана, или что-то в этом роде), и мы могли не заметить этот отказ вовремя.
Решение было найдено с помощью API поставщиков. Теперь каждые 30 минут сервер запускает скрипт, который проверяет статус каждой позиции в каждом заказе. Если находит, что деталь не заказана или что стоит отказ – выводит уведомление для менеджеров, они уже реагируют на это как положено.
Выше писал, что CRM выводит уведомление о проблемах с заказом. Это часть системы уведомлений, которую я разработал сразу после отслеживания заказов – поначалу оно запускалось вручную, нужно было ждать несколько минут пока скрипт проверит все заказы, и выведет проблемные. Конечно, менеджеры забывали/забивали на это, да и в целом была нужда в оповещениях, так что я сделал простенькую систему.
Кроме уведомлений о заказах туда попадают записи о:
— новых записях на ремонт, оформленных через сайт;
— новых заказах запчастей, оформленных через сайт;
— низких или некорректных оценках от клиентов;
— необходимости выгрузить остатки из 1С после 5 часов вечера (так и не удалось нам сделать автоматическую выгрузку, приходится запускать обработку в 1С вручную);
— пропущенных звонках от клиентов (эти самые «горячие», обрабатываются в первую очередь).
Система слежения за остатками на складе
Ещё один мощный компонент, наверное самый сложный в разработке, и очень важный. Для магазина наличие запчастей – это чуть ли не самое главное, и когда клиенты не могли купить какую-то мелочь вроде патрубка системы охлаждения, я сильно расстраивался – стоит эта фигня рублей 100, а проблем много.
Сразу скажу, что на самом деле в 1С есть встроенные «точки заказов», которые для этого и созданы, но мне они не нравились из-за скупого функционала, так что я создал свою тему, с проценкой и шлюзами.
Для начала я создал список обязательного наличия, в него вошло 2 тысячи позиций. Каждую ночь CRM запускает проверку: по каждой из позиции из списка – есть ли на складе? Если есть, то достаточно ли их? Если недостаточно или нет вообще, идёт следующий цикл: а не заказано ли это уже? Если нет – последний пункт: скрипт ищет, где дешевле всего купить.
Утром я вижу список запчастей, с количеством, ценой и названием поставщика, где нужно сделать заказ.
Вот чего здесь не хватает: умного анализа для вычисления оптимального количества для заказа. То есть если втулки стабилизатора нужно ждать от поставщика 7 дней, и за эти 7 дней мы продаём в среднем 10 штук – то когда на складе остаётся 10 штук – нужно заказать ещё 10, чтобы новые пришли как раз когда кончатся старые. Но это может быть не очень точно (иногда мы продаём и 20 втулок в неделю), и мне лень это делать.
А вот что мне тоже лень делать, но я это точно сделаю, так это запись цен на эти товары. В моей сфере (запчасти для китайских автомобилей) бывает, что цена на «оригинальные» запчасти колеблется в несколько раз в течение месяца. Соответственно, если слепо доверять системе, то можно заказать прокладку стоимостью 1000 рублей, в то время как её реальная цена – 200 рублей. И наоборот, рычаг может подешеветь с 1500 рублей до 600.
Также в планах полуавтоматическое оформление заказов у поставщика – пока я этого не сделал, приходится вручную всё заказывать, а хотелось бы просто поставить галочки и оформить заказ прямо из CRM.
А вот что мне удалось связать, так это IP-телефонию и CRM. Я уже писал об этом в прошлый раз, но за это время я сделал несколько улучшений. Например, теперь в CRM везде где есть номер телефона, рядом расположена кнопка «позвонить». При нажатии CRM смотрит, какой менеджер инициировал звонок, и отправляет вызов на трубку этого менеджера. Когда он отвечает на вызов, начинается звонок клиенту. Так экономится немного времени на отсутствии необходимости набора номера телефона, да и исключаются ошибки при наборе номера.
Ещё из полезностей: при ответе на входящий звонок у того менеджера, который ответил на звонок, на экране появляется информация о звонящем клиенте, если она есть – это имя, марка-модель, последние покупки, запись на ремонт. Иногда бывает удобно, и клиентам приятно, когда его называют по имени, хотя он не представлялся.
Ну и как я уже писал, если не успеваем ответить на звонок, этот клиент тут же попадает в список «перезвонить».
Это любимая функция CRM у менеджеров, рассчитывает зарплату в реальном времени. Мы оплачиваем процент от продаж, плюс 4 KPI (ключевых показателя эффективности): общие продажи магазина, личные продажи менеджера, средний чек менеджера, общее количество проданных бонусных карт.
В рамках коммерческой тайны замазал ключевые данные.
Расписание для автосервиса
На досуге обновил модуль с расписанием, улучшил внешний вид и добавил функционал, теперь при нажатии на запись с автомобилем появляется всплывающее окошко с информацией об этом заказ-наряде. Скриншот делал в воскресенье, когда работало только 2 поста, поэтому и записи только на них.
Вот вроде и всё, о чем хотел рассказать. Надеюсь, эта информация кому-то поможет.
На чём писать CRM?
Привет друзья!
Я изучаю этот вопрос, интересно мнение сообщества.
Предполагается создание модульной системы, набор модулей выбирается под задачи, телефония, почта. В общем-то стандартный набор. Готовые решения изучаем, но наш случай, когда специфика очень большая, в основе логики.
В общем, нужно на ёлку залезть и не поцарапаться.
Оценить 8 комментариев
Пишите на том, что лучше всего знайте. Это первое и единственное что нужно учитывать.
Уровень вхождения. Специалисты не должны быть на «вес золота».
Открываем hh.ru по Вашему региону и ищем резюме с ключевыми словами C#, Java, PHP и т.д. Исходя из количества потенциальных кандидатов и их запросов понимаем будут ли они на «вес золота» или нет.
Не понимаю в чем проблема сделать приложение в браузере, т.е. чтобы Ваша CRM открывалась через любой бразуер. По этому принципу работает Мегаплан, Амо и т.д. Да почти любая соверменная CRM. Возьмите на основу этот же путь, как вариант.
UPDATE 16.12.2016
Анатолий ниже в комментах к моему ответу Вы пишите, что большенство людей советуют Вам использовать именно облачную реализацию. Позвольте поделиться своими мыслями по этому вопросу.
Разрабатывая любое десктопное приложение рано или поздно Вы столкнетесь с проблемой его корректной работы на разных машинах. К примеру, создали Вы програмку под Windows. На одной машине с Win 7 она работает прекрасно, а на Win 7 SP 1 уже выдает какую-то ошибку. Еще пример, на 5 машинах стоит одинаковая ОС. На 4-х из них Ваша программа работает прекрасно, а на 5-й какое-то там окно не отображается. Почему так? Надо садиться и разбираться, копаясь конкретно в настройках этой машины, выесняя что там не так, чего там не стои или стоит лишнего.
Всем этим я хочу привести Вас к одной единственной идеи: есть очень большая разница, между приложением, которое должно работать на одной машине и, приложением, которое должно выполняться на десятках/сотнях/тысячах рабочих станций.