Skip to main content
Создайте проактивного событийно-управляемого GitHub-агента, который использует Webhooks для обработки ответов в реальном времени. В этом руководстве вы создадите сложного агента с двумя режимами работы. Он будет:
  1. Проактивно отслеживать репозиторий GitHub и отправлять приветственное письмо при обнаружении нового «звёздочки».
  2. Реактивно обрабатывать входящие письма и отвечать на них в реальном времени с помощью AgentInbox Webhooks.
Мы используем Flask для создания простого веб-сервера и ngrok для его публикации в интернете, чтобы AgentInbox мог отправлять на него события.

Предварительные требования

Перед началом убедитесь, что у вас есть следующее:
  • Python 3.8+
  • API-ключ AgentInbox
  • Аккаунт OpenAI и API-ключ
  • Аккаунт ngrok и токен авторизации

Шаг 1: Настройка проекта

Сначала создадим директорию проекта и установим необходимые зависимости.
  1. Создайте папку проекта и перейдите в неё.
  2. Создайте файл requirements.txt со следующим содержимым:
agentinbox
agentinbox-toolkit
openai
openai-agents
python-dotenv
flask
ngrok
  1. Установите пакеты:
pip install -r requirements.txt
  1. Создайте файл .env для хранения секретных ключей и конфигурации:
AGENTINBOX_API_KEY="ваш_ключ_agentinbox"
OPENAI_API_KEY="ваш_ключ_openai"
NGROK_AUTHTOKEN="ваш_токен_ngrok"
INBOX_USERNAME="github-star-agent"
WEBHOOK_DOMAIN="ваш-поддомен.ngrok-free.app"
DEMO_TARGET_EMAIL="ваш-email@example.com"
TARGET_GITHUB_REPO="ВашGitHub/ВашРепозиторий"
  • Замените значения-заглушки на реальные ключи.
  • 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: Запуск агента

Скрипт полностью самодостаточен. При запуске он автоматически:
  1. Создаст почтовый ящик агента.
  2. Запустит туннель ngrok для получения публичного URL.
  3. Использует этот URL для создания вебхука в AgentInbox.
  4. Запустит веб-сервер для прослушивания событий.
  5. Запустит фоновый процесс мониторинга GitHub.
Откройте терминал в директории проекта и выполните:
python main.py
В терминале появится серия логов, подтверждающих завершение всех шагов настройки. Не закрывайте это окно терминала.

Шаг 4: Тестирование агента

Сценарий 1: Проактивная рассылка

Ничего делать не нужно! Функция poll_github_stargazers уже работает. Примерно через 15 секунд в терминале появятся логи о обнаружении новой звёздочки и запуске агента. Чуть позже письмо должно прийти на адрес, указанный в DEMO_TARGET_EMAIL.

Сценарий 2: Реактивный ответ

  1. Найдите письмо, которое агент вам отправил.
  2. Ответьте на него с каким-нибудь вопросом, например: «Интересно! Как это установить?»
  3. Проверьте терминал с запущенным main.py — должны появиться новые логи о получении и обработке вебхука.
  4. Вскоре в вашем почтовом ящике появится HTML-ответ от агента.
Готово! У вас есть полноценный событийно-управляемый агент, который умеет как инициировать переписку, так и отвечать на письма в реальном времени.