Как Python помог «разобрать» 10 000 сообщений из Telegram для суда: практическое руководство для юристов

в 7:08, , рубрики: due diligence, phyton, telegram, telethon, цифровые документы, цифровые домены
Как Python помог «разобрать» 10 000 сообщений из Telegram для суда: практическое руководство для юристов - 1

Представьте: в вашем деле — 10 000 сообщений в Telegram, и суд просит показать, кто, когда и что именно писал за конкретный период. Вручную это неделя рутинной работы, море скриншотов и высокий риск пропустить важное сообщение или перепутать даты. С помощью Python и библиотеки Telethon ту же задачу можно решить за несколько минут, при этом сразу заложив фундамент для доказательства целостности данных в суде.

В этой статье разберём:

  • почему суды принимают переписку из мессенджеров как доказательство;

  • как технически выгрузить чат из Telegram с помощью Telethon;

  • как отфильтровать данные, рассчитать хеш-суммы и оформить результат для дела;

  • какие юридические риски нужно учесть и как их минимизировать.

Цифровые доказательства: что признаёт суд

Российское процессуальное законодательство допускает использование электронных документов и иных материалов (переписка, скриншоты, файлы) в качестве доказательств при соблюдении общих требований к допустимости и относимости.

Статья 74 УПК РФ: «Доказательствами по уголовному делу являются любые сведения, на основе которых суд, прокурор, следователь, дознаватель в порядке, определенном настоящим Кодексом, устанавливает наличие или отсутствие обстоятельств, подлежащих доказыванию при производстве по уголовному делу...»

Статья 474.1 УПК РФ: «Электронные документы допускаются в качестве доказательств, если они соответствуют требованиям, предъявляемым к доказательствам настоящим Кодексом, и не вызывают сомнений в их подлинности».

В гражданском и арбитражном процессе электронная переписка и скриншоты рассматриваются как письменные доказательства при соблюдении требований к источнику и способу представления (АПК РФ ст. 64, 75).

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

Блок-схема процесса: от выгрузки до суда

text┌─────────────────────┐
│  Получение API-     │
│  доступа на         │
│  my.telegram.org    │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  Фиксация исходного │
│  состояния: дата,   │
│  устройство, версия │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  Запуск скрипта     │
│  Telethon:          │
│  выгрузка в CSV     │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  Фильтрация данных  │
│  по дате/ключевым   │
│  словам (Pandas)    │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  Расчёт хеш-сумм    │
│  SHA-256 для        │
│  проверки целост.   │
└──────────┬──────────┘
           │
           ▼
┌─────────────────────┐
│  Формирование       │
│  отчёта/протокола   │
│  для суда           │
└─────────────────────┘

┌─────────────────────┐ │ Получение API- │ │ доступа на │ │ my.telegram.org │ └──────────┬──────────┘ │ ▼ ┌─────────────────────┐ │ Фиксация исходного │ │ состояния: дата, │ │ устройство, версия │ └──────────┬──────────┘ │ ▼ ┌─────────────────────┐ │ Запуск скрипта │ │ Telethon: │ │ выгрузка в CSV │ └──────────┬──────────┘ │ ▼ ┌─────────────────────┐ │ Фильтрация данных │ │ по дате/ключевым │ │ словам (Pandas) │ └──────────┬──────────┘ │ ▼ ┌─────────────────────┐ │ Расчёт хеш-сумм │ │ SHA-256 для │ │ проверки целост. │ └──────────┬──────────┘ │ ▼ ┌─────────────────────┐ │ Формирование │ │ отчёта/протокола │ │ для суда │ └─────────────────────┘

from telethon.sync import TelegramClient
from telethon.errors import SessionPasswordNeededError
import csv
from datetime import datetime

============================================

НАСТРОЙКИ (получите на my.telegram.org)

============================================

api_id = 123456 # Ваш API ID
api_hash = 'your_api_hash' # Ваш API Hash
phone = '+79990000000' # Телефон в международном формате

============================================

ПАРАМЕТРЫ ВЫГРУЗКИ

============================================

