Задача — не просто спарсить сообщения из Telegram-каналов. Задача — научиться вылавливать из потока обсуждений актуальные тренды, боли клиентов и рабочие лайфхаки. Это золотая жила для SEO-специалистов, продуктологов и маркетологов.

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

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

  • Для создателей контента (SEO): Сложно увидеть, о чем сейчас говорят и спрашивают люди в нише. Тренды рождаются в чатах, а не в поиске.

  • Для продуктологов и аналитиков: Открытые чаты конкурентов — кладезь обратной связи. Но нет структуры «вопрос-ответ». Ценные инсайты о фичах, проблемах и ожиданиях пользователей размазаны по диалогам.

Решение: Две ключевые задачи для нашего бота

  1. Генератор контент-плана: Автоматический сбор и анализ тем, вопросов и дискуссий из профессиональных сообществ. Это даст SEO-специалистам готовый список тем, основанный на реальных запросах аудитории.

  2. Детектор трендов и проблем конкурентов: Систематический мониторинг чатов компаний-конкурентов для выявления их нововведений, частых проблем клиентов и неочевидных лайфхаков.

Что дальше?
В этой статье закладываем фундамент: пишем и развертываем юзербота для сбора сырых данных. Во второй части мы научим нейросеть превращать этот хаотичный диалог в структурированные отчеты и actionable-инсайты.

Что такое юзербот и почему он нужен именно здесь? Простыми словами

Давайте разберем главный вопрос: почему мы делаем именно юзербота, а не обычного Telegram-бота?

Обычный бот (того, что создают через @BotFather):

  • Может работать только в тех чатах, куда его явно добавили администраторы

  • Не видит сообщения до своего добавления

  • Не может вступить в публичный канал сам — его туда нужно пригласить

Юзербот (Userbot) — это совсем другое. Это программа, которая работает как «второе приложение» вашего аккаунта.
Представьте, что у вас есть Telegram на телефоне, на компьютере... и вот теперь еще одна программа, которая тоже зашла под вашим номером.

Что это дает:

  • Может вступить в ЛЮБОЙ публичный канал — как обычный пользователь

  • Видит ВСЮ историю сообщений в каналах и чатах, куда вы вступили

  • Читает сообщения в РЕАЛЬНОМ ВРЕМЕНИ — ловит обсуждения по горячим следам

  • Работает КРУГЛОСУТОЧНО на сервере — не спит, не отвлекается, не забывает

  • Сохраняет контекст диалогов — видит не только отдельные

Создание User бота для Telegram

Опишу кратко логику работы Userbot:

  1. Юзербот подключается к каналу

  2. Скачивает историю сообщений (при первом подключении)

  3. "Слушает" новые сообщения (постоянно)

  4. Сохраняет всё в базу данных (Текст сообщения, Дата и время, Автор, ID канала, Количество просмотров)

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

Теперь можно начинать, создадим Telegram app, для этого:

Шаг 1:Войдите на сайт (лучше с чистым профилем)

  • Перейдите на https://my.telegram.org/apps

  • Войдите, используя номер телефона (с кодом страны, например: +79991234567)

  • Введите код подтверждения из Telegram

Шаг 2: Создайте приложение

  • Если приложения еще нет, нажмите "Create new application" или "Create application"

  • Заполните форму:

  • App title: любое название (например: "Telegram Userbot" или "Message Parser")

  • Short name: короткое имя (например: "userbot" или "parser")

  • Platform: выберите "Other" или "Desktop"

  • Description: описание (необязательно, например: "Userbot for message parsing")

    Шаг 3: Получите credentials

    После создания вы увидите:

  • api_id — числовой ID (например: 12345678)

  • api_hash — строка из букв и цифр (например: abc123def456...)

  • Сохраните данные

    API_ID и API_HASH — это не секретные токены, их можно использовать. Не публикуйте их в открытом доступе, но они не так критичны, как токены ботов. Один аккаунт может иметь несколько приложений. Эти credentials нужны для работы userbot через Telethon.

С первым номером удачно завел профиль в ТГ, но почему-то при создании apps появлялась ошибка, потому пришлось создать еще один профиль и там все заработало.

Так, как сервис будет работать в docker, то необходимо сначала сгенерировать сессию Session String локально, для этого на собственном компьютере в powershell (если у вас windows) установите библиотеку telethon. Под спойлером подробнее описано, что такое String Session и зачем он нужен.

Скрытый текст

String Session — это способ хранения авторизационных данных Telegram в виде строки, вместо файла .session. Это особенно удобно для развертывания в контейнерах и облачных платформах, где работа с файлами может быть затруднена.

Принцип работы

Обычная сессия (файл)

# Создается файл userbot_session.session
client = TelegramClient('userbot_session', API_ID, API_HASH)

String Session

# Сессия хранится в виде строки
from telethon.sessions import StringSession

session_string = "1BVtsOHwBu5X..."  # Длинная зашифрованная строка
client = TelegramClient(StringSession(session_string), API_ID, API_HASH)

Реализация в коде

1. Конфигурация (config.py)

import os
from dotenv import load_dotenv

load_dotenv()

# Telegram API credentials
API_ID = int(os.getenv('API_ID', '0'))
API_HASH = os.getenv('API_HASH', '')
SESSION_NAME = os.getenv('SESSION_NAME', 'userbot_session')

