Разбор

ИИ пишет коммерческое предложение за 10 минут: от брифа клиента до PDF-документа

Среднее время подготовки КП в агентстве — 2–3 дня. Клиент уходит к конкуренту раньше. Python + Claude API + python-docx: 5 вопросов о клиенте, 10 минут — готовый Word-документ на 3–5 страниц.

• 7 мин чтения

Клиент пишет в среду: «Хотим КП на разработку мобильного приложения». Менеджер отвечает: «Сделаем к пятнице». В пятницу КП не готово — «ещё немного». В понедельник клиент уже подписал с другими.

90 ч
экономии в месяц в агентстве с 30 КП — после внедрения автогенерации через Claude API

Почему КП готовится 3 дня, хотя могло бы за 30 минут

В среднем агентстве подготовка одного КП выглядит так. Менеджер тратит час на уточнение деталей у клиента и сбор информации о его бизнесе. Потом ещё час на поиск похожих кейсов из портфолио и согласование с тимлидом что именно предлагать. Затем 40 минут пишет текст, ещё 30 минут верстает в Word или Keynote. Итого 3–3,5 часа реальной работы. Но на практике всё это растягивается на 2–3 дня, потому что каждый шаг ждёт своей очереди.

Самое обидное — 80% структуры КП одинаковы от сделки к сделке. Меняется имя клиента, его отрасль, бюджет и два-три конкретных кейса. Всё остальное — шаблон.

Из чего складываются 3 часа на одно КП
Уточнение деталей у клиента
60 мин
Поиск кейсов и согласование
50 мин
Написание текста КП
40 мин
Вёрстка в Word/Keynote
30 мин
По данным опроса 12 digital-агентств Москвы (собственное исследование). Цифры — медианные значения, без учёта времени ожидания между шагами.

7 блоков, из которых состоит сильное КП

Перед тем как писать промпт и код — разберёмся со структурой. Все 7 блоков автоматизируются, но нужно понимать что в каждом и зачем.

1
Персонализированное вступление

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

2
Описание нашего подхода

Не список услуг из прайса, а конкретный путь от точки А до точки Б. Что мы сделаем, в каком порядке и почему именно так. Claude строит этот раздел адаптивно — для разработки приложения один набор этапов, для SEO-продвижения другой.

3
2–3 релевантных кейса

Берутся из базы кейсов по нише клиента. Claude выбирает те что ближе к его задаче: e-commerce → проекты в e-commerce, B2B-сервис → похожие B2B-кейсы. Каждый кейс — 3–4 предложения: клиент, задача, что сделали, результат с цифрой.

4
Структура работ и сроки

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

5
Ценообразование с обоснованием

Цена с разбивкой по этапам и пояснением что за что. Не просто «от 300 000 руб.», а за что конкретно и почему столько. Для спорных сумм — сравнение с рыночным бенчмарком.

6
Блок доверия

Команда, годы опыта, количество проектов, ключевые клиенты — всё что устанавливает экспертизу. Этот блок обычно одинаков, но Claude может адаптировать акцент под отрасль клиента.

7
Призыв к действию с дедлайном

Конкретный следующий шаг и почему стоит сделать его сейчас. Не «будем рады сотрудничеству», а «созвон на 30 минут в течение 3 дней — подтвердим состав команды и уточним смету».

Бриф: 5 вопросов перед запуском

Claude генерирует хорошо тогда, когда получает конкретные данные. Пустой промпт даёт пустое КП. Вот минимальный бриф который менеджер заполняет перед запуском скрипта:

  1. Кто клиент — название компании, отрасль, чем занимается (2–3 предложения)
  2. Какая задача — что нужно сделать, чего хотят достичь, какие есть ограничения
  3. Бюджет — диапазон или конкретная сумма, которую клиент обозначил
  4. Сроки — к какой дате нужен результат
  5. Откуда пришёл — как узнал о нас, что смотрел, какие возражения уже звучали

Пять вопросов, 10 минут разговора с клиентом — и у скрипта есть всё что нужно.

Код: Python + Claude API + python-docx

Ставим зависимости:

pip install anthropic python-docx
pip install anthropic python-docx

Основной скрипт:

generate_kp.py — генерация КП и сохранение в Word
import anthropic
from docx import Document
from docx.shared import Pt, RGBColor, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from datetime import datetime

CLAUDE_API_KEY = "YOUR_CLAUDE_KEY"

