# Как устроен сбор

Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/

Объём наблюдения, обновления в режиме реального времени, повторные проверки, вложения, собственные действия и значение пробелов — запись за записью.

TgWitness фиксирует то, что наблюдает подключённая учётная запись Telegram. Журнал сохраняет эти наблюдения, их последовательность и сопутствующий контекст. Он не делает выводов о невидимых действиях на основании отсутствующего сообщения или факта подключения учётной записи.

## От входа в систему до журнала

Блок-схема · Авторизация учетной записи пользователя → Выберите доступные группы и каналы; Выберите доступные группы и каналы → Сохранить настройки событий и вложений; Сохранить настройки событий и вложений → Начать наблюдение; Начать наблюдение → Получайте обновления от активного клиента; Получайте обновления от активного клиента → Применяйте политику в отношении источников и событий; Применяйте политику в отношении источников и событий → Добавить подписанное наблюдение; Добавить подписанное наблюдение → Просмотр или экспорт журнала; Добавить подписанное наблюдение → Обработка любых вложений, находящихся в очереди; Обработка любых вложений, находящихся в очереди → Добавьте результат загрузки · Авторизация учетнойзаписи пользователя · Выберите доступныегруппы и каналы · Сохранить настройкисобытий и вложений · Начать наблюдение · Получайте обновленияот активного клиента · Применяйте политику вотношении источников исобытий · Добавить подписанноенаблюдение · Просмотр или экспортжурнала · Обработка любыхвложений, находящихсяв очереди · Добавьте результатзагрузки

**Схема в текстовом формате**

1. Авторизация учетной записи пользователя → Выберите доступные группы и каналы
2. Выберите доступные группы и каналы → Сохранить настройки событий и вложений
3. Сохранить настройки событий и вложений → Начать наблюдение
4. Начать наблюдение → Получайте обновления от активного клиента
5. Получайте обновления от активного клиента → Применяйте политику в отношении источников и событий
6. Применяйте политику в отношении источников и событий → Добавить подписанное наблюдение
7. Добавить подписанное наблюдение → Просмотр или экспорт журнала
8. Добавить подписанное наблюдение → Обработка любых вложений, находящихся в очереди
9. Обработка любых вложений, находящихся в очереди → Добавьте результат загрузки

Авторизация, доступ к источнику, работающий сборщик данных и полная доставка — это разные вопросы. Успешный вход в систему не гарантирует доступ ко всем группам. Наличие подключенного канала передачи данных не означает, что все соответствующие обновления были доставлены.

## Область наблюдения: выбранные чаты, папка или весь аккаунт

Источники → **Область наблюдения** определяет, какие чаты фиксируются в рабочей среде.

| Режим | Записи | Новые чаты |
| --- | --- | --- |
| Выбранные чаты (по умолчанию) | Только те чаты, которые вы добавляете вручную | Никогда не добавляется автоматически |
| Папка Telegram | Чаты в одной из папок аккаунта: чаты, включённые по названию, плюс категории данной папки (контакты, неконтакты, группы, каналы, боты), за вычетом исключённых чатов и, если это указано в настройках папки, заархивированных чатов | Соответствующие чаты добавляются сразу же после их активации; чаты, которые вы добавляете в папку в Telegram, добавляются в течение часа |
| Весь текст | Каждый чат, доступный данному аккаунту | Каждый новый чат, группа, личный чат или бот добавляется в момент поступления первого обновления |

