Интеграция Gmail и n8n: AI-разбор писем, вложения, ярлыки и безопасные черновики ¶
Обновлено: 2026-05-30
Импортируйте JSON в n8n, замените credentials, URL API, поля CRM/БД и лимиты под вашу инфраструктуру.
Проблема: Почта быстро превращается в ручную очередь: заявки, счета, резюме и ответы клиентов лежат вместе, вложения теряются, а автоответ без проверки может уйти не тому адресату.
Решение: строить интеграцию Gmail и n8n как controlled inbox triage: читать только нужные письма, сохранять threadId, классифицировать содержание, обрабатывать вложения, создавать draft вместо отправки и применять labels для SLA.
Проблема: почему автоматизация Gmail без threadId и labels создаёт хаос ¶
Самая опасная ошибка — сразу отправлять автоответ. В реальной поддержке письмо может быть частью длинного thread, содержать вложение, персональные данные, спорный тон или юридически значимую просьбу. Поэтому безопасная автоматизация Gmail начинается с triage и draft reply, а не с полной автопереписки.
n8n хорошо подходит как слой маршрутизации: Gmail trigger получает письмо, Code Node нормализует sender/subject/threadId, AI или правила определяют категорию, а Gmail node создаёт черновик, ставит label и отдаёт сложные случаи человеку.
Архитектура workflow Gmail + n8n для triage и черновиков ¶
| Блок | Задача | Production-проверка |
|---|---|---|
| Gmail Trigger | читает новые письма по query/label | OAuth scope, unread, mailbox filter |
| Normalize email | извлекает sender, subject, threadId | reply-to, attachments, text/html |
| Classify route | определяет категорию и SLA | invoice, support, sales, HR |
| Attachment handling | сохраняет файлы в Drive/S3/CRM | размер, тип, вирусы, PII |
| Create draft reply | готовит черновик в thread | не отправляет без approval |
| Apply labels | ставит статус обработки | processed, needs-human, sla-risk |
Для бизнес-почты лучше создавать draft и label, а не отправлять ответ автоматически. Это сохраняет скорость, но оставляет контроль у человека.
Контракт входящего письма из Gmail ¶
{
"id": "18f7c9d2",
"threadId": "18f7c9d2-thread",
"from": "client@example.ru",
"subject": "Счёт и закрывающие документы по заказу 10492",
"snippet": "Добрый день, пришлите закрывающие документы и статус оплаты.",
"labelIds": [
"INBOX",
"UNREAD"
],
"attachments": [
{
"filename": "invoice-10492.pdf",
"mimeType": "application/pdf",
"size": 428312
}
]
}
threadId обязателен для корректного ответа в переписке. Без него workflow может создать новое письмо вместо ответа в существующем диалоге.
Code Node: нормализация письма, вложений и маршрута ¶
const msg = $json.body ?? $json;
const from = String(msg.from ?? msg.headers?.from ?? '').trim().toLowerCase();
const subject = String(msg.subject ?? '').replace(/\s+/g, ' ').trim();
const text = String(msg.text ?? msg.snippet ?? '').replace(/\s+/g, ' ').trim();
const attachments = Array.isArray(msg.attachments) ? msg.attachments : [];
const hasPdf = attachments.some(a => /pdf/i.test(a.mimeType ?? a.filename ?? ''));
const route = /счет|счёт|акт|закрывающ/i.test(subject + ' ' + text) ? 'documents' :
/ошибка|не работает|срочно|проблем/i.test(subject + ' ' + text) ? 'support' :
/резюме|ваканси/i.test(subject + ' ' + text) ? 'hr' : 'general';
return [{ json: {
message_id: msg.id,
thread_id: msg.threadId,
from,
subject,
text_preview: text.slice(0, 700),
route,
has_attachments: attachments.length > 0,
has_pdf: hasPdf,
labels_to_add: route === 'support' ? ['needs-human','sla-risk'] : ['triaged'],
draft_allowed: Boolean(msg.threadId) && !/unsubscribe|noreply|no-reply/.test(from)
}}];
Почему лучше draft, а не send
Черновик ускоряет ответ, но не отнимает контроль. Для писем с оплатой, документами, персональными данными и конфликтами человек должен увидеть текст перед отправкой.
Готовый workflow JSON: скачать и импортировать ¶
Скачать готовый workflow JSON Скачать тестовый payload
{
"name": "Nodbot - Gmail inbox triage with draft reply",
"nodes": [
{
"name": "Gmail Trigger",
"type": "n8n-nodes-base.gmailTrigger",
"purpose": "Получить новое письмо"
},
{
"name": "Normalize email",
"type": "n8n-nodes-base.code",
"purpose": "Подготовить threadId, sender и attachments"
},
{
"name": "Classify route",
"type": "n8n-nodes-base.code",
"purpose": "Определить категорию"
},
{
"name": "Check draft allowed",
"type": "n8n-nodes-base.if",
"purpose": "Проверить безопасность черновика"
},
{
"name": "Create Gmail draft",
"type": "n8n-nodes-base.gmail",
"purpose": "Создать draft reply"
},
{
"name": "Apply labels",
"type": "n8n-nodes-base.gmail",
"purpose": "Поставить labels"
}
],
"connections": "Gmail Trigger → Normalize email → Classify route → Check draft allowed → Create Gmail draft → Apply labels"
}
Пошаговая настройка Gmail OAuth, labels и n8n ¶
- Создайте Google OAuth credential для Gmail с минимальными scope.
- Подготовьте labels: triaged, needs-human, sla-risk, processed.
- Импортируйте workflow JSON и настройте Gmail query/label filter.
- Добавьте правила для вложений: PDF, счета, резюме, большие файлы.
- Включите draft mode для ответов, где нужна проверка человеком.
Тесты перед production ¶
curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-gmail-n8n-triage" \
-H "Content-Type: application/json" \
--data @integration-gmail-n8n-triage-payload.json
- Письмо в существующем thread создаёт черновик в том же диалоге.
- No-reply отправитель не получает draft reply.
- Письмо с PDF получает нужный label и route documents.
- Срочное письмо получает needs-human и sla-risk.
- OAuth ошибка не теряет message_id и уходит в alert.
Production-риски ¶
- Автоотправка без review. Ошибка текста может уйти клиенту или партнёру.
- Нет threadId. Ответ создаётся отдельным письмом и ломает историю.
- Слишком широкие OAuth scope. Интеграция получает лишний доступ к почте.
- Вложения пишутся в executions. Большие PDF и персональные данные засоряют хранилище.
- Нет label lifecycle. Непонятно, какие письма уже обработаны.
Полезные ссылки и смежные workflow ¶
- n8n Gmail node
- Gmail API overview
- Gmail API drafts
- Gmail attachments → Yandex Disk
- Письмо → задача Битрикс24
Критерии готовности ¶
- Workflow сохраняет message_id и threadId для каждого письма.
- Ответы создаются как draft, если нет явного правила автоотправки.
- Labels отражают статус обработки и SLA.
- Вложения обрабатываются по типу, размеру и sensitivity.
- OAuth, rate limit и invalid grant уходят в alert.
Nodbot настроит Gmail + n8n: triage, labels, вложения, draft replies, human approval, OAuth и мониторинг ошибок почтовых workflow.
Обсудить Gmail-автоматизацию