- PVSM.RU - https://www.pvsm.ru -
Задача — не просто спарсить сообщения из Telegram-каналов. Задача — научиться вылавливать из потока обсуждений актуальные тренды, боли клиентов и рабочие лайфхаки. Это золотая жила для SEO-специалистов, продуктологов и маркетологов.
В этой статье (первой из двух) мы сфокусируемся на создании и деплое юзербота для сбора данных. Во второй части подключим нейросеть для анализа и получим готовые инсайты.
Проблема: почему Telegram — это и сокровищница, и хаос
С приходом Telegram-чатов и каналов живое общение и экспертиза ушли с форумов и блогов. Теперь вся актуальная информация — в тысячах чатов, но она тонет в потоке сообщений.
Для создателей контента (SEO): Сложно увидеть, о чем сейчас говорят и спрашивают люди в нише. Тренды рождаются в чатах, а не в поиске.
Для продуктологов и аналитиков: Открытые чаты конкурентов — кладезь обратной связи. Но нет структуры «вопрос-ответ». Ценные инсайты о фичах, проблемах и ожиданиях пользователей размазаны по диалогам.
Решение: Две ключевые задачи для нашего бота
Генератор контент-плана: Автоматический сбор и анализ тем, вопросов и дискуссий из профессиональных сообществ. Это даст SEO-специалистам готовый список тем, основанный на реальных запросах аудитории.
Детектор трендов и проблем конкурентов: Систематический мониторинг чатов компаний-конкурентов для выявления их нововведений, частых проблем клиентов и неочевидных лайфхаков.
Что дальше?
В этой статье закладываем фундамент: пишем и развертываем юзербота для сбора сырых данных. Во второй части мы научим нейросеть превращать этот хаотичный диалог в структурированные отчеты и actionable-инсайты.
И так начнем. Чтобы исключить возможный бан личного профиля, я зарегистрировал для userbot'а новый. Варианты есть разные, можно купить вторую симкарту, можно поискать варианты на просторах интернета.

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

Перейдите на https://my.telegram.org/apps [1]
Войдите, используя номер телефона (с кодом страны, например: +79991234567)
Введите код подтверждения из Telegram


Если приложения еще нет, нажмите "Create new application" или "Create application"
Заполните форму:
App title: любое название (например: "Telegram Userbot" или "Message Parser")
Short name: короткое имя (например: "userbot" или "parser")
Platform: выберите "Other" или "Desktop"
Description: описание (необязательно, например: "Userbot for message parsing")

После создания вы увидите:
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)
# Сессия хранится в виде строки
from telethon.sessions import StringSession
session_string = "1BVtsOHwBu5X..." # Длинная зашифрованная строка
client = TelegramClient(StringSession(session_string), API_ID, API_HASH)
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 — опциональная переменная. Если она не указана, используется файл сессии.
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)
Логика выбора:
Если STRING_SESSION указан → используем его
Если нет → используем файл {SESSION_NAME}.session
Если файла нет → ошибка (требуется авторизация)
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 запущен и готов к работе!")
Не нужно загружать файлы на сервер
Работает в read-only файловых системах
Проще для Docker/Kubernetes
Можно хранить в секретах (secrets management)
Не остается файлов на диске
Легко ротировать (сменить строку)
Один и тот же код работает с файлом и строкой
Легко переключаться между режимами
И так сделаем это:
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 [2], создадим нового бота, укажем все, как на рисунке ниже, заполним собственные переменные окружения, которые получили ранее, в том числе session_string, укажем GIT репозиторий [3]. Так же я указал токен бота, для user бота он не нужен, но платформа требует ввести, что-нибудь.
В дополнительных настройках укажем запускаемый файл бота userbot.py:

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



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

На этом мы выполнили первый шаг, разработали и задеплоили user бота. Код бота в GIT [4].
В следующем туториале подключим бота к OpenAI и попробуем анализировать получаемые данные.
Автор: aleksxx
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/telegram/438277
Ссылки в тексте:
[1] https://my.telegram.org/apps: https://my.telegram.org/apps
[2] bothost.ru: http://bothost.ru
[3] GIT репозиторий: https://github.com/aleksandrvolk/ai-userbot.git
[4] GIT: https://github.com/aleksandrvolk/ai-userbot
[5] Источник: https://habr.com/ru/articles/973884/?utm_campaign=973884&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.