Skip to content
Esta página fue generada y traducida con asistencia de IA. Si encuentra alguna imprecisión, no dude en ayudar a mejorarla. Editar en GitHub

Referencia de Configuración

OpenPR-Webhook usa un único archivo de configuración TOML. Por defecto, busca config.toml en el directorio actual. Puedes especificar una ruta personalizada como primer argumento de línea de comandos.

Esquema Completo

toml
# ─── Server ───────────────────────────────────────────────
[server]
listen = "0.0.0.0:9000"               # Bind address and port

# ─── Security ─────────────────────────────────────────────
[security]
webhook_secrets = ["secret1", "secret2"]  # HMAC-SHA256 secrets (supports rotation)
allow_unsigned = false                     # Allow unsigned webhook requests (default: false)

# ─── Feature Flags ────────────────────────────────────────
[features]
tunnel_enabled = false                 # Enable WSS tunnel subsystem (default: false)
cli_enabled = false                    # Enable CLI agent executor (default: false)
callback_enabled = false               # Enable state-transition callbacks (default: false)

# ─── Runtime Tuning ───────────────────────────────────────
[runtime]
cli_max_concurrency = 1               # Max concurrent CLI tasks (default: 1)
http_timeout_secs = 15                 # HTTP client timeout (default: 15)
tunnel_reconnect_backoff_max_secs = 60 # Max tunnel reconnect backoff (default: 60)

# ─── WSS Tunnel ───────────────────────────────────────────
[tunnel]
enabled = false                        # Enable this tunnel instance (default: false)
url = "wss://control.example.com/ws"   # WebSocket URL
agent_id = "my-agent"                  # Agent identifier
auth_token = "bearer-token"            # Bearer auth token
reconnect_secs = 3                     # Base reconnect interval (default: 3)
heartbeat_secs = 20                    # Heartbeat interval (default: 20, min: 3)
hmac_secret = "envelope-signing-key"   # Envelope HMAC signing secret
require_inbound_sig = false            # Require inbound message signatures (default: false)

# ─── Agents ───────────────────────────────────────────────

# --- OpenClaw Agent ---
[[agents]]
id = "notify-signal"
name = "Signal Notifier"
agent_type = "openclaw"
message_template = "[{project}] {event}: {key} {title}"

[agents.openclaw]
command = "/usr/local/bin/openclaw"
channel = "signal"
target = "+1234567890"

# --- OpenPRX Agent (HTTP API mode) ---
[[agents]]
id = "openprx-signal"
name = "OpenPRX Signal"
agent_type = "openprx"

[agents.openprx]
signal_api = "http://127.0.0.1:8686"
account = "+1234567890"
target = "+0987654321"
channel = "signal"

# --- OpenPRX Agent (CLI mode) ---
[[agents]]
id = "openprx-cli"
name = "OpenPRX CLI"
agent_type = "openprx"

[agents.openprx]
command = "openprx message send"
channel = "signal"
target = "+0987654321"

# --- Webhook Agent ---
[[agents]]
id = "forward-slack"
name = "Slack Forwarder"
agent_type = "webhook"

[agents.webhook]
url = "https://hooks.slack.com/services/T.../B.../xxx"
secret = "outbound-hmac-secret"        # Optional: sign outbound requests

# --- Custom Agent ---
[[agents]]
id = "custom-script"
name = "Custom Script"
agent_type = "custom"
message_template = "{event}|{key}|{title}"

[agents.custom]
command = "/usr/local/bin/handle-event.sh"
args = ["--format", "json"]

# --- CLI Agent ---
[[agents]]
id = "ai-coder"
name = "AI Coder"
agent_type = "cli"

[agents.cli]
executor = "claude-code"
workdir = "/opt/projects/backend"
timeout_secs = 900
max_output_chars = 12000
prompt_template = "Fix issue {issue_id}: {title}\nContext: {reason}"
update_state_on_start = "in_progress"
update_state_on_success = "done"
update_state_on_fail = "todo"
callback = "mcp"
callback_url = "http://127.0.0.1:8090/mcp/rpc"
callback_token = "bearer-token"
skip_callback_state = false               # Establece true cuando la IA gestiona el estado vía MCP
# mcp_instructions = "..."               # Instrucciones MCP personalizadas (reemplaza las predeterminadas)
# mcp_config_path = "/path/to/mcp.json"  # claude-code --mcp-config path

[agents.cli.env_vars]                      # Variables de entorno por agente
# OPENPR_API_URL = "http://localhost:3000"
# OPENPR_BOT_TOKEN = "opr_xxx"

Referencia de Secciones

[server]

CampoTipoRequeridoPredeterminadoDescripción
listenString--Dirección TCP de enlace en formato host:puerto

[security]

CampoTipoRequeridoPredeterminadoDescripción
webhook_secretsArray de stringsNo[]Lista de secretos HMAC-SHA256 válidos para verificación entrante. Múltiples secretos soportan la rotación de claves.
allow_unsignedBooleanNofalseAceptar solicitudes sin firmar sin verificación de firma. No recomendado para producción.

La verificación de firma comprueba dos encabezados en orden:

  1. X-Webhook-Signature
  2. X-OpenPR-Signature

El valor del encabezado debe estar en el formato sha256={hex-digest}. El servicio prueba cada secreto en webhook_secrets hasta encontrar uno que coincida.

[features]

Todos los indicadores de características tienen valor predeterminado false. Este enfoque de defensa en profundidad garantiza que las características peligrosas sean explícitamente habilitadas.

CampoTipoPredeterminadoDescripción
tunnel_enabledBooleanfalseHabilitar el subsistema de túnel WSS
cli_enabledBooleanfalseHabilitar el executor de agentes CLI
callback_enabledBooleanfalseHabilitar callbacks de transición de estado

[runtime]

CampoTipoPredeterminadoDescripción
cli_max_concurrencyInteger1Número máximo de tareas de agente CLI concurrentes
http_timeout_secsInteger15Tiempo de espera para solicitudes HTTP salientes (reenvío de webhooks, callbacks, API Signal)
tunnel_reconnect_backoff_max_secsInteger60Intervalo de retroceso máximo para reconexión del túnel

[tunnel]

Ver Túnel WSS para documentación detallada.

[[agents]]

Ver Tipos de Agentes y Referencia de Executors para documentación detallada.

Variables de Entorno

VariableDescripción
OPENPR_WEBHOOK_SAFE_MODEEstablece en 1, true, yes o on para deshabilitar el túnel, CLI y características de callback independientemente de la configuración. Útil para bloqueo de emergencia.
RUST_LOGControla la verbosidad del registro. Predeterminado: openpr_webhook=info. Ejemplos: openpr_webhook=debug, openpr_webhook=trace

Variables de Entorno por Agente

Los agentes CLI soportan inyección de variables de entorno personalizadas mediante [agents.cli.env_vars]. Estas se pasan al subproceso del executor y son útiles para proporcionar autenticación MCP:

VariableDescripción
OPENPR_API_URLURL base de la API de OpenPR (usada por el servidor MCP)
OPENPR_BOT_TOKENToken de autenticación del bot (prefijo opr_)
OPENPR_WORKSPACE_IDUUID del workspace de destino

Modo Seguro

Establecer OPENPR_WEBHOOK_SAFE_MODE=1 deshabilita:

  • Ejecución de agentes CLI (cli_enabled forzado a false)
  • Envío de callbacks (callback_enabled forzado a false)
  • Túnel WSS (tunnel_enabled forzado a false)

Los agentes no peligrosos (openclaw, openprx, webhook, custom) continúan funcionando normalmente. Esto permite bloquear rápidamente el servicio sin modificar el archivo de configuración.

bash
OPENPR_WEBHOOK_SAFE_MODE=1 ./openpr-webhook config.toml

Configuración Mínima

La configuración válida más pequeña:

toml
[server]
listen = "0.0.0.0:9000"

[security]
allow_unsigned = true

Esto inicia el servicio sin agentes y sin verificación de firma. Útil solo para desarrollo.

Lista de Verificación para Producción

  • [ ] Establece al menos una entrada en webhook_secrets
  • [ ] Establece allow_unsigned = false
  • [ ] Configura al menos un agente
  • [ ] Si usas agentes CLI: establece cli_enabled = true y revisa la lista blanca de executors
  • [ ] Si usas túnel: usa wss:// (no ws://), establece hmac_secret y require_inbound_sig = true
  • [ ] Establece RUST_LOG=openpr_webhook=info (evita debug/trace en producción por rendimiento)
  • [ ] Considera ejecutar con OPENPR_WEBHOOK_SAFE_MODE=1 inicialmente para verificar la funcionalidad no-CLI

Released under the Apache-2.0 License.