# Senler: как работает коннектор

В этой статье вы узнаете, как коннектор Senler выгружает данные в хранилище ROMI center: что попадает в таблицы, с какой периодичностью идёт сбор и какие у него есть известные особенности. Полный список полей — в статье [Senler: описание выгружаемых полей](https://help-ru.romi.center/senler-opisanie-vygruzhaemyh-polej).

## Что выгружается: подписчики и подписки на группы

| Таблица | Что внутри | Когда появляется |
| --- | --- | --- |
| `senler_…` | Подписчики: строка на подписчика, колонки — поля из настроек | всегда |
| `senler_user_subscriptions_…` | События подписки и отписки на группы Senler: строка на событие | включено «Выгружать подписки на группы» |

> **Важно**
> Подписчик выгружается один раз — когда коннектор впервые его видит. Значения полей фиксируются в этот момент, дальнейшие изменения в Senler в таблицу не попадают. Освежить их можно только перезагрузкой с удалением данных.

> **Важно**
> Подписчик, у которого в момент сбора не заполнено ни одно из выбранных полей, пропускается. «Дата события» в этой проверке не участвует, поэтому с полями по умолчанию — она и пять UTM-меток — пропадает каждый подписчик без меток: на бою меток не было у 63% подписчиков одного подключения и у 3% другого. Чтобы собирать всех, добавьте поле, которое есть у каждого, — например «Дата»; пропущенных раньше вернёт перезагрузка за их даты подписки.

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

## Периодичность

Подписчики за вчерашний день (по дате подписки) собираются ежедневным заданием в 05:00; проход по курсору за новыми подписчиками идёт каждые 2 минуты, но на практике новых подписчиков не приносит.

> **Важно**
> Подписчики приходят раз в сутки. Подписавшиеся сегодня появятся в хранилище только завтра утром, около 05:05.

Подписки на группы собираются каждые 2 часа, с последнего загруженного события.

Подписчиков за пропущенные дни коннектор сам не догружает — их вернёт только перезагрузка; подписки на группы добираются сами, с последнего загруженного события.

## За какой период забираются данные

Ежедневное задание берёт подписавшихся вчера — по дате подписки; события подписок — за вчера и позавчера. Историческая перезагрузка идёт по дате подписки, по заданию на день, включая сегодня.

## Как сохраняет данные

*   **Куда:** хранилище ROMI center на движке ClickHouse.
*   **Запись в две стадии.** Сначала подписчик или событие ложится в промежуточную таблицу ROMI, затем отдельная задача переносит их в хранилище.
*   **Имена таблиц:** `senler_<название подключения латиницей>_<id подключения>` и `senler_user_subscriptions_<название>_<id>`.
*   **Структура таблиц:** движок `MergeTree`, без разбиения на партиции.
*   **Структура догоняется, а не пересоздаётся.** Новое поле приходит новой колонкой. Колонки никогда не удаляются: убранное поле останется в таблице со старыми значениями, а новые строки будут писаться в него пустыми.

> **Важно**
> События подписок дублируются. Повторная выгрузка того же окна не заменяет прежние строки, а дописывает копии: каждое утреннее задание перечитывает два дня, и каждая перезагрузка добавляет их снова. На бою у одного подключения 38% строк таблицы подписок — повторы, отдельные события записаны до 40 раз. Считайте уникальные события по пользователю, группе, времени и действию.

## Перезагрузка данных

Функция «Загрузить исторические данные» в меню подключения работает за любой период, включая сегодня, по дате подписки, по заданию на день. Уже загруженные подписчики не перечитываются — добавляются только новые. Подписки на группы за период выгружаются заново — новыми копиями.

> **Важно**
> Галочка «Удалить ранее загруженные данные за период» сначала ставит период в очередь, и только если задания созданы, удаляет таблицу подписчиков целиком и стирает их промежуточные данные. Затем подписчики периода собираются заново, со свежими значениями полей. После такой перезагрузки в таблице останется только перезагруженный период. Таблица подписок не удаляется.

## Дополнительные настройки

| Настройка | Что делает |
| --- | --- |
| Ключ, название, платформа и ID | Шаг «Доступ»: API-ключ Senler, название подключения (по умолчанию «Senler»), платформа — VK или Telegram — и ID группы VK или бота Telegram. Название входит в имена таблиц: при смене запись пойдёт в новые таблицы, а прежние останутся с накопленными данными. |
| Поля подписчика | Шаг «Выбор полей»: имя поля, подпись и тип. В новом подключении заранее заведены «Дата события» и пять UTM-меток. |
| Выгружать подписки на группы | Шаг «Дополнительные настройки»: включает таблицу подписок. |

> **Примечание**
> Нужен внешний ID — группы VK или бота Telegram, — а не номер канала внутри Senler: с ним Senler ответит «Group not found».

## Технические поля

| Колонка | Что внутри |
| --- | --- |
| `rc_data_id` | Номер строки в промежуточной таблице. По нему строка подписчика перезаписывается. |
| `rc_created_at` | Когда строка впервые записана в таблицу. При повторной записи переносится со старой. |

В предпросмотре данных служебные колонки скрыты — они отрезаются по префиксу `rc_`.
