Gmail Pub/Sub -> OpenClaw
Цель: наблюдение Gmail -> Pub/Sub push ->gog gmail watch serve -> вебхук OpenClaw.
Предварительные запросы
gcloudустановлен и выполнен вход (руководство по установке).gog(gogcli) установлен и авторизован для аккаунта Gmail (gogcli.sh).- Включены хуки OpenClaw (см. Webhooks).
tailscaleвыполнен вход (tailscale.com). Поддерживаемая настройка использует Tailscale Funnel для публичного HTTPS-эндпоинта. Другие туннельные сервисы могут работать, но они DIY/не поддерживаются и требуют ручной настройки. На данный момент мы поддерживаем Tailscale.
deliver + необязательные channel/to:
channel + to. В противном случае channel: "last"
использует последний маршрут доставки (с откатом к WhatsApp).
Чтобы принудительно использовать более дешёвую модель для запусков Gmail, задайте model в маппинге
(provider/model или алиас). Если вы применяете agents.defaults.models, включите его там же.
Чтобы задать модель и уровень «thinking» по умолчанию специально для хуков Gmail, добавьте
hooks.gmail.model / hooks.gmail.thinking в ваш конфиг:
- Переопределения на уровне хука
model/thinkingв маппинге всё равно имеют приоритет над этими значениями по умолчанию. - Порядок отката:
hooks.gmail.model→agents.defaults.model.fallbacks→ основной (auth/rate-limit/timeouts). - Если задан
agents.defaults.models, модель Gmail должна быть в списке разрешённых. - Контент хуков Gmail по умолчанию оборачивается внешними границами безопасности контента.
Чтобы отключить (опасно), задайте
hooks.gmail.allowUnsafeExternalContent: true.
hooks.mappings или модуль трансформации JS/TS
в hooks.transformsDir (см. Webhooks).
Мастер (рекомендуется)
Используйте помощник OpenClaw, чтобы связать всё воедино (на macOS устанавливает зависимости через brew):- Использует Tailscale Funnel для публичного push-эндпоинта.
- Записывает конфиг
hooks.gmailдляopenclaw webhooks gmail run. - Включает пресет хука Gmail (
hooks.presets: ["gmail"]).
tailscale.mode, OpenClaw автоматически устанавливает
hooks.gmail.serve.path в / и сохраняет публичный путь
hooks.gmail.tailscale.path (по умолчанию /gmail-pubsub), потому что Tailscale
удаляет префикс set-path перед проксированием.
Если необходимо, чтобы бэкенд получал путь с префиксом, задайте
hooks.gmail.tailscale.target (или --tailscale-target) как полный URL, например
http://127.0.0.1:8788/gmail-pubsub, и сопоставьте hooks.gmail.serve.path.
Нужен кастомный эндпоинт? Используйте --push-endpoint <url> или --tailscale off.
Примечание по платформе: на macOS мастер устанавливает gcloud, gogcli и tailscale
через Homebrew; на Linux установите их вручную заранее.
Автозапуск Gateway (шлюз) (рекомендуется):
- Когда заданы
hooks.enabled=trueиhooks.gmail.account, Gateway (шлюз) запускаетgog gmail watch serveпри загрузке и автоматически продлевает watch. - Задайте
OPENCLAW_SKIP_GMAIL_WATCHER=1, чтобы отказаться (полезно, если вы запускаете демон самостоятельно). - Не запускайте ручной демон одновременно, иначе получите
listen tcp 127.0.0.1:8788: bind: address already in use.
gog gmail watch serve + автопродление):
Одноразовая настройка
- Выберите проект GCP, которому принадлежит OAuth-клиент, используемый
gog.
- Включите API:
- Создайте тему:
- Разрешите публикацию push от Gmail:
Запуск watch
history_id из вывода (для отладки).
Запуск обработчика push
Локальный пример (аутентификация общим токеном):--tokenзащищает push-эндпоинт (x-gog-tokenили?token=).--hook-urlуказывает на OpenClaw/hooks/gmail(с маппингом; изолированный запуск + сводка в основной).--include-bodyи--max-bytesуправляют фрагментом тела, отправляемым в OpenClaw.
openclaw webhooks gmail run оборачивает тот же поток и автоматически продлевает watch.
Экспорт обработчика (расширенно, не поддерживается)
Если нужен туннель не Tailscale, подключите его вручную и используйте публичный URL в push- подписке (не поддерживается, без защитных механизмов):Тест
Отправьте сообщение в отслеживаемый почтовый ящик:Устранение неполадок
Invalid topicName: несоответствие проекта (тема не в проекте OAuth-клиента).User not authorized: отсутствуетroles/pubsub.publisherу темы.- Пустые сообщения: push Gmail предоставляет только
historyId; получайте черезgog gmail history.