- **Типы источников** (каналы, группы, личные чаты, боты) ограничивают возможности режимов «папка» и «весь аккаунт». Выбранные чаты могут быть любого типа, включая личные чаты и ботов.
- **Исключённые чаты** никогда не записываются, независимо от режима работы. В режимах «По папкам» и «Весь аккаунт» нажатие кнопок *«Исключить»* и *«Удалить»* в источнике добавляет чат в этот список, благодаря чему система не добавляет его повторно. Повторный выбор чата вручную (в разделе «Источники» или из списка «Чаты») удаляет его из списка. Список вмещает до 5 000 чатов; при превышении этого лимита *команда «Удалить»* не выполняется, и вместо этого чат можно приостановить.
- **Собственные действия** (включены по умолчанию): сообщения, отправляемые этим аккаунтом, его правки и нажатия кнопок на клавиатуре при ответе. Если функция отключена, исходящие сообщения и правки пропускаются.
- При переключении на папку или на весь аккаунт запрашивается подтверждение: эти режимы записывают личные чаты и сообщения третьих лиц и должны использоваться исключительно в специально выделенном аккаунте. Подтверждение и каждое изменение области действия фиксируются в подписанных записях `scope.changed`.
- Чаты, добавленные в рамках настроек, отображаются как источники с пометкой *«auto»* и регистрируются как `scope.applied` (в начале и ежечасно) или `source.discovered` (при появлении нового чата во время наблюдения). При возвращении к выбранным чатам все автоматически добавленные источники приостанавливаются.

Чего не могут сделать эти режимы:

- **Секретные чаты** шифруются по принципу «от конца до конца» между двумя устройствами и ни при каких обстоятельствах не поступают в TgWitness, независимо от режима работы.
- **Ничто не записывается, пока TgWitness не запущен.** После перезапуска он запрашивает у Telegram пропущенные обновления и повторно проверяет чаты, однако Telegram не возвращает всю информацию после длительных перебоев в работе. В отчётах и файлах `verify.py` такие периоды отображаются как пробелы (см. [раздел «Охват»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#coverage-continuity-gaps-and-unobserved-ids)).
- Изначально отображаются только первые 1 000 диалогов (ограничение указано в **разделе «Параметры»**); более старые чаты добавляются при их следующей активации. Более ранняя история добавленного чата не загружается — создайте снимок истории или выполните полный экспорт чата, когда это понадобится.
- Условия папок, которые постоянно меняются (заглушенные, прочитанные), не применяются: такие чаты остаются под наблюдением.
- **Кнопки бота,** нажатые в другом приложении **(с обратным вызовом)**, невидимы для второго сеанса; ответ или редактирование бота фиксируются. Нажатия клавиш при вводе ответа поступают в виде исходящих сообщений и помечаются как `button_press`.
- Чем больше чатов, тем больше запросов. Telegram ограничивает аккаунты за объем, который считает чрезмерным, что является ещё одной причиной использовать специальные аккаунты.

## Объём и выбор событий

Каждая рабочая область имеет собственные источники. TgWitness не вступает в группы, не принимает приглашения и не выявляет всех участников автоматически. Источники должны быть уже доступны для данной учётной записи. При запуске сборщик сверяет выбранные источники с видимыми диалогами учетной записи; проверяются первые 1 000 диалогов, если в разделе **«Параметры → Чаты, считываемые из списка учетной записи**» не указано иное. Отсутствующий источник помечается как **«доступ не подтверждён**»; не предполагается, что вас удалили из него.

| Настройки | Собирает | Последствия при отключении |
| --- | --- | --- |
| Новые сообщения | Обычные доставленные сообщения | В случае последующих правок или удалений может отсутствовать ранее зафиксированный текст для сравнения. |
| Редактирование | Предоставляются отредактированные версии сообщений | Промежуточные изменения впоследствии не восстанавливаются. |
| Удаления | Уведомления об удалении с указанием объёма данных и уведомления на уровне учётной записи без указания объёма данных | Уведомления об удалении не добавляются в журнал. |
| Реакции | Предоставлены моментальные снимки реакций | Отдельные обновления с реакциями не добавляются. |
| Членство | Рассылка сообщений о предоставлении услуг для членов сообщества и обновлений для участников | Указанные замечания членов сообщества не включены. |

Настройки применяются ко всем выбранным источникам в рабочей области. Сохраните форму, чтобы применить изменения; изменения фиксируются с подписанными значениями «до» и «после». Отключение категории не приводит к удалению ранее записанных данных. Повторное включение категории не восстанавливает пропущенные обновления.

Операционные записи и другие события, связанные с обслуживанием групп, остаются отдельными от этих настроек. Сообщения службы членства могут создавать записи сообщений, когда функция членства включена, даже если обычная фиксация новых сообщений отключена. Зафиксированные объекты Telegram сохраняют встроенные метаданные; настройка не является правилом редактирования.

**Удаления в личных чатах и обычных группах** поступают в виде идентификаторов сообщений без указания чата. Эти чаты используют одну общую для всего аккаунта последовательность идентификаторов сообщений, поэтому, если сообщение с данным идентификатором было сохранено ранее, его чат известен: удаление фиксируется в этом чате, причём в `chat_resolution` объясняется, как именно. Идентификаторы, которые никогда не сохранялись, остаются **удалениями без определённого контекста** с явно указанным неизвестным источником; сборщик данных не делает предположений. Telegram никогда не указывает, кто удалил сообщение; если удалённое сообщение было отправлено с данной учётной записи, в записи это указывается (`deleted_message_was_outgoing`) без указания имени удаляющего пользователя.

## Собственные действия

Сообщения, отправленные наблюдаемым аккаунтом, помечаются как `outgoing`. При редактировании исходящего сообщения отмечается, что в личных чатах и группах его может редактировать только автор, тогда как сообщения в каналах могут редактироваться другими администраторами. Когда исходящее сообщение повторяет текст кнопки из последней сохраненной клавиатуры ответов в данном чате, оно помечается как «`button_press`» со ссылкой на запись этой клавиатуры.

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

## Режим расследования: присоединение к группам и общение с ботами

**Источники → Область наблюдения → Режим расследования** настраивает область наблюдения для специальной учётной записи, которая присоединяется к групповым чатам, запускает ботов и отправляет им сообщения: вся учётная запись, каждый тип источника, собственные действия, а также для каждого появляющегося чата или бота — его профиль и последние 200 видимых сообщений. Просмотрите форму и нажмите **«Сохранить сферу»**; при переходе к всему аккаунту потребуется обычное подтверждение.

- **Кнопки.** Кнопки, расположенные под сообщением, сохраняются вместе с ним и отображаются в **чатах**: ссылки, веб- приложения, ссылки для входа, текст для копирования, данные обратного вызова, встроенные запросы, запросы на указание номера телефона или местоположения. Ссылки отображаются в виде текста и никогда не открываются панелью. Когда бот изменяет только кнопки (например, новая ссылка для оплаты), это считается новой версией сообщения как при оперативных обновлениях, так и при повторной проверке.
- **Новые чаты и боты**. В режимах «по папкам» и «весь аккаунт» **при появлении нового чата или бота** сохранение происходит сразу же после его появления:

  - его профиль в виде записи `source.profile`: описание бота и команды, текст «О себе» пользователя, группы или канала, участники, связанный чат и ссылка для приглашения, если Telegram её предоставляет;
  - его последние видимые сообщения (до 1 000) в виде моментального снимка истории с меткой `new_chat`: более ранние сообщения в групповом чате, к которому вы только что присоединились, или то, что сказал бот до того, как система наблюдения зафиксировала этот чат. Сообщения, уже сохраненные в режиме реального времени, не дублируются.

  Чаты, уже присутствующие в списке на момент включения режима, добавляются без создания моментальных снимков. Функция FloodWait приостанавливает эту работу, которая возобновляется по завершении; сбои фиксируются, а регистрация чата в режиме реального времени продолжается. - **Профили по запросу. В меню** **«Чаты» → «Профиль» → «Сохранить профиль» теперь** сохраняется текущий профиль любого источника; самый новый профиль отображается над сообщениями. - **Не отображается.** Кнопки в тексте сообщения (с обратным вызовом), нажатые в другом приложении Telegram, всплывающее окно или ссылка, с помощью которой бот отвечает на такое нажатие, а также ссылки-приглашения, используемые в другом приложении, не поступают в TgWitness. То, что бот отправляет или редактирует впоследствии, фиксируется.

### Действие с панели

**В разделе «Чаты»** теперь доступен мини-клиент, использующий учётную запись Telegram выбранной рабочей среды:

- Напишите сообщение простым текстом или выберите **«Ответить»** под сохраненным сообщением. Отправленное сообщение фиксируется даже в том случае, если в настройках исключены исходящие обновления.
- Нажмите **кнопку «Пресс»** под текущей кнопкой обратного вызова или текстовой кнопкой. Сервер повторно загрузит сообщение и отклонит действие, если текст на клавиатуре отличается от сохраненной версии. В подтверждениях обратного вызова сохраняются всплывающий текст Telegram, флаг оповещения и URL-адрес; ответ также отображается под перепиской. URL-адреса остаются выделяемым текстом и не открываются автоматически.
- Раскройте **ссылку «Открыть Telegram**», введите `@username`, публичную ссылку `https://t.me/name`, `https://t.me/+invite` / `joinchat/invite` или ссылку на бота с `?start=parameter` и нажмите **«Сохранить предварительный просмотр**». Исходная ссылка и предварительный просмотр Telegram подписываются до присоединения. **Присоединение / открытие и наблюдение**: после присоединения к группе/каналу или открытия профиля пользователя/бота добавьте чат в качестве активного источника и отправьте боту `/start`, указав его стартовый параметр. Запрос на присоединение, ожидающий одобрения администратора, регистрируется как «на рассмотрении», а не как членство.

Включите функцию **«Начать наблюдение»**, чтобы фиксировать входящие ответы в режиме реального времени. Действия панели работают, когда наблюдение приостановлено, однако в этом случае гарантируется сохранение только их прямых ответов. Вновь добавленные источники используют настроенный профиль/историю приёма данных, когда наблюдение находится в активном состоянии. Если источник приостановлен, включите его в разделе **«Источники»** перед отправкой сообщения или нажатием соответствующих кнопок.

`interaction.preview`, `interaction.requested` и `interaction.result` — это обычные подписанные события журнала, включаемые в экспорт доказательств. Запросы идентифицируют аккаунт, сообщение/кнопку или запись предварительного просмотра, а также указывают, работала ли система наблюдения. Подтверждения различают успешное выполнение, отказ, ожидание одобрения и неизвестный результат. Прерванный запрос мог достичь Telegram: проверьте чат перед началом нового действия. Повторное использование идентификатора запроса позволяет получить его сохраненное подтверждение без повторного выполнения действия, в том числе после перезапуска. Панель сохраняет идентификатор после получения неоднозначного ответа на одно и то же действие в течение текущей сессии страницы. Она также сохраняет этот идентификатор, если обновление окна не удаётся после успешного выполнения действия: подтверждение остаётся видимым, и повторное нажатие позволяет его получить. RPC-вызовы обратного вызова и присоединения имеют одну попытку выполнения; чтения с возможностью повторной попытки сохраняют настроенную политику повторных попыток. Немедленное переключение между чатами очищает черновик и адресата ответа и отключает отправку до тех пор, пока не загрузится новый разговор.

Данный мини-клиент поддерживает текстовые сообщения и кнопки обратного вызова. Для работы с веб-приложениями, запросами на вход в систему, указание номера телефона или местоположения, осуществление платежей, встроенных запросов и вложений по-прежнему требуется клиент Telegram; сохраненные метаданные кнопок остаются видимыми. В новых элементах управления используется текст на английском языке.

## Уровни повторной проверки

При повторной проверке Telegram запрашивается повторно на наличие пропущенных сообщений, изменений и сообщений, которые он больше не возвращает. Источники, помеченные звёздочкой, являются **приоритетными** и по умолчанию перепроверяются каждые 15 минут; все остальные источники — каждые 6 часов. Выбранные чаты изначально считаются приоритетными, а чаты, добавленные через папку или весь аккаунт, — обычными. За один проход перепроверяется не более 30 источников, а остальные ожидают следующей минуты; после повторного подключения приоритетные источники проверяются в первую очередь. Оба интервала настраиваются в разделе «Источники» → «Настройки записи» → «Перепроверка» (значение 0 отключает уровень) и регистрируются как «`recheck.changed`».

Пропущенные сообщения извлекаются, начиная с того места, где остановился предыдущий проход, при этом максимальное количество **новых сообщений**на один проход определяется в разделе **«Параметры» → «Количество новых сообщений при повторной проверке**» (по умолчанию — 1 000). Поэтому после длительного перерыва повторная проверка заполняет весь пробел, даже если сообщения в режиме реального времени, более свежие, чем этот пробел, были сохранены в первую очередь. Чат, который всё ещё находится в процессе синхронизации, проверяется повторно в следующую минуту, а не в ожидании окончания интервала уровня; `recheck.completed` отображает `continues_after` до завершения процесса.

Сравнения включают текст сообщений, объекты, клавиатурные вводы (в том числе удаления) и содержимое/идентификационные данные вложений. Само по себе изменение хэшей доступа к файлам или ссылок на файлы не считается редактированием, равно как и то, что Telegram заполняет самостоятельно: загрузка предварительного просмотра ссылки, просмотры историй, платные медиафайлы, разблокированные данной учётной записью, получение счёта-фактуры. Каждая сохранённая версия в «Чатах» содержит ссылку на полную запись в журнале, включая метаданные медиафайлов.

## История сообщений и их авторство

Предположим, что система сбора данных фиксирует сообщение «Встреча в 10:00», затем обнаруживает сообщение «Встреча в 11:00», а после этого получает уведомление об удалении. В результате добавляются три отдельных записи: исходный текст сохраняется, отредактированная версия хранится отдельно, а уведомление фиксирует факт обнаружения удаления.

Если сбор данных начался после исчезновения первой версии, этот текст недоступен. Если во время перерыва в работе произошло несколько изменений, сохраняются только версии, зафиксированные впоследствии. Уведомление об удалении не позволяет восстановить контент, который не был зафиксирован ранее.

Отправитель сообщения не всегда является лицом, внесшим в него изменения. Telegram, как правило, не предоставляет информацию о том, кто удалил сообщение, или о точном времени удаления. Неизвестные участники остаются неизвестными. Снимки реакций и обновления участников содержат лишь данные о количестве и идентификационных данных, которые Telegram делает видимыми для данного аккаунта.

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

## Снимки истории

Запрос моментального снимка извлекает последние видимые сообщения из включённого источника, до 500 сообщений за один запрос. Результаты обозначаются как наблюдения в истории. Они могут пересекаться с текущим сбором данных, а повторные наблюдения сохраняются в виде отдельных записей.

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

## Обработка вложений

Загрузка вложений включена по умолчанию и приостанавливается при наличии свободного места на диске менее 1 ГиБ. Коллектор фиксирует наблюдение за сообщениями и задание на загрузку одновременно. Задание сохраняет исходный дескриптор мультимедиа и политику размера, поэтому вложение, отредактированное позднее, не заменяется незаметно.

Загрузка запускается после захвата сообщения. По завершении загрузки создаётся запись формата `media.saved` с указанием SHA-256 и количества байтов. Пропущенные, неудачные, повторные и прерванные операции имеют отдельные результаты. Нахождение задания в очереди не является доказательством того, что файл был сохранен. Завершённый файл также должен соответствовать количеству байтов, указанному в исходном дескрипторе вложения. Короткий или неожиданно длинный ответ не регистрируется как сохранённый медиафайл.

Ограничения устанавливаются **для каждого типа**: фотографии, видео, GIF-файлы и анимации, круговые видеосообщения, голосовые сообщения, музыка и аудиозаписи, стикеры и файлы. Каждый тип можно отключить, и для него установлено собственное ограничение по размеру от 1 до 2 000 MiB; новые рабочие пространства начинаются с 20 MiB для фотографий, 100 MiB для видео, 50 MiB для файлов, аудио и круговых видео, 20 MiB для голосовых сообщений и GIF-файлов, а также 5 МИБ для стикеров. *Максимальный размер файла* устанавливается для всех типов одновременно. Политики, сохраненные до введения ограничений по типам, сохраняют единое ограничение для всех типов. Отключение того или иного типа приводит к созданию записи `media.skipped`; файлы неизвестного размера или превышающие ограничение не загружаются. Для загрузки больших файлов устанавливается скорость не менее 256 КиБ/с. Задания сохраняются после перезапуска, однако просроченные ссылки, утраченный доступ или удалённые файлы по-прежнему могут препятствовать восстановлению. Существующие задания сохраняют политику, сохраненную вместе с ними.

## Приостановка, блокировка, отключение и перезапуск

| Действие или состояние | Эффект |
| --- | --- |
| Переключить рабочую область | Изменяет вид панели; состояние других сборщиков данных сохраняется. |
| Заблокируйте панель или закройте вкладку | Сервер и процесс мониторинга продолжают работать. |
| Наблюдение с паузой | Останавливает работу данного сборщика и сохраняет в очереди вложения. |
| Отключить источник | Прекращает будущий захват в заданном диапазоне; задания по обработке мультимедиа, находящиеся в очереди, приостанавливаются на время отключения данного инструмента. |
| Удалить источник | Он игнорирует его как источник и удаляет профили пользователей; уже сохраненные записи остаются в журнале, доступном только для добавления данных. Вложения, которые все ещё находятся в очереди на обработку, регистрируются как неудачные (`source_removed`). В режимах «папка» и «весь аккаунт» они также исключаются. |
| Измените маршрут подключения | Требует паузы, закрывает старые клиенты и отменяет незавершённый вход в систему. |
| Остановите процесс Python | Приостанавливает работу всех рабочих пространств; в режиме офлайн наблюдения не ведутся. |
| Перезапуск после активного наблюдения | Попытка возобновить работу с сохраненным диапазоном с использованием сохраненной сессии. Ручная пауза отменяет эту попытку. |

Коллектор фиксирует обнаруженные обрывы соединения, повторные попытки, ошибки, запуски/остановки и сигналы проверки работоспособности. Кратковременные перебои могут быть пропущены при периодической проверке подключения. После перезапуска запрашиваются пропущенные обновления, начиная с сохраненной позиции обновления, а наблюдаемые чаты периодически перепроверяются; см. [формат доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#durable-collection-and-process-receipts-02). Снимок экрана обеспечивает контекст; он не доказывает, что пробел был устранен.

## Изоляция и верификация учетных записей

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

Каждое событие содержит предыдущий хеш и подпись Ed25519. Экспорт охватывает весь журнал рабочего пространства по фиксированному порядковому номеру. Панельные фильтры не влияют на содержание экспорта; сбор данных может продолжаться за пределами его границ во время подготовки экспорта.

**Журнал проверки** проверяет цепочку событий и подписи в пределах отображаемого диапазона. Его результаты очищаются при смене рабочей области, и панель выделяет новые записи, добавленные после проверки. Экспорт в формат ZIP также обеспечивает проверку собранных медиафайлов.

Действительная подпись подтверждает целостность относительно доверенного ключа, а не происхождение из Telegram или достоверность содержания. Храните отпечатки и контрольные точки независимо друг от друга. Ознакомьтесь с [моделью доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/), [повседневными операциями](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/) и [процедурой приёма данных в режиме реального времени](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/LIVE_ACCEPTANCE.md) для ознакомления с требованиями к доверию и доставке.