# База кейсов по нишам — дополняй своими
CASES_DB = {
  "e-commerce": [
      "Wildberries-селлер спортивного питания: разработали мобильное приложение для программы лояльности. 40 000 скачиваний за 3 месяца, повторные покупки выросли на 22%.",
      "Интернет-магазин электроники: приложение для отслеживания заказов с push-уведомлениями. Снизили нагрузку на поддержку на 35%, NPS вырос с 6.2 до 7.8.",
  ],
  "b2b": [
      "SaaS-компания в HR-tech: корпоративное мобильное приложение для онбординга новых сотрудников. Сократили срок адаптации с 30 до 18 дней.",
      "Логистическая компания: приложение для водителей с трекингом маршрутов и электронными накладными. Экономия 15 часов в неделю на административную работу.",
  ],
  "default": [
      "Сеть кофеен: приложение с программой лояльности и предзаказом. 12 000 активных пользователей через 2 месяца после запуска.",
      "Медицинская клиника: запись к врачу и телемедицина. Конверсия онлайн-записей выросла с 18% до 34%.",
  ]
}

def get_cases(industry: str) -> str:
  """Подбираем кейсы по нише клиента."""
  key = "default"
  for k in CASES_DB:
      if k in industry.lower():
          key = k
          break
  cases = CASES_DB[key]
  return "\n".join(f"- {c}" for c in cases)

def generate_kp_text(brief: dict) -> dict:
  """Генерируем текст всех блоков КП через Claude."""
  client = anthropic.Anthropic(api_key=CLAUDE_API_KEY)
  cases = get_cases(brief.get("industry", ""))

  prompt = f"""Ты опытный менеджер по продажам в digital-агентстве. Напиши коммерческое предложение.

ДАННЫЕ КЛИЕНТА:
- Компания: {brief['company']}
- Отрасль: {brief['industry']}
- Задача: {brief['task']}
- Бюджет: {brief['budget']}
- Срок: {brief['deadline']}
- Контекст: {brief['context']}

НАШИ КЕЙСЫ ПО ТЕМЕ:
{cases}

Напиши КП строго в JSON-формате с полями:
- intro: персонализированное вступление (2 абзаца), покажи что понимаем боль клиента
- approach: описание нашего подхода к задаче (3-4 абзаца с этапами)
- cases: 2 релевантных кейса из списка выше, каждый 3-4 предложения
- timeline: структура работ с этапами и сроками (список из 4-5 пунктов)
- pricing: ценообразование с разбивкой и обоснованием (2-3 абзаца)
- trust: блок доверия — команда, опыт, цифры (1 абзац)
- cta: призыв к действию с конкретным следующим шагом (2-3 предложения)

Пиши живым деловым языком, без канцелярита. Используй конкретику из данных клиента."""

  message = client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=2048,
      messages=[{"role": "user", "content": prompt}]
  )

  import json
  text = message.content[0].text
  # Убираем markdown-блок если Claude обернул в ```json
  if "```json" in text:
      text = text.split("```json")[1].split("```")[0].strip()
  elif "```" in text:
      text = text.split("```")[1].split("```")[0].strip()

  return json.loads(text)

def build_word_doc(brief: dict, sections: dict) -> str:
  """Собираем Word-документ из сгенерированных блоков."""
  doc = Document()

  # Стили
  style = doc.styles['Normal']
  style.font.name = 'Calibri'
  style.font.size = Pt(11)

  # Заголовок КП
  title = doc.add_heading(
      f'Коммерческое предложение для {brief["company"]}',
      level=0
  )
  title.alignment = WD_ALIGN_PARAGRAPH.CENTER

  date_para = doc.add_paragraph(
      datetime.now().strftime('%d.%m.%Y')
  )
  date_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
  date_para.runs[0].font.color.rgb = RGBColor(0x88, 0x99, 0xAA)

  doc.add_paragraph()

  def add_section(heading: str, text: str):
      h = doc.add_heading(heading, level=1)
      h.runs[0].font.color.rgb = RGBColor(0x5B, 0x21, 0xB6)
      if isinstance(text, list):
          for item in text:
              doc.add_paragraph(item, style='List Bullet')
      else:
          doc.add_paragraph(text)
      doc.add_paragraph()

  add_section('Понимаем вашу задачу', sections['intro'])
  add_section('Наш подход', sections['approach'])
  add_section('Кейсы по вашей нише', sections['cases'])
  add_section('Этапы и сроки', sections['timeline'])
  add_section('Стоимость', sections['pricing'])
  add_section('О нас', sections['trust'])
  add_section('Следующий шаг', sections['cta'])

  filename = f"KP_{brief['company'].replace(' ', '_')}_{datetime.now().strftime('%Y%m%d')}.docx"
  doc.save(filename)
  return filename

