Что получится в результате
Соберем рабочего ИИ-агента, который помогает до и после встречи: берет событие из календаря, собирает контекст из CRM, готовит короткую повестку, принимает transcript или заметки, выделяет решения, задачи, владельцев, дедлайны, готовит follow-up, создает draft-обновления для CRM и отправляет спорные пункты на ручную проверку.
Первая версия будет делать так:
- встреча попадает в `meeting_queue`;
- данные календаря сохраняются в `meeting_metadata`;
- участники связываются с CRM через `participant_map`;
- контекст клиента или проекта пишется в `crm_context`;
- шаблон повестки берется из `agenda_templates`;
- transcript или ручные заметки сохраняются в `transcript_log`;
- агент делает структурированный разбор в `summary_results`;
- решения сохраняются в `decisions_log`;
- задачи попадают в `action_items`;
- письмо после встречи создается в `followup_drafts`;
- CRM-обновления сохраняются в `crm_updates`;
- задачи для команды пишутся в `task_queue`;
- чувствительные действия попадают в `approval_queue`;
- отправленные сообщения пишутся в `sent_messages_log`;
- все действия фиксируются в `audit_log`;
- ошибки попадают в `error_log`.
В первой версии агент не отправляет клиенту письма без проверки, не обещает сроки, не меняет сумму сделки, не создает юридически значимые договоренности и не редактирует CRM без approval. Он готовит черновики и помогает ничего не забыть.
Что понадобится
- n8n Cloud или self-hosted n8n.
- Google Sheets для управляющих таблиц.
- Google Calendar API или Microsoft Graph Calendar API.
- Zoom API, Google Meet transcript, Teams transcript или ручные заметки.
- CRM: HubSpot, amoCRM, Bitrix24, Pipedrive или другая система.
- Канал для approval: Telegram, Slack, email или задача в CRM.
- API-ключ LLM-провайдера.
- 10-20 прошлых встреч для теста.
- Список правил: что можно отправлять автоматически, а что только после согласования.
Шаг 1. Выберите один тип встречи
Не начинайте со всех созвонов компании. У sales demo, onboarding, QBR и внутренней планерки разные итоги.
Для первой версии выберите один сценарий:
- sales discovery;
- демо продукта;
- onboarding клиента;
- customer success check-in;
- проектная встреча;
- встреча после инцидента;
- внутренний weekly sync;
- интервью с пользователем.
Самый удобный старт - встречи, после которых регулярно теряются задачи, follow-up и обновления CRM.
Проверка: вы можете описать одну встречу одной фразой, например: `sales discovery для B2B-заявок после демо`.
Шаг 2. Определите финальный результат
Запишите, что агент должен выдать после встречи.
Для sales discovery результат такой:
summary
client_goal
pain_points
current_process
budget_signal
timeline
decision_makers
risks
decisions
action_items
client_followup_draft
crm_update_draft
next_meeting_suggestion
Для проектной встречи результат другой:
summary
decisions
open_questions
blockers
action_items
owners
deadlines
risks
status_update
internal_followup_draft
Проверка: у вас есть список полей, а не абстрактное “сделать summary”.
Шаг 3. Создайте таблицу проекта
Создайте Google Sheet:
Meeting follow-up agent
Добавьте листы:
settings
meeting_queue
meeting_metadata
participant_map
crm_context
agenda_templates
pre_meeting_briefs
transcript_log
summary_results
decisions_log
action_items
followup_drafts
crm_updates
task_queue
approval_queue
sent_messages_log
audit_log
weekly_report
error_log
Проверка: n8n может читать и писать в каждый лист.
Шаг 4. Заполните settings
В `settings` добавьте колонки:
key
value
description
updated_at
Заполните базовые настройки:
timezone | Europe/Moscow | основная таймзона встреч
default_language | ru | язык summary и follow-up
auto_send_external_followup | false | внешние письма только после approval
auto_create_internal_tasks | true | внутренние задачи можно создавать после проверки правил
crm_update_mode | draft | CRM обновляется через черновик
max_summary_length | 1200 | максимум символов в summary
default_followup_tone | calm_business | стиль письма
approval_channel | telegram | куда отправлять согласование
recording_retention_days | 30 | срок хранения ссылки на запись
Проверка: все опасные действия по умолчанию выключены.
Шаг 5. Настройте meeting_queue
В `meeting_queue` агент получает встречи на обработку.
Колонки:
meeting_id
source
calendar_event_id
crm_deal_id
crm_contact_id
meeting_type
title
start_at
end_at
owner_email
status
priority
created_at
updated_at
Статусы:
new
preparing
waiting_transcript
processing
waiting_approval
done
error
skip
Пример строки:
MTG-1001 | google_calendar | evt_91 | deal_482 | contact_77 | sales_discovery | Демо с ООО Альфа | 2026-05-25 14:00 | 2026-05-25 15:00 | sales@company.ru | new | high
Проверка: одна встреча равна одной строке в очереди.
Шаг 6. Подключите календарь
В n8n создайте workflow:
Meeting intake
Минимальная цепочка:
- Cron Trigger каждые 30 минут;
- Google Calendar или Microsoft Outlook node;
- фильтр встреч за последние 24 часа и следующие 48 часов;
- Function node для нормализации полей;
- Google Sheets node для записи в `meeting_queue`;
- Google Sheets node для записи деталей в `meeting_metadata`.
В `meeting_metadata` добавьте колонки:
meeting_id
calendar_event_id
title
description
location
meeting_url
organizer_email
attendees_json
start_at
end_at
timezone
is_external
recording_expected
created_at
Проверка: тестовая встреча из календаря появляется в `meeting_queue` и `meeting_metadata`.
Шаг 7. Сделайте дедупликацию встреч
Перед записью в `meeting_queue` проверьте:
- есть ли уже `calendar_event_id`;
- совпадает ли `start_at`;
- совпадает ли `owner_email`;
- не стоит ли статус `skip`;
- не была ли встреча уже обработана.
Правило:
если calendar_event_id уже есть, обновить meeting_metadata, но не создавать новую строку meeting_queue
Проверка: повторный запуск workflow не создает дубль встречи.
Шаг 8. Свяжите участников с CRM
В `participant_map` добавьте колонки:
meeting_id
email
name
company
role
is_internal
crm_contact_id
crm_company_id
crm_deal_id
confidence
match_reason
created_at
Логика поиска:
- внутренние домены помечаются как `is_internal = true`;
- внешние email ищутся в CRM contacts;
- если контакт найден, подтягивается company и active deal;
- если найдено несколько сделок, ставится `confidence = low`;
- низкая уверенность отправляется в review.
Проверка: агент понимает, с каким клиентом, сделкой или проектом связана встреча.
Шаг 9. Соберите CRM-контекст
В `crm_context` добавьте колонки:
meeting_id
crm_system
crm_deal_id
crm_contact_id
company_name
deal_stage
deal_amount
last_activity_at
last_notes
open_tasks
open_tickets
known_risks
context_text
created_at
Контекст должен быть коротким. Не тяните всю CRM-карточку.
Хороший `context_text`:
Клиент: ООО Альфа. Стадия: демо проведено. Интерес: автоматизация поддержки. Риск: нужен запуск до конца месяца. Открытая задача: отправить пример интеграции с Bitrix24.
Проверка: перед встречей агент видит только нужные факты.
Шаг 10. Создайте шаблоны повестки
В `agenda_templates` добавьте колонки:
template_id
meeting_type
goal
questions_json
required_outputs_json
forbidden_topics_json
is_active
updated_at
Пример для sales discovery:
{
"questions": [
"Как сейчас устроен процесс?",
"Где теряется больше всего времени?",
"Какие системы уже используются?",
"Какие ограничения по безопасности есть?",
"Какой следующий шаг будет полезен после встречи?"
],
"required_outputs": [
"pain_points",
"decision_makers",
"timeline",
"next_step"
],
"forbidden_topics": [
"обещать цену без менеджера",
"подтверждать сроки внедрения без команды"
]
}
Проверка: для каждого `meeting_type` есть один активный шаблон.
Шаг 11. Сгенерируйте pre-meeting brief
Создайте workflow:
Pre-meeting brief
Цепочка:
- взять встречи со статусом `new`;
- загрузить `meeting_metadata`;
- загрузить `participant_map`;
- загрузить `crm_context`;
- загрузить `agenda_templates`;
- вызвать LLM;
- записать результат в `pre_meeting_briefs`;
- перевести встречу в `waiting_transcript`.
В `pre_meeting_briefs` добавьте колонки:
meeting_id
brief
agenda
questions
risks
do_not_say
owner_email
created_at
Prompt для brief:
Ты готовишь менеджера к встрече.
Используй только переданный контекст.
Не выдумывай факты.
Верни JSON:
{
"brief": "коротко до 700 символов",
"agenda": ["пункт 1", "пункт 2", "пункт 3"],
"questions": ["вопрос 1", "вопрос 2"],
"risks": ["риск 1"],
"do_not_say": ["что нельзя обещать"]
}
Проверка: за 15-30 минут до встречи менеджер получает короткую подготовку.
Шаг 12. Получите transcript или заметки
Для первой версии можно использовать один из вариантов:
- Zoom cloud recording transcript;
- Google Meet transcript из Drive;
- Microsoft Teams transcript;
- ручные заметки организатора;
- текст из call recorder;
- summary от секретаря встречи.
В `transcript_log` добавьте колонки:
meeting_id
source
recording_url
transcript_text
notes_text
language
quality_status
consent_status
created_at
Статусы качества:
good
partial
bad
missing
Проверка: если transcript плохой или отсутствует, агент не делает жестких выводов и отправляет встречу в review.
Шаг 13. Добавьте consent check
Не обрабатывайте записи без понятного основания.
В n8n перед анализом добавьте IF node:
если consent_status != approved, перевести meeting_queue.status в waiting_approval
Для внутренних тестов можно использовать ручное поле:
approved
not_required
unknown
rejected
Правило:
unknown и rejected не идут в автоматический анализ
Проверка: встреча без разрешения не попадает в LLM.
Шаг 14. Нормализуйте transcript
Перед LLM уберите технический шум:
- timestamps оставьте только при необходимости;
- повторяющиеся системные сообщения удалите;
- имена говорящих приведите к одному формату;
- длинные паузы замените на `[pause]`;
- фразы “неразборчиво” оставьте как маркер;
- пустой transcript не отправляйте в модель.
Пример нормального блока:
Manager: Давайте зафиксируем следующий шаг.
Client: Нам нужен пример интеграции с Bitrix24 до пятницы.
Manager: Я отправлю пример и предложу дату технического созвона.
Проверка: LLM получает читаемый текст, а не сырую мешанину из записи.
Шаг 15. Сделайте основной prompt разбора встречи
Prompt:
Ты анализируешь встречу.
Используй только transcript, notes и CRM context.
Не выдумывай факты.
Если факта нет, пиши null.
Разделяй:
- подтвержденные решения;
- предположения;
- задачи;
- спорные пункты;
- внутренние заметки;
- текст, который можно отправить клиенту.
Верни только JSON:
{
"summary": "до 1200 символов",
"decisions": [
{
"decision": "что решили",
"evidence": "короткая цитата или фрагмент",
"confidence": "high|medium|low"
}
],
"action_items": [
{
"task": "что сделать",
"owner": "email или null",
"deadline": "YYYY-MM-DD или null",
"source": "цитата",
"confidence": "high|medium|low"
}
],
"open_questions": ["вопрос"],
"risks": ["риск"],
"client_followup": "черновик письма клиенту",
"internal_notes": "заметки только для команды",
"crm_update": {
"deal_stage_change": null,
"next_step": "следующий шаг",
"note": "заметка в CRM"
},
"needs_review": true
}
Проверка: модель возвращает валидный JSON без Markdown.
Шаг 16. Запишите summary_results
В `summary_results` добавьте колонки:
meeting_id
summary
open_questions
risks
internal_notes
client_safe_summary
needs_review
model
prompt_version
created_at
Правило:
client_safe_summary не должен содержать internal_notes, риски сделки, оценки клиента, маржу, внутренние сомнения и технические токены
Проверка: внутренние заметки и внешний follow-up разделены.
Шаг 17. Запишите decisions_log
В `decisions_log` добавьте колонки:
decision_id
meeting_id
decision_text
evidence
confidence
owner_email
status
created_at
Статусы:
confirmed
needs_review
rejected
Правило:
если confidence != high, решение не считается подтвержденным
Проверка: спорные договоренности не превращаются в факт.
Шаг 18. Запишите action_items
В `action_items` добавьте колонки:
task_id
meeting_id
task_text
owner_email
deadline
source_quote
confidence
task_system
external_task_id
status
created_at
Статусы:
draft
ready
created
needs_review
cancelled
Правила:
- задача без владельца идет в `needs_review`;
- задача без дедлайна получает мягкий срок по умолчанию;
- задача с `confidence = low` не создается автоматически;
- клиентская задача не назначается внутреннему сотруднику без проверки;
- дубли задач объединяются.
Проверка: после встречи есть список задач, а не общий текст “надо сделать”.
Шаг 19. Создайте task_queue
`task_queue` нужна, чтобы не создавать задачи напрямую из LLM-ответа.
Колонки:
queue_id
task_id
task_system
task_payload_json
approval_required
status
created_at
processed_at
error_message
Пример `task_payload_json`:
{
"title": "Отправить пример интеграции с Bitrix24",
"assignee": "sales@company.ru",
"due_date": "2026-05-29",
"description": "По итогам встречи MTG-1001 клиент попросил пример интеграции.",
"source": "meeting_followup_agent"
}
Проверка: задача сначала попадает в очередь и только потом создается во внешней системе.
Шаг 20. Подготовьте follow-up draft
В `followup_drafts` добавьте колонки:
draft_id
meeting_id
recipient_emails
subject
body
tone
contains_commitment
contains_price
contains_deadline
approval_required
status
created_at
Prompt для письма:
Составь follow-up после встречи.
Пиши коротко и по делу.
Не добавляй новых обещаний.
Не называй цены, сроки и обязательства, если они не подтверждены.
Структура:
1. благодарность;
2. что обсудили;
3. что договорились;
4. следующие шаги;
5. кто что делает.
Проверка: письмо можно отправить после быстрой человеческой правки.
Шаг 21. Добавьте проверку опасных обещаний
Перед approval проверьте `followup_drafts.body`.
Флаги:
contains_commitment
contains_price
contains_deadline
contains_legal_terms
contains_discount
contains_security_claim
Простые правила:
- есть цена или скидка - approval обязателен;
- есть дата запуска - approval обязателен;
- есть “гарантируем”, “обязуемся”, “точно успеем” - approval обязателен;
- есть безопасность, сертификаты или персональные данные - approval обязателен;
- внешний follow-up всегда approval в первой версии.
Проверка: агент не отправляет опасные обещания клиенту.
Шаг 22. Сформируйте CRM update draft
В `crm_updates` добавьте колонки:
crm_update_id
meeting_id
crm_system
crm_deal_id
crm_contact_id
update_type
payload_json
approval_required
status
created_at
processed_at
Типы обновлений:
note
next_step
task
stage_change_request
risk_flag
contact_field_request
Пример:
{
"note": "Встреча: клиент хочет пример интеграции с Bitrix24. Следующий шаг: отправить пример до пятницы и предложить технический созвон.",
"next_step": "Отправить пример интеграции",
"risk": "клиенту нужен запуск до конца месяца"
}
Проверка: CRM не обновляется напрямую, пока менеджер не подтвердил черновик.
Шаг 23. Настройте approval_queue
В `approval_queue` добавьте колонки:
approval_id
meeting_id
object_type
object_id
reason
preview
approver_email
status
decision_comment
created_at
decided_at
`object_type`:
followup_draft
crm_update
task
decision
low_confidence_summary
Статусы:
pending
approved
rejected
needs_edit
expired
Проверка: человек видит, что именно нужно подтвердить и почему.
Шаг 24. Сделайте Telegram approval
В n8n добавьте ветку:
- взять новые строки `approval_queue` со статусом `pending`;
- отправить в Telegram краткий preview;
- добавить кнопки `Approve`, `Reject`, `Needs edit`;
- по нажатию обновить `approval_queue.status`;
- записать решение в `audit_log`.
Сообщение:
Нужно согласовать follow-up по встрече MTG-1001
Причина: внешний клиент + дедлайн
Тема: Итоги встречи и следующий шаг
Preview: Спасибо за встречу. Отправим пример интеграции...
[Approve] [Needs edit] [Reject]
Проверка: approve меняет статус объекта, но не теряет историю решения.
Шаг 25. Отправляйте follow-up только после approval
Для первой версии настройте правило:
если followup_drafts.approval_required = true и approval_queue.status != approved, письмо не отправлять
После approval:
- отправить письмо через Gmail API, Outlook API или CRM email;
- записать факт отправки в `sent_messages_log`;
- обновить `followup_drafts.status = sent`;
- записать действие в `audit_log`.
В `sent_messages_log` добавьте колонки:
message_id
meeting_id
draft_id
channel
recipient_emails
subject
sent_by
sent_at
external_message_id
Проверка: каждое отправленное письмо можно найти по meeting_id.
Шаг 26. Создайте задачи во внешней системе
Подключите одну систему задач:
- HubSpot tasks;
- Bitrix24 tasks;
- amoCRM tasks;
- Asana;
- Jira;
- ClickUp;
- Todoist.
Для MVP достаточно одной.
Правило:
создавать автоматически только internal tasks с confidence = high и без опасных флагов
Проверка: после approve или безопасного правила задача появляется во внешней системе, а `external_task_id` записывается в `action_items`.
Шаг 27. Настройте audit_log
В `audit_log` добавьте колонки:
audit_id
meeting_id
actor
action
object_type
object_id
before_json
after_json
created_at
Логируйте:
- создание brief;
- анализ transcript;
- создание summary;
- создание action item;
- создание follow-up draft;
- отправку approval;
- решение approval;
- отправку письма;
- обновление CRM;
- ошибку внешнего API.
Проверка: можно восстановить, кто и когда подтвердил follow-up.
Шаг 28. Настройте error_log
В `error_log` добавьте колонки:
error_id
meeting_id
workflow_name
node_name
error_type
error_message
payload_snapshot
status
owner_email
created_at
Типы ошибок:
calendar_api_failed
crm_lookup_failed
transcript_missing
consent_missing
llm_invalid_json
approval_timeout
email_send_failed
task_create_failed
crm_update_failed
Проверка: сбой не исчезает молча, а получает владельца.
Шаг 29. Соберите weekly_report
В `weekly_report` добавьте колонки:
week_start
meetings_processed
followups_created
followups_sent
tasks_created
crm_updates_created
approval_pending
errors_count
avg_processing_time_minutes
top_error_types
created_at
Минимальные метрики:
- сколько встреч обработано;
- сколько follow-up создано;
- сколько задач создано;
- сколько пунктов ушло на approval;
- сколько ошибок возникло;
- где чаще всего ломается процесс.
Проверка: раз в неделю видно, экономит ли агент время.
Шаг 30. Протестируйте на 10 встречах
Возьмите 10 прошлых встреч одного типа.
Проверьте вручную:
- summary не выдумывает факты;
- action items имеют владельца;
- дедлайны не придуманы без основания;
- client follow-up не содержит внутренних заметок;
- CRM update не меняет стадию без approval;
- спорные решения попадают в review;
- письма не отправляются без подтверждения;
- дубли задач не создаются;
- плохой transcript не проходит как точный;
- ошибки попадают в `error_log`.
Проверка: минимум 8 из 10 встреч должны давать полезный черновик без ручной переделки с нуля.
Минимальная проверка результата
Стенд готов к первому запуску, если:
- встреча из календаря попадает в `meeting_queue`;
- участники связаны с CRM через `participant_map`;
- краткий контекст есть в `crm_context`;
- agenda создается до встречи;
- transcript или notes пишутся в `transcript_log`;
- summary пишется в `summary_results`;
- решения пишутся в `decisions_log`;
- задачи пишутся в `action_items`;
- follow-up draft пишется в `followup_drafts`;
- CRM draft пишется в `crm_updates`;
- опасные действия уходят в `approval_queue`;
- отправленные письма пишутся в `sent_messages_log`;
- все действия есть в `audit_log`;
- ошибки есть в `error_log`;
- weekly report показывает пользу.
Перед запуском на живых встречах пройдите чек-лист:
- Создайте тестовую встречу в календаре.
- Добавьте тестового участника с CRM-карточкой.
- Загрузите короткие заметки вместо записи.
- Запустите workflow анализа.
- Проверьте `summary_results`, `action_items` и `followup_drafts`.
- Отклоните один follow-up через approval.
- Одобрите один follow-up через approval.
- Проверьте `sent_messages_log` и `audit_log`.
Что нельзя автоматизировать в первой версии
- отправку внешнего follow-up без approval;
- обещания по цене, срокам, договору и безопасности;
- изменение стадии сделки без менеджера;
- отправку клиенту внутренних рисков и оценок;
- обработку записи без согласия;
- удаление спорных пунктов без лога;
- создание задач с низкой уверенностью;
- принятие юридически значимых договоренностей;
- массовую обработку всех встреч компании без правил доступа.
Частые вопросы
Можно ли агенту самому отправлять follow-up клиенту?
В первой версии лучше нет. Пусть агент готовит письмо, а менеджер подтверждает отправку. Автоотправку можно включать позже для простых внутренних встреч или типовых follow-up без цены, сроков и обязательств.
Нужна ли запись каждой встречи?
Нет. Для части встреч достаточно ручных заметок или короткого transcript. Запись полезна для точности, но требует согласия участников, понятных правил хранения и ограничения доступа.
Что важнее: полный transcript или action items?
Action items важнее. Transcript нужен как источник, но результат появляется только тогда, когда после встречи есть задачи, владельцы, дедлайны и следующий шаг.
Как не отправить клиенту внутренние заметки?
Храните `internal_notes` отдельно от `client_followup`. В prompt явно запрещайте переносить внутренние риски, маржу, сомнения, оценки клиента и технические детали во внешний текст.
Что делать, если агент не уверен в решении?
Ставить `confidence = low`, добавлять цитату из transcript и отправлять пункт в `approval_queue`. Неуверенная договоренность не должна автоматически попадать в письмо, CRM или задачу.