Что получится в результате
Соберем ИИ-агента для email-маркетинга, который готовит рассылки как контролируемый процесс: проверяет согласия, собирает сегмент, готовит brief кампании, пишет тему, preheader и тело письма, проверяет риски, отправляет черновик на approval, ставит кампанию в очередь, собирает события отправки и делает отчет по результатам.
Первая рабочая версия будет делать так:
- email-платформы хранятся в `email_accounts`;
- контакты и статусы пишутся в `contact_registry`;
- согласия хранятся в `consent_log`;
- suppression list хранится в `suppression_list`;
- сегменты описаны в `segment_rules`;
- готовые выборки пишутся в `segment_members`;
- brief кампании пишется в `campaign_briefs`;
- шаблоны лежат в `email_templates`;
- черновики писем пишутся в `email_drafts`;
- проверки риска пишутся в `content_checks`;
- UTM и ссылки пишутся в `link_checks`;
- A/B-гипотезы пишутся в `ab_tests`;
- спорные действия уходят в `approval_queue`;
- готовые рассылки попадают в `send_queue`;
- отправки фиксируются в `send_log`;
- события открытий, кликов, bounce и spam пишутся в `email_events`;
- отписки пишутся в `unsubscribe_log`;
- результаты кампаний пишутся в `campaign_reports`;
- рекомендации попадают в `recommendation_queue`;
- все действия фиксируются в `audit_log`;
- ошибки попадают в `error_log`.
В первой версии агент не должен сам отправлять массовые кампании, импортировать базу, менять статус подписки, удалять контакты, обещать скидки или запускать промо без подтверждения. Он готовит черновики, проверяет риски и ждет approval.
Что понадобится
- n8n Cloud или self-hosted n8n.
- Google Sheets для управляющих таблиц.
- Email-платформа: Mailchimp, Brevo, Unisender или другой ESP.
- Доступ к спискам контактов, кампаниям и отчетам.
- Отдельный домен или поддомен для рассылок.
- Настроенные SPF, DKIM и DMARC.
- Канал approval: Telegram, Slack, email или задача.
- API-ключ LLM-провайдера.
- 10-20 прошлых кампаний для теста.
- Правила бренда, частотности, согласий и запрещенных обещаний.
Шаг 1. Выберите один сценарий рассылки
Не начинайте с агента, который ведет весь email-маркетинг.
Для MVP выберите один сценарий:
- еженедельный дайджест;
- письмо по новому материалу;
- реактивация неактивных подписчиков;
- welcome-письмо;
- промо-рассылка;
- приглашение на вебинар;
- onboarding-серия;
- отчет клиентам;
- письмо по сегменту интересов;
- анализ результатов прошлой кампании.
Самый безопасный старт - агент, который готовит draft дайджеста и отчет, но не отправляет кампанию сам.
Проверка: сценарий можно описать одной фразой, например: `каждую неделю подготовить дайджест для подписчиков, читавших AI-инструкции`.
Шаг 2. Разделите типы email
У разных писем разные правила.
Типы:
marketing
transactional
digest
promo
reactivation
welcome
onboarding
webinar_invite
customer_update
Правила:
- marketing требует согласия и ссылки отписки;
- transactional не должен превращаться в рекламу;
- promo требует approval;
- reactivation требует проверки частотности;
- customer update должен быть точным и без лишних продаж.
Проверка: агент знает тип письма до генерации текста.
Шаг 3. Создайте таблицу проекта
Создайте Google Sheet:
Email marketing agent
Добавьте листы:
settings
email_accounts
contact_registry
consent_log
suppression_list
segment_rules
segment_members
campaign_briefs
email_templates
email_drafts
content_checks
link_checks
ab_tests
approval_queue
send_queue
send_log
email_events
unsubscribe_log
campaign_reports
recommendation_queue
audit_log
error_log
Проверка: n8n может читать и писать во все листы.
Шаг 4. Заполните settings
В `settings` добавьте колонки:
key
value
description
updated_at
Заполните минимум:
default_language | ru | язык кампаний
auto_send_enabled | false | автоотправка выключена
approval_channel | telegram | канал согласования
max_campaign_recipients_mvp | 500 | лимит первой версии
min_segment_size | 50 | минимум контактов в сегменте
max_weekly_marketing_emails | 2 | частотность на контакт
require_unsubscribe_link | true | ссылка отписки обязательна
require_consent | true | согласие обязательно
promo_requires_approval | true | промо только через approval
Проверка: массовая отправка выключена, частотность ограничена.
Шаг 5. Настройте email_accounts
В `email_accounts` добавьте колонки:
account_id
platform
account_name
sender_name
sender_email
reply_to
domain
access_mode
owner_email
status
created_at
`platform`:
mailchimp
brevo
unisender
sendgrid
customer_io
manual_export
`access_mode`:
read_only
draft_only
send_with_approval
Проверка: первый аккаунт имеет `access_mode = draft_only` или `read_only`.
Шаг 6. Соберите contact_registry
В `contact_registry` добавьте колонки:
contact_id
email
first_name
last_name
company
language
status
tags
source
created_at
updated_at
last_email_sent_at
`status`:
subscribed
unsubscribed
cleaned
bounced
complained
pending
unknown
Проверка: агент не отправляет письмо контактам со статусом `unsubscribed`, `bounced`, `complained`, `unknown`.
Шаг 7. Настройте consent_log
В `consent_log` добавьте колонки:
consent_id
contact_id
email
consent_type
consent_status
consent_source
consent_text
captured_at
expires_at
`consent_type`:
marketing
transactional
webinar
product_updates
partner
Правило:
для marketing-кампаний нужен consent_status = granted
Проверка: контакт без согласия не попадает в сегмент.
Шаг 8. Настройте suppression_list
В `suppression_list` добавьте колонки:
suppression_id
type
value
reason
source
created_at
expires_at
`type`:
email
domain
contact_id
Причины:
unsubscribe
hard_bounce
spam_complaint
manual_block
legal_block
invalid_email
too_many_emails
Проверка: suppression list проверяется перед любым черновиком отправки.
Шаг 9. Опишите segment_rules
В `segment_rules` добавьте колонки:
segment_id
segment_name
email_type
include_rules_json
exclude_rules_json
owner_email
is_active
updated_at
Пример:
{
"include": [
{"field": "tags", "contains": "ai_agents"},
{"field": "status", "equals": "subscribed"}
],
"exclude": [
{"field": "last_email_sent_at", "after_days": 3},
{"field": "suppression_list", "exists": true}
]
}
Проверка: сегмент объясняет не только кого включили, но и кого исключили.
Шаг 10. Сформируйте segment_members
В `segment_members` добавьте колонки:
segment_member_id
segment_id
contact_id
email
include_reason
exclude_reason
status
created_at
`status`:
included
excluded
needs_review
blocked
Проверка: перед кампанией видно финальное количество получателей и причины исключений.
Шаг 11. Создайте campaign_briefs
В `campaign_briefs` добавьте колонки:
campaign_id
campaign_name
email_type
goal
segment_id
offer
key_message
cta
forbidden_claims
deadline
owner_email
status
created_at
Пример:
CMP-1001 | Дайджест AI-инструкций | digest | вернуть читателей на сайт | SEG-12 | новые инструкции | 5 практических гайдов | Читать подборку | гарантия результата, скидка без условий | 2026-05-27 | marketer@company.ru | draft
Проверка: письмо генерируется из brief, а не “просто напиши рассылку”.
Шаг 12. Подготовьте email_templates
В `email_templates` добавьте колонки:
template_id
email_type
template_name
structure_json
required_blocks
forbidden_blocks
is_active
updated_at
Структура дайджеста:
{
"blocks": [
"subject",
"preheader",
"intro",
"main_items",
"cta",
"footer",
"unsubscribe"
]
}
Проверка: агент не забывает обязательные блоки.
Шаг 13. Сгенерируйте email_drafts
В `email_drafts` добавьте колонки:
draft_id
campaign_id
subject
preheader
body_text
body_html
cta_text
utm_campaign
risk_flags
approval_required
status
created_at
Prompt:
Ты готовишь email-кампанию.
Используй только campaign brief, segment summary и template.
Не выдумывай скидки, сроки, гарантии и результаты.
Не обещай то, чего нет в brief.
Пиши коротко и понятно.
Верни JSON:
{
"subject": "до 55 символов",
"preheader": "до 90 символов",
"body_text": "текст письма",
"cta_text": "текст кнопки",
"risk_flags": []
}
Проверка: draft содержит subject, preheader, body и CTA.
Шаг 14. Проверьте content_checks
В `content_checks` добавьте колонки:
check_id
draft_id
check_type
status
severity
details
created_at
`check_type`:
missing_unsubscribe
missing_sender
contains_discount
contains_guarantee
contains_false_urgency
too_aggressive
spam_words
personal_data
broken_html
missing_approval
Запрещенные фразы:
гарантируем результат
скидка только сегодня
последний шанс
вы обязаны
100% окупится
Проверка: письмо с риском не попадает в send queue.
Шаг 15. Проверьте link_checks
В `link_checks` добавьте колонки:
link_check_id
draft_id
url
status_code
has_utm
utm_source
utm_medium
utm_campaign
redirect_final_url
status
created_at
Проверки:
- ссылка открывается;
- нет 404 и 500;
- UTM есть;
- UTM campaign соответствует campaign_id;
- ссылка отписки есть;
- редирект не ведет на неожиданный домен.
Проверка: рассылка не уходит с битыми ссылками.
Шаг 16. Подготовьте ab_tests
В `ab_tests` добавьте колонки:
ab_test_id
campaign_id
test_type
variant_a
variant_b
primary_metric
sample_size
status
created_at
completed_at
`test_type`:
subject
preheader
cta
intro
offer
segment
Правила:
- менять один фактор;
- заранее выбрать метрику;
- не запускать A/B на слишком маленьком сегменте;
- не тестировать risky claims;
- фиксировать результат.
Проверка: A/B-тест имеет гипотезу, а не два случайных варианта.
Шаг 17. Настройте approval_queue
В `approval_queue` добавьте колонки:
approval_id
object_type
object_id
campaign_id
reason
preview
approver_email
status
created_at
decided_at
`object_type`:
email_draft
segment
ab_test
send_request
import_contacts
automation_start
Статусы:
pending
approved
rejected
needs_edit
expired
Проверка: отправка кампании всегда требует approved `send_request`.
Шаг 18. Сделайте Telegram approval
В n8n создайте workflow:
Email approval
Цепочка:
- найти `approval_queue` со статусом `pending`;
- отправить preview в Telegram;
- добавить кнопки `Approve`, `Needs edit`, `Reject`;
- обновить статус;
- записать решение в `audit_log`;
- только после approve перевести кампанию в `send_queue`.
Сообщение:
Нужно согласовать email-кампанию
Кампания: Дайджест AI-инструкций
Сегмент: SEG-12, 420 контактов
Subject: 5 практических гайдов по AI-агентам
Preheader: Собрали инструкции, которые можно внедрять по шагам
[Approve] [Needs edit] [Reject]
Проверка: без approve send queue остается пустой.
Шаг 19. Настройте send_queue
В `send_queue` добавьте колонки:
send_queue_id
campaign_id
draft_id
segment_id
email_account_id
scheduled_at
recipient_count
status
created_at
processed_at
Статусы:
ready
scheduled
sent_to_esp
paused
blocked
done
error
Правило:
в send_queue попадает только approved draft, approved segment, clean content_checks, clean link_checks
Проверка: risky draft не может уйти в отправку.
Шаг 20. Отправляйте через ESP после повторной проверки
Перед API-вызовом к Mailchimp, Brevo или Unisender еще раз проверьте:
- approval approved;
- segment_members не изменились критично;
- suppression_list актуален;
- unsubscribe link есть;
- content checks passed;
- link checks passed;
- лимит получателей не превышен;
- частотность соблюдена.
Проверка: ручной повторный запуск workflow не отправляет кампанию дважды.
Шаг 21. Запишите send_log
В `send_log` добавьте колонки:
send_id
campaign_id
esp
external_campaign_id
recipient_count
sent_at
status
created_at
Статусы:
sent
scheduled
failed
cancelled
manual_required
Проверка: можно найти, какая кампания реально ушла и через какую платформу.
Шаг 22. Соберите email_events
В `email_events` добавьте колонки:
event_id
campaign_id
contact_id
email
event_type
url
occurred_at
payload_json
created_at
`event_type`:
delivered
open
click
bounce
hard_bounce
soft_bounce
spam_complaint
unsubscribe
conversion
Проверка: события из ESP попадают в таблицу и связываются с campaign_id.
Шаг 23. Обрабатывайте unsubscribe_log
В `unsubscribe_log` добавьте колонки:
unsubscribe_id
contact_id
email
campaign_id
reason
source
created_at
Правило:
любая отписка добавляет email в suppression_list
Проверка: отписавшийся контакт не получает следующую рассылку.
Шаг 24. Соберите campaign_reports
В `campaign_reports` добавьте колонки:
campaign_id
sent_count
delivered_count
open_count
click_count
bounce_count
spam_complaint_count
unsubscribe_count
conversion_count
revenue
open_rate
click_rate
unsubscribe_rate
complaint_rate
created_at
Формулы:
open_rate = open_count / delivered_count
click_rate = click_count / delivered_count
unsubscribe_rate = unsubscribe_count / delivered_count
complaint_rate = spam_complaint_count / delivered_count
Проверка: отчет считает не только opens, но и негативные сигналы.
Шаг 25. Создайте recommendation_queue
В `recommendation_queue` добавьте колонки:
recommendation_id
campaign_id
recommendation_type
summary
evidence
recommended_action
risk_level
owner_email
status
created_at
`recommendation_type`:
subject_improve
segment_adjust
frequency_reduce
deliverability_check
unsubscribe_risk
ab_test_next
content_update
cta_change
Проверка: агент предлагает действие на основе данных кампании, а не “улучшить письмо”.
Шаг 26. Настройте audit_log
В `audit_log` добавьте колонки:
audit_id
actor
action
object_type
object_id
before_json
after_json
created_at
Логируйте:
- синхронизацию контактов;
- consent check;
- suppression check;
- сбор сегмента;
- генерацию draft;
- content checks;
- link checks;
- approval;
- send queue;
- отправку;
- event import;
- unsubscribe;
- отчет;
- ошибку API.
Проверка: можно восстановить путь кампании от brief до отчета.
Шаг 27. Настройте error_log
В `error_log` добавьте колонки:
error_id
campaign_id
workflow_name
node_name
error_type
error_message
payload_snapshot
status
owner_email
created_at
Типы ошибок:
esp_api_failed
segment_empty
consent_missing
suppression_check_failed
llm_invalid_json
link_check_failed
approval_timeout
send_failed
event_import_failed
report_failed
Проверка: если ESP API упал, кампания не считается отправленной.
Шаг 28. Протестируйте на тестовом сегменте
Создайте сегмент из 10-20 внутренних адресов.
Проверьте:
- контакты есть в `contact_registry`;
- consent есть в `consent_log`;
- suppression исключает заблокированные адреса;
- segment_members показывает включенных и исключенных;
- draft содержит subject, preheader, body, CTA;
- content_checks ловит risky claims;
- link_checks ловит битую ссылку;
- approval блокирует отправку;
- send_queue заполняется только после approve;
- события попадают в `email_events`.
Проверка: тестовая кампания проходит весь путь без ручной правки таблиц.
Минимальная проверка результата
MVP готов, если:
- аккаунты описаны в `email_accounts`;
- контакты есть в `contact_registry`;
- согласия пишутся в `consent_log`;
- suppression list работает;
- сегменты описаны в `segment_rules`;
- получатели пишутся в `segment_members`;
- brief пишется в `campaign_briefs`;
- шаблоны есть в `email_templates`;
- письма пишутся в `email_drafts`;
- проверки пишутся в `content_checks`;
- ссылки проверяются в `link_checks`;
- A/B-тесты пишутся в `ab_tests`;
- approval блокирует отправку;
- send queue принимает только approved кампании;
- отправки пишутся в `send_log`;
- события пишутся в `email_events`;
- отписки пишутся в `unsubscribe_log`;
- отчеты пишутся в `campaign_reports`;
- рекомендации пишутся в `recommendation_queue`;
- audit и error logs заполнены.
Перед живым запуском пройдите чек-лист:
- Подключите один ESP в draft/read-only режиме.
- Синхронизируйте 20 тестовых контактов.
- Добавьте один email в suppression list.
- Создайте segment rules.
- Сформируйте campaign brief.
- Сгенерируйте draft.
- Добавьте одну битую ссылку и проверьте `link_checks`.
- Отклоните draft через approval.
- Одобрите исправленный draft.
- Отправьте только на внутренний тестовый сегмент.
Что нельзя автоматизировать в первой версии
- массовую отправку без approval;
- импорт новой базы;
- отправку без consent;
- отправку по suppression list;
- удаление контактов;
- изменение статуса подписки;
- обещания скидок, гарантий и сроков;
- запуск промо без проверки;
- запуск automation без approval;
- отправку кампании с битой ссылкой отписки;
- повторную отправку одной кампании из-за сбоя workflow.
Частые вопросы
Может ли агент сам отправлять рассылку?
В первой версии лучше нет. Он должен готовить сегмент, письмо, проверки и send request, а человек подтверждает отправку. Автоотправку можно включать позже только для низкорисковых кампаний с лимитами.
Что подключить первым?
Подключите платформу, где уже есть база и история кампаний: Mailchimp, Brevo, Unisender или другой ESP. Для MVP достаточно чтения контактов, кампаний, отчетов и создания черновиков.
Как агент защищает от проблем с deliverability?
Он проверяет suppression list, hard bounce, spam complaints, частотность, наличие отписки, битые ссылки и рискованные формулировки. Но техническую репутацию домена все равно нужно мониторить отдельно.
Нужны ли A/B-тесты сразу?
Не обязательно. Сначала добейтесь стабильного процесса: сегмент, draft, checks, approval, send, report. A/B добавляйте, когда есть достаточный размер сегмента и понятная гипотеза.
Какие метрики смотреть после рассылки?
Delivered, open rate, click rate, conversion, revenue, bounce, spam complaints, unsubscribe rate, CTR по ссылкам и качество трафика или лидов после перехода.