Почта: сводка важного в утреннем брифинге

Почта — главный пожиратель утра. Из двадцати новых писем ответа сегодня требуют два, остальное — рассылки и реклама. Ассистент может сделать первую сортировку за вас. На прогоне этого урока первым тестовым письмом оказалось предложение «вывести сайт в ТОП», и модель сразу назвала его спамом.

Чему научитесь в этом уроке:
• подключить почту Яндекса к n8n по паролю приложения;
• складывать новые письма в таблицу n8n, чтобы брифинг читал их по расписанию;
• добавить в брифинг письма, на которые нужно ответить сегодня.

Почему письма сначала копятся в таблице

Хочется сделать просто: в 8:00 сценарий заходит в почту и забирает новое. Но почтовый узел n8n так не умеет. Он работает как дверной звонок: срабатывает, когда в папке появляется письмо, и не умеет «сходить и посмотреть» по расписанию. Поэтому сделаем два сценария:

  1. «Почта в таблицу» слушает папку и каждое новое письмо записывает строкой в таблицу n8n.
  2. Брифинг в 8:00 читает из таблицы письма, которых ещё не было в сводке, а после отправки отмечает их.

Таблица здесь как лоток для входящих бумаг на столе секретаря: письма падают в лоток в течение дня, а утром секретарь разбирает лоток целиком.

Шаг 1. Таблица для писем

В n8n откройте Overview → Data tables → Create data table. Назовите таблицу «Письма для брифинга» и добавьте колонки:

  • sender, тип String: отправитель;
  • subject, String: тема;
  • excerpt, String: начало письма;
  • received, Date: когда пришло;
  • in_briefing, Boolean: было ли уже в брифинге.

Шаг 2. Сценарий «Почта в таблицу»

Создайте новый сценарий и добавьте узел Email Trigger (IMAP). В Credential to connect with выберите Create new credential и заполните:

  • User: ваш адрес Яндекса целиком;
  • Password: пароль приложения из урока 3.1;
  • Host: imap.yandex.ru, Port: 993, SSL/TLS: включено.

Нажмите Save. Надпись «Connection tested successfully» означает, что n8n вошёл в почту.

Окно учётных данных IMAP в n8n: зелёная надпись Connection tested successfully, поля User (закрыто), Password, Host imap.yandex.ru, Port 993, включён SSL/TLS.

В самом узле:

  • Mailbox Name: Тест-ассистент, папка по-русски работает;
  • Action: Nothing, чтобы ассистент не отмечал письма прочитанными и ничего в почте не менял;
  • Format: Resolved. В режиме Simple n8n не отдаёт тему письма, а у писем с оформлением пропадает текст. Мы наткнулись на это на прогоне.

После почтового узла добавьте Data table → Insert row, выберите таблицу «Письма для брифинга» и заполните колонки выражениями:

sender:      {{ $json.from.text }}
subject:     {{ $json.subject }}
excerpt:     {{ ($json.text || ($json.html || '').replace(/<[^>]+>/g, ' ')).replace(/\s+/g, ' ').trim().slice(0, 500) }}
received:    {{ $json.date }}
in_briefing: false

Выражение в excerpt берёт первые 500 знаков письма, а если в письме только оформленный текст, убирает из него служебную разметку. Модели этого хватает, чтобы понять, о чём письмо, а за лишний текст вы бы платили.

Шаг 3. Проверка: письмо должно «прийти»

Нажмите Execute workflow: узел начнёт ждать письмо. Если за пару минут письмо не поймано, не ждите: опубликуйте сценарий и проверьте в нём. Ожидание в редакторе у нас на прогоне однажды зависло. Теперь важная деталь, которую мы выяснили на прогоне: узел срабатывает, когда письмо появляется в папке. Пометка «непрочитанное» его не будит. Поэтому для проверки перенесите письмо из папки во «Входящие» и обратно или отправьте себе новое письмо и перенесите его в папку.

Не пересылайте тестовые письма себе. У пересланного письма отправителем становитесь вы. На прогоне модель назвала руководителя автором спама, потому что он переслал себе рекламу. Переносите письма, а не пересылайте.

Когда в таблице появилась строка с темой и текстом, нажмите Publish. Теперь сценарий слушает папку постоянно и записывает каждое новое письмо.

Таблица «Письма для брифинга» в n8n: строки с темами рекламных писем, колонки sender, subject, excerpt, received, in_briefing.

Шаг 4. Письма в брифинге

Откройте сценарий брифинга из урока 3.2. Между узлами «Встречи на сегодня» и «Собрать данные» вставьте узел Data table → Get row(s) и назовите его «Новые письма»:

  • таблица «Письма для брифинга», условие in_briefing равно false, Return All включено;
  • в Settings узла включите Always Output Data, иначе в день без писем сценарий остановится на этом узле и брифинг не придёт;
  • там же включите Execute Once, чтобы узел сработал один раз, а не по разу на каждую встречу.

Замените код в «Собрать данные» на версию с письмами. Она уже ждёт и задачи из следующего урока: пока задач нет, в данных будет «открытых задач нет».

