AI-автоматизація генерації комерційних пропозицій
Менеджер витрачає 1–3 години на КП для кожного клієнта. AI-система генерує персоналізовану комерційну пропозицію за 2–5 хвилин: витягує дані з CRM, підбирає релевантні кейси, формулює цінностну пропозицію під конкретний біль клієнта, збирає PDF з брендовим дизайном.
Архітектура системи
Дані CRM (AmoCRM/Bitrix24) + шаблон галузі
↓ GPT-4o: персоналізація контенту та структури
↓ Підбір кейсів з бази знань (vector search)
↓ Генерація PDF (WeasyPrint / python-docx)
↓ Відстеження відкриття (pixel tracking / DocuSign)
Генератор персоналізованої КП
from openai import AsyncOpenAI
from dataclasses import dataclass
import json
client = AsyncOpenAI()
@dataclass
class ProposalBrief:
client_name: str
client_company: str
industry: str
pain_points: list[str] # з нотаток менеджера в CRM
budget_tier: str # small (<500k), mid (500k-3M), enterprise (3M+)
decision_maker_role: str # CTO, CEO, CMO, Head of IT
service_type: str
relevant_cases: list[dict] # з бази кейсів
manager_name: str
deadline_pressure: bool = False
async def generate_commercial_proposal(brief: ProposalBrief) -> dict:
cases_summary = "\n".join([
f"- {c['client']} ({c['industry']}): {c['result']}"
for c in brief.relevant_cases[:3]
])
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Ви — B2B-копірайтер, експерт у переконливих комерційних пропозиціях.
Створіть КП, зосереджену на тому, хто приймає рішення: {brief.decision_maker_role}.
СТРУКТУРА:
1. Персональне привітання (біль клієнта, не наші досягнення)
2. Розуміння проблеми (покажіть, що ви розумієте виклик)
3. Наше рішення (конкретне для їхнього завдання, не універсальна послуга)
4. Чому ми (кейси, цифри, не слова)
5. Що ви отримаєте (вимірюваний результат)
6. Наступні кроки (конкретний CTA з датою)
Тон: впевнений, без лестощів чи клішейв ("раді запропонувати...").
Рівень бюджету клієнта: {brief.budget_tier} — відрегулюйте деталь відповідно.
{"Додайте акцент на термін рішення." if brief.deadline_pressure else ""}
Повертає JSON: {{executive_summary, problem_statement, solution_description, why_us, deliverables, next_steps, subject_line}}"""
}, {
"role": "user",
"content": f"""
Клієнт: {brief.client_name}, {brief.client_company} ({brief.industry})
Болі: {', '.join(brief.pain_points)}
Послуга: {brief.service_type}
Релевантні кейси:
{cases_summary}
Менеджер: {brief.manager_name}
"""
}],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)
Пошук релевантних кейсів через векторну БД
from openai import OpenAI
import numpy as np
sync_client = OpenAI()
def find_relevant_cases(
client_industry: str,
pain_points: list[str],
case_database: list[dict],
top_k: int = 3
) -> list[dict]:
"""Знайдіть кейси семантично подібні до завдання клієнта"""
query = f"{client_industry}: {', '.join(pain_points)}"
query_embedding = sync_client.embeddings.create(
model="text-embedding-3-small",
input=query
).data[0].embedding
scored_cases = []
for case in case_database:
case_text = f"{case['industry']}: {case['challenge']} → {case['result']}"
case_embedding = sync_client.embeddings.create(
model="text-embedding-3-small",
input=case_text
).data[0].embedding
similarity = np.dot(query_embedding, case_embedding) / (
np.linalg.norm(query_embedding) * np.linalg.norm(case_embedding)
)
scored_cases.append((similarity, case))
return [case for _, case in sorted(scored_cases, reverse=True)[:top_k]]
Збірка PDF з брендовим дизайном
from weasyprint import HTML, CSS
from jinja2 import Environment, FileSystemLoader
import base64
def render_proposal_pdf(proposal_data: dict, template_name: str = "default") -> bytes:
env = Environment(loader=FileSystemLoader("templates/proposals"))
template = env.get_template(f"{template_name}.html")
html_content = template.render(**proposal_data)
# Брендовий CSS зі змінними кольорів бренду
css = CSS(string="""
@page { size: A4; margin: 20mm 15mm; }
body { font-family: 'Inter', sans-serif; color: #1a1a2e; }
.highlight { background: #f0f4ff; border-left: 4px solid #4361ee; padding: 12px; }
.case-block { border: 1px solid #e2e8f0; border-radius: 8px; padding: 16px; }
""")
pdf_bytes = HTML(string=html_content).write_pdf(stylesheets=[css])
return pdf_bytes
Інтеграція з CRM
Система підключається до AmoCRM або Bitrix24 через API: коли угода переходить на етап "Підготовка КП", автоматично запитує дані контакту, історію переговорів з нотаток менеджера, тип послуги з поля угоди. Менеджер отримує чернетку протягом 2–3 хвилин і вносить остаточні правки в веб-редактор перед відправкою.
Відстеження реалізується через піксель в HTML-листі або DocuSign API — менеджер бачить, коли клієнт відкрив КП та скільки часу провів на кожній сторінці.
Варіанти персоналізації за роллю особи, яка приймає рішення
| Роль | Акцент у КП | Мова |
|---|---|---|
| CEO | ROI, стратегічний вплив, ризики бездіяльності | Бізнес-результати |
| CTO | Архітектура, технологія, сроки, якість коду | Технічна |
| CFO | TCO, окупність, економія на FTE | Фінансові метрики |
| CMO | Метрики залучення, конверсія, brand awareness | Маркетингові KPI |
Генератор КП з інтеграцією однієї CRM та PDF-експортом — 2–3 тижні. Повна платформа з базою кейсів, відстеженням, A/B-тестуванням версій та аналітикою конверсії — 6–8 тижнів.







