Рубрика развивается при поддержке

Кейс: семь примеров автоматизации маркетинга и бизнес-процессов

Самописная CRM система — «велосипед» или оправданное решение?

В закладки

Когда мы создавали интернет-магазин клиенту в 2010м году, на рынке CRM не было готовых и недорогих решений, которые бы были максимально удобными для клиента.

Поэтому тогда совместно с клиентом было принято решение разрабатывать и постепенно развивать собственную систему, в которой бы помимо учета взаимоотношений с клиентами, одновременно можно было бы управлять каталогом из более 70 тыс. товаров, и обновлять цены более 100 поставщиков.

Первая версия системы была написана менее чем за один месяц силами одного программиста. Система успешно справлялась с поставленными задачами, ее было достаточно, чтобы вести операционную деятельность магазину.

Система включала учет продаж, доставок, финансов, все необходимые печатные формы и работой с базой товаров напрямую из CMS сайта.

Вторая версия была реализована уже на платной Bootstrap Admin теме, но все также усилиями одного удаленного разработчика.

Ничего лишнего, только тот функционал, который просил клиент
  • В этой версии системы была создана интеграция с IP-телефонией с возможностью совершать звонки из базы, показом карточки клиента при входящих звонках со знакомым номеров;
  • Реализована интеграция с онлайн-чатом Jivosite и вывод скриптов продаж из сервиса HyperScript прямо в форме создания заявки;
  • Интегрировали все формы обратной связи сайта таким образом, чтобы у нас в CRM автоматически создавались лиды;
  • Добавлен функционал "многооконности", т.е. возможность работать с большим кол-вом лидов одновременно;
  • Мы также настроили интеграцию базы товаров на сайте и в CRM c автоматической синхронизацией новинок и цен;
  • Создали систему управления для обновления цен из прайс-листов поставщиков с сохранением настроек под каждого поставщика и многое многое другое.

Таким образом, нам удалось создать систему, настроенную под индивидуальные запросы клиента.

Добавлю, что на сегодняшний день самой удобной системой для интернет-магазина, по нашему мнению, является RetailCRM (не реклама, а дань уважения), с которой мы работали по другим проектам. Хотя она и не решила бы "из коробки" всех описанных в этой заметке задач, но точно упростила бы старт бизнеса.

Быстрые и условно бесплатные способы добавить на сайт более чем 70 000 товаров

Перед нами была поставлена задача клиента: быстро и без лишних затрат наполнить интернет-магазин каталогом в 70+ тыс. товаров.

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

Цены в этом случае могут варьироваться от 5 до 15 рублей за товар, в зависимости от кол-ва заполняемых характеристик, кол-ва фотографий и многих других факторов. Для ассортимента в десятки или даже сотни тысяч товаров получится очень внушительная сумма. Этот вариант не подходил.

Имея в штате PHP программиста, исследовав вопрос и возможные решения, мы нашли простенькую библиотеку PHP Simple HTML DOM Parser, которая скачивает страницу-источник товара, “разбирает” эту страницу на нужные нам элементы, после чего создает товары на нашем сайте.

Сайты некоторх поставщиков не было нужны даже парсить, так как они предоставляли готовые XML файлы со своим ассортиментом, поэтому немного добавив функционала в наш парсер мы смогли работать и с ними.

Скрипт для загрузки новых товаров из XML фида поставщика​

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

Замечу, что сегодня на рынке существует несколько специализированных программ, например Datacol или Content Downloader X1. Настройка данных программ под конкретный сайт довольно трудоемка, но опытный специалист разберется в них, и вопрос с парсингом будет оперативно решен.

Content Downloader X1

Актуализация цен для 70 000+ товаров

90% поставщиков клиента присылают обновленные цены в Excel прайс-листах. Формат файлов, к сожалению, у всех был разным, поэтому мы сделали систему хранения настроек под каждого из поставщиков, с указанием:

  • в каком столбике файла какая хранится информация,
  • какая валюта в прайсе,
  • по какому курсу надо делать расчеты. У некоторых уникальных поставщиков вместо курса ЦБ был установлен свой внутренний курс.
​Обновление цен из Excel прайслистов поставщиков

