Кейс: «Бот-маркетолог на Python — как я победил гигантские промты и тарифы на токены»

Кейс: «Бот-маркетолог на Python — как я победил гигантские промты и тарифы на токены»


KORZH

Введение

Люблю и умею решать маркетинговые задачи — от разработки простого приветственного бота до создания масштабных клубных систем с рекуррентной оплатой. Но в этот раз ко мне пришли с настоящим «монстром» маркетинга: чат-ботом на базе искусственного интеллекта, который должен был решать самые сложные задачи для предпринимателей. От генерации продающих текстов и контент-планов до отправки индивидуальных напоминаний по всем пользователям.

Сразу скажу, что это не было стандартной «собачкой, которая говорит “Привет, я бот!”». Это был целый «дипломированный ассистент-маркетолог» c собственной админ-панелью, интеграцией платежей и библиотекой из 75 000+ символов промтов, которые казалось вот-вот превратятся в Википедию по маркетингу.

Обращение клиента

Клиент, девушка маркетолог в паре со свое сотрудницей, пришли с почти чётким запросом:

  • «Хочу, чтобы все рутинные маркетинг-задачи решались одним ботом. Чтобы он умел вести учёт подписчиков, подключать реферальную программу, хранить тысячи промтов и не сжигал мне всю кассу на OpenAI-токены за счёт огромного количества материала которым необходимо обучить бота».

Уже на этом этапе я насторожился:

  1. Тысячи промтов — нужно продумать структуру хранения и механизмы быстрого поиска.
  2. Интеграция с платёжными системами (YooMoney или YooKassa карты банков РФ, автопродление подписки).
  3. Экономия токенов — ведь плата за OpenAI может «съесть» весь бюджет и оставить клиента без средств на кофе.

Как говорится, «Вызов принят!».

Проблемы и вызовы

  1. Гигантские промты:
  2. Когда я подумал о «модульном разделении» на 25 подкатегорий и файлы с промтами на 75 000+ символов, стало ясно, что GPT будет «жевать» много текста и это нужно реализовывать как глобальный вопрос. На первой итерации бот «проглотил» 60 000 токенов за раз и поглотил бы все деньги API кабинета, если бы не оперативное вмешательство.
  3. Высокая стоимость токенов:
  4. OpenAI-токены в больших объёмах больно били по кошельку клиента. Нужно было оптимизировать промты, не теряя их смысла и структуры.
  5. Шахматы с подписками:
  6. Отслеживание подписчиков (триал, платная подписка, без подписки).
  7. Автоматическое продление.
  8. Реферальная программа с бонусными запросами.
  9. Отслеживание истечения подписки и удобные напоминания.
  10. Разрозненность данных:
  11. У клиента были тонны маркетинговых наработок — тексты, видео, чек-листы, гайды. Всё это хранилось в разных местах: Google Документы, Excel-таблицы, тетрадка на коленке. Надо было систематизировать в одном решении.
  12. Платежи:
  13. Требовалось подключить полный цикл обработки платежей через Flask: получение уведомления, проверка суммы, обновление подписки и рассылка уведомлений о платеже как покупателю так и администраторам.

Предпринятые решения

1. Сжатие и оптимизация промтов

  • Мы разработали «Модуль экономии токенов» об этом модуле читайте чуть ниже. В основе лежит идея, что длинный промт передаётся не целиком, а выборочно, под конкретную задачу.
  • Промты разбили на блоки по 2–3 тысячи символов. Если пользователю нужен блок «Продажи через соцсети», бот подгружает только нужный модуль, а не сразу весь гигантский текст.

В результате расход токенов снизился с 60 000 до 5 000 за один полноценный маркетинговый запрос.


