RdRowdata
Меню

Портфолио

Кейсы

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

01

Все проекты

Мессенджеры → PostgreSQL + BI

CRM для сети массажа

Задача
Лиды из WhatsApp и Telegram терялись: переписка в личных чатах, дубли заявок, руководитель не видел воронку.
Результат
100% обращений в единой БД, дашборд по каналам (обезличено)
Подробнее →

Excel → PostgreSQL

Торговая компания

Задача
4 менеджера вели остатки в разных файлах.
Результат
−6 ч/нед на сверки
Подробнее →

PostgreSQL retainer

Сфера услуг

Задача
Падения БД без понятной причины.
Результат
0 инцидентов за 8 мес.
Подробнее →

Разработка БД

Логистика, учёт заявок

Задача
Уникальный процесс не вписывался в CRM.
Результат
MVP за 7 недель
Подробнее →
02

Разбор проекта

Мессенджеры → PostgreSQL + BI

CRM для сети массажа

B2B-сеть офисного массажа: заявки приходят в WhatsApp и Telegram, менеджеры ведут клиентов вручную. Нужна единая база вместо разрозненных чатов и таблиц.

Было

  • Новые обращения не попадали в CRM — оставались только в мессенджерах.
  • Один клиент мог написать в два канала — менеджеры не видели дубль.
  • Руководитель собирал сводку по лидам вручную, без единой воронки.
  • Резервные копии учётной БД не проверялись на восстановление.

Сделали

  • Спроектировали схему PostgreSQL: клиенты, лиды, статусы, источник (WA / TG), история касаний.
  • Настроили приём входящих из WhatsApp и Telegram в единый слой (webhooks, n8n).
  • Связали мессенджеры с CRM-логикой: один лид — один статус, без потерь между каналами.
  • Подключили BI: лиды по каналу, конверсия по этапам, время первого ответа.
  • Включили резервное копирование БД: ежедневный дамп и проверка восстановления на тестовом стенде.

Стек

  • PostgreSQL
  • Интеграция WhatsApp / Telegram (webhooks, n8n)
  • BI-дашборды для руководителя
  • pg_dump + off-site хранение бэкапов

Модель данных

Ядро PostgreSQL: один клиент — несколько контактов и лидов; входящие из мессенджеров пишутся в inbound_messages и привязываются к лиду по каналу и внешнему thread id.

clients

Компании B2B (офисы, площадки)

  • id
  • name
  • city
  • created_at

contacts

Контактные лица и идентификаторы в мессенджерах

  • id
  • client_id → clients
  • full_name
  • phone
  • telegram_user_id
  • whatsapp_phone
  • is_primary

managers

Менеджеры, ведущие лиды

  • id
  • full_name
  • telegram_user_id
  • is_active

lead_statuses

Справочник этапов воронки

  • id
  • code
  • name
  • sort_order

leads

Заявка из WhatsApp или Telegram

  • id
  • client_id → clients
  • contact_id → contacts
  • manager_id → managers
  • status_id → lead_statuses
  • channel (whatsapp | telegram)
  • external_thread_id
  • first_message_at
  • first_response_at
  • closed_at

lead_status_log

История смены статусов для BI-воронки

  • id
  • lead_id → leads
  • status_id → lead_statuses
  • changed_at
  • changed_by → managers

inbound_messages

Входящие из webhooks (дедуп по external_id)

  • id
  • lead_id → leads
  • channel
  • external_message_id (unique)
  • body
  • received_at
  • raw_payload jsonb

Связи

  • clients 1 → N contacts
  • clients 1 → N leads
  • contacts 1 → N leads
  • managers 1 → N leads
  • lead_statuses 1 → N leads
  • leads 1 → N lead_status_log
  • leads 1 → N inbound_messages

Представления для BI

  • vw_lead_funnel — лиды по статусу и каналу (BI)
  • vw_response_sla — время первого ответа по менеджеру
  • vw_channel_duplicates — контакт писал в WA и TG (слияние лидов)

Результат

  • Все входящие из мессенджеров фиксируются в одной базе — без «забытых» чатов.
  • Воронка и каналы видны в дашборде, без ручной сводки в Excel.
  • Восстановление из бэкапа проверено до продакшена.