Что получится в результате
Соберем ИИ-агента, который принимает бриф клиента, CRM-данные, шаблоны, цены, кейсы и бренд-правила, затем готовит структуру коммерческого предложения, тексты слайдов, таблицу условий, черновик презентации и отправляет все спорные места на согласование менеджеру.
Первая рабочая версия будет делать так:
- настройки хранятся в `settings`;
- клиенты и сделки хранятся в `crm_deals`;
- входящий бриф хранится в `proposal_briefs`;
- шаблоны презентаций хранятся в `deck_templates`;
- библиотека слайдов хранится в `slide_library`;
- продуктовые блоки хранятся в `product_blocks`;
- кейсы и доказательства хранятся в `case_studies`;
- цены и пакеты хранятся в `pricing_rules`;
- ограничения бренда хранятся в `brand_rules`;
- проверка брифа пишется в `brief_checks`;
- структура КП пишется в `proposal_outline`;
- карточки слайдов пишутся в `slide_cards`;
- коммерческие условия пишутся в `commercial_terms`;
- риски и спорные обещания пишутся в `proposal_risk_log`;
- черновики презентаций пишутся в `deck_drafts`;
- экспортные файлы пишутся в `export_queue`;
- спорные действия уходят в `approval_queue`;
- одобренные действия попадают в `execution_queue`;
- задачи продажам, продукту, юристу и дизайнеру пишутся в `task_queue`;
- история версий пишется в `version_log`;
- все решения пишутся в `audit_log`;
- ошибки данных и API пишутся в `error_log`.
В первой версии агент не отправляет КП клиенту, не утверждает цену, не обещает сроки, не меняет коммерческие условия и не публикует финальную презентацию без approval. Он собирает черновик и показывает, что нужно проверить.
Что понадобится
- n8n Cloud или self-hosted n8n.
- Google Sheets для MVP-таблиц.
- CRM или таблица сделок: HubSpot, amoCRM, Bitrix24, Pipedrive, Salesforce или CSV.
- Google Drive, OneDrive или папка с шаблонами.
- Google Slides API, Canva Connect API, PptxGenJS или ручной экспорт в PPTX.
- База продуктовых описаний, тарифов, кейсов и ограничений.
- Бренд-гайд: цвета, шрифты, тон, запреты, шаблоны слайдов.
- Канал approval: Telegram, Slack, Teams, email или задача.
- API-ключ LLM-провайдера.
- Ответственный менеджер продаж, который проверяет финальное КП.
Шаг 1. Выберите первый сценарий
Не делайте универсальный генератор всех презентаций.
Для MVP выберите один сценарий:
- коммерческое предложение по сделке из CRM;
- sales deck по шаблону;
- презентация продукта для лида;
- follow-up deck после встречи;
- proposal для RFP после разбора требований;
- короткая презентация кейса;
- обновление старого КП под нового клиента.
Самый безопасный старт: `агент готовит черновик КП по одной сделке, а менеджер проверяет цену, сроки и финальный текст`.
Проверка: сценарий можно вручную повторить на одной сделке и одном шаблоне.
Шаг 2. Запретите опасные действия
В первой версии запретите агенту:
- отправлять КП клиенту;
- утверждать цену;
- давать скидку;
- обещать срок внедрения;
- менять условия оплаты;
- менять юридические условия;
- использовать закрытый кейс без разрешения;
- вставлять персональные данные без проверки;
- создавать финальный файл без watermark `draft`;
- публиковать презентацию в общей папке клиента;
- менять CRM-стадию сделки;
- подписывать документ или отправлять на подпись.
Разрешите агенту:
- читать бриф;
- читать CRM-контекст;
- читать шаблоны;
- готовить outline;
- готовить slide cards;
- готовить draft deck;
- создавать задачи на проверку;
- отправлять approval;
- вести audit log.
Проверка: workflow не имеет действия `send email to client` и не меняет CRM.
Шаг 3. Создайте Google Sheet проекта
Создайте таблицу:
Presentation proposal agent
Добавьте листы:
settings
crm_deals
proposal_briefs
deck_templates
slide_library
product_blocks
case_studies
pricing_rules
brand_rules
brief_checks
proposal_outline
slide_cards
commercial_terms
proposal_risk_log
deck_drafts
export_queue
approval_queue
execution_queue
task_queue
version_log
audit_log
error_log
Проверка: n8n может читать и писать во все листы.
Шаг 4. Заполните settings
В `settings` добавьте колонки:
key
value
description
updated_at
Заполните минимум:
approval_required | true | финальные действия только через approval
auto_execute | false | автоприменение выключено
client_send_allowed | false | отправка клиенту запрещена
pricing_approval_required | true | цена и скидка требуют проверки
legal_terms_approval_required | true | юридические условия требуют проверки
draft_watermark_required | true | черновик должен быть помечен draft
max_slide_text_chars | 420 | лимит текста на слайд
default_deck_language | ru | язык по умолчанию
Проверка: отправка клиенту и финальный экспорт выключены.
Шаг 5. Заполните crm_deals
В `crm_deals` добавьте колонки:
deal_id
source_system
external_deal_id
client_name
contact_name
contact_email
industry
deal_stage
deal_amount
currency
manager_email
pain_points
next_step
updated_at
Пример:
DEAL-1001 | hubspot | 9001 | Север Ритейл | Анна Иванова | anna@example.ru | retail | proposal | 2500000 | RUB | sales@example.ru | долгие ответы поддержки; много ручных отчетов | отправить КП до пятницы | 2026-05-23
Проверка: у сделки есть менеджер, pain points и следующий шаг.
Шаг 6. Заполните proposal_briefs
В `proposal_briefs` добавьте колонки:
brief_id
deal_id
audience
goal
problem
desired_solution
must_include
must_avoid
deadline
source_notes_url
status
created_at
Статусы:
new
needs_data
checked
outline_ready
draft_ready
approval_pending
approved
rejected
Пример:
BR-1001 | DEAL-1001 | коммерческий директор и CTO | показать AI-агента для поддержки | поддержка отвечает медленно | MVP за 6 недель | кейс retail, интеграция с CRM, цена | обещание 100% автоматизации | 2026-05-27 | https://drive/notes | new | 2026-05-23
Проверка: если `problem`, `audience` или `deadline` пустые, бриф получает `needs_data`.
Шаг 7. Заполните deck_templates
В `deck_templates` добавьте колонки:
template_id
name
use_case
file_url
slide_count
layout_names
brand_id
owner
status
updated_at
`use_case`:
commercial_proposal
sales_deck
product_pitch
case_study
research_summary
rfp_response
Проверка: есть хотя бы один активный шаблон для `commercial_proposal`.
Шаг 8. Заполните slide_library
В `slide_library` добавьте колонки:
slide_id
template_id
layout_name
slide_role
title_placeholder
body_placeholder
asset_placeholder
max_text_chars
status
updated_at
`slide_role`:
cover
client_context
problem
solution
workflow
timeline
pricing
case_study
team
next_step
appendix
Проверка: у каждого slide role есть layout и лимит текста.
Шаг 9. Заполните product_blocks
В `product_blocks` добавьте колонки:
block_id
product_name
block_type
title
text
proof
allowed_industries
forbidden_claims
owner
status
updated_at
`block_type`:
value_prop
feature
workflow
integration
security
implementation
support
Проверка: продуктовые тезисы содержат proof или пометку, что доказательства нужны.
Шаг 10. Заполните case_studies
В `case_studies` добавьте колонки:
case_id
client_name
industry
problem
solution
result_text
metrics
public_allowed
allowed_for_industries
source_url
status
updated_at
Проверка: кейс с `public_allowed = false` не попадает в клиентский deck.
Шаг 11. Заполните pricing_rules
В `pricing_rules` добавьте колонки:
pricing_id
product_name
package_name
base_price
currency
discount_limit_pct
implementation_weeks
included_scope
excluded_scope
approval_required_above
status
updated_at
Пример:
PRICE-AI-SUPPORT-MVP | AI Support Agent | MVP | 2500000 | RUB | 10 | 6 | discovery, prototype, integrations | voice bot, custom BI | 2000000 | active | 2026-05-23
Проверка: цена и discount limit берутся из таблицы, а не придумываются моделью.
Шаг 12. Заполните brand_rules
В `brand_rules` добавьте колонки:
brand_id
rule_type
rule_text
severity
owner
status
updated_at
`rule_type`:
tone
visual
legal
claim
logo
data
Примеры:
BRAND-1 | claim | Не писать "гарантируем рост продаж" без подтвержденного кейса | high | marketing | active | 2026-05-23
BRAND-1 | visual | Не использовать больше 6 bullets на слайд | medium | design | active | 2026-05-23
Проверка: агент умеет пометить нарушение бренда как риск.
Шаг 13. Подключите источники данных в n8n
Создайте workflow:
Presentation Proposal Agent - draft deck
Добавьте узлы:
- `Schedule Trigger` или `Webhook`;
- `Read crm_deals`;
- `Read proposal_briefs`;
- `Read deck_templates`;
- `Read slide_library`;
- `Read product_blocks`;
- `Read case_studies`;
- `Read pricing_rules`;
- `Read brand_rules`;
- `Check brief`;
- `Generate outline`;
- `Generate slide cards`;
- `Check commercial terms`;
- `LLM proposal review`;
- `Create deck draft`;
- `Send approval`;
- `Write audit_log`;
- `Write error_log`.
Проверка: workflow вручную обрабатывает один бриф и не отправляет файл клиенту.
Шаг 14. Если есть CRM, подключите read-only API
Для HubSpot:
GET /crm/v3/objects/deals/{dealId}
GET /crm/v3/objects/companies/{companyId}
GET /crm/v3/objects/contacts/{contactId}
Для amoCRM:
GET /api/v4/leads/{lead_id}
GET /api/v4/contacts/{contact_id}
GET /api/v4/companies/{company_id}
Для Bitrix24:
crm.deal.get
crm.company.get
crm.contact.get
Проверка: агент читает сделку, но не меняет стадию и не отправляет письмо.
Шаг 15. Проверьте бриф в brief_checks
В `brief_checks` добавьте колонки:
check_id
run_id
brief_id
deal_id
check_type
status
missing_fields
notes
created_at
`check_type`:
required_fields
audience
problem
pricing
case_study
legal_terms
brand_rules
source_data
Обязательные поля:
- клиент;
- аудитория;
- цель;
- проблема;
- желаемое решение;
- срок подготовки;
- менеджер;
- источник данных;
- пакет или продукт;
- ограничения и запреты.
Проверка: неполный бриф не идет в генерацию deck, а получает `needs_data`.
Шаг 16. Создайте proposal_outline
В `proposal_outline` добавьте колонки:
outline_id
run_id
brief_id
deal_id
slide_no
slide_role
slide_title
main_message
source_refs
approval_required
status
created_at
Пример структуры КП:
- титульный слайд;
- контекст клиента;
- проблема и последствия;
- предлагаемое решение;
- workflow агента;
- интеграции;
- план внедрения;
- пакет и стоимость;
- кейс или доказательство;
- следующий шаг.
Проверка: outline согласуется до генерации подробных слайдов.
Шаг 17. Создайте slide_cards
В `slide_cards` добавьте колонки:
slide_card_id
outline_id
brief_id
slide_no
layout_name
title
body_text
bullets_json
visual_hint
data_refs
risk_flags
status
created_at
Правила:
- title до 90 символов;
- body до `max_slide_text_chars`;
- не больше 6 bullets;
- каждый факт имеет `data_refs`;
- цена и срок помечаются `approval_required`;
- запрещенные claims попадают в `risk_flags`.
Проверка: карточка слайда не содержит длинный абзац вместо слайда.
Шаг 18. Создайте commercial_terms
В `commercial_terms` добавьте колонки:
terms_id
brief_id
deal_id
product_name
package_name
price
currency
discount_pct
implementation_weeks
payment_terms
scope_json
exclusions_json
approval_required
status
created_at
Статусы:
draft
needs_pricing_review
needs_legal_review
approved
rejected
Проверка: если скидка выше `discount_limit_pct`, terms получают `needs_pricing_review`.
Шаг 19. Запишите риски в proposal_risk_log
В `proposal_risk_log` добавьте колонки:
risk_id
run_id
brief_id
slide_card_id
risk_type
risk_level
evidence_json
recommended_action
owner
status
created_at
`risk_type`:
missing_data
unsupported_claim
pricing_change
discount_limit
legal_terms
confidential_case
too_much_text
no_source
client_sensitive_data
Проверка: обещание результата без кейса попадает в `unsupported_claim`.
Шаг 20. Настройте prompt для LLM proposal review
В n8n добавьте узел `LLM proposal review`.
System prompt:
Ты sales enablement редактор. Работай только с переданными данными.
Не придумывай цены, сроки, кейсы и юридические условия.
Не отправляй КП клиенту.
Если данных не хватает, верни status = needs_data.
Любую цену, скидку, срок, кейс и обещание результата отправляй на approval.
Ответ возвращай только JSON.
User prompt:
Проверь черновик коммерческого предложения.
brief:
{{$json.proposal_brief}}
deal:
{{$json.crm_deal}}
outline:
{{$json.proposal_outline}}
slide_cards:
{{$json.slide_cards}}
pricing:
{{$json.pricing_rules}}
brand_rules:
{{$json.brand_rules}}
case_studies:
{{$json.case_studies}}
Верни JSON:
{
"brief_id": "...",
"status": "ready_for_approval | needs_data | needs_pricing_review | needs_legal_review | blocked",
"risk_level": "low | medium | high | critical",
"summary": "...",
"evidence": ["..."],
"required_reviews": ["sales", "pricing", "legal", "design"],
"recommended_actions": [
{
"action_type": "ask_manager | fix_slide | pricing_review | legal_review | design_review | create_deck_draft",
"owner": "sales | marketing | legal | design | product",
"text": "...",
"requires_approval": true
}
]
}
Проверка: ответ валидный JSON и не содержит новых цен или кейсов.
Шаг 21. Создайте deck_drafts
В `deck_drafts` добавьте колонки:
deck_draft_id
brief_id
deal_id
template_id
deck_title
deck_url
format
watermark
status
created_at
updated_at
`format`:
google_slides
pptx
canva
pdf
Статусы:
draft
needs_review
approval_pending
approved
exported
rejected
Проверка: черновик имеет watermark `draft`, пока не пройден approval.
Шаг 22. Создайте export_queue
В `export_queue` добавьте колонки:
export_id
deck_draft_id
brief_id
format
target_folder
file_url
status
requested_by
created_at
exported_at
error_message
Статусы:
queued
manual_only
exported
failed
skipped
Проверка: клиентский PDF не экспортируется без approval.
Шаг 23. Подключите генерацию Google Slides или PPTX
Для Google Slides API используйте:
presentations.create
presentations.batchUpdate
Для PPTX через PptxGenJS:
create presentation
add slide
add text
add image
write file
Для Canva:
создать дизайн из шаблона
заполнить переменные
экспортировать после review
Проверка: создается файл draft, но не финальная версия для клиента.
Шаг 24. Настройте approval_queue
В `approval_queue` добавьте колонки:
approval_id
source
source_id
brief_id
deal_id
action_type
action_text
payload_json
risk_level
requested_by
approver
status
requested_at
approved_at
decision_comment
Статусы:
pending
approved
rejected
needs_changes
expired
В approval отправляйте:
- outline КП;
- цены и скидки;
- сроки внедрения;
- кейсы клиентов;
- юридические условия;
- финальный deck;
- экспорт в PDF;
- отправку клиенту.
Проверка: без `approved` нет записи в `execution_queue`.
Шаг 25. Сделайте Telegram approval
В n8n добавьте узел `Telegram`.
Сообщение:
BR-1001: КП для Север Ритейл
Deck: 10 слайдов
Цена: 2 500 000 RUB
Срок: 6 недель
Риски: скидка 10%, кейс retail публичный, срок требует проверки delivery.
Approve: /approve CP-770
Edit: /edit CP-770
Reject: /reject CP-770
После `/approve CP-770` workflow должен:
- найти `approval_id`;
- проверить статус `pending`;
- записать `approved`;
- заполнить `approved_at`;
- передать действие в `execution_queue`;
- записать событие в `audit_log`.
Проверка: `/reject` не экспортирует PDF и не отправляет КП.
Шаг 26. Настройте execution_queue
В `execution_queue` добавьте колонки:
execution_id
approval_id
brief_id
deal_id
action_type
target_system
payload_json
status
executed_at
result_json
error_message
Статусы:
queued
manual_only
executed
failed
skipped
Для MVP используйте `manual_only`: агент готовит deck, а менеджер сам отправляет клиенту.
Проверка: пока write-доступ не включен, отправка клиенту остается `manual_only`.
Шаг 27. Создайте task_queue
В `task_queue` добавьте колонки:
task_id
source
source_id
brief_id
deal_id
task_type
title
description
owner_team
assignee
priority
status
created_at
due_at
closed_at
`task_type`:
ask_manager
pricing_review
legal_review
design_review
product_fact_check
case_permission_check
deck_export
data_fix
Пример:
TASK-9001 | proposal_risk_log | RISK-1001 | BR-1001 | DEAL-1001 | pricing_review | Проверить скидку 10% | Скидка равна лимиту, нужна проверка sales lead | sales | saleslead@example.ru | high | open | 2026-05-23 | 2026-05-24 | -
Проверка: каждый риск получает владельца и срок.
Шаг 28. Настройте version_log
В `version_log` добавьте колонки:
version_id
deck_draft_id
brief_id
version_no
change_summary
changed_by
file_url
created_at
Проверка: после каждой правки появляется новая версия, а старая не затирается.
Шаг 29. Настройте audit_log
В `audit_log` добавьте колонки:
event_id
run_id
event_type
brief_id
deal_id
actor
input_hash
output_hash
summary
created_at
Пишите события:
run_started
data_loaded
brief_checked
outline_created
slide_cards_created
risk_found
deck_drafted
approval_requested
approval_approved
export_requested
task_created
run_finished
Проверка: по `run_id` можно объяснить каждый слайд и каждую цену.
Шаг 30. Настройте error_log
В `error_log` добавьте колонки:
error_id
run_id
step
source_system
brief_id
deal_id
error_type
error_message
payload_sample
status
created_at
resolved_at
`error_type`:
api_error
missing_brief
missing_template
missing_price
missing_case_permission
unsupported_claim
invalid_json
approval_error
export_error
Проверка: если цены нет, агент пишет `missing_price`, а не придумывает стоимость.
Шаг 31. Протестируйте на одном КП
Создайте тестовые данные:
crm_deals:
DEAL-TEST-001 | hubspot | 9001 | Север Ритейл | Анна Иванова | anna@example.ru | retail | proposal | 2500000 | RUB | sales@example.ru | долгие ответы поддержки; ручные отчеты | отправить КП до пятницы | 2026-05-23
proposal_briefs:
BR-TEST-001 | DEAL-TEST-001 | коммерческий директор и CTO | показать AI-агента для поддержки | поддержка отвечает медленно | MVP за 6 недель | кейс retail, интеграция с CRM, цена | обещание 100% автоматизации | 2026-05-27 | https://drive/notes | new | 2026-05-23
pricing_rules:
PRICE-AI-SUPPORT-MVP | AI Support Agent | MVP | 2500000 | RUB | 10 | 6 | discovery, prototype, integrations | voice bot, custom BI | 2000000 | active | 2026-05-23
Ожидаемый результат:
- `brief_checks` показывает, что бриф полный;
- `proposal_outline` создает 10 слайдов;
- `slide_cards` создает карточки слайдов;
- `commercial_terms` берет цену из `pricing_rules`;
- `proposal_risk_log` помечает спорные claims и скидки;
- `deck_drafts` создает draft;
- `approval_queue` создает заявку;
- `task_queue` создает проверки sales или legal;
- `audit_log` содержит шаги запуска;
- `error_log` пустой.
Проверка: КП не отправлено клиенту и PDF не экспортирован без approval.
Шаг 32. Проверьте негативные сценарии
Сделайте 5 тестов:
- удалите цену из `pricing_rules`;
- поставьте кейс `public_allowed = false`;
- добавьте claim “гарантируем рост продаж 50%”;
- удалите шаблон из `deck_templates`;
- верните от LLM невалидный JSON.
Ожидаемый результат:
- нет цены - `missing_price`;
- закрытый кейс - `missing_case_permission`;
- неподтвержденный claim - `unsupported_claim`;
- нет шаблона - `missing_template`;
- невалидный JSON - `invalid_json`;
- export не запускается;
- клиенту ничего не отправляется.
Проверка: агент не придумывает цену, кейс и обещание результата.
Минимальная проверка результата
Прототип работает, если выполняются условия:
- `crm_deals` содержит одну сделку;
- `proposal_briefs` содержит полный бриф;
- `deck_templates` содержит активный шаблон;
- `slide_library` содержит layout для каждого slide role;
- `pricing_rules` содержит цену;
- `brief_checks` ловит неполные данные;
- `proposal_outline` создает структуру;
- `slide_cards` создает карточки с evidence;
- `commercial_terms` не придумывает цену;
- `proposal_risk_log` ловит claims и закрытые кейсы;
- `deck_drafts` создает только draft;
- `approval_queue` блокирует финальные действия;
- без `approved` нет записи в `execution_queue`;
- `task_queue` назначает проверки;
- `version_log` хранит версии;
- `audit_log` объясняет действия;
- `error_log` показывает плохие данные.
Что нельзя автоматизировать в первой версии
- отправку КП клиенту;
- утверждение цены;
- скидки;
- обещание сроков;
- юридические условия;
- отправку документа на подпись;
- использование закрытых кейсов;
- изменение CRM-стадии;
- финальный экспорт без approval;
- публикацию в клиентской папке;
- удаление старых версий;
- любые коммерческие обещания без проверки менеджером.
Частые вопросы
Можно ли начать без Google Slides API?
Да. Для MVP можно хранить `proposal_outline` и `slide_cards` в Google Sheets, а презентацию собирать вручную по шаблону. API нужен, когда структура и проверка уже работают.
Может ли агент сам отправлять КП клиенту?
В первой версии нет. КП содержит цены, сроки, условия и обещания, поэтому финальную отправку должен делать менеджер после approval.
Как не получить шаблонную презентацию?
Заполняйте `proposal_briefs`, `crm_deals`, `case_studies` и `product_blocks` конкретными фактами. Агент должен адаптировать каждый слайд под клиента, а не просто менять название компании.
Что делать, если в брифе нет цены?
Агент должен записать `missing_price` в `error_log` или `brief_checks` и создать задачу менеджеру. Придумывать стоимость нельзя.
Какой минимальный результат считать успешным?
Успешный MVP: агент берет одну сделку, проверяет бриф, делает outline, создает slide cards, берет цену из правил, создает draft deck, отправляет approval и пишет audit log.