Собственнику B2B-компании нужен ответ на один вопрос в понедельник утром: как прошла неделя. Обычно его собирают вручную из почты и списка задач. У нашего ассистента эти данные уже лежат в таблицах n8n с модуля 3. Осталось раз в неделю превратить их в короткий отчёт.
Чему научитесь в этом уроке:
• собрать цифры недели из таблиц писем и задач;
• поручить модели только пересказ, а цифры считать кодом;
• поставить отчёт на расписание по понедельникам.
Главное правило: цифры считает код
При подготовке урока модель получила верные данные: 0 закрытых задач, 1 открытая, 9 писем. (Даты задач мы добавили позже, после этого прогона.) В одном прогоне из четырёх она написала «закрыто 6 задач», добавила непонятную фразу и ссылку, которой во входе не было. В трёх других прогонах цифры были верными. Вывод: модель пересказывает, а считает код. Тогда в отчёте можно сверить цифры с данными, а если модель ошиблась, это сразу видно.
Шаг 1. Данные
Создайте сценарий «Отчёт за неделю». Добавьте Manual Trigger для проверок, потом два узла Data table → Get row(s): «Письма» из таблицы «Письма для брифинга» и «Задачи» из таблицы «Задачи». В обоих включите Return All, а в Settings — Always Output Data и Execute Once, как в уроке 3.3.
Шаг 2. Цифры недели
Узел Code «Цифры недели» берёт письма за последние 7 дней и делит задачи на закрытые и открытые:
// Сводим неделю в цифры для модели
const weekAgo = $now.minus({ days: 7 }).toJSDate();
const inWeek = (d) => d && new Date(d) >= weekAgo;
const letters = $('Письма').all().map(i => i.json).filter(l => inWeek(l.received));
const tasks = $('Задачи').all().map(i => i.json).filter(t => t.task);
const closed = tasks.filter(t => t.done && inWeek(t.closed_at));
const added = tasks.filter(t => inWeek(t.created));
const open = tasks.filter(t => !t.done);
const lines = [
'Период: ' + $now.minus({ days: 7 }).toFormat('dd.MM') + '–' + $now.toFormat('dd.MM'),
'Писем за неделю: ' + letters.length,
'Темы писем: ' + letters.map(l => l.subject).join('; '),
'Задач новых за неделю: ' + added.length,
'Задач закрыто за неделю: ' + closed.length + (closed.length ? ' (' + closed.map(t => t.task).join('; ') + ')' : ''),
'Задач открыто сейчас: ' + open.length + (open.length ? ' (' + open.map(t => t.task).join('; ') + ')' : ''),
];
return [{ json: { data: lines.join('\n') } }];
Задачи за неделю код отбирает по датам created и closed_at из урока 3.4. Без дат «закрыто» считалось бы за всё время, и через месяц собственник видел бы неверную цифру. Проверено: задача, закрытая 22 сентября, в отчёт с 29 сентября не попала, закрытая 5 октября — попала.
Шаг 3. Пересказ
Basic LLM Chain «Составить отчёт», Prompt: {{ $json.data }}, системное сообщение:
Ты ассистент руководителя небольшой компании. По цифрам за неделю составь отчёт собственнику по-русски, не длиннее 10 строк, простым текстом без разметки:
1) главное за неделю одной фразой;
2) цифры: письма, задачи закрыто и открыто;
3) что требует внимания на следующей неделе.
Используй только цифры из данных, ничего не додумывай.
На прогоне отчёт выглядел так: «Отчёт за период 29.09–06.10. Главное за неделю: получили новые входящие письма и открыли одну задачу, закрытых задач нет. Писем за неделю: 9. Задач закрыто: 0, открыто: 1. На следующей неделе требует внимания: позвонить поставщику до пятницы».
Шаг 4. Расписание и отправка
Добавьте Telegram → Send a text message с текстом {{ $json.text }}, как в брифинге. Затем Schedule Trigger с Cron 0 9 * * 1 (понедельник, 9:00) и проверьте часовой пояс в Settings. Опубликуйте. Если отчёт нужен партнёру или бухгалтеру, а не вам, добавьте второй Chat ID только после того, как три недели читали отчёт сами.
Если есть CRM. В B2B-компании отчёт обычно включает сделки. Принцип тот же: ещё один узел, который достаёт сделки за неделю (HTTP Request к вашей CRM), и строка в коде «Цифры недели». Модель по-прежнему только пересказывает.
Если не получилось
- Писем за неделю 0, хотя они были. В таблице не заполнена колонка received. Проверьте сценарий «Почта в таблицу» из урока 3.3.
- Цифры в отчёте не совпадают с данными. Модель ошиблась при пересказе. Сравните с выходом «Цифры недели» и запустите ещё раз. Повторяется — смените модель.
- Отчёт со звёздочками. Модель не послушалась «без разметки». Добавьте в конец системного сообщения пример отчёта простым текстом.
Контрольный вопрос. Почему количество закрытых задач считает код, а не модель?
Подсказка: Вспомните, что случилось в одном из прогонов отчёта.
На курсе задания проверяются автоматически. Подобрать курс
Задание. Соберите отчёт за неделю для своего ассистента. Приложите: (1) скриншот сценария; (2) выход узла «Цифры недели»; (3) отчёт в Telegram; (4) одной фразой: сверили ли вы цифры отчёта с данными и совпали ли они. Принято, если: цифры считает Code-узел; отчёт простым текстом и не длиннее 10 строк; цифры в отчёте совпадают с выходом «Цифры недели»; стоит расписание на понедельник и проверен часовой пояс.
Подсказка: Данных за неделю мало? Добавьте пару задач через ветку «задача:» из урока 3.4 и отметьте одну сделанной.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
На курсе задания проверяются автоматически. Подобрать курс
Что дальше
Ассистент отвечает клиентам и пишет отчёты. Это момент разобраться, чего ему доверять нельзя.
Итог:
• цифры считает код, модель только пересказывает;
• отчёт собирается из тех же таблиц, что брифинг;
• отчёт уходит по расписанию в понедельник утром.
