Обсудить проект

Наша веб-студия обслуживает клиентов по подписочной модели: Wazzup24, Bitrix24, amoCRM, Яндекс.Директ, хостинг, телефония. Каждый месяц — ручная проверка 30+ подписок, выставление счетов, создание задач в CRM. На это уходило 4-6 часов. Мы написали бота, который делает это за 2 минуты.


Проблема

У нас ~15 клиентов, каждый использует 2-5 SaaS-сервисов. Итого 30+ подписок, которые нужно:

  • Проверять сроки окончания
  • Выставлять счета-оферты заранее (за 10-14 дней)
  • Создавать задачи менеджеру в Bitrix24
  • Отслеживать балансы (Яндекс.Директ, SMS.ru)
  • Ловить входящие счета от поставщиков
  • Раньше это делал менеджер вручную: заходил в каждый личный кабинет, смотрел даты, создавал счёт в Word, отправлял в чат, ставил задачу. Забывали, пропускали, клиенты оставались без WhatsApp-канала на выходных.

    Решение — BillPilot

    Бот на Python, который каждый день в 10:00:

    1. Логинится в личные кабинеты сервисов через Playwright (headless-браузер)

    2. Собирает данные о подписках и балансах

    3. Анализирует — что скоро истекает, где кончаются деньги

    4. Генерирует счёт-оферту (DOCX → PDF, с реквизитами и подписью)

    5. Отправляет алерт + счёт в Telegram

    6. Создаёт задачу в Bitrix24 на ответственного менеджера

    Почему Playwright, а не API

    Потому что у большинства SaaS-сервисов нет нормального API для партнёров:

  • Wazzup24 — API для интеграции есть, но подписки через него не видны. Пришлось логиниться в веб-интерфейс и перехватывать XHR-запрос `/api/v2/subscriptions`
  • Bitrix24 — партнёрский кабинет partners24.1c-bitrix.ru вообще без API. Плюс обязательная 2FA — генерируем TOTP-код программно через pyotp
  • AmoCRM — партнёрский кабинет только веб, аккаунты клиентов через парсинг HTML
  • Только Яндекс.Директ и SMS.ru дали нормальный API.

    Что мониторим

    СервисКак подключаемсяЧто отслеживаем
    Wazzup24Playwright + перехват API30+ каналов (WhatsApp, Telegram, Instagram) — сроки подписок
    Яндекс.ДиректREST APIБаланс, расход/день, прогноз "хватит на N дней"
    Bitrix24Playwright + TOTP 2FAЛицензия клиента, дата истечения
    amoCRMPlaywrightПодписки, тарифы, сроки
    AIDeployREST APIБаланс AI-агентов
    SMS.ruAPIБаланс SMS-рассылок
    GmailIMAPВходящие счета от поставщиков (Diginetica, UIS, хостинг)

    Как устроен алерт

    Бот классифицирует подписки по срочности:

  • 🔴 **Expired** — уже истекла, срочно!
  • 🟠 **Critical** — осталось ≤3 дня
  • 🟡 **Warning** — осталось ≤10 дней
  • ✅ **OK** — всё хорошо
  • Для critical и warning:

    1. Генерируется счёт-оферта — DOCX по шаблону с реквизитами, автоинкрементным номером, суммой с учётом партнёрской скидки

    2. Счёт + алерт уходит в Telegram

    3. Создаётся задача в Bitrix24 с дедлайном, ответственным и наблюдателем

    Генерация счетов

    Самое интересное — автоматическая генерация счетов-оферт. Бот:

  • Берёт шаблон DOCX с реквизитами ИП
  • Подставляет: номер счёта, дату, наименование услуги, период, сумму
  • Добавляет электронную подпись
  • Конвертирует в HTML для отправки
  • Сохраняет PDF для архива
  • Счета нумеруются автоматически (сейчас #187 и растёт). Нет ручной работы вообще.

    Bitrix24 + TOTP

    Отдельная боль — создание задач в Bitrix24. У Bitrix24 нормальный REST API, но для партнёров-интеграторов обязательная двухфакторная авторизация, которую нельзя отключить.

    Решение: Playwright логинится с email/паролем, затем программно генерирует TOTP-код через pyotp и вводит его. После логина — вызывает BX.rest.callMethod() прямо в браузере для создания задачи.

    Костыль? Да. Работает стабильно? Тоже да — 13 из 13 запусков без ошибок.

    Мониторинг входящих счетов из Gmail

    Бот подключается к Gmail по IMAP и ищет письма от конкретных поставщиков:

  • Diginetica (поисковый сервис для сайта)
  • UIS/Новосистем (телефония)
  • AdminVPS (хостинг)
  • Находит вложения-счета (PDF), пересылает в Telegram и создаёт задачу "оплатить счёт" в Bitrix24.

    Результат

    За первую неделю работы бот:

  • Обработал **82 проверки** по 7 сервисам
  • Сгенерировал и отправил **22 счёта-оферты**
  • Поймал **2 критические** подписки (которые менеджер пропустил бы)
  • Переслал **10 входящих счетов** из Gmail
  • Менеджер больше не заходит в личные кабинеты вручную. Всё приходит в Telegram — посмотрел, оплатил (или переслал клиенту), закрыл задачу.

    Стек

  • Python 3.12 — основной язык
  • Playwright — headless-браузер для логинов в сервисы без API
  • pyotp — генерация TOTP-кодов для 2FA
  • python-docx — генерация счетов из шаблона
  • IMAP — чтение Gmail
  • systemd timer — ежедневный запуск в 10:00
  • ~3500 строк кода — весь проект
  • Сколько стоила разработка

    [ЗАПОЛНИТЬ: часы/стоимость разработки, или убрать секцию]

    Планы

  • Добавить мониторинг новых сервисов (Getcourse, Tilda, etc.)
  • Дашборд со сводкой всех подписок и расходов (уже есть прототип на порту 8350)
  • Интеграция с банковскими выписками — автоматическая сверка оплат

  • *Если вашей IT-компании нужна автоматизация биллинга — пишите, поможем настроить аналогичную систему.*

    *FriendAdmin — веб-студия, разработка сайтов, CRM, AI-автоматизация.*

    *friendadmin.ru*