← все проекты

Дашборд Fit&Lead Group

Три проекта (Fit&Lead, СММ-агент, ИСКРА) в двух контурах. Аналитический: лиды, реклама, трафик, продажи, связки, воронки; источники Битрикс24 (только Fit&Lead), Метрика, Директ, выгрузки продуктов, соцсети. Рабочий: задачи с канбаном и архивом, КПИ, СММ-станция (контент-план, генерация, согласование, публикация) и раздел Директа с планом и фактом. Права двумерные: отдел (СММ, Реклама) на проект. Многопользовательский, доступ по паролю.

repo: E:\Проекты для Гитхаба\Дашборд FitLead\server: cfru, docker compose: app :3190, postgres :5446. http://80.90.184.203:3190, вход admin. Сборка через прокси aitodo:8888. В будущем переезд на сервер работодателя.docs: docs/память: fitlead-dashboard
готовS1 · Каркас, доступ, деплой6/6

Цель: Живой дашборд на сервере под паролем: роли работают, экраны пустые и честные.

Документы проекта: ARCHITECTURE, DATA-MODEL, ACCEPTANCE, DEPLOY
Doc-first: пишем до кода. В ACCEPTANCE — поведенческие критерии, по ним потом сверяем «готово».
Четыре документа в docs/. В ACCEPTANCE поведенческие критерии спринта 1 и заранее спринта 3, сверялся по ним.
doc
Каркас Next.js + Prisma + Postgres в docker compose
app :3190, postgres :5446 (свободны, проверено 14.08). Никаких путей cfru в конфигах — переезд к работодателю должен быть docker compose up.
Next 15.5 + Prisma 6 + Postgres 16. app :3190, postgres :5446 (только с сервера). Сборка идёт через прокси aitodo:8888, иначе npm install внутри docker build на cfru рвётся по таймауту.
feature
Вход по паролю: страница логина, сессии, выход
Сессия в httpOnly-cookie, подпись HMAC-SHA256 на node:crypto, без внешних библиотек. Тормоз перебора: 5 попыток на логин, потом 5 минут отказа. Проверено снаружи: шестая попытка даёт 429. Формулировка ошибки одна и та же на «нет логина» и «неверный пароль», чтобы перебором не собрать список логинов.
feature
Пользователи и роли: владелец, маркетолог, наблюдатель; видимость по проектам
Ограничение и по разделам (деньги видят не все), и по проектам.
Модель: role owner/member, scope full/limited, список проектов, отдельные галочки «деньги» и «чужие задачи и КПИ». Экран /admin/users: создание с одноразовым паролем, правка доступа, сброс пароля, отключение, журнал изменений. Смена прав или пароля поднимает tokenVersion и мгновенно обнуляет выданные cookie. Себя отключить нельзя. Проверено на живом сервере: ограниченный пользователь видит один проект, деньги закрыты плашкой, /api/users отдаёт ему 403, после отключения его cookie перестаёт работать сразу.
feature
Оболочка интерфейса: сайдбар, переключатель проектов, фильтр периода, тёмная тема
Плашка «НЕТ ДАННЫХ» с причиной вместо нуля — сквозное правило.
Сайдбар фильтруется правами (проверено: ограниченный видит одну ссылку на проект, раздела «Пользователи» нет). Плашки НЕТ ДАННЫХ / НЕТ ДОСТУПА / В РАБОТЕ вместо нулей: на обзоре и на экране проекта видно, какого источника не хватает. Адаптив проверен на 390px: шапка с меню, карточки в столбец, таблица прокручивается внутри себя, страница по горизонтали не едет. Фильтр периода не делал: фильтровать пока нечего, переносится в спринт с данными.
feature
Деплой на cfru и доступ снаружи
Решение владельца: поддомен с сертификатом либо IP с самоподписанным. Голый http по IP — пароли и КПИ людей открытым текстом.
http://80.90.184.203:3190, каталог /opt/fitlead-dash, ufw 3190 открыт. Решение владельца от 14.08: по IP без сертификата, COOKIE_SECURE=0. Переключатель на TLS оставлен в .env, код менять не придётся. Логин владельца admin, пароль выдан в переписке.
infra
В РАБОТЕS2 · Ядро данных и загрузка файлов5/7

Цель: Любой файл из любого источника ложится в единое ядро без дублей, метрики считаются в одном месте.

Схема ядра: продукты, каналы, сегменты, сущности, события, сделки, платежи, подписки, расходы, визиты
Узкая нормализованная схема, витрины поверх. Битрикс, Метрика, Директ и файлы пишут в одно ядро.
Заведены channels, source_files, spend_daily, sessions_daily, entities, events, deals, payments. Заодно закрыт долг спринта 1: схема переведена с наката на лету на миграции. Базовая миграция помечена применённой на живой базе, ядро приехало второй миграцией, контейнер на старте делает migrate deploy и ничего не удаляет.
feature
Идемпотентный импорт: хеш файла + натуральный ключ строки
Повторная заливка того же файла не двоит строки. Отчёт: загружено, дублей, ошибок.
У каждой строки уникальный ключ hash(тип источника + натуральный ключ). Повторная заливка не двоит данные, а честно считается пропущенной. Проверено: тот же файл во второй раз дал 0 залитых и 5 дублей; он же в другой кодировке тоже целиком ушёл в дубли, то есть ключ не зависит от кодировки файла.
feature
Экран «Загрузки»: перетаскивание, автоопределение типа, превью, ручной маппинг колонок
Перетаскивание или выбор файла, разбор, автоопределение типа по заголовкам, превью 20 строк, разметка колонок с обязательными полями, предупреждение «такой файл уже заливали», отчёт о заливке с числом дублей и ошибок, список залитого с периодом.
feature
Парсеры рекламы и трафика: Метрика, Директ, VK
Три типа с автоопределением по заголовкам: расход Директа, расход VK, источники Метрики. Разбор CSV написан свой, без угадывания типов ячеек: библиотека таблиц на числе «9 012,75» молча выдавала 27 649, для денег это недопустимо. Кодировка определяется декодированием, UTF-8 Метрики и cp1251 кабинетов читаются одинаково.
feature
Парсеры продуктов: пользователи и платежи СММ-агента, воронка ИСКРЫ, реестр блогеров, трекер сделок
По СММ-агенту и ИСКРЕ это основной источник: Битрикс их не закрывает.
Написать вслепую нельзя: форматов выгрузок я не видел. Вместо угадывания сделана ручная разметка колонок, которая закрывает любой табличный файл, плюс готовые типы «платежи продукта» и «сделки и лиды». Как придут реальные выгрузки, добавятся подписи автоопределения.
feature
Ручной ввод: посевы, бартер, партнёрские и оффлайн-договорённости
Заводится тем же импортом из таблицы. Отдельная форма нужна, но её поля стоит рисовать по живым данным, а не выдумывать заранее.
feature
Каталог метрик одним модулем: формулы, единицы, пороги, направление
Единственное место расчёта. Ни один экран не считает метрику у себя, иначе числа разойдутся.
src/lib/metrics: расход, выручка, визиты, лиды, платящие, стоимость лида, стоимость клиента, средний чек, окупаемость, конверсия визит-лид. Правило отсутствия данных зашито в код: нет знаменателя — метрика возвращает null, а не ноль; знаменатель меньше 30 помечается малой выборкой. Подписочные метрики появятся вместе с данными подписок.
feature
В РАБОТЕS3 · Рабочее место отдела: задачи, бэклог, КПИ15/16

Цель: Отдел работает в дашборде уже сегодня, до появления доступов к данным.

