Mainstream messaging
Google Chat
Status: загружаемый Plugin для личных сообщений и пространств через Webhook’и Google Chat API (только HTTP).
Установка
Установите Google Chat перед настройкой канала:
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 Key:
- В списке сервисных аккаунтов нажмите на только что созданный аккаунт.
- Перейдите на вкладку Keys.
- Нажмите Add Key > Create new key.
- Выберите JSON и нажмите Create.
- Сохраните скачанный JSON-файл на хосте Gateway (например,
~/.openclaw/googlechat-service-account.json). - Создайте приложение Google Chat в конфигурации Chat в Google Cloud Console:
- Заполните Application info:
- App name: (например,
OpenClaw) - Avatar URL: (например,
https://openclaw.ai/logo.png) - Description: (например,
Personal AI Assistant)
- App name: (например,
- Включите 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.- Совет: выполните
openclaw status, чтобы найти публичный URL вашего Gateway.
- Совет: выполните
- В разделе Visibility отметьте Make this Chat app available to specific people and groups in
<Your Domain>. - Введите свой адрес электронной почты (например,
user@example.com) в текстовое поле. - Нажмите Save внизу.
- Заполните Application info:
- Включите статус приложения:
- После сохранения обновите страницу.
- Найдите раздел App status (обычно после сохранения он находится ближе к верхней или нижней части страницы).
- Измените статус на Live - available to users.
- Снова нажмите Save.
- Настройте OpenClaw, указав путь к сервисному аккаунту и аудиторию Webhook:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Или config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Env:
- Задайте тип и значение аудитории Webhook (должны совпадать с конфигурацией вашего приложения Chat).
- Запустите Gateway. Google Chat будет отправлять POST-запросы на путь вашего Webhook.
Добавление в Google Chat
Когда Gateway запущен, а ваш адрес электронной почты добавлен в список видимости:
- Перейдите в Google Chat.
- Нажмите значок + (плюс) рядом с Direct Messages.
- В строке поиска (где вы обычно добавляете людей) введите App name, настроенное в Google Cloud Console.
- Примечание: бот не появится в списке просмотра "Marketplace", потому что это частное приложение. Его нужно искать по имени.
- Выберите своего бота в результатах.
- Нажмите Add или Chat, чтобы начать разговор 1:1.
- Отправьте «Привет», чтобы запустить ассистента!
Публичный URL (только Webhook)
Webhook’ам Google Chat требуется публичная HTTPS-конечная точка. В целях безопасности открывайте в интернет только путь /googlechat. Оставьте панель OpenClaw и другие чувствительные конечные точки в своей частной сети.
Вариант A: Tailscale Funnel (рекомендуется)
Используйте Tailscale Serve для частной панели и Funnel для публичного пути Webhook. Это сохраняет / частным и открывает только /googlechat.
-
Проверьте, к какому адресу привязан ваш Gateway:
bash ss -tlnp | grep 18789Обратите внимание на IP-адрес (например,
127.0.0.1,0.0.0.0или ваш IP Tailscale вроде100.x.x.x). -
Откройте панель только для tailnet (порт 8443):
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale serve --bg --https 8443 http://127.0.0.1:18789 # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale serve --bg --https 8443 http://100.106.161.80:18789 -
Откройте публично только путь Webhook:
bash # If bound to localhost (127.0.0.1 or 0.0.0.0):tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # If bound to Tailscale IP only (e.g., 100.106.161.80):tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat -
Авторизуйте узел для доступа Funnel: Если появится запрос, откройте URL авторизации, показанный в выводе, чтобы включить Funnel для этого узла в политике вашего tailnet.
-
Проверьте конфигурацию:
bash tailscale serve statustailscale funnel status
Публичный URL вашего Webhook будет таким:
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)
Если вы используете обратный прокси вроде Caddy, проксируйте только конкретный путь:
your-domain.com { reverse_proxy /googlechat* localhost:18789}С этой конфигурацией любой запрос к your-domain.com/ будет проигнорирован или вернет 404, а your-domain.com/googlechat будет безопасно направлен в OpenClaw.
Вариант C: Cloudflare Tunnel
Настройте правила входящего трафика вашего туннеля так, чтобы маршрутизировался только путь Webhook:
- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: HTTP 404 (Not Found)
Как это работает
- Google Chat отправляет Webhook POST-запросы в Gateway. Каждый запрос содержит заголовок
Authorization: Bearer <token>.- OpenClaw проверяет bearer-аутентификацию перед чтением и разбором полных тел Webhook, когда заголовок присутствует.
- Запросы Google Workspace Add-on, которые передают
authorizationEventObject.systemIdTokenв теле, поддерживаются через более строгий бюджет тела для предварительной аутентификации.
- OpenClaw проверяет токен по настроенным
audienceTypeиaudience:audienceType: "app-url"→ аудитория — это HTTPS URL вашего Webhook.audienceType: "project-number"→ аудитория — это номер Cloud-проекта.
- Сообщения маршрутизируются по пространству:
- Личные сообщения используют ключ сеанса
agent:<agentId>:googlechat:direct:<spaceId>. - Пространства используют ключ сеанса
agent:<agentId>:googlechat:group:<spaceId>.
- Личные сообщения используют ключ сеанса
- Доступ к личным сообщениям по умолчанию выполняется через сопряжение. Неизвестные отправители получают код сопряжения; подтвердите его командой:
openclaw pairing approve googlechat <code>
- Групповые пространства по умолчанию требуют @-упоминания. Используйте
botUser, если для обнаружения упоминаний нужно имя пользователя приложения. - Когда запрос на подтверждение exec или plugin запускается из Google Chat и настроен стабильный утверждающий
users/<id>, OpenClaw публикует нативную карточку подтверждения Google Chat в исходном пространстве или ветке. Кнопки карточки используют непрозрачные callback-токены, а ручная подсказка/approve <id> <decision>показывается только тогда, когда нативная доставка подтверждения недоступна.
Цели
Используйте эти идентификаторы для доставки и списков разрешений:
- Личные сообщения:
users/<userId>(рекомендуется). - Необработанный адрес электронной почты
name@example.comизменяем и используется для сопоставления с прямым списком разрешений только приchannels.googlechat.dangerouslyAllowNameMatching: true. - Устарело:
users/<email>рассматривается как идентификатор пользователя, а не список разрешений по электронной почте. - Пространства:
spaces/<spaceId>.
Основные настройки конфигурации
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // or serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", // optional; helps mention detection allowBots: false, dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "Short answers only.", }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}Примечания:
- Учетные данные сервисного аккаунта также можно передать inline через
serviceAccount(JSON-строка). serviceAccountRefтакже поддерживается (env/file SecretRef), включая ссылки для отдельных аккаунтов вchannels.googlechat.accounts.<id>.serviceAccountRef.- Путь Webhook по умолчанию —
/googlechat, еслиwebhookPathне задан. dangerouslyAllowNameMatchingснова включает сопоставление изменяемых email-принципалов для списков разрешений (режим совместимости break-glass).- Реакции доступны через инструмент
reactionsиchannels action, когда включенactions.reactions. - Нативные карточки подтверждения используют нажатия кнопок Google Chat
cardsV2, а не события реакций. Утверждающие берутся изdm.allowFromилиdefaultToи должны быть стабильными числовыми значениямиusers/<id>. - Действия сообщений предоставляют
sendдля текста иupload-fileдля явной отправки вложений.upload-fileпринимаетmedia/filePath/path, а также необязательныеmessage,filenameи указание ветки. typingIndicatorподдерживаетmessage(по умолчанию),noneиreaction(для реакции требуется пользовательский OAuth).- Вложения скачиваются через Chat API и сохраняются в медиаконвейере (размер ограничивается
mediaMaxMb). - Сообщения Google Chat, созданные ботом, по умолчанию игнорируются. Если вы намеренно задаете
allowBots: true, принятые сообщения от ботов используют общую защиту от циклов ботов. Настройтеchannels.defaults.botLoopProtection, затем переопределите черезchannels.googlechat.botLoopProtectionилиchannels.googlechat.groups.<space>.botLoopProtection, когда для одного пространства нужен другой бюджет.
Подробности ссылок на секреты: Управление секретами.
Устранение неполадок
405 Method Not Allowed
Если Google Cloud Logs Explorer показывает ошибки вида:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not AllowedЭто означает, что обработчик Webhook не зарегистрирован. Частые причины:
-
Канал не настроен: раздел
channels.googlechatотсутствует в вашей конфигурации. Проверьте командой:bash openclaw config get channels.googlechatЕсли она возвращает "Config path not found", добавьте конфигурацию (см. Основные настройки конфигурации).
-
Plugin не включен: проверьте статус Plugin:
bash openclaw plugins list | grep googlechatЕсли отображается "disabled", добавьте
plugins.entries.googlechat.enabled: trueв свою конфигурацию. -
Gateway не перезапущен: после добавления конфигурации перезапустите Gateway:
bash openclaw gateway restart
Проверьте, что канал запущен:
openclaw channels status# Should show: Google Chat default: enabled, configured, ...Другие проблемы
- Проверьте
openclaw channels status --probeна ошибки аутентификации или отсутствующую конфигурацию аудитории. - Если сообщения не приходят, проверьте URL Webhook приложения Chat и подписки на события.
- Если ограничение по упоминаниям блокирует ответы, задайте
botUserкак имя пользовательского ресурса приложения и проверьтеrequireMention. - Используйте
openclaw logs --followпри отправке тестового сообщения, чтобы увидеть, доходят ли запросы до Gateway.
Связанные документы:
Связанные
- Обзор каналов — все поддерживаемые каналы
- Сопряжение — аутентификация в личных сообщениях и процесс сопряжения
- Группы — поведение групповых чатов и фильтрация по упоминаниям
- Безопасность — модель доступа и усиление защиты