Google Chat
Статус: готово для личных чатов и пространств через вебхуки Google Chat API (только HTTP).
Быстрая настройка (для начинающих)
- Создайте проект в Google Cloud и включите Google Chat API.
- Перейдите по адресу: Google Chat API Credentials
- Включите API, если он ещё не включен.
- Создайте Сервисный аккаунт:
- Нажмите Create Credentials > Service Account.
- Дайте ему любое имя (например,
openclaw-chat). - Оставьте разрешения пустыми (нажмите Continue).
- Оставьте список пользователей с доступом пустым (нажмите Done).
- Создайте и скачайте JSON-ключ:
- В списке сервисных аккаунтов нажмите на только что созданный.
- Перейдите на вкладку Keys.
- Нажмите Add Key > Create new key.
- Выберите JSON и нажмите Create.
- Сохраните скачанный JSON-файл на хосте шлюза (например,
~/.openclaw/googlechat-service-account.json). - Создайте приложение Google Chat в Google Cloud Console Chat Configuration:
- Заполните 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 вашего шлюза с добавлением
/googlechat.- Подсказка: выполните
openclaw status, чтобы найти публичный URL вашего шлюза.
- Подсказка: выполните
- В разделе 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 с указанием пути к сервисному аккаунту и аудитории вебхука:
- Переменная окружения:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Или в конфиге:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Переменная окружения:
- Установите тип аудитории вебхука + значение (должно соответствовать конфигурации вашего приложения Chat).
- Запустите шлюз. Google Chat будет отправлять POST-запросы на путь вашего вебхука.
Добавление в Google Chat
После запуска шлюза и добавления вашего email в список видимости:
- Перейдите в Google Chat.
- Нажмите значок + (плюс) рядом с разделом Direct Messages.
- В строке поиска (где обычно добавляют людей) введите App name, который вы указали в Google Cloud Console.
- Примечание: Бот не появится в списке обзора "Marketplace", так как это приватное приложение. Вы должны найти его по имени.
- Выберите своего бота из результатов.
- Нажмите Add или Chat, чтобы начать личный диалог.
- Отправьте "Hello", чтобы активировать ассистента!
Публичный URL (только для вебхуков)
Вебхуки Google Chat требуют публичной HTTPS-конечной точки. В целях безопасности открывайте для интернета только путь /googlechat. Держите панель управления OpenClaw и другие чувствительные конечные точки в вашей частной сети.
Вариант A: Tailscale Funnel (Рекомендуется)
Используйте Tailscale Serve для приватной панели управления и Funnel для публичного пути вебхука. Это сохраняет / приватным, открывая только /googlechat.
-
Проверьте, к какому адресу привязан ваш шлюз:
Копировать
ss -tlnp | grep 18789Запомните IP-адрес (например,
127.0.0.1,0.0.0.0или ваш Tailscale IP, например100.x.x.x). -
Откройте панель управления только для tailnet (порт 8443):
Копировать
# Если привязан к localhost (127.0.0.1 или 0.0.0.0): tailscale serve --bg --https 8443 http://127.0.0.1:18789 # Если привязан только к Tailscale IP (например, 100.106.161.80): tailscale serve --bg --https 8443 http://100.106.161.80:18789 -
Откройте публично только путь вебхука:
Копировать
# Если привязан к localhost (127.0.0.1 или 0.0.0.0): tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # Если привязан только к Tailscale IP (например, 100.106.161.80): tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat -
Авторизуйте узел для доступа к Funnel: Если появится запрос, перейдите по URL авторизации, указанному в выводе, чтобы включить Funnel для этого узла в политике вашего tailnet.
-
Проверьте конфигурацию:
Копировать
tailscale serve status tailscale 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)
Если вы используете обратный прокси, например 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 отправляет POST-запросы вебхуков на шлюз. Каждый запрос включает заголовок
Authorization: Bearer <token>.- OpenClaw проверяет аутентификацию по Bearer токену перед чтением/разбором полных тел вебхуков, когда заголовок присутствует.
- Запросы Google Workspace Add-on, содержащие
authorizationEventObject.systemIdTokenв теле, поддерживаются через более строгий лимит на предварительную проверку тела.
- OpenClaw проверяет токен на соответствие настроенным
audienceType+audience:audienceType: "app-url"→ аудитория — это ваш HTTPS URL вебхука.audienceType: "project-number"→ аудитория — это номер проекта Cloud.
- Сообщения маршрутизируются по пространствам:
- Личные сообщения используют ключ сессии
agent:<agentId>:googlechat:dm:<spaceId>. - Пространства используют ключ сессии
agent:<agentId>:googlechat:group:<spaceId>.
- Личные сообщения используют ключ сессии
- Доступ к личным сообщениям по умолчанию требует сопряжения. Неизвестным отправителям отправляется код сопряжения; подтвердите его командой:
openclaw pairing approve googlechat <code>
- Групповые пространства по умолчанию требуют упоминания через @. Используйте
botUser, если для обнаружения упоминаний требуется имя пользователя приложения.
Цели (Targets)
Используйте эти идентификаторы для доставки и белых списков:
- Личные сообщения:
users/<userId>(рекомендуется). - Сырой email
name@example.comявляется изменяемым и используется только для прямого сопоставления с белым списком приchannels.googlechat.dangerouslyAllowNameMatching: true. - Устаревший вариант:
users/<email>трактуется как идентификатор пользователя, а не как белый список email-адресов. - Пространства:
spaces/<spaceId>.
Основные моменты конфигурации
{
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",
webhookPath: "/googlechat",
botUser: "users/1234567890", // опционально; помогает в обнаружении упоминаний
dm: {
policy: "pairing",
allowFrom: ["users/1234567890"],
},
groupPolicy: "allowlist",
groups: {
"spaces/AAAA": {
allow: true,
requireMention: true,
users: ["users/1234567890"],
systemPrompt: "Short answers only.",
},
},
actions: { reactions: true },
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}
Примечания:
- Учётные данные сервисного аккаунта также можно передать встроенно с помощью
serviceAccount(JSON-строка). - Также поддерживается
serviceAccountRef(SecretRef из env/файла), включая ссылки на аккаунт вchannels.googlechat.accounts.<id>.serviceAccountRef. - Путь вебхука по умолчанию —
/googlechat, еслиwebhookPathне задан. dangerouslyAllowNameMatchingповторно включает сопоставление изменяемых email-принципалов для белых списков (режим совместимости на случай аварии).- Реакции доступны через инструмент
reactionsиchannels action, когда включеноactions.reactions. typingIndicatorподдерживает значенияnone,message(по умолчанию) иreaction(для реакции требуется OAuth пользователя).- Вложения загружаются через Chat API и сохраняются в медиа-конвейере (размер ограничен
mediaMaxMb).
Подробности о ссылках на секреты: Управление секретами.
Устранение неполадок
405 Method Not Allowed
Если Google Cloud Logs Explorer показывает ошибки вида:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
Это означает, что обработчик вебхука не зарегистрирован. Распространённые причины:
-
Канал не настроен: Раздел
channels.googlechatотсутствует в вашей конфигурации. Проверьте:Копировать
openclaw config get channels.googlechatЕсли возвращается "Config path not found", добавьте конфигурацию (см. Основные моменты конфигурации).
-
Плагин не включён: Проверьте статус плагина:
Копировать
openclaw plugins list | grep googlechatЕсли отображается "disabled", добавьте
plugins.entries.googlechat.enabled: trueв вашу конфигурацию. -
Шлюз не перезапущен: После добавления конфигурации перезапустите шлюз:
Копировать
openclaw gateway restart
Убедитесь, что канал работает:
openclaw channels status
# Должно показывать: Google Chat default: enabled, configured, ...
Другие проблемы
- Проверьте
openclaw channels status --probeна наличие ошибок аутентификации или отсутствующей конфигурации аудитории. - Если сообщения не поступают, проверьте URL вебхука приложения Chat и подписки на события.
- Если упоминание блокирует ответы, установите
botUserв значение ресурса пользователя приложения и проверьтеrequireMention. - Используйте
openclaw logs --followпри отправке тестового сообщения, чтобы увидеть, доходят ли запросы до шлюза.
Связанная документация: