Webhooks
El Gateway puede exponer un pequeño endpoint HTTP de webhook para disparadores externos.Habilitar
hooks.tokenes obligatorio cuandohooks.enabled=true.hooks.pathtiene como valor predeterminado/hooks.
Autenticación
Cada solicitud debe incluir el token del hook. Prefiera encabezados:Authorization: Bearer <token>(recomendado)x-openclaw-token: <token>- Se rechazan los tokens en la query string (
?token=...devuelve400).
Endpoints
POST /hooks/wake
Carga útil:
textobligatorio (string): La descripción del evento (p. ej., “Nuevo correo recibido”).modeopcional (now|next-heartbeat): Si se debe activar un heartbeat inmediato (predeterminadonow) o esperar la siguiente verificación periódica.
- Encola un evento del sistema para la sesión principal
- Si
mode=now, activa un heartbeat inmediato
POST /hooks/agent
Carga útil:
messageobligatorio (string): El prompt o mensaje que el agente debe procesar.nameopcional (string): Nombre legible para humanos del hook (p. ej., “GitHub”), usado como prefijo en los resúmenes de sesión.agentIdopcional (string): Enruta este hook a un agente específico. Los IDs desconocidos vuelven al agente predeterminado. Cuando se establece, el hook se ejecuta usando el workspace y la configuración del agente resuelto.sessionKeyopcional (string): La clave usada para identificar la sesión del agente. Por defecto, este campo se rechaza a menos quehooks.allowRequestSessionKey=true.wakeModeopcional (now|next-heartbeat): Si se debe activar un heartbeat inmediato (predeterminadonow) o esperar la siguiente verificación periódica.deliveropcional (boolean): Sitrue, la respuesta del agente se enviará al canal de mensajería. El valor predeterminado estrue. Las respuestas que solo son acuses de heartbeat se omiten automáticamente.channelopcional (string): El canal de mensajería para la entrega. Uno de:last,whatsapp,telegram,discord,slack,mattermost(plugin),signal,imessage,msteams. El valor predeterminado eslast.toopcional (string): El identificador del destinatario para el canal (p. ej., número de teléfono para WhatsApp/Signal, ID de chat para Telegram, ID de canal para Discord/Slack/Mattermost (plugin), ID de conversación para MS Teams). Por defecto, el último destinatario en la sesión principal.modelopcional (string): Anulación del modelo (p. ej.,anthropic/claude-3-5-sonneto un alias). Debe estar en la lista de modelos permitidos si hay restricciones.thinkingopcional (string): Anulación del nivel de razonamiento (p. ej.,low,medium,high).timeoutSecondsopcional (number): Duración máxima de la ejecución del agente en segundos.
- Ejecuta un turno de agente aislado (clave de sesión propia)
- Siempre publica un resumen en la sesión principal
- Si
wakeMode=now, activa un heartbeat inmediato
Política de clave de sesión (cambio incompatible)
Las sobrescrituras desessionKey en la carga útil de /hooks/agent están deshabilitadas por defecto.
- Recomendado: establece un
hooks.defaultSessionKeyfijo y desactiva las anulaciones por solicitud. - Opcional: permite anulaciones por solicitud solo cuando sea necesario y restringe los prefijos.
POST /hooks/<name> (mapped)
Los nombres de hooks personalizados se resuelven mediante hooks.mappings (consulte la configuración). Un mapeo puede
convertir payloads arbitrarios en acciones wake o agent, con plantillas opcionales o
transformaciones de código.
Opciones de mapeo (resumen):
hooks.presets: ["gmail"]habilita el mapeo integrado de Gmail.hooks.mappingsle permite definirmatch,actiony plantillas en la configuración.hooks.transformsDir+transform.modulecarga un módulo JS/TS para lógica personalizada.hooks.transformsDir(si se configura) debe permanecer dentro de la raíz de transforms bajo tu directorio de configuración de OpenClaw (normalmente~/.openclaw/hooks/transforms).transform.moduledebe resolverse dentro del directorio efectivo de transforms (las rutas de traversión/escape se rechazan).
- Use
match.sourcepara mantener un endpoint de ingesta genérico (enrutamiento impulsado por el payload). - Las transformaciones TS requieren un cargador TS (p. ej.,
bunotsx) o.jsprecompilado en tiempo de ejecución. - Configure
deliver: true+channel/toen los mapeos para enrutar respuestas a una superficie de chat (channeltiene como valor predeterminadolasty recurre a WhatsApp). agentIddirige el hook a un agente específico; los ID desconocidos recurren al agente predeterminado.hooks.allowedAgentIdsrestringe el enrutamiento explícito medianteagentId. Omítelo (o incluye*) para permitir cualquier agente. Establece[]para denegar el enrutamiento explícito medianteagentId.hooks.defaultSessionKeyestablece la sesión predeterminada para las ejecuciones del agente del hook cuando no se proporciona una clave explícita.hooks.allowRequestSessionKeycontrola si las cargas útiles de/hooks/agentpueden establecersessionKey(predeterminado:false).hooks.allowedSessionKeyPrefixesrestringe opcionalmente los valores explícitos desessionKeyprovenientes de cargas útiles de solicitud y mapeos.allowUnsafeExternalContent: truedeshabilita el envoltorio externo de seguridad de contenido para ese hook (peligroso; solo para fuentes internas de confianza).openclaw webhooks gmail setupescribe la configuraciónhooks.gmailparaopenclaw webhooks gmail run. Consulte Gmail Pub/Sub para el flujo completo de vigilancia de Gmail.
Responses
200para/hooks/wake202para/hooks/agent(ejecución asíncrona iniciada)401en falla de autenticación429después de fallos de autenticación repetidos desde el mismo cliente (consultaRetry-After)400en payload inválido413en payloads de tamaño excesivo
Examples
Use a different model
Agreguemodel al payload del agente (o al mapeo) para anular el modelo en esa ejecución:
agents.defaults.models, asegúrese de que el modelo de anulación esté incluido allí.
Security
- Mantenga los endpoints de hook detrás de loopback, tailnet o un proxy inverso de confianza.
- Use un token de hook dedicado; no reutilice tokens de autenticación del gateway.
- Los fallos de autenticación repetidos se limitan por tasa según la dirección del cliente para ralentizar intentos de fuerza bruta.
- Si utilizas enrutamiento multiagente, establece
hooks.allowedAgentIdspara limitar la selección explícita deagentId. - Mantén
hooks.allowRequestSessionKey=falsea menos que necesites sesiones seleccionadas por el solicitante. - Si habilitas
sessionKeyen la solicitud, restringehooks.allowedSessionKeyPrefixes(por ejemplo,["hook:"]). - Evite incluir payloads sin procesar sensibles en los registros de webhooks.
- Los payloads de hook se tratan como no confiables y, por defecto, se envuelven con límites de seguridad.
Si debe deshabilitar esto para un hook específico, configure
allowUnsafeExternalContent: trueen el mapeo de ese hook (peligroso).