Задачи: проект, исполнитель, постановщик, срок, приоритет, описание, чек-лист
Всё перечисленное плюс отметки времени этапов. Карточка задачи на отдельном адресе: описание, чек-лист, обсуждение, параметры, история.
feature
Задачи как в Трелло: модалка, перенос мышкой, завершение и удаление
Владелец просил это ещё 17.08, я откладывал во вторую очередь и честно об этом сказал. Карточка задачи открывается модалкой с доски и из календаря: название, описание, проект, исполнитель, приоритет, срок, чек-лист, обсуждение, история. Стрелки «влево-вправо» убраны.
Модалка грузит задачу сама по GET, правки уходят по месту без перезагрузки страницы. На карточке остались «завершить» и «вернуть в работу», перенос мышкой между колонками работал и раньше. Удаление с подтверждением. Не сделано: вложенные файлы в задаче (ссылки живут в описании) и настраиваемые колонки доски задач — колонки пока жёсткие в коде.
feature
Календарь отдела: месяц, неделя, день
Отдельный раздел в блоке «Работа». Задачи по срокам, постановка задачи прямо в дне, открытие карточки, завершение и правки. У СММ переключатель показа публикаций контент-плана.
Три вида, кнопка «Сегодня», сегодняшний день подсвечен. Плюс в углу дня ставит задачу сразу на эту дату с выбором исполнителя. Клик по задаче открывает ту же модалку, что на доске. Публикации показаны рамкой и правятся в контент-плане, галочка видна только тем, у кого открыт раздел контента.
feature
Выгрузка задач в Excel и срок по умолчанию
Кнопка выгрузки на доске задач и удобный выбор срока при постановке.
Выгрузка отдаёт xlsx с задачей, описанием, проектом, статусом, приоритетом, исполнителем, постановщиком, сроками, чек-листом и числом комментариев; ширины колонок заданы, иначе описание схлопывается. Видимость та же, что на доске: без права видеть чужую работу выгрузятся только свои задачи. Срок при постановке теперь по умолчанию сегодняшний, рядом быстрый выбор: сегодня, завтра, через 3 дня, через неделю, без срока, своя дата.
feature
Файлы в задаче и настраиваемые колонки доски
Два хвоста, которые я назвал несделанными в прошлый заход: вложения в карточке задачи и колонки доски, зашитые в код.
Файлы: до двадцати штук по 50 МБ, лежат в томе, отдаются приложением, видимость наследуется от задачи — иначе вложение обходило бы права. Колонки: настраиваются отделом, хранятся в базе, переименование не ломает задачи (ключ не зависит от названия), задачи из убранной колонки переезжают в первую и об этом предупреждают до сохранения. Бэклог и «Завершено» системные и в настройке не участвуют: у них свои экраны. Проверено на живом сервере: добавил колонку «Дизайн», перенёс в неё задачу, вернул набор по умолчанию — задача переехала обратно.
feature
Фильтры в выгрузке задач в Excel: статус, ответственный, проект
Сейчас выгружается всё подряд. Нужны фильтры перед выгрузкой и те же фильтры в файле.
Ссылка выгрузки собирается из фильтров доски: проект, ответственный, источник, набор статусов из настроенных колонок. Фильтры режутся правами. Первой строкой листа пишется, по каким условиям собран файл и сколько строк. Добавлена колонка «Источник».
feature
Канбан: колонки, перетаскивание, фильтры по проекту, человеку и сроку, подсветка просрочки
Три рабочих столбца: к работе, в работе, на проверке. Статус меняется перетаскиванием и стрелками на карточке — стрелки не для красоты, перетаскивание не работает на телефоне. Просрочка красным плюс кнопка-фильтр со счётчиком. Фильтры по проекту и человеку.
feature
Бэклог по проектам и перенос задач в работу
Отдельный экран, задачи сгруппированы по проектам. Кнопка «в работу» меняет статус той же задачи, новая не создаётся, история сохраняется.
feature
Постановка задач другим: назначение, комментарии, лента изменений
Назначение при создании и в карточке. Комментарии с автором и временем. История пишет, кто менял статус, исполнителя, срок, приоритет и проект.
feature
КПИ: показатель, владелец, период, план, факт, прогресс, история
Операционные показатели вида «столько-то подписчиков в инсте», не денежные планы.
Помесячно, с переключением месяцев. План, факт, проценты, полоса. Направление показателя (рост это хорошо или плохо) учитывается при оценке. Каждый ввод факта пишется в историю с автором и временем. План меняет только владелец дашборда, иначе показатель подгонят под факт.
feature
Автоподстановка факта КПИ из ядра там, где показатель уже считается
Нечем подставлять: ядра данных ещё нет. Поле factSource уже различает ручной ввод и расчёт, на экране это видно, поэтому добавление источника не потребует переделки интерфейса.
feature
Личный экран сотрудника: мои задачи, мои КПИ; сводка КПИ отдела в обзоре
Без права на чужую работу человек видит только свои задачи (порученные ему и поставленные им) и только свои КПИ. Сводка КПИ месяца выведена на обзор с тем же правилом видимости. Проверено: чужая задача по прямой ссылке отдаёт 404, правка чужой 403.
feature
Напоминания о сроках и новых задачах
Канал согласовать: телеграм или почта.
Сделано уведомлениями внутри дашборда, без бота. Приходят исполнителю при постановке и переназначении задачи, исполнителю и постановщику при комментарии. Счётчик непрочитанных в меню. Проверено на живом сервере: назначил задачу второму пользователю и написал комментарий, оба уведомления пришли адресату.
Нет телеграм-бота, он появляется вместе с уведомлениями о согласовании контента. Отдельная засада: cfru не ходит в Телеграм напрямую, понадобится прокси через aitodo.
feature
Этапы задачи с отметками времени прохождения
Видно, когда что реализовалось.
Создана, взята в работу, закрыта — с датой и временем. Видно на карточке.
feature
Архив: автоуход, зачёркивание, возврат из архива
Прошла все пункты — уходит в скрытый столбец, зачёркнутая. Столбец можно открыть и вернуть задачу в работу.
Пройдя последний этап, задача уходит в скрытый блок «Архив» зачёркнутой. Блок разворачивается, задача возвращается в работу одной кнопкой.
feature
Быстрый поиск по задачам
Мгновенный поиск по названию на клиенте, вместе с фильтрами. На сотнях задач это верно, на тысячах понадобится серверный поиск — записано в SCOPE-CUTS.
feature
В РАБОТЕS4 · Аналитика проектов и конструкторы6/7

Цель: Экраны, ради которых всё затевалось: воронки, связки, каналы, разрезы.

Обзор: три проекта, выручка, расход, план месяца, алерты
Выручка, расход, лиды, визиты с дельтой к такому же периоду перед текущим (дельта красится по смыслу метрики: рост расхода это плохо). График по дням, плитки по проектам, сводка КПИ месяца. Проверено на живых данных: 41 509 руб расхода и 1 884 визита сошлись с файлами. Алертов пока нет, они в спринте качества данных.
feature
Экран проекта: лиды, реклама, трафик, продажи, сегменты
Метрики проекта, график расхода и визитов по дням, таблица кампаний с ценой клика, таблица источников трафика, сделки по стадиям. Где источника нет, стоит плашка с причиной. Сегментов нет: разрез появится вместе с данными, где сегмент вообще есть.
feature
Конструктор воронок и цепочек: выбор сущности, шагов-событий, фильтров, окна атрибуции
Аналог «Цепочек» из Пульса Цен, но на данных Битрикса, Метрики и Директа.
Раздел «Воронки и связки». Шаги набираются из целей Метрики в своём порядке, видно объём шага, долю от прошлого шага и от визитов. На экране сказано, что это объёмы шагов, а не путь одного человека: суточных сумм на пользовательскую воронку не хватает.
Строится на таблице событий, а её нечем наполнить: события приходят из выгрузок продуктов и Метрики, ни того ни другого пока нет. Делать конструктор, который гарантированно покажет пустоту, преждевременно.
feature
Связки: конструктор комбинаций и сравнение между собой
Пользователь: «дать выбор сущности, события, офферы, аудитория и прочее». Значит не фиксированная таблица, а конструктор: набираешь измерения (источник, кампания, креатив, аудитория, оффер, посадочная), сохраняешь как связку, сравниваешь связки.
Связки: любая комбинация измерений (источник, тип трафика, кампания, посадочная) с визитами, отказами, целями, расходом и ценой цели. Расход цепляется по названию и номеру кампании, что не сошлось — отдельной суммой, а не размазано.
Тот же движок, что и конструктор воронок, и та же причина: нет событий.
feature
Каналы: сквозная таблица, сортировка по окупаемости, каналы без бюджета отдельным блоком
Экран каналов: кампании всех проектов в одной таблице с долей бюджета и ценой клика, плюс источники визитов. Окупаемости в разрезе канала пока нет: для неё нужна атрибуция заявки к каналу, а значит сырые визиты с метками.
feature
Атрибуция: первое, последнее, поровну; явная строка «не атрибутировано»
Последний значимый источник работает, расход привязан через кампанию (у бесплатных источников его нет), непривязанное показано отдельной суммой. Первый клик и поровну ждут событий Метрики.
Атрибутировать пока нечего: нет ни событий, ни меток на визитах, ни сделок с источником.
feature
Произвольные разрезы и графики, экспорт таблицы в CSV и экрана в PNG
PNG — чтобы вставлять в отчёт для ГД.
Графики сделаны на своём SVG, без внешней библиотеки: нужны столбцы и линия, а лишние сотни килобайт в сборке ни к чему. Экспорта в CSV и PNG пока нет, вынесен в остаток спринта.
feature
В РАБОТЕS5 · Коннекторы источников5/8

Цель: Данные приезжают сами, руками ничего не грузим.