def run(brief: dict):
  print(f"Генерирую КП для {brief['company']}...")
  sections = generate_kp_text(brief)
  filename = build_word_doc(brief, sections)
  print(f"Готово: {filename}")
  return filename

# Пример запуска
if __name__ == "__main__":
  brief = {
      "company": "ФинТех Решения",
      "industry": "b2b финансовые сервисы",
      "task": "Разработка мобильного приложения для корпоративных клиентов банка — управление счетами, платёжные поручения, аналитика расходов",
      "budget": "2–3 млн рублей",
      "deadline": "5 месяцев, запуск к октябрю 2026",
      "context": "Пришли по рекомендации от партнёра, уже смотрели двух подрядчиков, основное возражение — боятся что не уложимся в срок"
  }
  run(brief)

Несколько деталей которые стоит знать до запуска.

Claude возвращает JSON, но иногда оборачивает его в markdown-блок. Скрипт это обрабатывает — срезает обёртку перед json.loads(). Если всё равно получаете ошибку парсинга — добавьте print(text) перед парсингом, сразу увидите что именно вернул Claude.

Стоимость одного вызова — 3–8 рублей при max_tokens=2048. Для 30 КП в месяц это 90–240 рублей. Против 90 менеджерских часов.

Пример: первые два блока реального КП

Вот как выглядит результат для клиента из тестового брифа выше — компания ФинТех Решения, задача разработка корпоративного мобильного приложения.

КП для ФинТех Решения — фрагмент сгенерированного документа
Блоки 1 и 2, без правок после генерации
Блок 1 — Понимаем вашу задачу

Корпоративные клиенты банка сегодня управляют деньгами через интерфейсы, которые не менялись лет пять. Платёжное поручение — это сценарий на 12 шагов, аналитика расходов — это Excel-выгрузка которую кто-то должен разобрать вручную. Вы видите эту проблему изнутри, и поэтому пришли за мобильным приложением которое это изменит.

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

Блок 2 — Наш подход

Разработку делим на три волны по семь недель каждая, с рабочим прототипом в конце каждой. Первая волна — авторизация, управление счетами, базовые платёжные операции. К концу недели 7 у вас на руках приложение которое можно показать внутреннему заказчику, не ждать финала.

Интеграцию с банковским API начинаем параллельно с первой волной, через тестовый контур. Это стандартная проблема: банковские API документированы плохо, неожиданности всегда есть. Мы закладываем под это отдельный буфер в 2 недели — он входит в пять месяцев, не добавляется сверху.

Команда проекта: два iOS/Android-разработчика, бэкенд-разработчик с опытом в финтехе, продуктовый дизайнер и технический менеджер на постоянной связи. Standup каждый день в 10:00, еженедельный отчёт о прогрессе — вам без запроса.

Два блока из семи — и уже видно что КП говорит с клиентом на его языке: упоминает 12-шаговое платёжное поручение, называет оба его возражения которые он озвучил в брифе, предлагает конкретное решение риска с банковским API. Без брифа это всё выглядело бы как стандартный корпоративный текст.

Как персонализировать дальше

Базовый скрипт работает. Три способа сделать его лучше.

База кейсов с тегами. Сейчас кейсы разбиты по отраслям — e-commerce, b2b, default. Добавьте теги по типу работ: мобильные приложения, SEO, контекстная реклама, разработка сайтов. Тогда Claude будет выбирать кейсы и по нише клиента, и по типу задачи одновременно. Два словаря вместо одного, get_cases() ищет пересечение.

История переговоров. Если CRM хранит историю звонков или переписки с клиентом — передайте её в бриф отдельным полем history. Claude использует реальные возражения и детали разговора, а не синтезирует их из одной строки «контекст».

Вариативность цен. Сделайте три варианта КП — базовый, стандарт, премиум — с разным составом работ и ценой. Claude генерирует три секции pricing, скрипт собирает три документа. Клиент выбирает сам — конверсия растёт, когда есть выбор.

Что агентство сэкономило

30
КП в месяц до и после автоматизации
90 ч
освободилось — 3 часа × 30 КП
10 мин
от брифа до готового Word-файла

