AI Email
Assistant
Автоматизированный ассистент студии на n8n:
диалог, входящая почта и пресейл-визуал в одном процессе.
- Автор
- Дмитрий Князьков
- Продукт
- «Северный Контур»
- Стек
- n8n · OpenAI · Gmail · Calendar · Telegram
Задача и сценарий
Студия из двух-пяти человек. Владелец сам продаёт, сам ведёт клиента и сам считает сроки.
- Разбор одного письма руками — 5–10 минут
- Встречи живут в переписке и не доезжают до календаря
- Пресейл-визуал — день работы дизайнера ещё до договора
- Заявки нигде не собираются: почта, мессенджеры, память
Один процесс с тремя входами и общей памятью. Человек принимает решения, ассистент готовит материал.
- Диалог свободным текстом — встреча и черновик
- Входящее письмо — категория, ответ, встреча
- Бриф — до четырёх знаков за один прогон
- Всё попадает в CRM автоматически, со статусом и журналом
Ассистент ничего не отправляет от лица человека: письмо остаётся черновиком, встреча — событием, которое можно отменить.
Архитектура процесса
Архитектурные решения
Все сценарии сходятся в общую ноду карточки. Строки CRM однородные, импорт один, дублировать логику записи негде.
Журнал, картинки и Telegram — параллельные ветки. Отказ в любой из них не оставляет пользователя без ответа.
Data Table вместо внешней таблицы: на один аккаунт, один OAuth и одну точку отказа меньше. Таблицы создаются сами при первом запуске.
Семь детерминированных правил ловят предсказуемые ошибки: дата в прошлом, встреча без даты, пустой черновик, чужая категория.
Промпт: v1 → v2
Ты ассистент. Разбери письмо и предложи ответ. Если нужна встреча — создай событие.
- Ставила встречи в 2023 год — «сегодня» модель придумывала
- Выдавала время
24:00:00, календарь такое не принимает - Помечала живые письма как рассылку
- Отвечала свободным текстом — парсить нечем
- Структурированный вывод по JSON-схеме вместо текста
- Дата приходит выражением n8n, а не из головы модели
- Явные границы: часы 00–23, длительность по умолчанию 60 минут
- Запрет выдумывать цены, сроки и имена — прямым текстом
- Порог уверенности: не уверен → «нужен ответ»
Девять сценариев приёмки прогоняются против живого ассистента: обычное письмо, встреча с датой, встреча без даты, рассылка, no-reply, письмо в прошедшем времени. Судьёй выступает вторая модель, но транспортная ошибка всегда даёт fail — иначе судья «прощал» упавший запрос. Именно эта проверка поймала реальный дефект.
Демо 1 · Агент
Готовые сценарии — запускаются одной кнопкой
Enter — отправить, Shift+Enter — перенос строки
- 📅Событие в календареПеред созданием всегда проверяет занятость. Нашёл пересечение — спрашивает, а не создаёт молча.
- ✍️Черновик письмаНужны получатель, тема и текст. Чего-то нет — переспросит. Письмо остаётся черновиком.
- 🧠Память диалогаСледующее сообщение читается как уточнение, а не новый запрос.
- 🗂Карточка в CRMКаждый диалог сохраняется как заявка со статусом и историей.
Демо 2 · Входящее письмо
Здесь появится разбор
Ассистент определит тип письма, решит, нужен ли ответ, и покажет ссылки для проверки.
Ассистент думает…
Обычно это занимает 5–15 секунд.
Письмо обработано
Ответ n8n целиком
Не удалось отправить
Демо 3 · Логотип
Здесь появится логотип
Ответьте на несколько коротких вопросов — нейросеть нарисует знак.
Рисуем логотип…
Сначала пишем техзадание, потом рисуем. Обычно 20–40 секунд.
Готово
Технические детали
Не получилось
CRM и журнал
Риски и вывод
- Выдуманная дата. Встреча уезжает в прошлое или в несуществующий час
- Выдуманные условия. Модель называет цену, которой никто не обещал
- Ложный игнор. Живое письмо помечено как рассылка и теряется
- Молчаливый отказ. Ошибка внутри процесса не доходит до человека
- Дата из n8n, проверка на прошлое, границы часов
- Прямой запрет на цифры, которых не было в письме
- Порог уверенности: сомнение трактуется в пользу клиента
- Журнал: каждое действие и каждый отказ — отдельной строкой
Три сценария в одном процессе, общая CRM, встречи и черновики в реальных Google-аккаунтах. Четыре логотипа рисуются параллельно и занимают столько же времени, сколько один.
Картинки едут внутри ответа — на потоке нужны ссылки вместо base64. Приёмку стоит запускать автоматически на каждое изменение, а не руками.