Битрикс24: входящий вебхук, сделки, стадии и история стадий, воронки, менеджеры
Облако. Тянем обе воронки: лиды и сделки, вместе с историей стадий. Нужны права crm и user. Закрывает только Fit&Lead.
Вебхук подключён (портал crm.maniteka.ru, пользователь 195), права task, tasks, tasks_extended, calendar, crm, user. Задачи импортируются: 68 человек в справочнике, 43 задачи приехали (8 отдела, 35 наследства предшественника), 32 чужих пропущены. На доске бейдж «Битрикс» со ссылкой на оригинал и фильтр по источнику. Осталось: календарь двусторонний и сделки CRM.
feature
Исторические данные: год расхода, визитов, объявлений и креативов
Подвкладка «Исторические данные» на экране проекта: помесячно расход, клики, визиты, лиды и цена лида; кампании за период; объявления с заголовком, текстом, кликами, конверсиями и ценой конверсии; посадочные из ссылок объявлений. Заведены таблицы объявлений и креативов, коннектор тянет AD_PERFORMANCE_REPORT плюс тексты через ads.get. Залито 5 490 строк по дням и 272 креатива, год расхода (Fit&Lead 1 832 995 руб), визиты и цели на всю доступную глубину. Видно главное: цена лида выросла с 1 432 руб в июне до 4 845 руб в августе.
feature
Полная проверка прав, вёрстки и форм перед заводом команды
Три тестовых аккаунта (СММ, реклама, наблюдатель) прогнаны по 21 экрану и по API: матрица доступа сходится, чужое отдаёт 403, без входа 401. Геометрия проверена кодом на 390 и 1440: горизонтальной прокрутки, наездов и битых картинок нет, широкие таблицы прокручиваются внутри себя. 15 проверок форм: всё валидное создаётся, всё кривое отклоняется с 400. Непереведённых надписей и мусора в видимом тексте нет. Тестовые данные удалены.
feature
Метрика Reports API по всем счётчикам
Механика отработана в LeadForge, забрать оттуда.
Работает на живых данных. Три счётчика: 108556065 fit-lead.ru и 110820866 landing1.fitlead.ru к Fit&Lead, 108726796 сммагент.рф к СММ-агенту. Привязка через справочник посадочных: у посадочной стоит номер счётчика, посадочная принадлежит проекту, поэтому данные сразу ложатся в нужный разрез. Тянем визиты, посетителей, новых, отказы, длительность в разрезе типа трафика, метки источника и кампании. Владелец выдал доступ 16.08, право edit (до этого читалось только через публичную статистику). Залито 90 дней: 44 202 визита.
feature
Директ API v5: расход, клики, показы по кампаниям и группам
Забрать из LeadForge: docs/YD-MACHINE.md.
Работает на живых данных. Доступ решён через одобренное приложение LeadForge: владелец один раз разрешил ему работать со своим Директом, код перенесён руками (Redirect у приложения сменить нельзя). Токен на год выдан на logonchek, кабинеты открываются заголовком Client-Login: fitnessaffiliateclub → Fit&Lead, a9ent-smm → СММ-агент. Кабинеты лежат в таблице ad_accounts с привязкой к проекту. За 90 дней приехало 482 строки: 487 851 руб и 265 055 руб, обе сверки сошлись ровно. ГЛАВНАЯ ЛОВУШКА, из-за которой я сначала соврал: отчёт готовится асинхронно и первым ответом отдаёт 201 с пустым телом. Я прочитал только тело и отчитался, что расхода нет ни за 90 дней, ни за два года. Владелец поправил. Теперь ждём именно кода 200 с паузой из заголовка retryIn. Карта фактов в docs/DIRECT.md.
feature
VK Реклама
feature
Данные продуктов: регулярная выгрузка или реплика по СММ-агенту и ИСКРЕ
Договориться с разработчиками продуктов о формате и расписании.
feature
Расписание синхронизаций, лог, кнопка «синхронизировать», алерт «источник молчит»
Кнопка на экране загрузок с выбором глубины, плюс крон на cfru в 9:20 МСК на закрытый секретом эндпоинт. Окно крона 14 дней, а не сутки: Метрика уточняет вчерашние цифры задним числом, и однодневное окно оставило бы их устаревшими навсегда. Алерта «источник молчит» пока нет, он в спринте качества данных.
feature
В РАБОТЕS6 · Качество данных, план и алерты4/5

Цель: Видно, каким числам можно верить, и что от плана отстаёт.

Экран «Качество данных»: статус метрики, источник, владелец, что блокирует
Статусы: автоматически, вручную, нет данных, данные противоречивы.
Таблица по каждому проекту: состояние (считается само, нет данных, по целям а не по сделкам), источник, значение сейчас, значение на старте и свежесть данных в днях. Сверху счётчик «считается само N из M» — это и есть ответ на вопрос, насколько дашборду можно верить.
feature
Baseline на дату выхода и дельта к нему у каждой метрики
Кнопка фиксации по проекту, берутся последние 30 дней. Отсутствие данных тоже фиксируется: «тогда не считалось» это факт. Зафиксировано по Fit&Lead: 44 лида, 232 886 руб расхода, 5 293 руб цена лида, 6 296 визитов.
feature
План месяца: план, факт, прогноз, необходимый темп
Сделано на том же экране рекламы: процент выполнения и темп «успеваем или нет» при текущей скорости.
feature
Движок алертов и лог срабатываний
Пять правил с настраиваемыми порогами: рост цены лида, падение числа лидов, скачок расхода, рост отказов, молчание источника. Сравниваются последние 7 дней с предыдущими 7: недельное окно сглаживает выходные, месячное слишком медленное. Отказы считаются средневзвешенно по визитам, простое среднее по строкам врёт при разном объёме источников. Одно и то же за сутки не дублируется. Прогон идёт ночью после синхронизации и кнопкой вручную. НА ЖИВЫХ ДАННЫХ СРАЗУ СРАБОТАЛО ДВА: по Fit&Lead лидов стало меньше на 54% (13 против 6) и цена лида выросла на 122% (3 148 против 6 993 руб).
feature
Разметка событий: передать спеку разработчикам продуктов и проверить приём
Спека уже написана: events_tracking_spec.md. Пока её не внедрят, воронки продуктов строятся на агрегатах.
task
В РАБОТЕS7 · Соцсети: статистика постфактум7/8

Цель: Охваты, подписчики и вовлечение подтягиваются к опубликованному, КПИ считаются сами.

Сбор показателей соцсетей: подписчики, охваты, вовлечение
Нужно под КПИ вида «столько-то подписчиков».
Раздел «Соцсети» живой. Телеграм собирается без ключей из публичной ленты: подписчики, посты, просмотры, медиа. Ютуб по ключу Data API: подписчики, ролики, просмотры, лайки, комментарии. Залито 139 постов за всю доступную историю, 103 874 просмотра, лучший ролик 42 404. Общие цифры, график подписчиков по дням, таблица постов с фильтрами и сортировкой, карточка поста со встроенным плеером Ютуба и Телеграма, сшивка с контент-планом по ссылке публикации. Крон 6:40 плюс кнопка «Собрать сейчас». Охваты публично не отдаёт ни одна подключённая площадка. ВК ждёт токен, Инстаграм и Тредс — платный скрейпер.
feature
Соцсети: разводная таблица и страница каждой площадки
У площадок разные форматы и метрики, один общий экран показывал самый бедный знаменатель. Разводная: проект, таблица площадок с подписчиками, форматами, просмотрами, реакциями и вовлечённостью, кнопки перехода. Страница площадки: средние, лучшая публикация, график подписчиков, лента публикаций с сортировками и фильтрами.
Проверено на канале CPA-сети за всю историю: 1320 подписчиков, 50 роликов, 93 617 просмотров, 3,11% вовлечённости, средние 1872 просмотра и 58 лайков, средняя длительность 0:48. Ролики Ютуба и посты Телеграма играют прямо в карточке. Убран нечитаемый общий график на девять линий и задвоенная легенда.
feature
Убрать технические тексты из интерфейса
Владелец увидел в проде «нет токена ВК: сервисный ключ приложения» и «открытого API нет, только платный скрейпер». Такие строки видят сммщики, для них это выглядит поломкой.
Переписаны причины недоступности площадок, коды типов кампаний Директа, состояния объявлений, подсказки про Метрику. Журнал сбора с именами источников показывается только владельцу. Правило усилено в памяти до двух красных: запрет на технические тексты в любом интерфейсе, где работают другие люди.
fix
Соцсети по площадкам: цветные плитки и подпункты в меню
Кнопки внизу разводной дублировали каналы: два Телеграма, два Ютуба. Раздел перестроен по площадкам — одна плитка на площадку, конкретный канал выбирается внутри. В меню у «Соцсетей» появились подпункты по площадкам, чтобы не ходить туда-обратно через разводную.
Маршрут сменился с канала на площадку: /social/<площадка> с переключателем «Все каналы / конкретный канал» и подписью канала у каждой публикации в общей ленте. Плитки покрашены фирменными цветами с объёмом (градиент, блик, тень). Подпункты меню строятся по реально заведённым площадкам. Проверено: было 9 кнопок с дублями, стало 7 плиток; Телеграм суммирует два канала — 92 подписчика, 29 публикаций, 477 просмотров. Попутно починена вовлечённость: у Телеграма показывалось 0%, хотя реакций он не отдаёт вовсе — теперь «нет данных».
feature
Инстаграм, Тредс и ТикТок: платный сбор раз в неделю
У трёх площадок нет открытого API. Подключён внешний сбор через Apify на аккаунте владельца, отдельным недельным расписанием, чтобы не платить всемеро за ежедневный прогон.
Замер перед запуском: пять постов Инстаграма 0,0135 USD, около 0,0027 за пост. Полный прогон трёх площадок укладывается в 0,1 USD, за месяц около 0,4 при бесплатном лимите 5. Собрано: Инстаграм 262 подписчика и 30 публикаций с разбивкой на посты, карусели и рилсы, 8662 просмотра; Тредс 19 подписчиков и 4 публикации. ТикТок ждёт ссылку на аккаунт — handle угадать нельзя. Крон в понедельник 7:25. Грабли: maxItems надо ставить с запасом, по достижении лимита прогон обрывается со статусом ABORTED и запрос считается неудачным, хотя данные собраны.
feature
Инстаграм: чинить просмотры, старое поле занижает вдвое
Владелец усомнился в цифрах: 261 просмотр при 42 лайках. В списке публикаций профиля приезжает устаревшее поле videoViewCount, которое Инстаграм больше не поддерживает.
Замер на живом аккаунте: 122 против настоящих 249, 181 против 454, 162 против 409, у одного рилса 13 просмотров при 31 лайке. Просмотры рилсов берутся отдельным прогоном instagram-reel-scraper по полю videoPlayCount, старое поле не используется. Пост из вопроса: было 261, стало 738. Карусели и фото остаются с прочерком: Инстаграм по ним просмотры не раскрывает. Цена сбора Инстаграма выросла до 0,17 USD за прогон.
fix
Еженедельный ИИ-разбор: что изменилось, аномалии, гипотезы
Тот же блок вверху соцсетей, разборы за 10-16 августа написаны. Тексты вручную, по сводке, которую считает код.
feature
Черновик еженедельного отчёта для ГД
feature
готовS8 · Проверки по сроку1/1

