Агент автоответа по почте
Агент автоответа по почте
Обзор
Соберите агента автоответа: входящие письма обрабатываются автоматически. Пример для начинающих по Agent Inbox: вебхуки, события почты и отправка ответов.
Что вы получите
В конце руководства у вас будет работающий агент, который:
- Принимает письма в выделенный inbox Agent Inbox
- Обрабатывает вебхуки в реальном времени
- Извлекает данные отправителя (имя и email)
- Формирует персонализированные ответы по шаблону
- Отправляет автоответы отправителю
Схема для пользователя:
Требования
Перед началом подготовьте:
Нужно:
- Python 3.8+
- Аккаунт Agent Inbox и API-ключ
- Аккаунт ngrok (достаточно бесплатного тарифа)
Настройка проекта
Шаг 1: каталог проекта
Создайте папку для агента:
Шаг 2: код агента
Создайте agent.py и вставьте код:
Показать полный код agent.py
Шаг 3: requirements.txt
Файл requirements.txt:
Шаг 4: установка зависимостей
Шаг 5: переменные окружения
Файл .env с учётными данными:
Разбор кода
Как устроен агент по шагам.
Схема
1. Инициализация
Важно:
- Сначала
load_dotenv(), затем импорт Agent Inbox - SDK читает
AGENTINBOX_API_KEYиз окружения - Flask принимает вебхуки
2. Инфраструктура
setup_agentinbox() создаёт inbox и вебхук:
Зачем client_id?
С ним операция идемпотентна: повторные запуски не создают дубликаты — вернётся существующий inbox.
Что происходит:
- Ngrok даёт публичный URL на
localhost:8080 - Регистрируется вебхук в Agent Inbox
- При новых письмах Agent Inbox шлёт POST на этот URL
3. Обработка вебхуков
Эндпоинт принимает уведомления о входящей почте:
Почему игнорируем message.sent?
После ответа агента приходит вебхук message.sent. Без фильтра агент воспримет свой ответ как новое письмо и уйдёт в бесконечный цикл.
Ответ 200 значит: событие получено, обрабатывать его не нужно.
4. Данные из письма
Структура payload вебхука:
5. Разбор адреса отправителя
Поддерживаются разные форматы From:
Примеры:
"John Doe <john@example.com>"→ имя: “John Doe”, email: “john@example.com”"john@example.com"→ имя: “John”, email: “john@example.com”"Last, First <name@example.com>"→ имя: “Name”, email: “name@example.com”
6. Генерация ответа
Шаблон без AI и внешних API; подставляется имя отправителя.
7. Отправка ответа
Детали:
to— список адресовmessage_idсвязывает ответ с исходным письмом (тред)- На вебхук всегда отвечайте
200 - Ошибки логируются, сервер не падает
Почему всегда 200?
Даже если отправка ответа не удалась, 200 сообщает Agent Inbox, что вебхук принят. Иначе платформа будет ретраить доставку — это не лечит ошибки приложения.
Запуск агента
Ожидаемый вывод:
Готово. Агент запущен и ждёт письма.
Не закрывайте терминал — иначе агент остановится.
Проверка
Отправьте тестовое письмо.
Тестовое письмо
- Откройте личную почту (Gmail, Outlook и т.д.)
- Новое сообщение:
- Отправьте письмо
В терминале
Входящие
Через несколько секунд придёт автоответ:
Работает. Вы собрали и проверили первого агента Agent Inbox: имя извлечено, ответ персонализирован.
Настройка под себя
Измените текст автоответа в generate_reply() в agent.py.
Доступны:
sender_name— имя из Fromsubject— тема письма
Правьте строки в return, чтобы менять ответ.
Устранение неполадок
Частые проблемы
ModuleNotFoundError: No module named 'agentinbox'
Проблема: не установлены зависимости.
Решение:
Активируйте venv, если используете:
Agent Inbox API Error: Unauthorized
Проблема: неверный или отсутствующий API-ключ.
Что сделать:
- В
.envкорректныйAGENTINBOX_API_KEY - Ключ действителен в панели Agent Inbox
- Нет лишних пробелов или кавычек
.envлежит рядом сagent.py
Проверка ключа:
Ngrok authentication failed
Проблема: неверный или отсутствующий токен ngrok.
Что сделать:
- Токен в ngrok dashboard
- Обновите
NGROK_AUTHTOKENв.env - Без лишних пробелов
Или глобально:
Webhook not receiving emails
Чеклист:
- Агент запущен? (
python agent.py— «Waiting for incoming emails…») - Туннель ngrok активен? (URL вебхука в консоли)
- Письмо на правильный inbox?
- URL вебхука доступен?
curl https://your-domain.ngrok-free.app/webhook/inbound
Отладка:
- Логируйте payload:
-
Панель ngrok — логи запросов
-
Вебхук зарегистрирован:
Port 8080 already in use
Проблема: порт 8080 занят.
Вариант 1: завершите процесс на порту
Вариант 2: другой порт
Reply not being sent
Проблема: вебхук есть, ответа нет.
Шаги:
- Ошибки в консоли
- Параметры reply API:
- Прямой вызов reply API:
toдолжен быть списком:
Поздравляем — первый агент Agent Inbox готов.
Дополнительно: ответы с ИИ (OpenAI)
Можно добавить осмысленные ответы через OpenAI.
Шаг 1: установка OpenAI
Шаг 2: ключ OpenAI в .env
Шаг 3: функции треда и ИИ в agent.py
После generate_reply() добавьте:
Шаг 4: обновите обработчик вебхука
В receive_webhook() добавьте thread_id и ветку с ИИ:
Как это работает:
- История треда через
client.threads.get(thread_id) - История форматируется и уходит в OpenAI
- Ответы с учётом контекста
- При ошибке OpenAI в примере ниже можно добавить повторы (в тексте выше была неточность про «three times» — реализуйте ретраи при необходимости)
Итог: у агента появляется память переписки; на фоллоу-апы отвечает с контекстом, а не шаблоном.
Сделали что-то интересное на Agent Inbox? Напишите нам: info@patternautomation.com.