Созданные настройки позволили исключить ручную работу по изменению цен на сайте, в результате чего обновление одного файла на 5000 товаров занимало не более 1-2 минут.

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

Однако, около 10% поставщиков нашего клиента перешли на обмен ассортиментом, ценами и прайс листами в формате XML, что существенно облегчило всем жизнь — скачивать товары из готового XML файла легче, чем писать отдельный парсер.

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

Как быть, когда на один и тот же товар есть 7-8 поставщиков с сильно отличающимися ценами?

После того, как мы научились оперативно получать информацию о всех ценах поставщиков и выводить её в CRM системе, поступила новая “вводная” от клиента.

Дело в том, что у довольно большого % импортируемого из Европы или Китая товаров, сильно отличаются цены у поставщиков. Видимо, до сих пор правила растаможки не совсем одинаковые для всех :)

В связи с этим, часто стали возникать ситуации, когда на сайте стоит цена от одного поставщика (у которого оптовая цена самая низкая), но в наличии товара не оказывается.

И тогда приходится покупать этот товар у другого поставщика, но уже дороже на 10-15%. Разумеется это съедало большую часть заложенной маржи.

Зачастую менеджерам приходилось извиняться перед покупателями и объявлять новую более высокую стоимость, и получалось не клиентоориентированно.

Для решения этой проблемы, мы стали накапливать в CRM системе всю информацию по ценам от всех поставщиков.

До этого цена на сайте была равна цене от поставщика, прайс-лист которого обновлялся последним.

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

Помимо этого, часть поставщиков давали только оптовую цену, часть только розничную, и часть и то, и другое. Плюс на некоторые товары были установлены РРЦ, которые нельзя нарушать. К этому же добавляются разные условия по внутреннему курсу, по которому происходит расчет между поставщикам и дилерами.

​По каждому поставщику приходится учитывать множество папраметров, влияющих на ценообразование

И всю эту логику нам необходимо было учесть.

Но мы справились и с этой задачей!
Мы создали автообработчик цен, который рассчитывает стоимость товара по актуальному курсу.

Модуль CRM сравнения цен поставщиков и высчитывания цены для сайта

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

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

А как быть с ценами конкурентов?

С ценами поставщиков разобрались - это конечно хорошо.

Еще одной задачей было предоставление конкурентной цены для покупателя, когда у многих конкурентов в ТОП выдачи поисковых систем цены немного или существенно ниже ваших. Очевидно, что это один из самых частых и болезненных вопросов, который задаёт себе любой из собственников высококонкурентного бизнеса.

На рынке существует несколько решений по автоматическому сравнению цен конкурентов. Обычно это делается на основе парсинга карточек товаров Яндекс Маркета. А как быть если многие из конкурентов не присутствуют в Маркете или вообще в вашей ниши нет карточек товаров?

Именно такая ситуация была у нашего клиента.

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

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

На выходе был получен актуальный список конкурентов, которые забирают SEO трафик с карточек товаров. Всего в списке получилось 142 магазина для занесенных фрилансерам ~600 товаров. Отбросив магазины с небольшим кол-вом товаров осталось порядка 50 конкурентов, наиболее часто попадающиеся в ТОП выдаче.

И нам предстояло по каждому сайту разметить теги для нашего парсера на базе всё того же Simple HTML DOM Parser. Работа оказалась не очень сложной — сейчас на большинстве сайтов указывают цены в микроразметке типа meta[itemprop="price"].

Процесс парсинга сайтов конкурентов с получением цен​

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

Автоматизация создания и обслуживания рекламных кампаний для большого ассортимента

Ассортимент на сайт занесен, SEO начинает приносить трафик, но хочется результата больше и быстрее. Подойдет контекстная реклама. Если у вас 100-200 товаров или услуг, то логичным будет обратиться с этой задачей в агентство или нанять специалиста в штат, но как быть если у вас 20 000 - 30 000 товаров, которые вы хотите продавать через контекстную рекламу, плюс цены на них постоянно меняются, наличие заканчивается или вообще их снимают с производства?