Цель: Отложенные проверки, чтобы не забылись.

Проверить, появились ли доступы: Битрикс24, Метрика, Директ
Владелец 14.08: «пока еще ничего но скоро будет». Как появятся — расчехлять спринт 5. Проверка: спросить владельца + попробовать вебхук Битрикса и токен Метрики.
Метрика и Директ работают: три счётчика и два кабинета собираются кроном, залито 2,1 млн рублей расхода и 9,5 тыс визитов за год. Битрикс24 доступа так и нет, вынесен отдельной задачей спринта 5.
check
готовS9 · Отделы, права, справочники проектов7/7

Цель: Права отдел на проект и сущности, без которых разрезы потом слипнутся.

Переделать права на модель отдел × проект
Отделы: СММ и Реклама, плюс руководство (всё). Человек в отделе видит только отмеченные ему проекты. В СММ два человека: у одного два проекта, у другого один, цифры друг друга они видеть не должны.
Отделы: руководство, СММ, реклама. Отдел подставляет набор разделов (аналитика, контент, реклама, задачи), дальше каждый правится галочкой — нестандартный человек заводится без правки кода. Проекты отдельно: «все» или список. Проверено: в СММ человек с одним проектом не видит ни чужих проектов, ни их аккаунтов.
feature
Экран настройки прав: отдел, проекты, разделы, деньги
На /admin/users: отдел кнопками, проекты галочками, четыре раздела галочками, деньги, чужая работа, роль владельца, поле телеграма. Предупреждение, если не отмечен ни один проект. Журнал изменений доступа под списком.
feature
Справочник посадочных страниц проекта
У проекта несколько лендингов: адрес, счётчик Метрики, назначение. Без этого разрезы по посадкам не собрать.
/admin/projects: название, адрес, счётчик Метрики, назначение. Адрес и счётчик валидируются. У проекта их сколько угодно.
feature
Справочник аккаунтов соцсетей проекта
Площадка, проект, каким способом публикуем: агрегатор (инста, фб, тредс и прочее) или ВК прямым API.
Площадка из списка (ВК, телеграм, инста, фб, тредс, ютуб, дзен, другое), название, имя аккаунта. Способ публикации проставляется сам: ВК прямым API, остальное через агрегатор, для неподдерживаемого остаётся ручной режим. На экране контента у СММщика видны площадки только его проектов.
feature
Настройка согласующих по проекту
По умолчанию владелец, но должно настраиваться на других людей.
Кнопки людей на каждом проекте. Никто не отмечен — согласует владелец. Модель ProjectApprover, уникальность по паре проект-человек.
feature
Привязка телеграма к сотруднику под уведомления
Поле telegramChatId есть, заполняется владельцем руками, видно в профиле сотрудника. Рукопожатия с ботом нет: самого бота ещё нет, он появится вместе с уведомлениями о согласовании. Засада на будущее: cfru не ходит в Телеграм напрямую, нужен прокси через aitodo (известно по другим проектам).
feature
Смена своего пароля на выбранный
Долг спринта 1: сейчас пароль только сбрасывается на случайный.
/profile: текущий пароль, новый, повтор. Проверка текущего, минимум 8 символов, запрет совпадения с текущим. Текущая сессия переподписывается и выживает, остальные закрываются. Долг спринта 1 закрыт.
feature
В РАБОТЕS10 · СММ: бренд-кит, контент-план, генерация13/14

Цель: СММщик генерит руками, дашборд помогает пресетами и бренд-китом. Видео и ИИ-аватаров нет.

Взять из Контент Завода точечно: клиент Kie, учёт стоимости, публикацию
Архитектуру пайплайнов Завода НЕ тащить: там конвейер под автогенерацию, а здесь человек генерит руками. Берём только рабочие куски: клиент Kie, подсчёт стоимости, публикацию в соцсети.
Сверено по коду Навесов. Взят клиент Kie (createTask плюс recordInfo, модели gpt-image-2 и nano-banana-2-lite, баланс в кредитах) и принцип «честный расход это разница балансов». Конвейеры, видео, аватары и озвучка не взяты. Публикация переносится в спринт согласования. Выводы записаны в docs/SMM.md вместе с граблями: образец это другой слаг, поле input_urls, разрешение задавать всегда.
task
Заливка контент-плана из другого инструмента
Excel и CSV: дата, тема, текст, описание, рубрика, площадка, ссылка, статус, формат, автор. Колонки распознаются по названиям, отчёт показывает разобранное и пропущенное.
Идемпотентно по importRef: повторная заливка того же файла обновляет материалы, а не удваивает план. Своего id в выгрузке может не быть, тогда ключом служит хеш темы, даты и площадки. Рубрики заводятся на лету. Картинки так не переносятся: свои файлы прикладывают в карточке, обложки вышедших постов приходят со статистикой площадок. Ждёт реальную выгрузку владельца, чтобы сверить подписи колонок.
feature
Банк референсов в медиатеке
Медиатека наполняется вышедшими публикациями из Телеграма, Ютуба, Инстаграма, ТикТока и Тредса с их цифрами. По любой можно завести новый материал кнопкой «Взять за основу».
Собирается само из статистики соцсетей, заводить руками ничего не надо: на экране 60 карточек с обложками, форматом, просмотрами, лайками и вовлечённостью. Сортировка по умолчанию по просмотрам — вопрос почти всегда «что зашло», есть фильтры по площадке и формату и поиск по тексту. «Взять за основу» создаёт материал с тем же текстом и подписью, откуда он взят и сколько собрал; проверено на живых данных, материал появился и был удалён. Обложки идут через свой прокси, иначе часть чужих CDN в браузере не грузится.
feature
Раздел «Планы на обсуждение» и план по Инстаграму
Страница плана в контенте: цель 18 000 подписчиков, разворот в сторону сообщества ЗОЖ, обратная воронка с тремя источниками и три сценария бюджета.
План перестроен под контент-стратегию v2: цель 12 000 подписчиков суммарно по Телеграму, ВК и Инстаграму за 18 месяцев, не меньше 80% целевой аудитории. Добавлены коридор этапов по месяцам с подсветкой «мы здесь», 12 рубрик, контент-формула 50/30/20, частота по каналам, KPI воронки в продукты. В расчёте появился отдельный ввод прироста Телеграма и ВК.
feature
Бренд-кит проекта: брендбук, референсы, палитра, тон, запреты
Материалы владелец загрузит позже. Подмешивается в промпты автоматически, иначе стилистика трёх проектов разъедется.
Тон, аудитория, стиль картинок, палитра, шрифты, запреты. Плюс загрузка файлов (брендбук, референс, логотип) до 25 МБ в том, отдача своим маршрутом под авторизацией. В промпт подмешивается только по галочке.
feature
Контент-план и рубрикатор с долями
Чтобы не вышло тридцать продающих постов подряд.
Рубрики с целевой долей. На экране плана считается фактическая доля каждой рубрики за месяц и подсвечивается расхождение с планом больше 15 пунктов.
feature
Календарь публикаций: месяц и неделя, слоты, конфликты
Месячная сетка с понедельника, материалы в днях, переключение месяцев. Времени слота и проверки конфликтов нет: это осмысленно вместе с публикацией, записано в SCOPE-CUTS.
feature
Ввод плана человеком: пачкой и по одному
По одному с рубрикой и датой; пачкой — каждая строка отдельной идеей, до 200 за раз. Идеи без даты лежат отдельной очередью, дата назначается прямо оттуда.
feature
ИИ-агент составления контент-плана по бренд-киту
Вспомогательный сценарий: либо собирает план сам, либо ждёт, пока человек распишет. Основной режим всё равно ручной.
Требует ключа текстовой модели, которого пока нет, и не является основным режимом: человек всё равно расписывает план сам. Вернуться, когда ключи появятся.
feature
Генерация картинок и каруселей: промпт человека уходит почти как есть
СММщик пишет промпт сам. Пресеты и бренд-кит подмешиваются по галочке, а не насильно. Перед отправкой показываем итоговый промпт и цену. Видео и ИИ-аватаров нет вообще.
Промпт не оборачивается. Пресет и бренд-кит подмешиваются только по галочке. Перед запуском показывается итоговый текст целиком и цена, кнопка называет сумму. Модель, пропорции и разрешение выбираются. Карусель пока это несколько отдельных картинок.
feature
Медиатека проекта с поиском и повторным использованием
Иначе за одну и ту же картинку платим дважды.
Все готовые генерации проекта с поиском по промпту и тексту, фильтром по типу и суммой потраченного. Картинки скачиваются к нам сразу: ссылки провайдера живут недолго.
feature
Учёт стоимости генерации: лимиты на проект и человека, цена до запуска
Месячные потолки заданы владельцем. Гейт на трату должен жить в интерфейсе, а не в голове.
Месячный потолок на проект и необязательный лимит на человека, ставит владелец. Превышение это отказ, а не предупреждение. Без заданного потолка генерация заблокирована вообще. Расход пишется по факту: по разнице балансов, если задана стоимость кредита, иначе оценка по прайсу с пометкой. Провалившаяся генерация бюджет не ест.
feature
Пресеты промптов: общие и личные, с быстрой подстановкой
То, ради чего вся помощь: человек не пишет с нуля каждый раз, а берёт заготовку и правит.
Сохранение текущего промпта в пресет, личный или общий на проект. Подстановка в поле одним кликом. Свой пресет удаляет автор, общий — владелец.
feature
Тексты: посты, описания к роликам, сценарии
Отдельно от картинок. Видео не генерим, но сценарий и описание к своему ролику человек пишет с помощью.
Отдельный режим на том же экране, через OpenRouter, прямые ключи провайдеров не используются. Учтено, что с cfru OpenRouter напрямую не открывается: запрос идёт через прокси.
feature
В РАБОТЕS11 · СММ: согласование8/10

