웹훅 (Webhooks)
Gateway 서버는 외부 트리거를 수신하기 위한 가벼운 HTTP 웹훅(Webhook) 엔드포인트를 노출할 수 있음.활성화 방법
hooks.enabled: true설정 시hooks.token은 필수 항목임.hooks.path의 기본값은/hooks임.
인증 (Auth)
모든 웹훅 요청에는 반드시 설정된 훅 토큰이 포함되어야 함. 다음과 같은 헤더 방식 사용을 권장함:Authorization: Bearer <token>(권장)x-openclaw-token: <token>- 쿼리 스트링 방식(
?token=...)은 보안을 위해400오류를 반환하며 거부됨.
기본 엔드포인트
POST /hooks/wake
메인 세션에 시스템 이벤트를 추가하여 에이전트를 활성화함.
페이로드 예시:
text(문자열, 필수): 이벤트에 대한 설명 (예: “새 이메일이 도착했습니다”).mode(선택,now|next-heartbeat): 즉시 하트비트를 트리거할지(기본값now), 다음 예약된 점검 시점까지 기다릴지 결정함.
- 메인(Main) 세션의 대기열에 시스템 이벤트를 추가함.
mode: "now"인 경우 즉시 하트비트 실행을 유도함.
POST /hooks/agent
별도의 격리된 세션에서 에이전트의 단일 턴을 실행함.
페이로드 예시:
message(문자열, 필수): 에이전트가 처리할 프롬프트 본문.name(문자열, 선택): 훅의 이름 (예: “GitHub”). 세션 요약의 접두사로 사용됨.agentId(문자열, 선택): 특정 에이전트 인스턴스로 라우팅. 알 수 없는 ID는 기본 에이전트로 폴백됨.sessionKey(문자열, 선택): 에이전트 세션을 식별하는 키. 기본적으로hooks.allowRequestSessionKey: true가 아니면 거부됨.wakeMode(선택,now|next-heartbeat): 즉시 실행할지 여부 결정.deliver(불리언, 선택): 에이전트의 응답을 실제 채팅 채널로 전송할지 여부 (기본값true). 단순 확인 응답은 자동으로 필터링됨.channel/to(선택): 응답을 전달할 채널 및 수신자 ID. 미지정 시 메인 세션의 마지막 소통 경로를 따름.model/thinking(선택): 해당 실행에만 적용할 모델 및 사고 수준 오버라이드.
- 격리된(Isolated) 전용 세션 키를 사용하여 에이전트를 실행함.
- 실행 요약을 항상 메인 세션에 기록함.
wakeMode: "now"인 경우 즉시 실행을 시작함.
세션 키 정책 (보안 정책 변경 안내)
보안 강화를 위해/hooks/agent 요청을 통한 sessionKey 오버라이드는 기본적으로 비활성화되어 있음.
- 권장:
hooks.defaultSessionKey를 고정하고 요청 기반의 오버라이드는 비활성 상태로 유지함. - 필요 시: 오버라이드를 허용하되,
allowedSessionKeyPrefixes를 통해 접두사를 제한할 것을 강력히 권장함.
POST /hooks/<name> (커스텀 매핑)
hooks.mappings 설정을 통해 임의의 페이로드를 wake 또는 agent 액션으로 변환할 수 있음.
매핑 옵션 요약:
hooks.presets: ["gmail"]: 내장된 Gmail 매핑 프리셋 활성화.hooks.mappings: 설정 파일 내에서 매칭 조건, 액션 및 템플릿 정의.- JS/TS 변환 모듈:
hooks.transformsDir하위의 모듈을 로드하여 복잡한 로직 처리 가능. (주의: 디렉터리 외부 경로 참조 불가) - 응답 라우팅: 매핑 내에
deliver: true및channel/to정보를 포함하여 채팅 채널로 결과 전송 가능. - 보안: 훅 페이로드는 기본적으로 신뢰할 수 없는 데이터로 간주되어 안전 경계로 보호됨. 신뢰할 수 있는 내부 소스인 경우에만
allowUnsafeExternalContent: true로 해제함.
응답 코드 (Status Codes)
200: 요청 수락 및 실행 시작 (비동기 포함).401: 인증 실패 (잘못된 토큰).429: 동일 클라이언트의 반복된 인증 실패로 인한 속도 제한.400: 페이로드 규격 오류.413: 허용된 페이로드 크기 초과.
사용 예시 (curl)
에이전트 깨우기:보안 가이드라인
- 웹훅 엔드포인트는 루프백(Loopback), Tailnet 또는 신뢰할 수 있는 리버스 프록시 뒤에 배치함.
- 반드시 전용 훅 토큰을 사용하며, Gateway 인증 토큰을 재사용하지 않음.
- 멀티 에이전트 환경에서는
hooks.allowedAgentIds를 설정하여 접근 가능한 에이전트를 제한함. hooks.allowRequestSessionKey는 가급적false로 유지하며, 필요한 경우에만 특정 접두사로 제한함.- 훅 페이로드는 기본적으로 위험한 콘텐츠로 간주되므로, 반드시 필요한 경우가 아니라면 외부 콘텐츠 안전 래퍼를 유지함.