Вебхуки
Gateway (шлюз) может предоставлять небольшую HTTP‑конечную точку вебхука для внешних триггеров.Включение
hooks.tokenтребуется, когдаhooks.enabled=true.hooks.pathпо умолчанию —/hooks.
Аутентификация
Каждый запрос должен включать токен хука. Предпочтительно использовать заголовки:Authorization: Bearer <token>(рекомендуется)x-openclaw-token: <token>- Токены в query-строке отклоняются (
?token=...возвращает400).
Конечные точки
POST /hooks/wake
Payload:
textобязательно (string): Описание события (например, «Получено новое письмо»).modeнеобязательно (now|next-heartbeat): Нужно ли запускать немедленный сигнал keepalive (по умолчаниюnow) или ждать следующей периодической проверки.
- Помещает системное событие в очередь для основного сеанса
- Если
mode=now, запускает немедленный сигнал keepalive
POST /hooks/agent
Payload:
messageобязательно (string): Промпт или сообщение для обработки агентом.nameнеобязательно (string): Человекочитаемое имя хука (например, «GitHub»), используется как префикс в сводках сеансов.agentIdнеобязателен (string): направляет этот hook к конкретному агенту. Неизвестные ID приводят к использованию агента по умолчанию. Если параметр задан, hook выполняется с использованием workspace и конфигурации выбранного агента.sessionKeyнеобязательно (string): Ключ для идентификации сеанса агента. По умолчанию это поле отклоняется, если не установленоhooks.allowRequestSessionKey=true.wakeModeнеобязательно (now|next-heartbeat): Нужно ли запускать немедленный сигнал keepalive (по умолчаниюnow) или ждать следующей периодической проверки.deliverнеобязательно (boolean): Еслиtrue, ответ агента будет отправлен в канал сообщений. По умолчанию —true. Ответы, которые являются лишь подтверждениями keepalive, автоматически пропускаются.channelнеобязательно (string): Канал сообщений для доставки. Один из:last,whatsapp,telegram,discord,slack,mattermost(плагин),signal,imessage,msteams. По умолчанию —last.toнеобязательно (string): Идентификатор получателя для канала (например, номер телефона для WhatsApp/Signal, ID чата для Telegram, ID канала для Discord/Slack/Mattermost (плагин), ID беседы для MS Teams). По умолчанию используется последний получатель в основном сеансе.modelнеобязательно (string): Переопределение модели (например,anthropic/claude-3-5-sonnetили алиас). Должно входить в список разрешённых моделей, если он ограничен.thinkingнеобязательно (string): Переопределение уровня «мышления» (например,low,medium,high).timeoutSecondsнеобязательно (number): Максимальная длительность запуска агента в секундах.
- Запускает изолированный ход агента (собственный ключ сеанса)
- Всегда публикует сводку в основной сеанс
- Если
wakeMode=now, запускает немедленный сигнал keepalive
Политика session key (breaking change)
ПереопределенияsessionKey в payload /hooks/agent по умолчанию отключены.
- Рекомендуется: установите фиксированный
hooks.defaultSessionKeyи отключите переопределения в запросах. - Необязательно: разрешайте переопределения в запросах только при необходимости и ограничивайте префиксы.
POST /hooks/<name> (с маппингом)
Пользовательские имена хуков разрешаются через hooks.mappings (см. конфигурацию). Маппинг может
преобразовывать произвольные полезные нагрузки в действия wake или agent с опциональными шаблонами или
преобразованиями кода.
Параметры маппинга (кратко):
hooks.presets: ["gmail"]включает встроенный маппинг Gmail.hooks.mappingsпозволяет определитьmatch,actionи шаблоны в конфиге.hooks.transformsDir+transform.moduleзагружает JS/TS‑модуль для пользовательской логики.hooks.transformsDir(если задан) должен находиться в корневом каталоге transforms в директории конфигурации OpenClaw (обычно~/.openclaw/hooks/transforms).transform.moduleдолжен разрешаться в пределах фактической директории transforms (пути с обходом/выходом за пределы отклоняются).
- Используйте
match.source, чтобы сохранить универсальную конечную точку приёма (маршрутизация по полезной нагрузке). - TS‑преобразования требуют TS‑загрузчик (например,
bunилиtsx) либо заранее скомпилированный.jsво время выполнения. - Установите
deliver: true+channel/toв маппингах, чтобы направлять ответы на чат‑поверхность (channelпо умолчанию —lastи с откатом на WhatsApp). agentIdнаправляет хук к конкретному агенту; неизвестные идентификаторы приводят к использованию агента по умолчанию.hooks.allowedAgentIdsограничивает явную маршрутизацию поagentId. Опустите это поле (или укажите*), чтобы разрешить любого агента. Установите[], чтобы запретить явную маршрутизацию поagentId.hooks.defaultSessionKeyзадаёт сессию по умолчанию для запусков агента через хук, если явный ключ не указан.hooks.allowRequestSessionKeyопределяет, могут ли payload’ы/hooks/agentзадаватьsessionKey(по умолчанию:false).hooks.allowedSessionKeyPrefixesпри необходимости ограничивает явные значенияsessionKeyиз payload’ов запросов и сопоставлений.allowUnsafeExternalContent: trueотключает внешний контур безопасности контента для этого хука (опасно; только для доверенных внутренних источников).openclaw webhooks gmail setupзаписывает конфигhooks.gmailдляopenclaw webhooks gmail run. Полный поток наблюдения Gmail см. в Gmail Pub/Sub.
Ответы
200для/hooks/wake202для/hooks/agent(асинхронный запуск начат)401при ошибке аутентификации429после повторных неудачных попыток аутентификации от одного клиента (проверьтеRetry-After)400при недопустимой полезной нагрузке413при слишком больших полезных нагрузках
Примеры
Использование другой модели
Добавьтеmodel в полезную нагрузку агента (или маппинг), чтобы переопределить модель для этого запуска:
agents.defaults.models, убедитесь, что модель переопределения включена в этот список.
Безопасность
- Держите конечные точки хуков за loopback, tailnet или доверенным обратным прокси.
- Используйте отдельный токен хука; не переиспользуйте токены аутентификации Gateway (шлюза).
- Повторные неудачные попытки аутентификации ограничиваются по частоте для каждого адреса клиента, чтобы замедлить brute-force атаки.
- Если вы используете маршрутизацию с несколькими агентами, установите
hooks.allowedAgentIds, чтобы ограничить явный выборagentId. - Сохраняйте
hooks.allowRequestSessionKey=false, если вам не требуется выбор сессии вызывающей стороной. - Если вы включаете
sessionKeyв запросах, ограничьтеhooks.allowedSessionKeyPrefixes(например,["hook:"]). - Избегайте включения чувствительных необработанных полезных нагрузок в логи вебхуков.
- Полезные нагрузки хуков по умолчанию считаются недоверенными и оборачиваются границами безопасности.
Если необходимо отключить это для конкретного хука, установите
allowUnsafeExternalContent: trueв маппинге этого хука (опасно).