// Собираем встречи, письма и задачи в один текст для модели
const events = $('Встречи на сегодня').all().map(i => i.json).filter(e => e.title !== 'Встреч нет');
const letters = $('Новые письма').all().map(i => i.json).filter(l => l.subject !== undefined);
const tasks = []; // задачи подключим в уроке 3.4
const ev = events.length
  ? events.map(e => '- ' + e.time + ' ' + e.title + (e.place ? ' (' + e.place + ')' : '')).join('\n')
  : 'встреч нет';
const ml = letters.length
  ? letters.map(l => '- от ' + l.sender + ': ' + l.subject + '. ' + l.excerpt).join('\n')
  : 'новых писем нет';
const tk = tasks.length ? tasks.map(t => '- ' + t.task).join('\n') : 'открытых задач нет';
return [{ json: { data: 'Встречи на сегодня:\n' + ev + '\n\nНовые письма:\n' + ml + '\n\nОткрытые задачи:\n' + tk } }];

После отправки в Telegram добавьте Data table → Update row(s): условие in_briefing равно false, новое значение in_briefing = true. Так завтрашний брифинг не повторит сегодняшние письма.

Запустите брифинг вручную. На прогоне сводка выглядела так: встречи по времени, «писем, требующих ответа сегодня, нет», а пять рассылок и одно предложение о раскрутке названы рекламой и спамом одной строкой. Ничего не выдумано.

Сообщение бота в Telegram: «Утренний брифинг», встречи 12:30 и 19:00, писем с ответом сегодня нет, пять рекламных писем и одно SEO-предложение названы рекламой и спамом.

Что ассистент не делает с почтой

  • не отвечает и не пересылает письма: он только предлагает, что сделать, а решаете вы;
  • не удаляет и не переносит письма: в узле стоит Action: Nothing;
  • не читает другие папки: только ту, что указана в Mailbox Name.

Когда проверите ассистента на тестовой папке, поменяйте Mailbox Name на INBOX (это «Входящие») и опубликуйте сценарий снова. С этого момента письма из «Входящих» уходят модели через шлюз. Не включайте это для ящика, куда приходят пароли, банковские уведомления и персональные данные клиентов, пока не обсудите это с тем, кто отвечает у вас за данные.

Если не получилось

  • Authentication failed. Пароль приложения ещё не начал работать, подождите 2–3 часа. Если не помогло, проверьте в почте: Настройки → Почтовые программы, должен быть включён доступ по IMAP.
  • Тема пустая. В почтовом узле стоит Format: Simple. Переключите на Resolved.
  • Письмо в папке есть, а сценарий молчит. Письмо лежало там до запуска или вы только поменяли пометку. Перенесите письмо из папки и обратно.
  • Брифинг остановился на «Новые письма». Не включено Always Output Data, а новых писем нет.
  • Одни и те же письма приходят каждый день. Нет узла Update row(s) после отправки или в нём не то условие.

Контрольный вопрос. Почему письма сначала записываются в таблицу, а не забираются брифингом в 8:00?

АТак дешевле для модели
БПочтовый узел срабатывает на приход письма и не умеет забирать почту по расписанию
ВТаблица нужна, чтобы письма не потерялись в Яндексе
ГБрифинг не умеет работать с почтой

Подсказка: Вспомните сравнение с дверным звонком.

На курсе задания проверяются автоматически. Подобрать курс

Контрольный вопрос. Руководитель отметил письмо в тестовой папке непрочитанным, а сценарий «Почта в таблицу» не сработал. Что сделать?

АВключить в узле пометку писем прочитанными
БПеренести письмо из папки и обратно
ВПереслать письмо себе
ГСменить пароль приложения

Подсказка: Узел реагирует на появление письма. А пересланное письмо исказит отправителя.

На курсе задания проверяются автоматически. Подобрать курс

Задание. МИССИЯ «Разбор почты». Подключите почту, соберите сценарий «Почта в таблицу» и добавьте письма в брифинг. Приложите: (1) скриншот успешной проверки подключения (адрес закройте); (2) скриншот таблицы «Письма для брифинга» с 3–5 письмами; (3) скриншот брифинга в Telegram со встречами и письмами; (4) одной-двумя фразами: какое письмо модель отнесла к «ответить сегодня» и согласны ли вы с ней. Принято, если: в узле почты Action: Nothing и Format: Resolved; в таблице заполнены тема и начало письма; брифинг содержит встречи и письма; после брифинга письма отмечены in_briefing = true; на скриншотах закрыты адреса и нет персональных данных клиентов.

Подсказка: Если модель всё относит к «ответить сегодня», добавьте в системное сообщение одну-две строки о том, какие письма для вас действительно срочные: от каких клиентов, с какими словами в теме.

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

На курсе задания проверяются автоматически. Подобрать курс

Что дальше

Брифинг знает про встречи и почту. Осталось научить ассистента принимать задачи прямо из Telegram и напоминать о них по утрам.

Итог:
• почта подключена по паролю приложения, только чтение, только одна папка;
• новые письма копятся в таблице и попадают в брифинг один раз;
• проверять сценарий нужно переносом письма, а не пометкой «непрочитанное».

← Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева