- Проактивно отслеживать репозиторий GitHub и отправлять приветственное письмо при обнаружении нового «звёздочки».
- Реактивно обрабатывать входящие письма и отвечать на них в реальном времени с помощью AgentInbox Webhooks.
ngrok для его публикации в интернете, чтобы AgentInbox мог отправлять на него события.
Предварительные требования
Перед началом убедитесь, что у вас есть следующее:Шаг 1: Настройка проекта
Сначала создадим директорию проекта и установим необходимые зависимости.- Создайте папку проекта и перейдите в неё.
- Создайте файл
requirements.txtсо следующим содержимым:
- Установите пакеты:
- Создайте файл
.envдля хранения секретных ключей и конфигурации:
- Замените значения-заглушки на реальные ключи.
WEBHOOK_DOMAIN— ваш пользовательский домен из панели управления ngrok.INBOX_USERNAMEбудет адресом электронной почты вашего агента (например,github-star-agent@agentinbox.ru).
Шаг 2: Код агента (main.py)
Создайте файл main.py и добавьте полный пример кода. Этот скрипт содержит всю логику агента, включая идемпотентное создание почтового ящика.
Понимание кода
Идемпотентное создание ящика и вебхука. Скрипт самостоятельно выполняет настройку. Перед запуском агента код вызываетclient.inboxes.create с параметром client_id. Это делает операцию идемпотентной: при первом запуске ящик создаётся, при каждом последующем — API распознаёт client_id, видит, что ящик уже существует, и просто возвращает его данные вместо создания дубликата. Тот же принцип применяется при создании вебхука.
Переменная instructions определяет всю личность агента, его цели и логику работы. Это подробный промпт, описывающий поведение агента в двух сценариях: проактивная рассылка при новых звёздочках GitHub и реактивные ответы на входящие письма. Включает строгие правила HTML-форматирования и обработки различных типов запросов.
Функция-опросчик работает в отдельном фоновом потоке. В рамках демо она симулирует обнаружение новой звёздочки каждые 13 секунд. При «обнаружении» формируется подробный промпт и запускается агент для начала рассылки (поиск информации → отправка письма).
Чтобы пример оставался простым, код не обращается к GitHub API напрямую — он симулирует появление звёздочки. В реальном приложении симуляционную логику следует заменить реальными API-вызовами к GitHub.Flask и ngrok:
app = Flask(__name__)создаёт веб-сервер.@app.route("/webhooks", methods=["POST"])определяет URL для приёмаPOST-запросов от AgentInbox.listener = ngrok.forward(...)создаёт публичный URL (с вашимWEBHOOK_DOMAIN) и перенаправляет трафик на локальный Flask-сервер на порту8080.
/webhooks функция receive_webhook немедленно запускает process_webhook в новом потоке. Это важная практика: она позволяет мгновенно вернуть AgentInbox статус 200 OK, пока основная работа выполняется в фоне. Внутри process_webhook разбирается JSON-payload, формируется промпт из содержимого письма, запускается агент, а затем client.messages.reply() отправляет HTML-ответ агента.
Шаг 3: Запуск агента
Скрипт полностью самодостаточен. При запуске он автоматически:- Создаст почтовый ящик агента.
- Запустит туннель
ngrokдля получения публичного URL. - Использует этот URL для создания вебхука в AgentInbox.
- Запустит веб-сервер для прослушивания событий.
- Запустит фоновый процесс мониторинга GitHub.
Шаг 4: Тестирование агента
Сценарий 1: Проактивная рассылка
Ничего делать не нужно! Функцияpoll_github_stargazers уже работает. Примерно через 15 секунд в терминале появятся логи о обнаружении новой звёздочки и запуске агента. Чуть позже письмо должно прийти на адрес, указанный в DEMO_TARGET_EMAIL.
Сценарий 2: Реактивный ответ
- Найдите письмо, которое агент вам отправил.
- Ответьте на него с каким-нибудь вопросом, например: «Интересно! Как это установить?»
- Проверьте терминал с запущенным
main.py— должны появиться новые логи о получении и обработке вебхука. - Вскоре в вашем почтовом ящике появится HTML-ответ от агента.
