Gmail → Яндекс Диск через n8n: сохранение вложений, фильтры и защита от дублей ¶
Обновлено: 2026-05-30
Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production.
- Проблема: почему вложения из Gmail теряются в переписке
- Архитектура workflow Gmail → Яндекс Диск
- Контракт данных письма и вложений
- Code Node: путь файла, dedupe key и безопасное имя
- Готовый workflow JSON: скачать и импортировать
- Пошаговая настройка Gmail, n8n и Яндекс Диска
- Тесты вложений, фильтров и повторов
- Production-риски файловой автоматизации
- Полезные ссылки и документация
- Критерии готовности
Проблема: вложения из Gmail легко теряются в переписке, скачиваются вручную и дублируются в разных папках. Это особенно больно для счетов, актов, договоров и документов от поставщиков.
Решение: сделать workflow Gmail → Яндекс Диск через n8n: отфильтровать письма, извлечь вложения, собрать безопасный путь, проверить dedupe key и отправить уведомление команде.
Проблема: почему вложения из Gmail теряются в переписке ¶
Счета, акты, коммерческие предложения и закрывающие документы часто приходят в Gmail как вложения. Пока их вручную скачивает бухгалтер или менеджер, часть файлов остаётся в цепочках писем, попадает в разные папки или загружается дважды. Автоматизация через n8n решает эту боль: письмо фильтруется, вложение сохраняется на Яндекс Диск, а команда получает ссылку и понятный статус.
Страница закрывает конкретный интент “Gmail вложения в Яндекс Диск через n8n”, а не общую тему email automation. Здесь важны фильтры, структура папок, безопасные имена файлов и повторная обработка одного письма.
Архитектура workflow Gmail → Яндекс Диск ¶
| Нода | Роль | Что проверить |
|---|---|---|
| Gmail trigger | Получает новые письма | Query, label, unread/read policy |
| Extract attachments | Забирает binary файлы | Размер, MIME type, несколько вложений |
| Build path | Создаёт путь на Яндекс Диске | Дата, отправитель, безопасное имя |
| Check dedupe | Не грузит файл повторно | message_id + filename + size |
| Upload to Yandex Disk | Сохраняет файл | OAuth/WebDAV, overwrite policy |
Контракт данных письма и вложений ¶
Для тестов удобно передавать сокращённый JSON письма. В реальном workflow Gmail node отдаст binary data, но бизнес-логика пути и дедупликации остаётся такой же.
{
"message_id": "18f4a9d7c2",
"from": "supplier@example.ru",
"subject": "Счет и акт за май",
"date": "2026-05-30T09:15:00Z",
"attachments": [
{ "filename": "invoice-10492.pdf", "mimeType": "application/pdf", "size": 184920 },
{ "filename": "act-10492.pdf", "mimeType": "application/pdf", "size": 122400 }
],
"folder": "suppliers"
}
Code Node: путь файла, dedupe key и безопасное имя ¶
Code Node ниже превращает письмо в массив файлов для upload. Он чистит символы, которые ломают пути, и формирует dedupe key, чтобы повторный запуск не создавал копии вида invoice (1).pdf.
const msg = $json;
const messageId = String(msg.message_id ?? msg.id ?? '').trim();
if (!messageId) throw new Error('Gmail message_id is required for dedupe');
const from = String(msg.from ?? 'unknown').replace(/[<>:"/\|?*]+/g, '_').slice(0, 80);
const subject = String(msg.subject ?? 'no-subject').replace(/[<>:"/\|?*]+/g, '_').slice(0, 100);
const date = new Date(msg.date ?? Date.now()).toISOString().slice(0, 10);
const baseFolder = String(msg.folder ?? 'inbox').replace(/[^A-Za-zА-Яа-я0-9._-]+/g, '_');
const attachments = Array.isArray(msg.attachments) ? msg.attachments : [];
return attachments.map((file, index) => {
const original = String(file.filename ?? `attachment-${index + 1}`).replace(/[<>:"/\|?*]+/g, '_');
return { json: {
message_id: messageId,
dedupe_key: `gmail:${messageId}:${original}:${file.size ?? 0}`,
yandex_path: `/n8n/${baseFolder}/${date}/${from}/${original}`,
original_filename: original,
mime_type: file.mimeType ?? 'application/octet-stream',
size: file.size ?? 0,
title: `${subject} — ${original}`
}};
});Как выбрать фильтр Gmail
Начните с узкого query: has:attachment from:supplier@example.ru newer_than:7d. После проверки расширяйте фильтр по label или домену. Не запускайте workflow сразу на всю историю ящика.
Готовый workflow JSON: скачать и импортировать ¶
В архив добавлены workflow JSON и payload. После импорта замените Gmail credential, токен Яндекс Диска, базовую папку и правило фильтрации писем.
{
"name": "Nodbot - Gmail attachments to Yandex Disk",
"nodes": [
{ "name": "Gmail trigger", "type": "n8n-nodes-base.gmailTrigger", "purpose": "Получать новые письма по фильтру" },
{ "name": "Extract attachments", "type": "n8n-nodes-base.gmail", "purpose": "Забрать binary вложения" },
{ "name": "Build Yandex path Code", "type": "n8n-nodes-base.code", "purpose": "Собрать путь, имя файла и dedupe key" },
{ "name": "Upload to Yandex Disk", "type": "n8n-nodes-base.httpRequest", "purpose": "Загрузить файл через WebDAV/REST" },
{ "name": "Notify result", "type": "n8n-nodes-base.telegram", "purpose": "Сообщить о сохранении или ошибке" }
],
"connections": "Gmail → Extract → Build path → Upload → Notify"
}
Пошаговая настройка Gmail, n8n и Яндекс Диска ¶
- Создайте отдельный Gmail label для писем, которые нужно обрабатывать.
- Настройте Gmail trigger или IMAP Read node с фильтром
has:attachment. - Добавьте Code Node для безопасного имени файла и структуры папок.
- Подключите upload на Яндекс Диск через WebDAV или REST API.
- Сохраняйте dedupe key в таблицу/БД и отправляйте короткий Telegram-отчёт.
Тесты вложений, фильтров и повторов ¶
curl -X POST "https://YOUR-N8N-DOMAIN/webhook/gmail-attachments-to-yandex-disk" -H "Content-Type: application/json" --data @gmail-attachments-to-yandex-disk-payload.json- Письмо с двумя PDF должно создать два файла в одной папке.
- Повторная обработка того же message_id не должна грузить дубли.
- Файл с кириллицей и пробелами должен получить безопасный путь.
- Письмо без вложений должно завершаться без ошибки и без алерта.
- Ошибка upload должна попадать в Error Workflow или Telegram alert.
Production-риски файловой автоматизации ¶
- Workflow обрабатывает всю историю. Можно случайно загрузить тысячи старых вложений и упереться в лимиты.
- Overwrite включён без контроля. Новый файл может затереть старый документ с тем же именем.
- Нет дедупликации. Gmail trigger или ручной retry создаёт копии документов.
- Токен Яндекс Диска в тексте ноды. Храните секреты в credentials/ENV.
- Нет политики персональных данных. Вложения могут содержать договоры, паспорта и реквизиты.
Полезные ссылки и документация ¶
Смотрите также: Error Workflow с Telegram-алертом, Безопасное хранение ENV, Retry и DLQ для HTTP Request. Официальная документация: Gmail API guides, Yandex Disk API, n8n binary data.
Критерии готовности ¶
- Фильтр Gmail выбирает только нужные письма с вложениями.
- Каждый файл получает предсказуемый путь: категория, дата, отправитель, имя.
- Повторный запуск по тому же письму не создаёт дубль.
- Ошибки upload видны в Telegram или Error Workflow.
- Команда знает, какие типы файлов можно хранить на Яндекс Диске и кто владелец папки.
Nodbot настроит Gmail/IMAP → Яндекс Диск, фильтры, dedupe, алерты и безопасное хранение вложений под вашу структуру документов.
Автоматизировать вложения