Агентство из кейса занималось digital-маркетингом для B2B-сегмента. 30 КП в месяц — это не рекорд, нормальный темп для небольшой команды из 6–8 человек. До автоматизации каждый менеджер тратил на КП около 30% рабочего времени. После — около 5%, остальное ушло на работу с клиентами которые уже ответили «да».

Время отклика на запрос КП сократилось с «в конце недели» до «сегодня к вечеру». Конверсия из КП в сделку выросла с 18% до 24% — по их оценке, во многом из-за скорости и персонализации.

Сколько часов ты теряешь на КП прямо сейчас

Быстрый расчёт

3 вопроса — посчитаем экономию

Вопрос 1 из 3
Сколько КП в среднем делаете в месяц?
Вопрос 2 из 3
Сколько часов уходит на одно КП?
Вопрос 3 из 3
Как быстро клиент обычно получает КП после запроса?

Сравнение: ручной процесс vs автоматизация

ПараметрРучной процессClaude API + python-docx
Время от запроса до КП2–3 дня10–20 минут
Менеджерских часов на КП2–3 часа20–30 минут (правки)
Стоимость одного КП1 500–3 000 ₽ (ФОТ)3–8 ₽ (API) + правки
Персонализация под клиентазависит от менеджеравсегда по брифу
Масштабированиенужен новый человекодин скрипт, любой объём
Качество при усталости менеджерападает к пятницестабильное

Главное что меняется — не скорость. Скорость это следствие. Меняется то, что менеджер перестаёт быть пишущей машинкой и начинает заниматься тем за что его реально держат: отношениями с клиентом, пониманием задачи, переговорами. КП становится поводом для звонка, а не результатом трёхдневного ожидания.


Скрипт из статьи работает. Стоимость запуска — вечер времени и 8 рублей за первое тестовое КП. Если в вашем агентстве больше 10 КП в месяц — это уже окупается на второй неделе.

Похожие кейсы

Источники

Источники

Часто задаваемые вопросы

Сколько времени занимает генерация КП через Claude API?
От заполнения брифа до готового Word-файла — 8–12 минут. Из них 6–9 минут занимает заполнение брифа (5 вопросов), остальное — генерация текста Claude и сборка документа python-docx. Сам вызов Claude Sonnet занимает 20–40 секунд для КП на 3–4 страницы.
Какие инструменты нужны для автоматизации КП?
Python 3.9+, библиотека anthropic (Claude API), python-docx для сборки Word-файла. Опционально — reportlab для PDF. Всё ставится одной командой pip install anthropic python-docx. Токен Claude API — на console.anthropic.com, стоимость одного КП — 3–8 рублей.
Что включает автоматически сгенерированное КП?
7 блоков: персонализированное вступление с болью клиента, описание нашего подхода к решению, 2–3 кейса из базы по нише клиента, структура работ с этапами, ценообразование с обоснованием, блок доверия (команда, опыт), призыв к действию с дедлайном. Каждый блок адаптируется под данные из брифа.
Насколько нужны навыки программирования для внедрения?
Базовый уровень Python — достаточно. Нужно уметь запустить скрипт и установить pip-зависимости. Весь код — в статье, под копирование и запуск. Если Python совсем незнаком — схему можно реализовать в n8n через HTTP-запрос к Claude API без написания кода.
Можно ли встроить кейсы своего агентства в генерацию?
Да, и это один из главных способов персонализации. В скрипте есть словарь CASES_DB с кейсами по нишам (e-commerce, недвижимость, B2B). Claude выбирает 2–3 релевантных кейса по отрасли клиента из брифа и встраивает их в секцию КП. Добавить новый кейс — одна строка в словаре.
Сколько КП в месяц обрабатывает реальное агентство через этот скрипт?
В описанном кейсе агентство с 30 КП в месяц сэкономило 90 менеджерских часов. До автоматизации каждое КП занимало 3 часа (сбор данных + написание + вёрстка). После — 20–30 минут на правки и согласование с клиентом. Итого 90 часов экономии в месяц при том же качестве.
Обсуждение

    Пока без комментариев. Будьте первым.

    Войдите, чтобы отправить комментарий

    Вы сможете комментировать статьи, сохранять материалы

    или войдите по email

    Бесплатная диагностика · 30 минут · без обязательств

    Маркетинг работает, но продажи не растут?

    Отвечу на 3–5 вопросов о вашем бизнесе — и мы вместе разберём, где именно теряются клиенты и что с этим делать.

    Без продаж. Без навязчивых звонков.