Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Типы агентов

Агенты — это основные единицы диспетчеризации в OpenPR-Webhook. Каждый агент определяет, как обрабатывать сопоставленное webhook-событие. В одном развёртывании можно настроить несколько агентов, и события маршрутизируются к соответствующему агенту на основе bot_context в webhook-payload.

Обзор

ТипСценарий использованияТребует флага функции
openclawОтправка уведомлений через Signal/Telegram с помощью OpenClaw CLIНет
openprxОтправка сообщений через Signal API или CLI OpenPRXНет
webhookПересылка событий на HTTP-эндпоинты (Slack, Discord и т.д.)Нет
customВыполнение произвольных shell-командНет
cliВыполнение AI-кодирующих агентов (codex, claude-code, opencode)Да (cli_enabled)

Структура конфигурации агента

Каждый агент имеет следующие общие поля:

toml
[[agents]]
id = "unique-id"              # Уникальный идентификатор, используется для сопоставления
name = "Human-Readable Name"  # Отображаемое имя, также используется для сопоставления
agent_type = "openclaw"       # Один из: openclaw, openprx, webhook, custom, cli
message_template = "..."      # Опционально: пользовательский формат сообщения

Затем, в зависимости от agent_type, предоставляется блок конфигурации, специфичный для типа:

  • [agents.openclaw] для агентов openclaw
  • [agents.openprx] для агентов openprx
  • [agents.webhook] для агентов webhook
  • [agents.custom] для пользовательских агентов
  • [agents.cli] для агентов cli

Шаблоны сообщений

Поле message_template поддерживает заполнители, которые заменяются значениями из webhook-payload:

ЗаполнительИсточникПример
{event}payload.eventissue.updated
{title}payload.data.issue.titleFix login bug
{key}payload.data.issue.keyPROJ-42
{issue_id}payload.data.issue.id123
{reason}payload.bot_context.trigger_reasonassigned_to_bot
{actor}payload.actor.namealice
{project}payload.project.namebackend
{workspace}payload.workspace.nameIM
{state}payload.data.issue.statein_progress
{priority}payload.data.issue.priorityhigh
{url}производныйissue/123

Шаблон по умолчанию (для openclaw, openprx, webhook, custom):

[{project}] {event}: {key} {title}
{actor} | Trigger: {reason}

Логика сопоставления агентов

Когда приходит webhook-событие с bot_context.is_bot_task = true:

  1. Сервис извлекает bot_context.bot_name и bot_context.bot_agent_type
  2. Ищет агентов, у которых id или name (без учёта регистра) совпадает с bot_name
  3. Если нет совпадения по имени, откатывается к первому агенту, чей agent_type совпадает с bot_agent_type
  4. Если ни один агент не совпадает, событие подтверждается, но не диспетчеризируется

Пример с несколькими агентами

toml
# Агент 1: Уведомление через Telegram
[[agents]]
id = "notify-tg"
name = "Telegram Notifier"
agent_type = "openclaw"
message_template = "[{project}] {event}: {key} {title}"

[agents.openclaw]
command = "/usr/local/bin/openclaw"
channel = "telegram"
target = "@my-channel"

# Агент 2: Пересылка в Slack
[[agents]]
id = "notify-slack"
name = "Slack Forwarder"
agent_type = "webhook"

[agents.webhook]
url = "https://hooks.slack.com/services/T.../B.../xxx"

# Агент 3: AI-кодирующий агент с MCP closed-loop
[[agents]]
id = "coder"
name = "Code Agent"
agent_type = "cli"

[agents.cli]
executor = "claude-code"
workdir = "/opt/projects/backend"
timeout_secs = 600
skip_callback_state = true  # AI обновляет состояние через MCP напрямую

[agents.cli.env_vars]
OPENPR_API_URL = "http://localhost:3000"
OPENPR_BOT_TOKEN = "opr_xxx"

В этой конфигурации OpenPR может маршрутизировать разные события к разным агентам, устанавливая поле bot_name в webhook-payload.

Следующие шаги

Released under the Apache-2.0 License.