Webhooks
O Gateway pode expor um pequeno endpoint HTTP de webhook para gatilhos externos.Ativar
hooks.tokené obrigatório quandohooks.enabled=true.hooks.pathtem como padrão/hooks.
Autenticação
Toda solicitação deve incluir o token do hook. Prefira cabeçalhos:Authorization: Bearer <token>(recomendado)x-openclaw-token: <token>- Tokens de query-string são rejeitados (
?token=...retorna400).
Endpoints
POST /hooks/wake
Payload:
textobrigatório (string): A descrição do evento (por exemplo, “Novo e-mail recebido”).modeopcional (now|next-heartbeat): Se deve acionar um heartbeat imediato (padrãonow) ou aguardar a próxima verificação periódica.
- Enfileira um evento de sistema para a sessão principal
- Se
mode=now, aciona um heartbeat imediato
POST /hooks/agent
Payload:
messageobrigatório (string): O prompt ou mensagem para o agente processar.nameopcional (string): Nome legível para humanos do hook (por exemplo, “GitHub”), usado como prefixo nos resumos de sessão.agentIdopcional (string): direciona este hook para um agente específico. IDs desconhecidos retornam para o agente padrão. Quando definido, o hook é executado usando o workspace e a configuração do agente resolvido.sessionKeyopcional (string): A chave usada para identificar a sessão do agente. Por padrão, este campo é rejeitado a menos quehooks.allowRequestSessionKey=true.wakeModeopcional (now|next-heartbeat): Se deve acionar um heartbeat imediato (padrãonow) ou aguardar a próxima verificação periódica.deliveropcional (boolean): Setrue, a resposta do agente será enviada ao canal de mensagens. O padrão étrue. Respostas que são apenas reconhecimentos de heartbeat são automaticamente ignoradas.channelopcional (string): O canal de mensagens para entrega. Um de:last,whatsapp,telegram,discord,slack,mattermost(plugin),signal,imessage,msteams. O padrão élast.toopcional (string): O identificador do destinatário para o canal (por exemplo, número de telefone para WhatsApp/Signal, ID do chat para Telegram, ID do canal para Discord/Slack/Mattermost (plugin), ID da conversa para MS Teams). O padrão é o último destinatário na sessão principal.modelopcional (string): Substituição de modelo (por exemplo,anthropic/claude-3-5-sonnetou um alias). Deve estar na lista de modelos permitidos se houver restrição.thinkingopcional (string): Substituição do nível de pensamento (por exemplo,low,medium,high).timeoutSecondsopcional (number): Duração máxima da execução do agente em segundos.
- Executa um turno de agente isolado (chave de sessão própria)
- Sempre publica um resumo na sessão principal
- Se
wakeMode=now, aciona um heartbeat imediato
Política de session key (mudança incompatível)
Overrides desessionKey no payload de /hooks/agent estão desabilitados por padrão.
- Recomendado: defina um
hooks.defaultSessionKeyfixo e mantenha desativados os overrides por requisição. - Opcional: permita substituições na requisição apenas quando necessário e restrinja prefixos.
POST /hooks/<name> (mapeado)
Nomes de hooks personalizados são resolvidos via hooks.mappings (ver configuração). Um mapeamento pode
transformar payloads arbitrários em ações wake ou agent, com templates opcionais ou
transformações de código.
Opções de mapeamento (resumo):
hooks.presets: ["gmail"]habilita o mapeamento integrado do Gmail.hooks.mappingspermite definirmatch,actione templates na configuração.hooks.transformsDir+transform.modulecarrega um módulo JS/TS para lógica personalizada.hooks.transformsDir(se definido) deve permanecer dentro do diretório raiz de transforms no diretório de configuração do OpenClaw (normalmente~/.openclaw/hooks/transforms).transform.moduledeve ser resolvido dentro do diretório efetivo de transforms (caminhos de travessia/escape são rejeitados).
- Use
match.sourcepara manter um endpoint genérico de ingestão (roteamento orientado por payload). - Transformações em TS exigem um loader de TS (por exemplo,
bunoutsx) ou.jspré-compilado em tempo de execução. - Defina
deliver: true+channel/tonos mapeamentos para rotear respostas para uma superfície de chat (channeltem como padrãolaste faz fallback para WhatsApp). agentIddireciona o hook para um agente específico; IDs desconhecidos recorrem ao agente padrão.hooks.allowedAgentIdsrestringe o roteamento explícito poragentId. Omita (ou inclua*) para permitir qualquer agente. Defina[]para negar o roteamento explícito poragentId.hooks.defaultSessionKeydefine a sessão padrão para execuções do agente via hook quando nenhuma chave explícita é fornecida.hooks.allowRequestSessionKeycontrola se cargas de/hooks/agentpodem definirsessionKey(padrão:false).hooks.allowedSessionKeyPrefixesopcionalmente restringe valores explícitos desessionKeyprovenientes de cargas de requisição e mapeamentos.allowUnsafeExternalContent: truedesativa o invólucro externo de segurança de conteúdo para esse hook (perigoso; apenas para fontes internas confiáveis).openclaw webhooks gmail setupgrava configuraçãohooks.gmailparaopenclaw webhooks gmail run. Veja Gmail Pub/Sub para o fluxo completo de watch do Gmail.
Respostas
200para/hooks/wake202para/hooks/agent(execução assíncrona iniciada)401em falha de autenticação429após falhas repetidas de autenticação do mesmo cliente (verifiqueRetry-After)400em payload inválido413em payloads grandes demais
Exemplos
Usar um modelo diferente
Adicionemodel ao payload do agente (ou ao mapeamento) para substituir o modelo nessa execução:
agents.defaults.models, certifique-se de que o modelo de substituição esteja incluído lá.
Segurança
- Mantenha endpoints de hook atrás de local loopback, tailnet ou um proxy reverso confiável.
- Use um token de hook dedicado; não reutilize tokens de autenticação do gateway.
- Falhas repetidas de autenticação são limitadas por taxa por endereço de cliente para desacelerar tentativas de força bruta.
- Se você usa roteamento multiagente, defina
hooks.allowedAgentIdspara limitar a seleção explícita deagentId. - Mantenha
hooks.allowRequestSessionKey=falsea menos que precise de sessões selecionadas pelo solicitante. - Se você habilitar
sessionKeyna requisição, restrinjahooks.allowedSessionKeyPrefixes(por exemplo,["hook:"]). - Evite incluir payloads brutos sensíveis nos logs de webhook.
- As cargas de gancho são tratadas como não confiáveis e dentro de limites de segurança por padrão.
Payloads de hook são tratados como não confiáveis e envolvidos por limites de segurança por padrão.
Se você precisar desativar isso para um hook específico, defina
allowUnsafeExternalContent: trueno mapeamento desse hook (perigoso).