Mainstream messaging
Google Chat
Google Chat работает как официальный плагин @openclaw/googlechat: личные сообщения и пространства через вебхуки Google Chat API (только конечная точка HTTP, без Pub/Sub).
Установка
openclaw plugins install @openclaw/googlechatЛокальная рабочая копия (при запуске из репозитория git):
openclaw plugins install ./path/to/local/googlechat-pluginБыстрая настройка (для начинающих)
- Создайте проект Google Cloud и включите Google Chat API.
- Перейдите на страницу: учётные данные Google Chat API
- Включите API, если он ещё не включён.
- Создайте Service Account:
- Нажмите Create Credentials > Service Account.
- Задайте любое имя (например,
openclaw-chat). - Оставьте разрешения и субъектов пустыми (Continue, затем Done).
- Создайте и скачайте ключ JSON:
- Нажмите новую учётную запись службы > вкладка Keys > Add Key > Create new key > JSON > Create.
- Сохраните скачанный файл JSON на хосте Gateway (например,
~/.openclaw/googlechat-service-account.json). - Создайте приложение Google Chat на странице конфигурации Chat в Google Cloud Console:
- Заполните раздел Application info (имя приложения, URL аватара, описание).
- Включите Interactive features.
- В разделе Functionality установите флажок Join spaces and group conversations.
- В разделе Connection settings выберите HTTP endpoint URL.
- В разделе Triggers выберите Use a common HTTP endpoint URL for all triggers и укажите общедоступный URL Gateway с добавлением
/googlechat(см. Общедоступный URL). - В разделе Visibility установите флажок Make this Chat app available to specific people and groups in
<Your Domain>и введите свой адрес электронной почты. - Нажмите Save.
- Включите приложение: обновите страницу, найдите App status, установите значение Live - available to users и снова нажмите Save.
- Настройте OpenClaw с учётной записью службы и аудиторией вебхука (она должна соответствовать конфигурации приложения Chat):
- Переменная окружения:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json(только для учётной записи по умолчанию) или - Конфигурация: см. Основные параметры конфигурации.
openclaw channels add --channel googlechatтакже принимает--audience-type,--audience,--webhook-pathи--webhook-url.
- Переменная окружения:
- Запустите Gateway. Google Chat будет отправлять POST-запросы по пути вебхука (по умолчанию
/googlechat).
Добавление в Google Chat
После запуска Gateway и добавления вашего адреса электронной почты в список видимости:
- Перейдите в Google Chat.
- Нажмите значок + (плюс) рядом с Direct Messages.
- Найдите App name, настроенное в Google Cloud Console.
- Бот не отображается в списке приложений Marketplace, поскольку это закрытое приложение; найдите его по имени.
- Выберите бота, нажмите Add или Chat и отправьте сообщение.
Общедоступный URL (только вебхук)
Для вебхуков Google Chat требуется общедоступная конечная точка HTTPS. В целях безопасности предоставляйте доступ из интернета только к пути /googlechat, а панель управления OpenClaw и остальные конечные точки оставьте закрытыми.
Вариант A: Tailscale Funnel (рекомендуется)
Используйте Tailscale Serve для закрытой панели управления, а Funnel — для общедоступного пути вебхука.
-
Проверьте, к какому адресу привязан Gateway:
bash ss -tlnp | grep 18789Запомните IP-адрес (например,
127.0.0.1,0.0.0.0или адрес Tailscale100.x.x.x). -
Предоставьте доступ к панели управления только из tailnet (порт 8443):
bash # Если привязано к localhost (127.0.0.1 или 0.0.0.0):tailscale serve --bg --https 8443 http://127.0.0.1:18789 # Если привязано только к IP-адресу Tailscale:tailscale serve --bg --https 8443 http://100.x.x.x:18789 -
Предоставьте публичный доступ только к пути вебхука:
bash # Если привязано к localhost (127.0.0.1 или 0.0.0.0):tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # Если привязано только к IP-адресу Tailscale:tailscale funnel --bg --set-path /googlechat http://100.x.x.x:18789/googlechat -
Если появится соответствующий запрос, перейдите по URL авторизации, указанному в выводе, чтобы включить Funnel для этого узла.
-
Проверьте настройку:
bash tailscale serve statustailscale funnel status
Общедоступный URL вебхука — https://<node-name>.<tailnet>.ts.net/googlechat; панель управления остаётся доступной только из tailnet по адресу https://<node-name>.<tailnet>.ts.net:8443/. Используйте общедоступный URL (без :8443) в конфигурации приложения Google Chat.
Примечание: эта конфигурация сохраняется после перезагрузок. Чтобы впоследствии удалить её, используйте
tailscale funnel resetиtailscale serve reset.
Вариант B: обратный прокси-сервер (Caddy)
Проксируйте только путь вебхука:
your-domain.com { reverse_proxy /googlechat* localhost:18789}Запросы к your-domain.com/ игнорируются или получают ответ 404, а your-domain.com/googlechat перенаправляется в OpenClaw.
Вариант C: Cloudflare Tunnel
Настройте правила входящего трафика туннеля так, чтобы перенаправлялся только путь вебхука:
- Путь:
/googlechat->http://localhost:18789/googlechat - Правило по умолчанию: HTTP 404 (Not Found)
Принцип работы
- Google Chat отправляет JSON методом POST по пути вебхука Gateway (только POST, обязателен тип содержимого JSON, действует ограничение частоты запросов по IP-адресу).
- OpenClaw аутентифицирует каждый запрос перед его обработкой:
- События приложения Chat содержат
Authorization: Bearer <token>; токен проверяется до полного разбора тела запроса. - События дополнения Google Workspace содержат токен в теле запроса (
authorizationEventObject.systemIdToken) и до проверки считываются с более строгими ограничениями предварительной аутентификации (16 КБ, 3 с).
- События приложения Chat содержат
- Токен проверяется по
audienceType+audience:audienceType: "app-url"→ аудиторией является HTTPS-URL вебхука.audienceType: "project-number"→ аудиторией является номер проекта Cloud.- Для токенов дополнений при
app-urlтакже требуется, чтобыappPrincipalсодержал числовой идентификатор клиента OAuth 2.0 приложения (21 цифра, не адрес электронной почты); иначе проверка завершается сбоем, а в журнал записывается предупреждение.
- Сообщения маршрутизируются по пространству:
- Пространства получают отдельные сеансы
agent:<agentId>:googlechat:group:<spaceId>; ответы отправляются в ветку сообщения. - Личные сообщения по умолчанию объединяются в основном сеансе агента; задайте
session.dmScope, чтобы использовать отдельные сеансы личных сообщений для каждого собеседника (см. Сеанс).
- Пространства получают отдельные сеансы
- Доступ к личным сообщениям по умолчанию предоставляется через сопряжение. Неизвестные отправители получают код сопряжения; подтвердите его командой:
openclaw pairing approve googlechat <code>
- В групповых пространствах по умолчанию требуется @-упоминание. Упоминания определяются по аннотациям Chat
USER_MENTION, указывающим на приложение; задайтеbotUser(например,users/1234567890), если для определения требуется имя пользовательского ресурса приложения. - Когда из Google Chat запрашивается подтверждение выполнения команды или действия плагина и настроен подтверждающий со стабильным
users/<id>, OpenClaw публикует встроенную карточку подтверждения (cardsV2) в исходном пространстве или ветке. Кнопки карточки содержат непрозрачные токены обратного вызова; запрос ручного подтверждения/approve <id> <decision>появляется только тогда, когда встроенная доставка недоступна.
Цели
Используйте следующие идентификаторы для доставки и списков разрешений:
- Личные сообщения:
users/<userId>(рекомендуется). - Пространства:
spaces/<spaceId>. - Необработанный адрес электронной почты
name@example.comизменяем и используется для сопоставления со списком разрешений только приchannels.googlechat.dangerouslyAllowNameMatching: true. - Устарело:
users/<email>обрабатывается как идентификатор пользователя, а не как запись адреса электронной почты в списке разрешений. - Префиксы
googlechat:,google-chat:иgchat:принимаются и удаляются.
Основные параметры конфигурации
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // или serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", appPrincipal: "123456789012345678901", // только для проверки дополнения; числовой идентификатор клиента OAuth webhookPath: "/googlechat", botUser: "users/1234567890", // необязательно; помогает определять упоминания allowBots: false, dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "Только короткие ответы.", }, }, typingIndicator: "message", mediaMaxMb: 20, }, },}Примечания:
- Учётные данные учётной записи службы:
serviceAccountFile(путь),serviceAccount(встроенная строка или объект JSON) либоserviceAccountRef(SecretRef для переменной окружения или файла). Переменные окруженияGOOGLE_CHAT_SERVICE_ACCOUNT(встроенный JSON) иGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(путь) применяются только к учётной записи по умолчанию. В конфигурациях с несколькими учётными записями используетсяchannels.googlechat.accounts.<id>с теми же ключами, включая отдельныйserviceAccountRefдля каждой учётной записи. - Если
webhookPathне задан, путь вебхука по умолчанию —/googlechat; вместо него путь также можно указать черезwebhookUrl. - Ключами групп должны быть стабильные идентификаторы пространств (
spaces/<spaceId>). Ключи с отображаемыми именами устарели, что отмечается в журнале. dangerouslyAllowNameMatchingповторно включает сопоставление изменяемых субъектов по адресам электронной почты для списков разрешений (режим аварийной совместимости); doctor предупреждает о записях с адресами электронной почты.- Действия с реакциями Google Chat недоступны. Плагин использует аутентификацию учётной записи службы, тогда как конечным точкам реакций Google Chat требуется пользовательская аутентификация. Существующая конфигурация
actions.reactionsпринимается для совместимости, но ни на что не влияет. - Встроенные карточки подтверждения используют нажатия кнопок Google Chat
cardsV2, а не события реакций. Подтверждающие задаются черезdm.allowFromилиdefaultToи должны иметь стабильные числовые значенияusers/<id>. - Действия с сообщениями предоставляют только текстовый
send. Для загрузки вложений в Google Chat требуется пользовательская аутентификация, а этот плагин использует аутентификацию учётной записи службы, поэтому исходящая загрузка файлов недоступна. typingIndicator:message(по умолчанию) публикует заполнитель_<Bot> is typing..._и заменяет его первым ответом;noneотключает эту функцию;reactionтребует пользовательский OAuth и при аутентификации учётной записи службы в настоящее время переключается наmessage, записывая ошибку в журнал.- Входящие вложения (первое вложение каждого сообщения) скачиваются через Chat API в конвейер обработки медиафайлов с ограничением
mediaMaxMb(по умолчанию 20). - Сообщения, созданные ботами, по умолчанию игнорируются. При
allowBots: trueпринятые сообщения ботов используют общую защиту от зацикливания ботов: настройтеchannels.defaults.botLoopProtection, а затем переопределите его черезchannels.googlechat.botLoopProtectionилиchannels.googlechat.groups.<space>.botLoopProtection.
Подробнее о ссылках на секреты: Управление секретами.
Устранение неполадок
405 Method Not Allowed
Если в Google Cloud Logs Explorer отображаются такие ошибки:
код состояния: 405, описание причины: ответ с ошибкой HTTP: HTTP/1.1 405 Method Not AllowedОбработчик вебхука не зарегистрирован. Распространённые причины:
-
Канал не настроен: раздел
channels.googlechatотсутствует. Проверьте командой:bash openclaw config get channels.googlechatЕсли команда возвращает "Config path not found", добавьте конфигурацию (см. Основные параметры конфигурации).
-
Плагин не включён: проверьте состояние плагина:
bash openclaw plugins list | grep googlechatЕсли отображается "disabled", добавьте
plugins.entries.googlechat.enabled: trueв конфигурацию. -
Gateway не перезапущен после изменений конфигурации:
bash openclaw gateway restart
Убедитесь, что канал работает:
openclaw channels status# Должно отображаться: Google Chat default: enabled, configured, ...Другие проблемы
openclaw channels status --probeотображает ошибки аутентификации и отсутствие конфигурации аудитории (требуются иaudience, иaudienceType).- Если сообщения не поступают, проверьте URL Webhook приложения Chat и конфигурацию триггера.
- Если проверка упоминаний блокирует ответы, задайте для
botUserимя пользовательского ресурса приложения и проверьтеrequireMention. openclaw logs --followпри отправке тестового сообщения показывает, достигают ли запросы Gateway.
Связанные материалы
- Обзор каналов — все поддерживаемые каналы
- Маршрутизация каналов — маршрутизация сеансов для сообщений
- Конфигурация Gateway
- Группы — поведение групповых чатов и проверка упоминаний
- Сопряжение — аутентификация в личных сообщениях и процесс сопряжения
- Безопасность — модель доступа и усиление защиты