Цель: Идея проходит согласование внутри дашборда, без переписки в мессенджере.

Канбан согласования: настраиваемые колонки и точки согласования
Колонки настраиваются по проекту, у колонки флаг «требует согласования». Материал, не требующий согласования, двигается мимо этих точек.
Колонки хранятся по проекту, у колонки флаг «требует согласования» и флаг финальной. Пока проект не настроен, работает набор по умолчанию: идея, черновик, на согласовании, согласовано, к публикации. Материал двигается перетаскиванием. Колонку, в которой лежат материалы, убрать нельзя: API откажет, чтобы карточки не повисли в никуда.
feature
Полная карточка материала: поля слева, превью справа
Модалка поверх доски и плана. Слева тема, описание, текст со счётчиком символов по самой строгой площадке, рубрика, формат, дата и время, каналы, исполнитель, стадия, ссылка на вышедший пост. Справа телефон: карусель со стрелками, видео с воспроизведением и перемоткой, текст под медиа. Файлы пачкой, порядок, обложка.
Сделано и проверено на сервере: заведение, правка полей, заливка трёх файлов, отдача с Range 206, перестановка порядка, обложка на карточке доски, удаление. Видео отдаётся кусками, иначе перемотка в плеере не работает. Порядок файлов меняется стрелками: drag-and-drop конфликтует с перетаскиванием карточек по колонкам и не работает на телефоне.
feature
🔴 Контроль выхода публикаций: вышло или нет в срок
Контент-план на месяц. Дашборд сверяет, вышел ли пост в назначенную дату: по собранной статистике площадки ищем публикацию рядом с плановой датой. Не вышло — уведомление владельцу.
checkPublications сверяет материалы со стадией «согласовано» и «запланировано», у которых срок прошёл больше шести часов назад, с собранной статистикой площадок: окно ±18 часов. Нашли — стадия «опубликовано» и сшивка поста с материалом, не нашли — в список пропущенных. На первом прогоне подтянуло 19 материалов, которые вышли, но висели «запланированы».
feature
Уведомление о пропущенной публикации
Если в плановую дату публикации нет, приходит уведомление в дашборд: какой материал, какой канал, на сколько просрочен.
Одно уведомление на материал, а не на каждый прогон. Летит владельцам и ответственному за материал, со ссылкой на карточку, каналами и числом просроченных часов. Проверка идёт следом за ночным сбором соцсетей.
feature
Уведомления внутри дашборда: пришло на согласование, есть правки
Бот не нужен: человек и так работает в дашборде. Счётчик «ждут вас» в меню, список уведомлений, отметка о прочтении. Заодно отпадает прокси: cfru в телеграм напрямую не ходит, а теперь и не надо.
Счётчик непрочитанных в меню, отдельная страница со списком, отметка о прочтении поштучно и разом. Уведомления шлются согласующим при отправке и автору при согласовании и правках. Бот не нужен, вместе с ним отпал и прокси.
feature
Версии и правки: видно, что изменилось между версиями
Иначе согласование превращается в переписку.
Перед каждой правкой сохраняется снимок того, что было, с автором и временем. В карточке разворачивается история. Построчной подсветки отличий нет, записано в SCOPE-CUTS.
feature
Кнопка генерации прямо из карточки материала
Генерация доступна и из отдельного раздела, и из карточки на доске. Кнопка публикации появится вместе со спринтом публикации.
Из карточки на доске переход в генерацию по этому же проекту.
feature
Проверки перед публикацией: длина, размеры, запрещённые формулировки
Уезжает в спринт публикации: проверять длину под площадку осмысленно вместе с самой отправкой.
feature
UTM на ссылки автоматом
Иначе трафик из соцсетей падает в «не атрибутировано» и сквозная картинка теряет смысл.
Уезжает в спринт публикации по той же причине: метки нужны в момент сборки отправки.
feature
Согласование с телефона
Владелец будет чекать в дороге.
Доска и карточка работают на узком экране, колонки ужимаются, карточка разворачивается во всю ширину.
feature
В РАБОТЕS12 · Директ: план, факт, отклонения, ИИ-разбор11/12

Цель: Видно, где реклама отходит от нормы, и почему.

Планы по проектам: стоимость лида, лиды, квал-лиды
Ввод руками помесячно плюс загрузка excel-файла.
План на месяц по лидам, цене лида, расходу и выручке, вводится прямо в таблице. Ставит владелец: план, который правит исполнитель, это не план.
feature
Раздел «Реклама»: кампании, группы, креативы, фильтры
Вкладки Обзор / Директ / План / Алерты. Кампании за период с расходом, показами, кликами, CTR, ценой клика, CPM, конверсиями, ценой цели и отказами; поиск, фильтры по проекту и типу, сортировка по любому столбцу, итоги. Провал в кампанию: группы, объявления, тексты.
Залито и проверено на живых данных: 2 118 213 ₽ за год, 86 кампаний, 54 группы, 276 объявлений. Коннектор расширен типом кампании, конверсиями, отказами и глубиной; нули из метрик Метрики пишутся как «не знаем». Найден и починен баг: id объявлений Мастера кампаний длиннее 2^53, Number() их округлял, тексты не приезжали вовсе без ошибки в логе.
feature
Свои пороги алертов по проектам
Общий порог годится не всем: у одного проекта лид по 300 ₽, у другого по 5 000. Выбор проекта, правила и своего числа, которое перебивает общий порог.
Модель порогов уже поддерживала разрез по проекту, не хватало интерфейса и удаления. Добавлены список своих порогов, форма добавления и кнопка «Убрать». Настраивает только владелец.
feature
Директ: состояния кампаний и фильтр по ним
Половина кабинета стоит на паузе, а таблица показывала только тех, кто тратил. Добавлен справочник кампаний с состоянием из кабинета и переключатель «работали за период / работают сейчас / не работают / все кампании».
Собрано 42 кампании: 3 работают, 7 выключены, 32 в архиве. Грабли: Мастер кампаний метод campaigns.get не возвращает вовсе — по id, у которого в отчёте 48 945 рублей расхода за месяц, приходит пустой список, явное перечисление всех типов не помогает. Для таких кампаний состояние выводится из расхода («тратит сейчас», «не тратит 3 дн.») и подписано как допущение, чтобы не путать с настоящим состоянием из кабинета.
feature
План рекламы: прогноз на конец месяца
К плану и факту добавлены выполнение в процентах, прогнозируемое число на конец месяца и прогноз к плану в процентах.
Копящиеся показатели (расход, лиды, выручка) экстраполируются по пройденной доле месяца, отношения вроде цены лида — нет: она к концу месяца не вырастет вчетверо оттого, что прошла неделя. Цвет прогноза считается по направлению показателя: для цены лида уложиться значит быть ниже плана.
feature
Провал в кампанию: фразы, поисковые запросы, разметка ссылок
Кабинет директолога: из кампании видно, на что ушли деньги — фразы и автотаргетинг, реальные поисковые запросы, куда ведут объявления и с какой разметкой.
Собрано по шести кампаниям: 92 фразы и 11 426 поисковых запросов с кликом или расходом. Топ-запрос «генератор картинок» — 120 кликов и 1126 рублей. Показов без кликов не храним, их десятки тысяч и в таблице от них шум. Сбор кнопкой, не ночью: на каждую кампанию два отчёта. Ссылки объявлений размечены не utm, а cm_id Яндекса — подписано отдельно, чтобы не выглядело как «меток нет».
feature
🔴 Разбор рекламы: две недели, четыре месяца, разрезы кабинета
Экран /ads/analysis: почему стало хуже. Сравнение двух недель, четыре месяца помесячно, дни, воронка денег, разрезы Директа и находки, считаемые кодом.
Экран /ads/analysis: три окна (3 недели, 30 дней, 4 месяца) со сравнением равных отрезков и пометкой про дни простоя; заявки, визиты и цена заявки в каждом разрезе (данные Метрики склеены с деньгами Директа по ключу); история изменений — восемь недель в цифрах плюс лента событий кабинета, восстановленная по дневному расходу. PDF-отчёт на 8 страниц собран и лежит у владельца.
feature
Сквозная связка Директ → Метрика → Битрикс по метке
Сделки CRM приезжают в дашборд: 1021 запись со стадиями по справочнику каждой воронки, менеджером, признаками выиграна и провалена, ссылкой на лид и метками. Блок «Путь заявки» на экране лидов сшивает источник, заявку, сделку и деньги.
feature
Факт против плана по каждому показателю
Таблица план-факт по каждому проекту с процентом выполнения и темпом. Для метрик «меньше лучше» выполнение считается наоборот: уложиться в план по цене лида значит быть НИЖЕ него. Темп учитывает, сколько месяца прошло.
feature
Подсветка отклонений от нормы
Колонка «Отклонение» в плане рекламы: насколько прогноз хуже плана, перевыполнение отклонением не считается. Порог берётся из настроек оповещений проекта, за порогом красным. То же отклонение приходит оповещением, правило «План месяца под угрозой».
feature
Еженедельный ИИ-разбор с предложениями
Все цифры считает код, ИИ только объясняет и предлагает. Иначе начнёт выдумывать числа.
Блок «ИИ аналитика» вверху рекламы. Владелец решил: тексты пишутся вручную, платных вызовов из дашборда нет. Сводка за неделю отдаётся готовой, текст кладётся обратно, разбор за неделю один. Разборы за 10-16 августа написаны по всем трём проектам.
feature
История разборов и сверка прогноза с фактом
История разборов открывается из блока, вместе с текстом хранится сводка на момент написания. Сверка прогноза с фактом появится, когда накопится четыре недели.
feature
В РАБОТЕS13 · Директ: управление рекламой1/5

Цель: Заложено сейчас, реализуем позже: не только смотреть, но и вести.

Создание кампаний: поиск и РСЯ
Заложить архитектурно, реализация позже.
feature
Управление кампаниями из дашборда: запуск и остановка
Кнопка «Остановить» и «Запустить» прямо в таблице кампаний, формулировки состояний как в кабинете Директа.
Закрыто разделом рекламы, доступом к проекту, подтверждением в интерфейсе и записью в журнал: вопрос «кто остановил кампанию» однажды точно зададут. Проверено на уже остановленной кампании — Директ ответил своей ошибкой про черновик, путь рабочий, живого при проверке не трогали. Мастером кампаний управлять нельзя: Директ не отдаёт их в справочнике, у таких строк вместо кнопки прочерк с пояснением.
feature
Креативы по референсу и брендбуку
Заложить архитектурно, реализация позже.
feature
Ведение рекламы ИИ: ставки, минус-слова, отключение слабого
Заложить архитектурно, реализация позже.
feature
Гейт на трату: подтверждение перед запуском и изменением бюджета
Ни одна операция с рекламным бюджетом не уходит без явного подтверждения.
feature
планS14 · СММ: публикация0/3

Цель: Отправка в соцсети. Пишется кодом, включается и проверяется отдельным решением владельца.

Публикация: агрегатор для инсты, фб, тредс; ВК прямым API
Пишется кодом без включения. Ни одной живой отправки до отдельного решения владельца.
feature
Журнал публикаций: ошибки и повтор
Пишется кодом без включения. Ни одной живой отправки до отдельного решения владельца.
feature
Предпросмотр отправки без отправки
Собрать полезную нагрузку и показать её человеку, ничего не отправляя. Так проверяется правильность сборки без единой живой публикации.
feature
готовS15 · Доступы: пароли, логины, права3/3

Цель: Свести доступы всех сервисов в одно место с правами по людям

🔴 Хранилище доступов: сервис, логин, пароль, откуда и у кого
Сейчас пароли разбросаны по файлам и людям. Нужен один раздел: сервис, ссылка на вход, логин, пароль, кому выдан, кто владелец, когда менялся. Пароли шифруются ключом из окружения, в базе не лежат открытым текстом.
Раздел Доступы: сервис, ссылка, логин, пароль, второй фактор, проект, заметка. Пароль шифруется AES-256-GCM ключом из окружения, в базе только шифротекст. В списке пароля нет, приходит отдельным запросом и прячется через 30 секунд.
feature
Права на доступы: кто какие видит
Доступ к записи выдаётся поимённо: рекламщик видит рекламные кабинеты, сммщик соцсети, владелец всё. Открытие пароля пишется в журнал: кто и когда смотрел.
Руководитель видит все записи и заводит новые; сотрудник видит только то, где он владелец или в списке кому выдано. Правит запись владелец записи или руководитель.
feature
Журнал выдачи и отзыва доступов
Человек ушёл — видно, какие пароли надо сменить. Список «что сменить при увольнении» собирается сам по тому, кому что было выдано.
Каждый показ пароля пишется в журнал, в карточке видно кто и когда открывал последним. По уходящему человеку собирается список что менять: выдано, владел, открывал.
feature
В РАБОТЕS16 · Календарь отдела и встречи2/3

Цель: Общий календарь задач, дедлайнов и встреч с приглашениями

🔴 Общий календарь: задачи, дедлайны, встречи в одном месте
Месяц, неделя, день. Видно, у кого какие задачи и дедлайны, с фильтром по человеку и проекту. Календарь задач уже есть, нужен слой встреч и общий вид по отделу.
В календаре рядом со сроками задач и слотами контент-плана встали встречи из Битрикса, обход каждые 15 минут. Закрытые встречи коллег показаны как занятость без названия, по умолчанию скрыты.
feature
Встречи с приглашениями: принять, отклонить, предложить другое время
Ставим встречу человеку, ему приходит уведомление. Он принимает — встреча встаёт в его календарь с участниками. Отклоняет или предлагает другое время — организатору приходит ответ. Нужны статусы участника и лента ответов.
Блок приглашений над сеткой: Принять и Отклонить уходят в Битрикс. Предложить другое время в Битриксе не предусмотрено, поэтому предложение живёт в дашборде и приходит организатору уведомлением; если его в дашборде нет, экран честно об этом пишет.
feature
Занятость: не ставить встречу на занятое время
При выборе времени показывать, кто в это время занят другой встречей или у кого дедлайн.
Занятость коллег в календаре уже видна. Проверять её при постановке встречи нечем: встречи из дашборда не создаются, кнопку не делали — приглашение уходит живым людям, нужно решение владельца.
feature
В РАБОТЕS17 · Направления отдела: СЕО и квалификация лидов2/3

Цель: Два новых направления в структуре дашборда

🔴 Направление СЕО: раздел и метрики по трём проектам
В отделе появляется СЕО по трём проектам. Нужен раздел с позициями, трафиком из поиска, страницами и задачами. Источники: Метрика по поисковому трафику, дальше вебмастер.
Раздел SEO с тремя проектами уже есть, отдел SEO заведён. Метрик позиций и показов нет: нужен токен Вебмастера, право hostinfo не входит ни в токен Метрики, ни в токен Директа. Коннектор написан и ждёт WEBMASTER_TOKEN.
feature
🔴 Направление «Квалификация и холодные лиды»
Новый человек квалифицирует лидов и работает в холодную по одному проекту. Нужен экран: очередь лидов, статус квалификации, причина отказа, следующий шаг, план по касаниям.
Экран /leads на лидах CRM: пришло, качественных, мусор, ждут разбора; доля качества от решённых, а не от всех. Разрезы по источникам, направлениям, ответственным, кампаниям. Отдельно реклама: заявок 69 за 30 дней, качественных 5, качественная заявка 41 649 руб. Плюс зависшие дольше суток и холодная база.
feature
Права и роли под новую структуру отдела
Четыре направления: реклама (2 проекта), СЕО (3), квалификация (1), соцсети (3). Проверить, что двумерные права это покрывают, добавить недостающие разделы.
Добавлен раздел прав «Лиды и квалификация» и отделы SEO и Квалификация лидов со своими наборами разделов по умолчанию. Права остались двумерными: разделы плюс список проектов.
feature

Ворклог (места остановки)

28.08.2026, 05:53:27 · инфраструктура · claude

Дашборд переехал на https://marketing.fit-lead.ru. Домен уже вёл на наш сервер, добавил отдельный блок nginx с проксированием на 127.0.0.1:3190, сертификат Let's Encrypt с автопродлением, http уводит на https редиректом. Блок отвечает только на своё имя, поэтому остальные проекты сервера продолжают открываться по IP с портом — проверил atlas, 24contentzavod, myvisionagency и порты 3061, 3080, 3170. В конфиге подняты лимит тела запроса до 200 мегабайт (медиатека грузит видео) и таймаут до 300 секунд (обмены с Битриксом идут дольше минуты), плюс заголовок noindex: рабочему инструменту отдела в поиске делать нечего.

Порт 3190 оставлен открытым как запасной вход, кука сессии пока без флага Secure — иначе вход по голому IP сломается. Когда все перейдут на домен: поставить COOKIE_SECURE=1, перезапустить приложение и закрыть 3190 снаружи. Записано в docs/DEPLOY.md.

27.08.2026, 12:59:13 · аналитика · claude

Починил стоимость лида: делила рекламный расход на ВСЕ заявки CRM подряд, включая 1541 регистрацию блогеров в личном кабинете и то, что менеджеры нашли руками — выходило 326 руб вместо настоящих 3071. Теперь знаменатель только заявки с рекламной меткой, рядом стоит стоимость качественной заявки (43610 руб). Заодно починил конверсию качественной в сделку: делила все сделки месяца на качественные заявки и давала 192 процента, теперь считает только сделки, выросшие из заявок этого месяца. Собрал раздел аналитики из четырёх экранов: Показатели (13 плиток с планом, отклонением и трендом за 12 месяцев, плюс те же цифры графиками и таблицей с выгрузкой в Excel), Сквозная воронка (визиты-заявки-качественные-сделки-выиграно-деньги с разрезом по направлениям), Каналы (заявки, качество, сделки, расход, цена заявки, деньги, провал внутрь канала), Планы на год (показатель на месяц, пустая клетка это отсутствие плана, кнопка размножить). Узнаваемость бренда снимается Вордстатом по токену Директа, Вебмастер для этого не нужен: недельный крон, Fit&Lead 969 показов в месяц, СММ-агент 168.

Правда по данным за 90 дней: реклама 470210 руб, 335 заявок, 10 качественных (3 процента), 10 сделок, ноль выигранных. Самостоятельный поиск менеджеров 222 заявки, 14 качественных, 4 выигранные сделки. Телеграм даёт лучшее качество: 65 заявок, 13 качественных, 20 процентов. Осталось за владельцем: заполнить планы на год на новом экране и поправить фразы бренда (fit lead ловит небрендовые английские запросы). Не собирается: выручка помесячно и LTV, сумма стоит у 53 сделок из 1021.

27.08.2026, 12:06:31 · 12 · claude

Починил счёт лидов: метрика складывала достижения ВСЕХ целей Метрики, хотя подпись обещала только отмеченные как лид. За 30 дней выходило 19833 «лида» при 45 отправленных формах — туда попадали просмотры страниц (Главная 1418, Рекламодателям 1199) и задвоенная автоцель перехода в мессенджер. Ошибка тянула стоимость лида, конверсию визит-заявка и план против факта. Теперь по проектам с CRM считаются заявки CRM, по остальным — только отмеченные цели; заявки CRM привязаны к проекту, чтобы не попадать в цифры соседей. Плюс подключил сделки: 1021 сделка со стадиями, воронками, менеджером и признаком успеха, и блок «Путь заявки» — источник, заявка, сделка, выиграно, деньги, сшивка по ссылке на лид.

Правда по данным за 90 дней: реклама 470210 руб расхода, 337 заявок, 10 качественных, 10 сделок, ноль выигранных. Самостоятельный поиск менеджеров: 223 заявки, 16 качественных, 4 выигранные сделки. Сумма заполнена только у 53 сделок из 1021 — выручку по источникам считать не на чем, чинится в CRM. Органику от прямых заходов не отделить: нужна связка по идентификатору посетителя Метрики.

27.08.2026, 11:41:38 · навигация · claude

Подразделы вернулись из полосы над содержимым в боковое меню, но раскрыт всегда ровно один раздел — тот, где человек находится; при переходе в другой прежний схлопывается сам. Стрелка справа раскрывает соседний раздел, не уводя со страницы. Раскрытие считается по адресу на сервере, поэтому меню приходит сразу в правильном виде. Компонент SectionTabs удалён, вставки убраны с 25 страниц, списки подразделов остались в lib/nav.ts.

Проверено: 16 страниц отдают 200, на /content раскрыт Контент, на /tasks — Работа, остальные свёрнуты. В логе срезанных углов: раскрытый вручную соседний раздел не переживает переход, возврат в раздел открывает его главный экран.

27.08.2026, 11:23:58 · навигация · claude

Перестроил навигацию. Меню было 9 групп и около 30 ссылок, стало 7 пунктов: подразделы ушли вкладками внутрь страниц, списки вкладок собраны в lib/nav.ts. Проект выбирался четырьмя способами (адрес /p/код и /seo/код, выпадающий список на пяти экранах контента и в воронках, фильтр на доске задач, жёстко зашитый код в разборе рекламы и лидах) — теперь один сквозной переключатель над меню, cookie на год, всегда сверяется с правами. «Все проекты» складывает цифры; где сумма бессмысленна (контент, бренд-кит, воронка, разбор рекламы, лиды) экран берёт первый доступный и пишет об этом подписью. Экран проекта и SEO-проекта вынесены в components/screens, старые адреса продолжают работать. Проверено: 28 страниц отдают 200 в обоих режимах, меню ровно 7 пунктов, подпись появляется только при «всех проектах».

Не сделано осознанно: выбором проекта нельзя поделиться ссылкой (он в cookie), вкладки не помнят последнюю открытую. Записано в SCOPE-CUTS-LOG. Дальше по очереди: сшивка лида со сделкой в CRM и экран под нового человека на квалификации.

27.08.2026, 02:02:56 · 17 · claude

Раздел «Лиды и квалификация»: лиды CRM Битрикса приезжают в дашборд каждые 15 минут (первый обход 4192 лида за полгода, дальше только изменённые по метке времени). Экран считает долю качества от решённых, разрезы по источникам, направлениям, ответственным и кампаниям рекламы, отдельно стоимость качественной заявки, список зависших дольше суток и холодная база. Заведены отделы SEO и Квалификация лидов с наборами разделов по умолчанию.

Главное из данных: заявки с рекламы 69 за 30 дней, качественных 5, качественная стоила 41 649 руб. Метки кампаний приезжают шаблоном ({reklamodatel}, {campaign_id}) — пока не починят в рекламе, расход по кампаниям не разложить. Дальше: сшивка лида со сделкой (15 воронок в портале) и отдельный экран под нового человека, когда выйдет.

26.08.2026, 11:25:29 · 15-16 · claude

Хранилище доступов: шифрование AES-256-GCM ключом из окружения, показ пароля отдельным запросом с журналом и автоскрытием через 30 секунд, права по людям, сборка списка что менять при уходе человека. Календарь: встречи из Битрикса рядом со сроками задач и слотами контент-плана, занятость коллег отдельным тумблером, блок приглашений с ответом в Битрикс и внутренним предложением времени. Заодно причесали системные чекбоксы и выпадающие списки во всём дашборде.

Спринт 17: направления отдела и экран квалификации лидов. В Битриксе доступна CRM: 8929 лидов и 1438 сделок, надо решить с владельцем что из этого тянуть и как размечать по проектам.

26.08.2026, 09:49:16 · Задачи и контент · claude

Пошёл по очереди задач. Битрикс: импорт поставлен на расписание каждые 15 минут плюс кнопка «Обновить из Битрикса» у владельца на доске. Выгрузка задач в Excel теперь уносит фильтры доски (проект, ответственный, источник, статусы) и подписывает условия отбора первой строкой файла. Сделан контроль выхода публикаций: сверка плана с собранной статистикой площадок, окно ±18 часов, стадия подтягивается сама, пропущенные попадают в список на контент-плане и в уведомления. На первом прогоне выяснилось, что 19 материалов давно вышли, но висели в статусе «запланировано».

Следующее по очереди: хранилище доступов (спринт 15) и календарь встреч с приглашениями (спринт 16, лучше вместе с двусторонним календарём Битрикса). Владельцу: добавить скоуп sonet_group, чтобы вместо «группа 18» было название, и разобрать 35 задач наследства предшественника.

26.08.2026, 09:21:16 · Коннекторы источников · claude

Подключил Битрикс24 через входящий вебхук. Разобрались с правами: методам tasks.task.* нужен именно скоуп task, а не tasks — по нему всё отбивалось. Собрал коннектор: справочник людей (68 человек) с раскладкой по корзинам «мой отдел», «наследство», «чужие»; импорт незакрытых задач в одну сторону с источником, ссылкой на оригинал и чужим статусом словами. Приехало 43 задачи: 8 у отдела (Шамрай, Уланов, Трапезников), 35 наследства от предшественника Шатрова, 32 чужих пропущено. На доске задач бейдж «Битрикс», ссылка на оригинал и фильтр по источнику, наследство по умолчанию скрыто.

Календарь: события читаются (личный календарь 126), нужен двусторонний синк и слой встреч с приглашениями. CRM открыта, сделки пока не тянем. Разобрать 35 задач наследства: что забрать, что закрыть. Добавить скоуп sonet_group, чтобы видеть названия групп вместо номеров.

26.08.2026, 08:32:52 · Планирование · claude

Свёл остаток задач по роадмапу и завёл новые направления от владельца: хранилище доступов с правами и журналом, общий календарь отдела со встречами и приглашениями, направления СЕО и квалификации лидов, фильтры в выгрузке задач, контроль выхода публикаций по контент-плану с уведомлением о пропуске. Три новых спринта: 15 доступы, 16 календарь и встречи, 17 направления отдела. Всего 12 новых задач.

Владельцу выбрать, с чего начинаем: доступы, календарь встреч или контроль публикаций. По СЕО нужно понимать источник данных: Метрика по поиску есть, Вебмастер нет. По квалификации лидов нужен источник самих лидов: Битрикс или формы.

19.08.2026, 12:16:46 · Реклама · claude

Доточил разбор рекламы по замечаниям владельца. Во все разрезы добавлены визиты, заявки и цена заявки: Метрика тянется теми же разрезами (устройства, пол-возраст, гео, площадка Директа, тип площадки, тип условия показа) и склеивается с деньгами кабинета по ключу. Ответ на вопрос про Smart TV: 475 «конверсий» кабинета при 133 визитах и нуле форм — конверсий больше, чем визитов. Добавлено окно «3 недели» и история изменений: восемь недель в цифрах и лента событий, восстановленная по дневному расходу. Убрал ошибочную рекомендацию проверять формы на fit-lead.ru: формы работают, причина в том, что поисковый трафик схлопнулся в 22 раза, а сеть заявок не даёт.

Ключевое к решению: доля сети выросла с 24% до 47% бюджета за три недели, приложения съели 24% бюджета и дали одну заявку, Едадил 11 620 ₽ и ноль заявок. Владельцу: срезать сеть, запретить приложения, переключить цель оптимизации на формы, вернуть объём на поиск.

19.08.2026, 11:21:27 · Реклама · claude

Разобрал рекламу Fit&Lead по всем доступным данным и собрал экран «Разбор» в блоке рекламы. Главные находки: реклама простояла 26 дней с 24 июня по 19 июля; после паузы кампании не возобновили, а скопировали (три пары дублей на 453 606 ₽); кабинет считает конверсиями не заявки (692 против 25 форм в августе, Smart TV даёт 95% «конверсии»); 33% сетевого бюджета уходит в мобильные приложения (48 755 ₽ на 715 приложениях); автотаргетинг тратит 88% бюджета; конверсия основного сайта упала с 5,06% в мае до 0,35% в августе, форма «Реклы» дала 1 заявку против 161 в мае. Две недели к двум: расход −44%, клики −61%, цена клика +45%, визиты −59%, заявки 16 против 28. Отдельно выяснил, что реклама ведёт на landing1, а не landing2, и что на landing2 стоит тот же счётчик 110820866.

Владельцу: проверить формы на fit-lead.ru, переключить цель оптимизации МК с URL-целей на формы, запретить мобильные приложения в сети, убрать дубли кампаний, решить по недокормленной автостратегии (2 000 ₽ за заявку при 5 заявках в неделю). После правок вернуться через неделю и сверить цену заявки.

19.08.2026, 05:00:55 · СММ-станция · claude

Изучил контент-стратегию Fit&Lead v2 и перестроил под неё план. Главное расхождение: цель 12 000 подписчиков в стратегии суммарная по Телеграму, ВК и Инстаграму за 18 месяцев, а план был по одному Инстаграму на 12 месяцев. Теперь стартовая точка это сумма трёх каналов (354 на 19.08: Инстаграм 262, Телеграм 76 и 16, по ВК цифр нет), в расчёте отдельный ввод прироста Телеграма и ВК. Добавлены коридор из раздела 11 с подсветкой месяца, где мы стоим по факту (второй), три круга аудитории, контент-формула 50/30/20, 12 рубрик с форматами и частота постинга, KPI воронки в продукты по этапам. Мои выдуманные рубрики убраны.

Решения владельца: считаем месяцы с начала работы по стратегии или с сегодня; кто ведёт ТГ и ВК на частоте 4-6 и 3-5 постов в неделю; кто и как замеряет долю целевой аудитории (стратегия просит выборку 200 профилей на канал в квартал, дашборд этого не умеет). По ВК до сих пор нет цифр: нужен токен.

18.08.2026, 15:28:28 · СММ-станция · claude

Сделал раздел «Планы на обсуждение» и первый план: 18 000 подписчиков в Инстаграме с разворотом аккаунта в сторону сообщества ЗОЖ. Изучил лендинг landing2 и цифры аккаунта: медиана ролика 848 просмотров, три ролика по 50-62 тысячи с реакцией 0,1%, охваты после 5 июля упали до 250-850. Обратная воронка считает контент, рекламу и размещения у авторов раздельно; цена подписчика в рекламе задаётся в долларах с курсом, по каждому источнику видно подписчиков и деньги. Три сценария: только контент даёт 3 919 за год (22% цели), контент плюс реклама по 0,40 доллара за подписчика — 563 400 ₽ за год.

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

18.08.2026, 14:27:56 · Аналитика и разбор недели · claude

Владелец решил не использовать платные вызовы модели: разбор недели пишу я по сводке, которую считает дашборд. Убрал кнопку сборки и платный маршрут, оставил два действия: забрать сводку и положить текст. Написал шесть разборов за 10-16 августа: реклама и соцсети по трём проектам. По воронкам починил три вещи по скриншотам: названия типов трафика теперь русские и «Direct traffic» слился с «прямыми заходами»; выбранные шаги стоят по порядку; атрибуция больше не размазывает расход по доле целей (инстаграму приписывалось десять тысяч рекламного бюджета, а цена цели у всех выходила одинаковой) — теперь расход идёт через кампанию, а вместо бессмысленной цены цели стоит конверсия визита в цель.

Разбор за следующую неделю писать так же, по сводке. Открытые вопросы к владельцу: обвал целей кабинета у Fit&Lead с 372 до 72 за неделю, четыре тестовые кампании Рекл_Тест_Артем_МК на 8 557 рублей в неделю за 2 цели, метка кампании reklamodatel без номера (212 тысяч расхода не привязываются). Ключ OpenRouter из .env убран обратно.

18.08.2026, 13:51:29 · Аналитика и разбор недели · claude

Собрал конструктор воронок, связок и атрибуции на тех данных, что есть, не дожидаясь Битрикса. Цели Метрики теперь тянутся все, а не только лидовые, и с разрезом по источнику и меткам: 11 650 строк за полгода. Ярлыки целей приведены к тем же правилам, что у визитов, иначе цели не сходились с источниками. Расход цепляется к кампаниям по названию и номеру; у главной кампании Fit&Lead в метке стоит {reklamodatel} без номера, поэтому 212 тысяч расхода в разрез не легли — чинится разметкой ссылок. Сделал блок «ИИ аналитика» вверху рекламы и соцсетей: числа считает код, модель пишет выводы. Добавил колонку отклонения в план рекламы с порогом из настроек оповещений и правило «План месяца под угрозой». Всё залито на cfru, доки обновлены.

Ждёт решения владельца: запустить первый разбор (около 4 рублей на Sonnet или 0,2 на дешёвой модели) и включать ли еженедельное расписание — строка в кроне уже стоит, выключена. Дальше: сверка прогноза с фактом по накопленным разборам, разметка ссылок в Директе, первый клик и распределение поровну в атрибуции — после событий Метрики.

18.08.2026, 12:51:16 · · claude

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

Из того, что просили, всё сделано. Заблокировано и ждёт владельца: вебхук Битрикса (задачи в бэклог и двусторонний календарь), токен ВК, решение по официальному доступу к статистике Инстаграма и ссылка на ТикТок уже получена. Не начато по прежнему решению владельца: создание контента ИИ и создание кампаний в Директе — обе во второй очереди.

18.08.2026, 09:46:06 · · claude

Закрыл оба хвоста по задачам, которые сам называл несделанными. Файлы в карточке задачи: до двадцати штук по 50 МБ, загрузка пачкой, скачивание по клику, удаление. Лежат в томе, наружу отдаются приложением, видимость наследуется от задачи — иначе вложение обходило бы права на чужую работу. Колонки доски задач больше не зашиты в код: настраиваются отделом, хранятся в базе. Переименование не ломает задачи, потому что ключ колонки не зависит от названия. Задачи из убранной колонки не пропадают, а переезжают в первую, и сколько именно переедет — написано в окне до сохранения. Бэклог и «Завершено» в настройку не входят: это системные состояния со своими экранами, очередью и архивом, и убрать их значит оставить задачи без выхода. Проверка статусов в API теперь собирается из базы, жёсткого списка нет. Проверено на сервере: завёл задачу, приложил файл, карточка его отдала; добавил колонку «Дизайн», перенёс в неё задачу, вернул набор по умолчанию — задача переехала обратно, ничего не потерялось. Битрикс по решению владельца пока не трогаю.

По задачам сделано всё, что просили. Ждём вебхук Битрикса, токен ВК и решение по официальному доступу к статистике Инстаграма. Из старого списка остаются референсы в медиатеке из выгрузки Ютуба и Телеграма.

18.08.2026, 09:29:21 · · claude

Раздел задач, который я честно откладывал, сделан. Сначала прямой ответ на вопрос владельца: нет, до правок задач я не доходил, они лежали во второй очереди с 17 августа. Теперь сделаны. Карточка задачи открывается модалкой с доски и из календаря: название, описание, проект, исполнитель, приоритет, срок, чек-лист, обсуждение, история изменений. Правки сохраняются по месту, без ухода на отдельную страницу. Стрелки «влево-вправо» убраны, остались «завершить» и «вернуть в работу», перенос мышкой между колонками работал и раньше. Удаление с подтверждением. Срок при постановке теперь по умолчанию сегодняшний, рядом быстрый выбор: сегодня, завтра, через три дня, через неделю, без срока, своя дата. Выгрузка задач в Excel: задача, описание, проект, статус, приоритет, исполнитель, постановщик, сроки, чек-лист, число комментариев. Видимость та же, что на доске, иначе выгрузка стала бы дырой в правах. Новый раздел «Календарь» в блоке «Работа»: месяц, неделя, день, кнопка «Сегодня», сегодняшний день подсвечен. Плюс в углу дня ставит задачу сразу на эту дату. Клик открывает ту же модалку. У кого открыт раздел контента — галочка «показывать публикации», и в календаре рядом с задачами видны материалы контент-плана. По Битриксу зафиксировано новое решение владельца: задачи только из Битрикса к нам в бэклог с пометкой источника, обратно ничего; календарь в обе стороны. Не начато, ждём вебхук.

Не сделано и названо вслух: вложенные файлы в задаче (ссылки пока живут в описании) и настраиваемые колонки доски задач — они жёсткие в коде, в отличие от доски контента. Битрикс ждёт адрес портала и входящий вебхук с правами на задачи, календарь и пользователей.

18.08.2026, 09:01:27 · · claude

Раздел рекламы доведён до кабинета директолога. Состояния кампаний теперь называются как в самом Директе: Запущена, Остановлена, Архив. У тех, кого API прячет, — Тратит сейчас или Без расхода N дней. Появилось управление: кнопка остановить и запустить прямо в таблице. Закрыто разделом рекламы, доступом к проекту, подтверждением и записью в журнал. Проверил на уже остановленной кампании — Директ ответил своей ошибкой, путь рабочий, живого не трогал. Провал в кампанию: фразы и автотаргетинг с расходом, реальные поисковые запросы, группы, объявления с заголовками и текстами, куда ведут и с какой разметкой. Собрано по шести кампаниям 92 фразы и 11 426 запросов с кликом или расходом; топ-запрос «генератор картинок» — 120 кликов и 1126 рублей. Отдельно проверил вопрос владельца про Мастер кампаний. Объекты закрыты полностью: справочник, группы, объявления возвращают пусто даже по прямому id. А отчёты работают: расход, метрики, фразы, автотаргетинг и 5186 поисковых запросов по одной кампании. То есть провалиться в МК можно, но через отчёты, а не через объекты; управлять ей отсюда нельзя. Попутно: ссылки объявлений размечены не utm, а собственной разметкой Яндекса cm_id с подстановками. Сначала экран писал «меток нет» — это было бы неправдой, поправлено.

Дальше по очереди владельца: задачи уровня Трелло и референсы в медиатеке. Ждём токен ВК и решение по официальному доступу к статистике Инстаграма.