Telegram-бот-CRM для операторов, сопровождающих клиентов трейдинг-сервиса от первой заявки до перевода на реальный счёт. Данные хранятся в Google Sheets — привычный интерфейс для менеджера без отдельной админки.
Реализовано: 13 команд, пошаговые диалоги (/new, /broadcast), автоматические напоминания по расписанию, авто-синхронизация с таблицей, устойчивая работа при сбоях сети (ретраи, переподключение), рассылка с ручным подтверждением получателей. Покрыто 69 автотестами. Готова инструкция по деплою на сервер (systemd).
Стек: Python 3.11, python-telegram-bot 20 (asyncio), gspread, pytest.
Спроектировал модульную архитектуру вместо одного файла: bot.py (обработчики Telegram), config.py (настройки и логирование с ротацией), repository.py (слой данных), sheets.py, stages.py, templates.py.
Реализовал синхронизацию с Google Sheets: чтение — из кэша в памяти (мгновенный отклик бота), запись — в фоне через asyncio, с автоматическими повторными попытками и переподключением при сбоях API, чтобы падение сети не роняло бота.
Добавил обработчики всех 13 команд, включая пошаговые диалоги через ConversationHandler: /new — 6 шагов создания карточки клиента, /broadcast — выбор получателей чекбоксами с подтверждением и отчётом о доставке.
Настроил автоматизацию через JobQueue: ежедневные напоминания операторам по расписанию и периодическое авто-перечитывание таблицы, чтобы правки менеджера подхватывались без перезапуска бота.
Покрыл ключевую логику 69 unit-тестами (pytest) на фейковой Google-таблице и фейковых Telegram-объектах, без обращения к реальным API. Подготовил инструкцию по деплою на VPS с автозапуском через systemd.
Бот работает в проде и полностью закрывает сценарий сопровождения клиента: от первого контакта (/new) до перевода на реальный счёт (/activate) и рассылки (/broadcast). Оператор ведёт всех клиентов из Telegram, без переключения в отдельную CRM — вся база хранится в привычной Google-таблице.
Устойчивость к сбоям (ретраи, переподключение) и автоматические напоминания сняли с оператора необходимость помнить о задачах вручную. Полный код, документация и 69 автотестов опубликованы в открытом репозитории: github.com/hulinaizba/telegram-crm-bot