Пошаговые инструкции intermediate 29 мин

Как сделать ИИ-агента для презентаций и коммерческих предложений

Пошаговая инструкция от нуля до агента для презентаций и КП: бриф, CRM, шаблоны, слайды, цены, approval, экспорт и версии.

AI-агенты презентации коммерческое предложение Google Slides API Canva PptxGenJS sales deck approval

Что получится в результате

Соберем ИИ-агента, который принимает бриф клиента, CRM-данные, шаблоны, цены, кейсы и бренд-правила, затем готовит структуру коммерческого предложения, тексты слайдов, таблицу условий, черновик презентации и отправляет все спорные места на согласование менеджеру.

Первая рабочая версия будет делать так:

  1. настройки хранятся в `settings`;
  2. клиенты и сделки хранятся в `crm_deals`;
  3. входящий бриф хранится в `proposal_briefs`;
  4. шаблоны презентаций хранятся в `deck_templates`;
  5. библиотека слайдов хранится в `slide_library`;
  6. продуктовые блоки хранятся в `product_blocks`;
  7. кейсы и доказательства хранятся в `case_studies`;
  8. цены и пакеты хранятся в `pricing_rules`;
  9. ограничения бренда хранятся в `brand_rules`;
  10. проверка брифа пишется в `brief_checks`;
  11. структура КП пишется в `proposal_outline`;
  12. карточки слайдов пишутся в `slide_cards`;
  13. коммерческие условия пишутся в `commercial_terms`;
  14. риски и спорные обещания пишутся в `proposal_risk_log`;
  15. черновики презентаций пишутся в `deck_drafts`;
  16. экспортные файлы пишутся в `export_queue`;
  17. спорные действия уходят в `approval_queue`;
  18. одобренные действия попадают в `execution_queue`;
  19. задачи продажам, продукту, юристу и дизайнеру пишутся в `task_queue`;
  20. история версий пишется в `version_log`;
  21. все решения пишутся в `audit_log`;
  22. ошибки данных и 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 выберите один сценарий:

  1. коммерческое предложение по сделке из CRM;
  2. sales deck по шаблону;
  3. презентация продукта для лида;
  4. follow-up deck после встречи;
  5. proposal для RFP после разбора требований;
  6. короткая презентация кейса;
  7. обновление старого КП под нового клиента.

Самый безопасный старт: `агент готовит черновик КП по одной сделке, а менеджер проверяет цену, сроки и финальный текст`.

Проверка: сценарий можно вручную повторить на одной сделке и одном шаблоне.

Шаг 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

Добавьте узлы:

  1. `Schedule Trigger` или `Webhook`;
  2. `Read crm_deals`;
  3. `Read proposal_briefs`;
  4. `Read deck_templates`;
  5. `Read slide_library`;
  6. `Read product_blocks`;
  7. `Read case_studies`;
  8. `Read pricing_rules`;
  9. `Read brand_rules`;
  10. `Check brief`;
  11. `Generate outline`;
  12. `Generate slide cards`;
  13. `Check commercial terms`;
  14. `LLM proposal review`;
  15. `Create deck draft`;
  16. `Send approval`;
  17. `Write audit_log`;
  18. `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

Обязательные поля:

  1. клиент;
  2. аудитория;
  3. цель;
  4. проблема;
  5. желаемое решение;
  6. срок подготовки;
  7. менеджер;
  8. источник данных;
  9. пакет или продукт;
  10. ограничения и запреты.

Проверка: неполный бриф не идет в генерацию 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

Пример структуры КП:

  1. титульный слайд;
  2. контекст клиента;
  3. проблема и последствия;
  4. предлагаемое решение;
  5. workflow агента;
  6. интеграции;
  7. план внедрения;
  8. пакет и стоимость;
  9. кейс или доказательство;
  10. следующий шаг.

Проверка: 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

Правила:

  1. title до 90 символов;
  2. body до `max_slide_text_chars`;
  3. не больше 6 bullets;
  4. каждый факт имеет `data_refs`;
  5. цена и срок помечаются `approval_required`;
  6. запрещенные 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 отправляйте:

  1. outline КП;
  2. цены и скидки;
  3. сроки внедрения;
  4. кейсы клиентов;
  5. юридические условия;
  6. финальный deck;
  7. экспорт в PDF;
  8. отправку клиенту.

Проверка: без `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 должен:

  1. найти `approval_id`;
  2. проверить статус `pending`;
  3. записать `approved`;
  4. заполнить `approved_at`;
  5. передать действие в `execution_queue`;
  6. записать событие в `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

Ожидаемый результат:

  1. `brief_checks` показывает, что бриф полный;
  2. `proposal_outline` создает 10 слайдов;
  3. `slide_cards` создает карточки слайдов;
  4. `commercial_terms` берет цену из `pricing_rules`;
  5. `proposal_risk_log` помечает спорные claims и скидки;
  6. `deck_drafts` создает draft;
  7. `approval_queue` создает заявку;
  8. `task_queue` создает проверки sales или legal;
  9. `audit_log` содержит шаги запуска;
  10. `error_log` пустой.

Проверка: КП не отправлено клиенту и PDF не экспортирован без approval.

Шаг 32. Проверьте негативные сценарии

Сделайте 5 тестов:

  1. удалите цену из `pricing_rules`;
  2. поставьте кейс `public_allowed = false`;
  3. добавьте claim “гарантируем рост продаж 50%”;
  4. удалите шаблон из `deck_templates`;
  5. верните от LLM невалидный JSON.

Ожидаемый результат:

  1. нет цены - `missing_price`;
  2. закрытый кейс - `missing_case_permission`;
  3. неподтвержденный claim - `unsupported_claim`;
  4. нет шаблона - `missing_template`;
  5. невалидный JSON - `invalid_json`;
  6. export не запускается;
  7. клиенту ничего не отправляется.

Проверка: агент не придумывает цену, кейс и обещание результата.

Минимальная проверка результата

Прототип работает, если выполняются условия:

  1. `crm_deals` содержит одну сделку;
  2. `proposal_briefs` содержит полный бриф;
  3. `deck_templates` содержит активный шаблон;
  4. `slide_library` содержит layout для каждого slide role;
  5. `pricing_rules` содержит цену;
  6. `brief_checks` ловит неполные данные;
  7. `proposal_outline` создает структуру;
  8. `slide_cards` создает карточки с evidence;
  9. `commercial_terms` не придумывает цену;
  10. `proposal_risk_log` ловит claims и закрытые кейсы;
  11. `deck_drafts` создает только draft;
  12. `approval_queue` блокирует финальные действия;
  13. без `approved` нет записи в `execution_queue`;
  14. `task_queue` назначает проверки;
  15. `version_log` хранит версии;
  16. `audit_log` объясняет действия;
  17. `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.

Дальше по теме

Похожие материалы