Дополнение: Как модуль gpt_module_prompts.py экономит токены
При создании «Модуля экономии токенов» мы столкнулись с задачей: Как не передавать в GPT всю гигантскую простыню текста? Нужно было разбить исходные «промты-монстры» на логические блоки, чтобы при запросе к OpenAI-API загружать только нужные фрагменты, а не весь текст за раз.
Наше решение — gpt_module_prompts.py. Вот, как оно работает и чем помогает:
Пошаговое выделение смысловых частей
В файле есть функция split_prompt_to_structure, которая проходит по списку «секции» (introduction, instructions, reasoning, question_blocks, final_instructions).
Для каждой секции формируется отдельный запрос к GPT — но только по нужному контенту (тот же текст, но с конкретной задачей: «извлечь вопросы», «сформировать рекомендации» и т. д.).
В итоге мы не пытаемся «засунуть» во входной промт всю стену текста; мы делаем серию более коротких запросов, где GPT обрабатывает ровно тот кусок информации, который нужен для решения текущей подзадачи.
Сегментация и гибкое взаимодействие
generate_prompt_for_section — эта функция «умно» формирует задачу для GPT, в зависимости от нужной секции. Например, для question_blocks бот фокусируется только на вопросах и не тратит токены на всю сопутствующую информацию.
Таким образом, если вам нужны только «финальные инструкции», вы запрашиваете их из GPT отдельно, без заголовков, без «всего текста целиком» и дополнительных блоков.
Перезапись и кэширование
Файл умеет проверять, была ли изменена исходная версия промта (.txt). Если да, то заново генерирует структуру (.json). Иначе использует уже готовые структурированные данные, без лишних обращений к GPT.
Это особенно важно, когда промт стабилен и его не нужно каждый раз «тянуть» целиком из OpenAI — мы экономим не только деньги, но и время на API-запросах.
Сжатие и хранение
Фактически, в итоговом .json каждое поле уже «подготовлено» GPT и не требует повторной обработки в будущем. При последующих обращениях, если эти данные не поменялись, мы можем просто подгружать нужный блок.
С точки зрения расхода токенов это огромная выгода — мы «разложили» текст на мини-«пакетики» и обращаемся к ним по мере надобности.
Гибкость для кастомных задач
Вы можете добавлять или убирать секции, в зависимости от того, какие части промта вам нужны (например, под «SMM», «SEO», «E-mail маркетинг» и т. п.). Код легко адаптировать под любые форматы.
Если GPT-модель попросили подготовить «отдельные блоки» (например, «что нужно сделать» и «чего делать не нужно»), функция generate_prompt_for_section формирует именно такие структурированные указания. Никакой траты токенов на дополнительные вступления и разглагольствования.
Итоговая польза
Сокращение расходов: Выгоднее отправлять несколько коротких запросов, чем один гигантский.
Ускорение ответа: GPT быстрее обрабатывает небольшие блоки.
Чистота структуры: Вы получаете готовые к использованию данные (JSON), пригодные для хранения, редактирования или дальнейшей автоматизации.
Легкость обновления: Изменили исходный .txt — модуль автоматически перегенерирует структуру и всё остаётся синхронизированным.
Таким образом, gpt_module_prompts.py — это не просто «скрипт-разделитель», а полноценный инструмент, позволяющий правильно «порезать» огромные маркетинговые промты, сэкономить токены и при этом не потерять контекст и смысл каждого отдельного блока. Именно он стал решающим фактором, позволившим урезать затраты с 60 000 до 5 000 токенов при работе с действительно большими объёмами текстов.


2. Библиотека промтов с чётким модульным разделением

  • Сделал 25 отдельных подкатегорий (landing, SMM, email-рассылки, SEO, коммерческие предложения и др.).
  • Каждая подкатегория — отдельный файл, лежит на сервере, к которому есть доступ только у админа через веб-интерфейс.
  • Допилил удобную систему загрузки/редактирования: захотели что-то поправить в промте — пять секунд и готово, никакой ручной правки кода.

3. Админ-панель на Flask

  • Развернул на Python (со стеком openai, python-telegram-bot, requests, apscheduler, flask, pytz).
  • Flask используется не только как база для веб-интерфейса админки, но и как «диспетчер» для платёжных уведомлений.
  • Разделы админ-панели:Статистика бота (количество пользователей, активные подписки, история запросов, затраты по токенам).
  • Управление тарифами и подписками.
  • Реферальная программа: видим, кто кого пригласил и сколько бонусных запросов заработать.
  • Создание и редактирование гайдов (описание, цена, ссылка для оплаты).

4. Интеграция с YooMoney и банками РФ

В subscription.py у нас завёлся эндпоинт(Вариант для примера):

@app.route("/payment_notification", methods=["POST"])
def payment_notification():
    """
    Эндпоинт для обработки уведомлений от YooMoney.
    """
    data = request.form
    logger.info(f"Получен POST от YooMoney: {data}")

    user_id = data.get("label")
    amount = data.get("withdraw_amount")

    if not user_id or not amount:
        logger.warning("Не переданы необходимые параметры (label, withdraw_amount). Пропускаем...")
        return "No label or withdraw_amount", 200

    logger.info(f"Обрабатываем платеж для пользователя {user_id} на сумму {amount}")

    # Сравниваем суммы с тарифами
    if amount == subscribe_month:
        duration_days = submonth
    elif amount == subscribe_six_months:
        duration_days = subsixmonth
    elif amount == subscribe_year":
        duration_days = subyear
    else:
        logger.warning(f"Неизвестная сумма платежа: {amount}. Ничего не делаем.")
        return "Unknown amount", 200

    # Обновляем подписку
    logger.info(f"Обновляем подписку для пользователя: {user_id} на {duration_days} дней")
    update_subscription(user_id, duration_days)

    logger.info(f"Отправляем уведомление для пользователя: {user_id}")
    asyncio.run(notify_user_and_admin(user_id, duration_days))
    return "OK", 200
  • Так бот узнаёт о новых оплатах, автоматически продлевает подписку пользователю и шлёт админу уведомление в Telegram.

5. Рассылки и триггерные уведомления

  • Использовал apscheduler, чтобы запускать периодические рассылки «каждый понедельник в 10:00» или напоминать за неделю до окончания подписки или ежедневно при обнаружении об окончании подписки и перевода пользователя в другой статус подписки.
  • Разделил в админ-панели рассылки на сегменты: подписчики, триал, бесплатный доступ. Так кто-то получал «У вас заканчивается подписка, продлите», а кто-то — «Пора апгрейдить свои навыки, переходим на платный тариф!».

6. Реферальная программа

  • Создал отдельный модуль, который даёт пользователям реферальные ссылки.
  • Каждый раз, когда по такой ссылке приходит новый подписчик и оплачивает тариф, рефереру добавляются бонусные GPT-запросы.

7. Модуль «Гайды» и «Контент-план»

  • Бот создаёт и хранит гайды по маркетингу, которые можно купить отдельно, не оформляя подписку.
  • После покупки (через ту же платёжную систему) пользователю открывается доступ к материалам: видео, PDF, чек-листы.
  • Для постоянных подписчиков эти материалы могут быть включены в пакет или со скидкой, в зависимости от тарифа.

Как я всё это запустил

  1. Анализ: провел переговоры с клиентом, выяснили, какой функционал критичен, а что «хочу на всякий случай» составил детальный пошаговый и структурированный ТЗ план разработки и предоставил клиенту на одобрение.
  2. Дизайн системы: нарисовал схему в MindManager, расписал как бот взаимодействует с админ-панелью и сторонними сервисами.
  3. Прототип: собрал MVP(минимально жизнеспособный продукт) с базовыми промтами и оплатой. Запустили тест для небольшой группы сотрудников агентства.
  4. Оптимизация промтов: сократил токены, внедрил выборочные подгрузки текстов.
  5. Реализация: допилил новые функции: гайды, рассылки, модуль уведомлений и аналитики, рассылка из админки разному сегменту аудитории(с подпиской и без).
  6. Тестирование: проверял платежи, бан пользователей, истечение подписки — всё в боевых условиях.
  7. Запуск: дали «зелёный свет» залил все на их сервер установил pm2, nodejs, apache, проксирование, конфиги(webhook.conf), перенаправил А записи домена на IP сервера, Certbot для получения SSL-сертификата, получил сертификат для домена, перезапустил Apache и о чудо... финальное подергивание глаза. Этот последний этап Запуск можно было бы вместить еще в одну огромную статью, но у меня не хватит на это нервов, поэтому решил хоть тут проскочить зайцем. Вы уж простите меня что сохранил вам немного зрения)

Итоги и результаты

  • Сокращение затрат на токены в 12 раз — из 60 000 до 5 000 токенов на один запрос. Клиент счастлив, ведь счета за OpenAI заметно «похудели».
  • Удобная админ-панель на Flask: клиент сам добавляет/редактирует промты и гайды. Ему не нужно будет дёргать меня по каждому чиху и ...
  • Стабильные продажи: интеграция с YooMoney и банками РФ + гибкие тарифы (триал, подписка, единоразовые гайды) дают стабильный прирост выручки по умолчанию.
  • Автоматизация рутины: выстрел в десять задач одним выстрелом. Сотрудники, которые раньше вручную выставляли счета и писали тексты, теперь могут заняться стратегией, а не рутиной.

Сервисы и инструменты

  • Python «мозг» системы.
  • Библиотеки:openai — общение с GPT-моделью.
  • python-telegram-bot — «глаза и уши» бота в Telegram.
  • requests — HTTP-запросы ко всему подряд.
  • apscheduler — планирование регулярных задач (рассылки, уведомления).
  • flask — админ-панель, приём уведомлений о платежах.
  • pytz — чтобы не было путаницы с часовыми поясами, когда отправляешь рассылку из Владивостока в Калининград.

Немного юмора для финала

  • Заказчик шутливо назвал бота «Маркетозаврик», потому что тот поглощал всё больше и больше маркетинговых кейсов. Но, сэкономив на токенах, он теперь не распугивает аудиторию одним своим аппетитом.
  • Мы иногда называем его «Почти Искусственный Интеллект», потому что он уже научился различать «я хочу Лендинг по продаже котиков» и «я хочу составить рекламу для кофейни». Что будет дальше — остаётся только догадываться.

Заключение

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

Если вы хотите, чтобы ваш бот:

  • Не ел все ваши деньги на токенах.
  • Умел продавать, рассылать и уведомлять клиентов без лишней рутины.
  • Имел гибкие тарифы и автоматические подписки.
  • При этом не утратил человеческое лицо и даже умел пошутить в чате.

Я готовы помочь! Напишите в Telegram @korzh_igor и мы обсудим ваш проект: превратим вместе вашу мечту в реальность с коммерческой жилкой.

«Не бойтесь больших промтов — бойтесь ботов без оптимизации!»
- из народной мудрости разработчиков.


👉 КАНАЛ С АУДИООТЗЫВОМ О ДАННОМ ПРОЕКТЕ - РАЗРАБОТЧИК


Report Page