# Optional: use STRING_SESSION instead of session file
STRING_SESSION = os.getenv('STRING_SESSION', '')

Ключевой момент: STRING_SESSION — опциональная переменная. Если она не указана, используется файл сессии.

2. Инициализация клиента (userbot.py)

from telethon import TelegramClient
from telethon.sessions import StringSession
from config import API_ID, API_HASH, SESSION_NAME, STRING_SESSION

# Выбор типа сессии
if STRING_SESSION:
    # Используем String Session
    session = StringSession(STRING_SESSION)
    logger.info("Используется STRING_SESSION из переменных окружения")
else:
    # Используем файл сессии (fallback)
    session = SESSION_NAME
    logger.info(f"Используется файл сессии: {session}.session")

# Инициализация клиента
client = TelegramClient(session, API_ID, API_HASH)

Логика выбора:

  1. Если STRING_SESSION указан → используем его

  2. Если нет → используем файл {SESSION_NAME}.session

  3. Если файла нет → ошибка (требуется авторизация)

3. Запуск и авторизация

async def main():
    # Подключение к базе данных
    await db.connect()
    
    # Подключение к Telegram
    if STRING_SESSION:
        # String Session уже содержит авторизацию
        logger.info("Используется STRING_SESSION из переменных окружения")
        await client.start()  # Просто подключаемся
    else:
        # Проверяем наличие файла сессии
        session_file = f"{SESSION_NAME}.session"
        if not os.path.exists(session_file):
            # Файла нет - нужна авторизация
            logger.error("Файл сессии не найден. Укажите STRING_SESSION или авторизуйтесь локально")
            raise FileNotFoundError(f"Файл сессии {session_file} не найден")
        else:
            # Файл есть - используем его
            await client.start()
    
    logger.info("Userbot запущен и готов к работе!")

Преимущества String Session

1. Удобство для контейнеров

  • Не нужно загружать файлы на сервер

  • Работает в read-only файловых системах

  • Проще для Docker/Kubernetes

2. Безопасность

  • Можно хранить в секретах (secrets management)

  • Не остается файлов на диске

  • Легко ротировать (сменить строку)

3. Гибкость

  • Один и тот же код работает с файлом и строкой

  • Легко переключаться между режимами

И так сделаем это:

pip install telethon

Далее создайте файл generate_string_session.py с содержимым, заменив API_ID и API_HASH на свои.

Скрытый текст
from telethon.sync import TelegramClient
from telethon.sessions import StringSession

API_ID = 12345678
API_HASH = "4dfgdfgfdgfdhdgfhgfhgfdhgfhg08"

def main():
    phone = input("Введите номер телефона (+7...): ").strip()
    with TelegramClient(StringSession(), API_ID, API_HASH) as client:
        client.start(phone=phone)  # спросит код/2FA
        print("\nВаш STRING_SESSION:\n")
        print(client.session.save())

if __name__ == "__main__":
    main()

Запустите скрипт в powershell и подтвердите вход, указа номер телефона и код подтверждения, я использую терминал прям в Cursor.

В итоге мы получили STRING_SESSION для использования в переменных окружения.

Скрытый текст
# config.py - опциональная переменная
STRING_SESSION = os.getenv('STRING_SESSION', '')

# userbot.py - умный выбор типа сессии
from telethon.sessions import StringSession

session_arg = StringSession(STRING_SESSION) if STRING_SESSION else SESSION_NAME
client = TelegramClient(session_arg, API_ID, API_HASH)

Теперь перейдем непосредственно к запуску userbot в сервисе bothost.ru, создадим нового бота, укажем все, как на рисунке ниже, заполним собственные переменные окружения, которые получили ранее, в том числе session_string, укажем GIT репозиторий. Так же я указал токен бота, для user бота он не нужен, но платформа требует ввести, что-нибудь.

Деплой user бота в bothost.ru
Деплой user бота в bothost.ru

В дополнительных настройках укажем запускаемый файл бота userbot.py:

Все готово, можно запускать бота (на самом деле завелось не с первой попыток, было множество правок кода).

После запуска парсина, можно отслеживать процесс в логах бота и по размеру базы данных, базу данных можно скачать.

На этом шаге у вас уже есть полноценная база данных со всеми собранными сообщениями. Её можно:

  • Скачать прямо сейчас — заберите файл messages.db через панель управления;

  • Немедленно начать анализ — даже без второй части этого руководства;

  • Экспериментировать самостоятельно — пробуйте разные подходы к обработке данных.

На этом мы выполнили первый шаг, разработали и задеплоили user бота. Код бота в GIT.

Мы создали систему сбора данных — фундамент для анализа. Юзербот теперь:

  • Работает 24/7 на сервере

  • Собирает сообщения из выбранных чатов

  • Сохраняет всё в структурированную базу

  • Уже показывает базовую статистику

Но это только 50% решения. Сырые данные — как нефть: ценны, но не готовы к использованию.

В следующем туториале подключим бота к OpenAI и попробуем анализировать получаемые данные.

Комментарии (1)


  1. Viktor-T
    07.12.2025 08:58

    Так-то всё было бы интересно почитать, пусть и не в одной статье.