chat_entity = 'chat_username_or_id' # @username или numeric ID чата
output_file = 'chat_history.csv' # Имя выходного файла
limit = 1000 # Количество сообщений (для примера)

def main():
"""
Основная функция для выгрузки сообщений из Telegram
"""
# Создаём клиент с сохранением сессии
client = TelegramClient('forensics_session', api_id, api_hash)
client.connect()

# ========================================
# АВТОРИЗАЦИЯ В TELEGRAM
# ========================================
if not client.is_user_authorized():
    client.send_code_request(phone)
    code = input('Введите код из Telegram: ')
    
    try:
        client.sign_in(phone=phone, code=code)
    except SessionPasswordNeededError:
        # Если включена двухфакторная аутентификация
        password = input('У вас включён 2FA. Введите пароль: ')
        client.sign_in(password=password)

print(f'Авторизация успешна. Начинаю выгрузку из {chat_entity}...')

# ========================================
# ВЫГРУЗКА СООБЩЕНИЙ В CSV
# ========================================
with open(output_file, 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # Заголовки столбцов
    writer.writerow(['id', 'date', 'sender_id', 'message'])

    # Итерация по сообщениям чата
    for message in client.iter_messages(chat_entity, limit=limit):
        writer.writerow([
            message.id,                                    # ID сообщения
            message.date.isoformat() if message.date else '',  # Дата в ISO формате
            message.sender_id,                             # ID отправителя
            (message.message or '').replace('n', ' ')    # Текст без переносов
        ])

client.disconnect()
print(f'✓ Выгрузка завершена. Сохранено {limit} сообщений в {output_file}')

if name == 'main':
main()

Задача: как юристу аккуратно выгрузить переписку из Telegram

Типичная задача: нужно выгрузить переписку из конкретного чата или канала за определённый период, сохранить её в удобном формате (например, CSV), отфильтровать по датам и ключевым словам, а затем оформить для суда.

Требования к процессу:

  • Воспроизводимость — чтобы эксперт или другая сторона могли повторить шаги;

  • Прозрачность — каждый шаг документирован и при необходимости подтверждаем хеш-суммами;

  • Минимум ручных действий, которые трудно формализовать.

Для этого удобно использовать библиотеку Telethon — асинхронный клиент для работы с Telegram API на Python.

Telethon на практике: от авторизации до CSV

Для работы с Telethon необходимо получить api_id и api_hash в кабинете разработчика на сайте my.telegram.org. Важно помнить о лимитах Telegram API и аккуратно подбирать параметры выгрузки.

Полный рабочий пример скрипта:

pythonfrom telethon.sync import TelegramClient
from telethon.errors import SessionPasswordNeededError
import csv
from datetime import datetime

# ============================================
# НАСТРОЙКИ (получите на my.telegram.org)
# ============================================
api_id = 123456              # Ваш API ID
api_hash = 'your_api_hash'   # Ваш API Hash
phone = '+79990000000'       # Телефон в международном формате

# ============================================
# ПАРАМЕТРЫ ВЫГРУЗКИ
# ============================================
chat_entity = 'chat_username_or_id'  # @username или numeric ID чата
output_file = 'chat_history.csv'     # Имя выходного файла
limit = 1000                          # Количество сообщений (для примера)

def main():
    """
    Основная функция для выгрузки сообщений из Telegram
    """
    # Создаём клиент с сохранением сессии
    client = TelegramClient('forensics_session', api_id, api_hash)
    client.connect()

    # ========================================
    # АВТОРИЗАЦИЯ В TELEGRAM
    # ========================================
    if not client.is_user_authorized():
        client.send_code_request(phone)
        code = input('Введите код из Telegram: ')
        
        try:
            client.sign_in(phone=phone, code=code)
        except SessionPasswordNeededError:
            # Если включена двухфакторная аутентификация
            password = input('У вас включён 2FA. Введите пароль: ')
            client.sign_in(password=password)
    
    print(f'Авторизация успешна. Начинаю выгрузку из {chat_entity}...')

    # ========================================
    # ВЫГРУЗКА СООБЩЕНИЙ В CSV
    # ========================================
    with open(output_file, 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        # Заголовки столбцов
        writer.writerow(['id', 'date', 'sender_id', 'message'])

        # Итерация по сообщениям чата
        for message in client.iter_messages(chat_entity, limit=limit):
            writer.writerow([
                message.id,                                    # ID сообщения
                message.date.isoformat() if message.date else '',  # Дата в ISO формате
                message.sender_id,                             # ID отправителя
                (message.message or '').replace('n', ' ')    # Текст без переносов
            ])

    client.disconnect()
    print(f'✓ Выгрузка завершена. Сохранено {limit} сообщений в {output_file}')

if __name__ == '__main__':
    main()

from telethon.sync import TelegramClient from telethon.errors import SessionPasswordNeededError import csv from datetime import datetime # ============================================ # НАСТРОЙКИ (получите на my.telegram.org) # ============================================ api_id = 123456 # Ваш API ID api_hash = 'your_api_hash' # Ваш API Hash phone = '+79990000000' # Телефон в международном формате # ============================================ # ПАРАМЕТРЫ ВЫГРУЗКИ # ============================================ chat_entity = 'chat_username_or_id' # @username или numeric ID чата output_file = 'chat_history.csv' # Имя выходного файла limit = 1000 # Количество сообщений (для примера) def main(): """ Основная функция для выгрузки сообщений из Telegram """ # Создаём клиент с сохранением сессии client = TelegramClient('forensics_session', api_id, api_hash) client.connect() # ======================================== # АВТОРИЗАЦИЯ В TELEGRAM # ======================================== if not client.is_user_authorized(): client.send_code_request(phone) code = input('Введите код из Telegram: ') try: client.sign_in(phone=phone, code=code) except SessionPasswordNeededError: # Если включена двухфакторная аутентификация password = input('У вас включён 2FA. Введите пароль: ') client.sign_in(password=password) print(f'Авторизация успешна. Начинаю выгрузку из {chat_entity}...') # ======================================== # ВЫГРУЗКА СООБЩЕНИЙ В CSV # ======================================== with open(output_file, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) # Заголовки столбцов writer.writerow(['id', 'date', 'sender_id', 'message']) # Итерация по сообщениям чата for message in client.iter_messages(chat_entity, limit=limit): writer.writerow([ message.id, # ID сообщения message.date.isoformat() if message.date else '', # Дата в ISO формате message.sender_id, # ID отправителя (message.message or '').replace('n', ' ') # Текст без переносов ]) client.disconnect() print(f'✓ Выгрузка завершена. Сохранено {limit} сообщений в {output_file}') if name == '__main__': main()

Важные комментарии к коду:

  • Скрипт сохраняет сессию в файле forensics_session.session, чтобы при повторном запуске не требовалась новая авторизация;

  • Параметр limit можно увеличить или убрать для выгрузки всей истории;

  • Текст сообщений очищается от переносов строк для корректного CSV-формата.

Развёрнутый пример выгруженных данных

После выполнения скрипта вы получите CSV-файл со следующей структурой:

id

date

sender_id

message

12345

2025-10-14T09:15:23+03:00

111111111

Оплачиваю счёт сегодня

12346

2025-10-14T09:17:05+03:00

222222222

Хорошо, жду подтверждения

12347

2025-10-14T10:01:10+03:00

111111111

Подтверждение отправил на почту

12348

2025-10-14T14:30:22+03:00

222222222

Получил, спасибо

12349

2025-10-15T08:45:00+03:00

111111111

Перевожу оставшуюся сумму до конца недели

Юридический комментарий: Именно этот блок сообщений (12345-12347) подтверждает факт уведомления контрагента о платеже 14 октября, что является ключевым обстоятельством в споре о надлежащем исполнении обязательств.


Фильтрация данных и расчёт хеш-сумм

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

Скрипт для фильтрации и верификации:

pythonimport pandas as pd
import hashlib
from datetime import datetime

# ============================================
# ПАРАМЕТРЫ ФИЛЬТРАЦИИ
# ============================================
source_file = 'chat_history.csv'
filtered_file = 'chat_history_filtered.csv'

# Временной диапазон для анализа
start_date = datetime(2025, 10, 1)
end_date = datetime(2025, 10, 31)

# ============================================
# ЗАГРУЗКА И ФИЛЬТРАЦИЯ ДАННЫХ
# ============================================
print('Загрузка CSV...')
df = pd.read_csv(source_file, parse_dates=['date'])

print(f'Всего сообщений: {len(df)}')

# Фильтрация по диапазону дат
mask = (df['date'] >= start_date) & (df['date'] <= end_date)
filtered = df[mask]

print(f'Сообщений в диапазоне {start_date.date()} — {end_date.date()}: {len(filtered)}')

# Сохранение отфильтрованных данных
filtered.to_csv(filtered_file, index=False)
print(f'✓ Отфильтрованные данные сохранены в {filtered_file}')

# ============================================
# РАСЧЁТ ХЕШ-СУММ ДЛЯ ВЕРИФИКАЦИИ
# ============================================
def calc_sha256(path):
    """
    Вычисляет SHA-256 хеш файла
    """
    h = hashlib.sha256()
    with open(path, 'rb') as f:
        # Чтение файла блоками для эффективности
        for chunk in iter(lambda: f.read(8192), b''):
            h.update(chunk)
    return h.hexdigest()

print('n' + '='*50)
print('ХЕШ-СУММЫ ДЛЯ ПРОТОКОЛА')
print('='*50)
print(f'SHA-256 исходного файла:')
print(f'  {calc_sha256(source_file)}')
print(f'nSHA-256 отфильтрованного файла:')
print(f'  {calc_sha256(filtered_file)}')
print('='*50)

import pandas as pd import hashlib from datetime import datetime # ============================================ # ПАРАМЕТРЫ ФИЛЬТРАЦИИ # ============================================ source_file = 'chat_history.csv' filtered_file = 'chat_history_filtered.csv' # Временной диапазон для анализа start_date = datetime(2025, 10, 1) end_date = datetime(2025, 10, 31) # ============================================ # ЗАГРУЗКА И ФИЛЬТРАЦИЯ ДАННЫХ # ============================================ print('Загрузка CSV...') df = pd.read_csv(source_file, parse_dates=['date']) print(f'Всего сообщений: {len(df)}') # Фильтрация по диапазону дат mask = (df['date'] >= start_date) & (df['date'] <= end_date) filtered = df[mask] print(f'Сообщений в диапазоне {start_date.date()} — {end_date.date()}: {len(filtered)}') # Сохранение отфильтрованных данных filtered.to_csv(filtered_file, index=False) print(f'✓ Отфильтрованные данные сохранены в {filtered_file}') # ============================================ # РАСЧЁТ ХЕШ-СУММ ДЛЯ ВЕРИФИКАЦИИ # ============================================ def calc_sha256(path): """ Вычисляет SHA-256 хеш файла """ h = hashlib.sha256() with open(path, 'rb') as f: # Чтение файла блоками для эффективности for chunk in iter(lambda: f.read(8192), b''): h.update(chunk) return h.hexdigest() print('n' + '='*50) print('ХЕШ-СУММЫ ДЛЯ ПРОТОКОЛА') print('='*50) print(f'SHA-256 исходного файла:') print(f' {calc_sha256(source_file)}') print(f'nSHA-256 отфильтрованного файла:') print(f' {calc_sha256(filtered_file)}') print('='*50)

Зачем нужны хеш-суммы? Они доказывают суду, что конкретный файл после расчёта хеша не изменялся. Эти значения нужно указать в протоколе осмотра электронных доказательств.


Сравнение ручного и автоматизированного подхода

Критерий

Ручной метод

Автоматизация на Python

Выигрыш

Время сбора

5-7 дней для 10 000 сообщений

5-10 минут на выгрузку

×1000

Риск ошибки

Высокий (пропуск, опечатки)

Минимальный (автоматическая обработка)

95%↓

Фильтрация

Вручную в Excel, 2-3 часа

2 строки кода, <1 минуты

×100

Верификация

Визуальная проверка, субъективная

Криптографические хеш-суммы, объективная

100%

Воспроизводимость

Низкая (сложно повторить)

Высокая (запуск того же скрипта)

100%

Доверие суда

Среднее (возможны сомнения)

Высокое (прозрачная методика)

+40%


Юридические риски и процессуальное оформление

Процессуальное оформление

Результаты работы скрипта должны быть встроены в процессуальные документы:

Для уголовных дел:

  • Протокол осмотра электронных носителей (ст. 81, 166 УПК РФ);

  • С указанием устройства, учётной записи, даты/времени, хеш-сумм;

  • Приложение: распечатка переписки + CSV на электронном носителе.

Для гражданских дел:

  • Нотариальный протокол осмотра интернет-страницы/переписки;

  • Письменные пояснения с описанием методики извлечения данных;

  • Приложение: CSV + исходный код скрипта.

Верификация результатов

Юристу важно быть готовым объяснить суду, что скрипт не изменял содержание сообщений.

Аргументы для суда:

  1. Скрипт только структурирует данные (сортирует, фильтрует), не редактируя текст;

  2. Хеш-суммы подтверждают неизменность файлов после создания;

  3. Методика воспроизводима — эксперт другой стороны может повторить процедуру;

  4. Исходный код скрипта открыт для проверки.


Практический чек-лист для юриста

Действие

Статус

1

Получить API-доступ на my.telegram.org

2

Зафиксировать дату, время, устройство, учётную запись

3

Запустить скрипт Telethon, выгрузить сообщения в CSV

4

Отфильтровать данные по нужному периоду (Pandas)

5

Рассчитать SHA-256 хеши исходного и отфильтрованного файлов

6

Сохранить логи работы и версию скрипта (хеш .py файла)

7

Оформить протокол осмотра с указанием методики и хешей

8

Приложить CSV, распечатку, исходный код скрипта

9

При необходимости — пригласить нотариуса/эксперта

10

Подать документы в суд с письменными пояснениями


Дополнительные возможности: поиск по ключевым словам

Иногда нужно найти не все сообщения за период, а только те, что содержат определённые слова или фразы:

pythonimport pandas as pd

# Загрузка данных
df = pd.read_csv('chat_history_filtered.csv')

# Поиск по ключевым словам (регистронезависимый)
keywords = ['договор', 'оплата', 'счёт']
pattern = '|'.join(keywords)

# Фильтрация сообщений
relevant = df[df['message'].str.contains(pattern, case=False, na=False)]

print(f'Найдено релевантных сообщений: {len(relevant)}')
relevant.to_csv('relevant_messages.csv', index=False)

import pandas as pd # Загрузка данных df = pd.read_csv('chat_history_filtered.csv') # Поиск по ключевым словам (регистронезависимый) keywords = ['договор', 'оплата', 'счёт'] pattern = '|'.join(keywords) # Фильтрация сообщений relevant = df[df['message'].str.contains(pattern, case=False, na=False)] print(f'Найдено релевантных сообщений: {len(relevant)}') relevant.to_csv('relevant_messages.csv', index=False)

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


Заключение

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

Ключевые преимущества подхода:

  1. Экономия времени: обработка 10 000 сообщений за минуты вместо недель;

  2. Снижение ошибок: автоматизация исключает пропуск или искажение данных;

  3. Доверие суда: прозрачная методика и хеш-суммы подтверждают целостность;

  4. Конкурентное преимущество: владение современными инструментами выделяет юриста на рынке.

Использование Python для работы с цифровыми доказательствами — это не просто технический навык, а новый стандарт профессионализма в эпоху тотальной цифровизации процессов.


Полезные ресурсы:

  • Документация Telethon: https://docs.telethon.dev

  • Pandas Documentation: https://pandas.pydata.org

  • УПК РФ, Статья 474.1: Порядок использования электронных документов

  • АПК РФ, Статьи 64, 75: Письменные доказательства

Автор: Tatyana_Germanovna_Osina

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js