Интеграция Google Drive и n8n: загрузка файлов, права доступа, дедупликация и архив ¶
Обновлено: 2026-05-30
Импортируйте JSON в n8n, замените credentials, URL API, поля CRM/БД и лимиты под вашу инфраструктуру.
Проблема: Файлы из заявок, почты и CRM часто складываются в одну папку, теряют связь с клиентом, получают публичный доступ или дублируются при повторной отправке.
Решение: строить интеграцию Google Drive и n8n как документный конвейер: проверять MIME type и размер, считать ключ дедупликации, выбирать папку по business context, загружать файл и назначать права только нужным ролям.
Проблема: почему простой upload в Google Drive не решает документооборот ¶
Простой upload работает до тех пор, пока файлов мало. В production появляются счета, акты, резюме, сканы договоров и вложения из разных источников. Без маршрутизации по папкам и связки с entity_id менеджер не знает, какой файл к какому клиенту относится.
Отдельный риск — доступы. Если workflow выставляет anyoneWithLink для всех документов, в публичную ссылку могут попасть персональные данные. Поэтому правила доступа должны зависеть от типа файла и процесса.
Архитектура workflow Google Drive + n8n для документов ¶
| Блок | Задача | Production-проверка |
|---|---|---|
| Webhook / Email input | получает файл и metadata | entity_id, source, filename |
| Validate file | проверяет MIME type и size | blocklist, max_mb, required fields |
| Build dedupe key | считает ключ по entity_id+filename+size | нет повторной загрузки |
| Choose folder | выбирает папку по типу документа | client, invoices, HR, legal |
| Upload to Drive | загружает файл в нужную папку | OAuth, folder_id, retry |
| Set permissions | выдаёт доступ по роли | не ставить public по умолчанию |
Для юридических и финансовых документов лучше хранить не только fileId, но и source_url/entity_id. Это помогает восстановить контекст при споре или аудите.
Контракт файла и метаданных ¶
{
"entity_id": "deal-5581",
"source": "gmail",
"document_type": "invoice",
"filename": "invoice-10492.pdf",
"mime_type": "application/pdf",
"size_bytes": 428312,
"folder_hint": "clients/acme",
"requested_access": [
"finance@example.ru",
"manager@example.ru"
]
}
entity_id связывает файл с клиентом, сделкой, задачей или заказом. Без него Google Drive становится складом файлов без бизнес-смысла.
Code Node: проверка MIME type, размера и ключа дедупликации ¶
const src = $json.body ?? $json;
const filename = String(src.filename ?? '').trim();
const mime = String(src.mime_type ?? src.mimeType ?? '').toLowerCase();
const size = Number(src.size_bytes ?? src.size ?? 0);
const entityId = String(src.entity_id ?? '').trim();
if (!entityId) throw new Error('entity_id is required for Drive document flow');
if (!filename) throw new Error('filename is required');
if (size > 25 * 1024 * 1024) throw new Error(`File too large: ${size}`);
const allowed = ['application/pdf','image/jpeg','image/png','application/vnd.openxmlformats-officedocument.wordprocessingml.document'];
if (!allowed.includes(mime)) throw new Error(`Unsupported MIME type: ${mime}`);
const safeName = filename.replace(/[\/:*?"<>|]+/g, '-').replace(/\s+/g, ' ').trim();
const type = String(src.document_type ?? 'other').toLowerCase();
const folder = type === 'invoice' ? 'finance' : type === 'resume' ? 'hr' : type === 'contract' ? 'legal' : 'incoming';
return [{ json: {
entity_id: entityId,
original_filename: filename,
safe_filename: safeName,
mime_type: mime,
size_bytes: size,
folder_key: folder,
dedupe_key: `drive:${entityId}:${safeName}:${size}`,
permissions: Array.isArray(src.requested_access) ? src.requested_access : []
}}];
Почему нельзя по умолчанию давать доступ по ссылке
Google Drive удобен, но публичная ссылка часто переживает проект, сотрудника и CRM-карточку. Для документов с персональными или финансовыми данными лучше выдавать доступ конкретным аккаунтам или группам.
Готовый workflow JSON: скачать и импортировать ¶
Скачать готовый workflow JSON Скачать тестовый payload
{
"name": "Nodbot - Google Drive document flow with dedupe",
"nodes": [
{
"name": "Webhook file input",
"type": "n8n-nodes-base.webhook",
"purpose": "Получить файл и metadata"
},
{
"name": "Validate file metadata",
"type": "n8n-nodes-base.code",
"purpose": "Проверить тип, размер, entity_id"
},
{
"name": "Check dedupe key",
"type": "n8n-nodes-base.if",
"purpose": "Не загружать дубль"
},
{
"name": "Upload to Google Drive",
"type": "n8n-nodes-base.googleDrive",
"purpose": "Загрузить файл"
},
{
"name": "Set permissions",
"type": "n8n-nodes-base.googleDrive",
"purpose": "Выдать доступ"
},
{
"name": "Respond",
"type": "n8n-nodes-base.respondToWebhook",
"purpose": "Вернуть fileId и ссылку"
}
],
"connections": "Webhook file input → Validate file metadata → Check dedupe key → Upload to Google Drive → Set permissions → Respond"
}
Пошаговая настройка Google Drive folders, OAuth и n8n ¶
- Создайте service folders: finance, hr, legal, incoming.
- Настройте Google OAuth credential с минимальными правами.
- Импортируйте workflow JSON и замените folder_id для каждого folder_key.
- Добавьте durable storage для dedupe_key, если файлы приходят параллельно.
- Проверьте правила permissions на тестовых аккаунтах.
Тесты перед production ¶
curl -X POST "https://YOUR-N8N-DOMAIN/webhook/integration-google-drive-n8n-docflow" \
-H "Content-Type: application/json" \
--data @integration-google-drive-n8n-docflow-payload.json
- PDF до лимита загружается в finance и получает fileId.
- Файл без entity_id отклоняется.
- Повтор filename+entity_id+size не создаёт дубль.
- Unsupported MIME type блокируется до upload.
- Права выдаются только указанным пользователям.
Production-риски ¶
- Публичные ссылки по умолчанию. Документы могут утечь за пределы команды.
- Нет entity_id. Файл невозможно связать с CRM или задачей.
- Дедупликация только по имени. Разные версии договора перетираются или блокируются неверно.
- Большие файлы в executions. n8n storage быстро разрастается.
- Нет архивации. Удаление из папки ломает историю сделки.
Полезные ссылки и смежные материалы ¶
Критерии готовности ¶
- Для каждого файла сохраняется entity_id, fileId и dedupe_key.
- MIME type и размер проверяются до upload.
- Папка выбирается по бизнес-типу документа.
- Права доступа не становятся публичными без явного правила.
- Ошибки Drive API уходят в alert или DLQ.
Nodbot настроит Google Drive + n8n: маршрутизацию по папкам, dedupe, проверку типов, контроль доступов, связь с CRM и мониторинг ошибок.
Обсудить Drive-автоматизацию