Контекст
Один из крупнейших салонов света в Москве. Почти 30 лет работы — и огромная база дизайнеров интерьера: кто‑то покупает постоянно, с кем‑то давно пора возобновить контакт.
База жила везде, кроме одного места: часть в почте, часть на бумаге в шкафу директора. Офлайн‑продажи шли, а источник клиента и цепочка касаний оставались в голове менеджера.
Задача
Собрать операционную CRM под офлайн‑ритейл света: единая карточка дизайнера, фиксация сделок с источником, сегменты и SMS без ручного копипаста в Excel.
- единая база дизайнеров с фильтрами и тегами;
- SMS‑рассылки: акции, бранчи, дни рождения;
- учёт возвратов после мероприятий;
- офлайн‑сделки с обязательным источником (Instagram → Telegram → салон, Яндекс Карты → салон и т.д.);
- админка, которой менеджеры реально пользуются каждый день.
Архитектура
Стек подобрали под нагрузку ритейла и очереди рассылок — без overengineering, но с запасом на рост базы и кампаний.
- FastAPI — API и бизнес‑логика: карточки, сделки, сегменты, права, вебхуки доставки;
- PostgreSQL — источник правды: клиенты, сделки, источники, шаблоны, статусы SMS;
- Redis — очереди и кэш: сегментация, rate‑limit SigmaSMS, идемпотентность отправок;
- SigmaSMS API — транзакционные и маркетинговые SMS с трекингом статусов.
Фронт админки — React: быстрые фильтры, обязательные поля при закрытии сделки, превью сегмента перед отправкой кампании.
Продукт
Менеджер видит карточку дизайнера: контакты, историю визитов, участия в бранчах, сделки и канал, откуда человек пришёл. Источник — не «по желанию», а шаг закрытия сделки.
Рассылки собираются из сегментов PostgreSQL: день рождения на неделе, не был N месяцев, пришёл с мероприятия, купил люстры / не купил аксессуары. Redis держит очередь и не даёт удвоить отправку при ретраях.
Статусы SigmaSMS пишутся обратно в сделку и карточку — видно, кто получил сообщение, кто отфильтрован оператором, где нужен повторный контакт вручную.
Главный урок
Через месяц после запуска спросили: «получили то, что хотели?» Ответ: «вообще ничего не поменялось».
В CRM было видно почему: больше 90% сделок менеджеры либо не заполняли, либо заполняли так, что источник клиента восстановить нельзя. Инструмент стоял. Процесс — нет.
Переписали инструкцию, разобрали реальные кейсы первого месяца, закрыли спорные сценарии и объяснили, зачем лишние клики сегодня превращаются в управленческие решения завтра. Внедрение CRM — это не только код. Это adoption.
Итог
- единый контур «база → сделка → источник → SMS» на FastAPI + PostgreSQL;
- надёжные рассылки через SigmaSMS с очередью в Redis;
- прозрачная воронка касаний до офлайн‑продажи;
- команда, которая понимает, зачем заполнять карточку — иначе аналитика бесполезна.
Подробнее про человеческую сторону внедрения — в заметке Thinking и на vc.ru.