В ходе уточнения задачи еще выяснился нюанс, что клиент хочет вести рекламу не на конкретные карточки товаров, а на коллекции товаров, т.е. каталожные страницы на которых выводятся все карточки, относящиеся к конкретной серии производителя.

В этом случае, хорошо помогут сервисы, которые умеют генерировать кампании на основании XML фида данных, а в дальнейшем брать из него цену товара и автоматически менять её в тексте объявления.

​Генерация объявлений в К50

На момент поступления данной задачи в 2016 году наиболее подходящими под эти задачи, были сервисы Alytics и K50. В итоге, выбор был остановлен на последнем, т.к. только он умел работать со свободной структурой тегов в XML файле, а не только с форматом YML, который диктует Яндекс.Маркет.

Создание XML фида данных с нужными полями для К50

В ходе решения задачи, был написан обработчик, который формировал XML фид для К50, содержаний в себе информацию коллекций, а не карточек товаров. Чтобы грамотно управлять ставками на основании частотности заказов, средних чеков и маржинальности по конкретным производителям, в данный фид также добавили тег с рассчитанным коэффициентом-множителем, на который уменьшались или увеличивались ставки по ключевым словам.

​Настройка логики выставления 

Как мы помогали клиенту выбирать место для нового магазина с помощью Microsoft Power BI, статистики продаж и парсинга конкурентов

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

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

Отчет в Microsoft Power BI с продажами по районам Москвы и расположением конкурентов​

Из CRM системы были выгружены в Excel все продажи за 5 лет с адресами доставок. Однако, для отображения адресов на карте требовалось также получить широту и долготу по каждому из адресов. Для “обогащения” экселя недостающими данными нам быстро и недорого (10 копеек за запись) помог сервис Dadata, за что ему большое спасибо.

Помимо необходимых нам данных, мы еще бонусом получили рыночную стоимость квартир, куда делались доставки, правда пока не придумали как использовать эту информацию :)

Далее, стояла задача как-то получить список магазинов конкурентов. Для этого мы спарсили каталог одного из самых известных картографических сервисов, у которых наиболее актуальная база организаций Москвы, после чего эти адреса так же прогнали в Dadata.

На выходе получился красивый отчет по ГЕО продаж клиента с указанием точек присутствия конкурентов. Понятно, что многие адреса конкурентов, указанные в справочнике не относятся к реальным магазинам, а принадлежат офисам интернет-магазинов, но для начального анализа и “прицеливания” с дальнейшей ручной проверкой было вполне достаточно.

Клиент остался доволен — наш отчет помог принять оптимальное решение, где лучше открыть шоурум.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Андрей Москалев", "author_type": "self", "tags": [], "comments": 9, "likes": 9, "favorites": 37, "is_advertisement": false, "subsite_label": "marketing", "id": 87486, "is_wide": false, "is_ugc": true, "date": "Fri, 11 Oct 2019 09:27:56 +0300", "is_special": false }
Какая реклама
приносит деньги?
0
{ "id": 87486, "author_id": 115751, "diff_limit": 1000, "urls": {"diff":"\/comments\/87486\/get","add":"\/comments\/87486\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/87486"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199113, "last_count_and_date": null }
9 комментариев
Популярные
По порядку
Написать комментарий...
1

Круто!
Можете написать примерные бюджеты таких разработок?

Ответить
0

Спасибо!
Всё от задачи зависит. Некоторые скрипты писали с минимальным необходимым функционалом, без какого-либо интерфейса, поэтому это занималось всего лишь 5-6 часов работы программиста, т.е если брать в среднем по рынку, то 10-15 тыс. руб.
Если есть интересная задача - спрашивайте, попробуем прикинуть стоимость)

Ответить
0

А есть полное демо такой системы? Можно даже в личку, а то что то ссылка на fb, Андрей у вас не корректная

Ответить
1

Добрый день! Напишу вам в личку, но как таковой системы нет, которую можно было бы предлагать, т.е. это сильно заточенная CRMка под конкретного клиента вышла.

Ответить
0

Так и не получил инфы :)

Ответить
0

Мне почему-то тоже не даёт вам в личку написать) Но и дем, как я и написал, как такового нет.

Ответить
0

на fb может ссылку тогда скините?) А то там тоже найти не могу

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }