Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
План рассылок
Yonote интеграция
План рассылок загружается из базы данных Yonote (аналог Notion, российский).
Настройка
В settings.json → yonoteConfig:
{
"databaseId": "abc123", // ID базы в Yonote
"statusProperty": "Статус", // название колонки статуса
"dateProperty": "Дата", // дата отправки
"subjectProperty": "Тема", // тема письма
"preheaderProperty": "Прехедер",
"idProperty": "ID товаров", // IDs для блоков товаров
"extraProperties": ["Проект", "Теги", "Тип"] // доп. колонки
}
Токен Yonote — в config.json → yonote_token.
Загрузка данных
fetchPlanRows():
- GET
/api/yonote/database/:id/rows— пагинация по 100, макс 500 строк - Сортировка по
updatedAtDESC - Фильтр по дате: -7 дней ... +60 дней
- Извлечение полей из Yonote properties → плоская структура
Polling
startPlanPolling() — каждые 3 минуты загружает обновления:
- Сравнивает fingerprints (JSON hash каждой строки)
- При изменениях → toast уведомление + browser Notification
- Кэширует в localStorage (
va-plan-cache)
Календарь
Мини-календарь в сайдбаре и на странице плана:
- Точки под датами обозначают запланированные рассылки
- Клик на дату → показывает письма этого дня
- Навигация по месяцам (← →)
- Текущий день подсвечен
Группировка на странице плана
Письма группируются по периодам:
- Просрочено (красный)
- Сегодня
- Завтра
- На этой неделе
- На следующей неделе
- Позже
Карточка сборки (Assembly Card)
Когда письмо привязано к строке из Yonote, в сайдбаре показывается карточка:
┌─────────────────────┐
│ ПЕРЕДАНО В СБОРКУ │ ← статус (цветной бейдж)
│ 📮 Тема письма 🧥 │ ← тема из Yonote
│ Подзаголовок │ ← preheader
│ [Тег1] [Тег2] │ ← теги/тип
│ ⎕ Figma │ ← ссылки из extra
│ │
│ [Mindbox] [Отправлено]│ ← кнопки действий
└─────────────────────┘
Auto-matching
При открытии письма assemblyInfo автоматически матчится со строкой в плане:
- По
rowId(если сохранён в письме) - Или по совпадению title + date
Статусы
setPlanRowStatus(row, newStatus) — обновляет статус в Yonote.
Кнопка "Отправлено" → статус "Отправлено" + останавливает трекинг времени.
Начало сборки
startAssemble(row):
- Создаёт новое письмо с заполненным title, date, preheader из Yonote
- Или открывает существующее (если уже привязано к rowId)
- Автозаполняет ID pool из свойства "ID товаров"
- Устанавливает assemblyInfo
Трекинг времени
statsStart(letterId, ...)— запускает 1-секундный интервал- Считает активные секунды (паузится когда вкладка скрыта —
document.hidden) statsMarkHtmlCopied()— отмечает что HTML скопированstatsStop(finalStatus)— сохраняет если >= 1 минуты- Данные:
{letterId, letterName, userId, userName, project, tag, startedAt, finishedAt, activeSeconds, htmlCopied}