Google Chat (Chat API)
Status: gotowe do DM + spaces przez webhooki Google Chat API (tylko HTTP).Szybka konfiguracja (dla początkujących)
- Utwórz projekt Google Cloud i włącz Google Chat API.
- Przejdź do: Google Chat API Credentials
- Włącz API, jeśli nie jest jeszcze włączone.
- Utwórz Service Account:
- Kliknij Create Credentials > Service Account.
- Nadaj mu dowolną nazwę (np.
openclaw-chat). - Pozostaw uprawnienia puste (kliknij Continue).
- Pozostaw listę podmiotów z dostępem pustą (kliknij Done).
- Utwórz i pobierz JSON Key:
- Na liście kont usługi kliknij to, które właśnie utworzono.
- Przejdź do zakładki Keys.
- Kliknij Add Key > Create new key.
- Wybierz JSON i kliknij Create.
- Zapisz pobrany plik JSON na hoście gateway (np.
~/.openclaw/googlechat-service-account.json). - Utwórz aplikację Google Chat w Google Cloud Console Chat Configuration:
- Wypełnij sekcję Application info:
- App name: (np.
OpenClaw) - Avatar URL: (np.
https://openclaw.ai/logo.png) - Description: (np.
Personal AI Assistant)
- App name: (np.
- Włącz Interactive features.
- W sekcji Functionality zaznacz Join spaces and group conversations.
- W sekcji Connection settings wybierz HTTP endpoint URL.
- W sekcji Triggers wybierz Use a common HTTP endpoint URL for all triggers i ustaw adres na publiczny URL swojego gateway z dopisanym
/googlechat.- Wskazówka: uruchom
openclaw status, aby znaleźć publiczny URL swojego gateway.
- Wskazówka: uruchom
- W sekcji Visibility zaznacz Make this Chat app available to specific people and groups in <Your Domain>.
- Wpisz swój adres e-mail (np.
user@example.com) w polu tekstowym. - Kliknij Save na dole strony.
- Wypełnij sekcję Application info:
- Włącz status aplikacji:
- Po zapisaniu odśwież stronę.
- Znajdź sekcję App status (zwykle u góry lub na dole po zapisaniu).
- Zmień status na Live - available to users.
- Kliknij ponownie Save.
- Skonfiguruj OpenClaw, podając ścieżkę do konta usługi + odbiorcę webhooka:
- Zmienna środowiskowa:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - Lub konfiguracja:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Zmienna środowiskowa:
- Ustaw typ i wartość odbiorcy webhooka (
audience) zgodnie z konfiguracją swojej aplikacji Chat. - Uruchom gateway. Google Chat będzie wysyłać żądania POST na ścieżkę webhooka.
Dodawanie do Google Chat
Gdy gateway działa, a Twój adres e-mail został dodany do listy widoczności:- Przejdź do Google Chat.
- Kliknij ikonę + obok Direct Messages.
- W pasku wyszukiwania (tam, gdzie zwykle dodajesz osoby) wpisz App name skonfigurowaną w Google Cloud Console.
- Uwaga: bot nie pojawi się na liście przeglądania „Marketplace”, ponieważ jest aplikacją prywatną. Musisz wyszukać go po nazwie.
- Wybierz bota z wyników.
- Kliknij Add lub Chat, aby rozpocząć rozmowę 1:1.
- Wyślij „Hello”, aby wywołać asystenta!
Publiczny URL (tylko webhook)
Webhooki Google Chat wymagają publicznego punktu końcowego HTTPS. Ze względów bezpieczeństwa wystawiaj do internetu tylko ścieżkę/googlechat. Zachowaj pulpit OpenClaw i inne wrażliwe punkty końcowe w sieci prywatnej.
Opcja A: Tailscale Funnel (zalecane)
Użyj Tailscale Serve dla prywatnego pulpitu i Funnel dla publicznej ścieżki webhooka. Dzięki temu/ pozostaje prywatne, a publicznie wystawione jest tylko /googlechat.
-
Sprawdź, pod jakim adresem jest zbindowany gateway:
Zanotuj adres IP (np.
127.0.0.1,0.0.0.0albo adres Tailscale, taki jak100.x.x.x). -
Wystaw pulpit tylko dla tailnetu (port 8443):
-
Wystaw publicznie tylko ścieżkę webhooka:
- Autoryzuj węzeł do dostępu Funnel: Jeśli pojawi się monit, odwiedź URL autoryzacji pokazany w danych wyjściowych, aby włączyć Funnel dla tego węzła w polityce tailnetu.
-
Zweryfikuj konfigurację:
https://<node-name>.<tailnet>.ts.net/googlechat
Twój prywatny pulpit pozostanie dostępny tylko w tailnecie:
https://<node-name>.<tailnet>.ts.net:8443/
Użyj publicznego URL (bez :8443) w konfiguracji aplikacji Google Chat.
Uwaga: ta konfiguracja utrzymuje się po ponownym uruchomieniu. Aby usunąć ją później, uruchomtailscale funnel resetitailscale serve reset.
Opcja B: Reverse Proxy (Caddy)
Jeśli używasz reverse proxy, takiego jak Caddy, proxyuj tylko określoną ścieżkę:your-domain.com/ zostanie zignorowane albo zwróci 404, natomiast your-domain.com/googlechat zostanie bezpiecznie przekierowane do OpenClaw.
Opcja C: Cloudflare Tunnel
Skonfiguruj reguły ingress tunelu tak, aby routowały tylko ścieżkę webhooka:- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: HTTP 404 (Not Found)
Jak to działa
- Google Chat wysyła webhooki POST do gateway. Każde żądanie zawiera nagłówek
Authorization: Bearer <token>.- OpenClaw weryfikuje uwierzytelnianie bearer przed odczytem/parsingiem pełnych treści webhooka, gdy nagłówek jest obecny.
- Obsługiwane są żądania Google Workspace Add-on zawierające w treści
authorizationEventObject.systemIdToken, z bardziej rygorystycznym limitem rozmiaru treści dla pre-autoryzacji.
- OpenClaw weryfikuje token względem skonfigurowanych
audienceType+audience:audienceType: "app-url"→audienceto URL Twojego webhooka HTTPS.audienceType: "project-number"→audienceto numer projektu Cloud.
- Wiadomości są routowane według space:
- DM używają klucza sesji
agent:<agentId>:googlechat:direct:<spaceId>. - Spaces używają klucza sesji
agent:<agentId>:googlechat:group:<spaceId>.
- DM używają klucza sesji
- Dostęp do DM jest domyślnie realizowany przez pairing. Nieznani nadawcy otrzymują kod pairingu; zatwierdź go poleceniem:
openclaw pairing approve googlechat <code>
- Group spaces domyślnie wymagają wzmianki @. Użyj
botUser, jeśli wykrywanie wzmianki wymaga nazwy użytkownika aplikacji.
Cele
Używaj tych identyfikatorów do dostarczania i list dozwolonych:- Wiadomości bezpośrednie:
users/<userId>(zalecane). - Surowy adres e-mail
name@example.comjest zmienny i jest używany tylko do bezpośredniego dopasowania listy dozwolonych, gdychannels.googlechat.dangerouslyAllowNameMatching: true. - Przestarzałe:
users/<email>jest traktowane jako identyfikator użytkownika, a nie adres e-mail do listy dozwolonych. - Spaces:
spaces/<spaceId>.
Najważniejsze elementy konfiguracji
- Poświadczenia konta usługi można także przekazać bezpośrednio przez
serviceAccount(ciąg JSON). - Obsługiwane jest również
serviceAccountRef(env/file SecretRef), w tym odwołania dla poszczególnych kont podchannels.googlechat.accounts.<id>.serviceAccountRef. - Domyślna ścieżka webhooka to
/googlechat, jeśliwebhookPathnie jest ustawione. dangerouslyAllowNameMatchingponownie włącza dopasowanie zmiennych identyfikatorów e-mail dla list dozwolonych (tryb zgodności awaryjnej).- Reakcje są dostępne przez narzędzie
reactionsichannels action, gdyactions.reactionsjest włączone. - Akcje wiadomości udostępniają
senddla tekstu iupload-filedla jawnego wysyłania załączników.upload-fileakceptujemedia/filePath/pathoraz opcjonalniemessage,filenamei kierowanie do wątku. typingIndicatorobsługujenone,message(domyślnie) ireaction(reakcja wymaga OAuth użytkownika).- Załączniki są pobierane przez Chat API i przechowywane w potoku mediów (rozmiar ograniczany przez
mediaMaxMb).
Rozwiązywanie problemów
405 Method Not Allowed
Jeśli Google Cloud Logs Explorer pokazuje błędy takie jak:-
Kanał nie jest skonfigurowany: w konfiguracji brakuje sekcji
channels.googlechat. Zweryfikuj to poleceniem:Jeśli zwraca „Config path not found”, dodaj konfigurację (zobacz Najważniejsze elementy konfiguracji). -
Plugin nie jest włączony: sprawdź status pluginu:
Jeśli widnieje jako „disabled”, dodaj do konfiguracji
plugins.entries.googlechat.enabled: true. -
Gateway nie został ponownie uruchomiony: po dodaniu konfiguracji uruchom ponownie gateway:
Inne problemy
- Sprawdź
openclaw channels status --probe, aby wykryć błędy uwierzytelniania lub brak konfiguracjiaudience. - Jeśli wiadomości nie docierają, potwierdź URL webhooka aplikacji Chat oraz subskrypcje zdarzeń.
- Jeśli bramkowanie wzmianką blokuje odpowiedzi, ustaw
botUserna nazwę zasobu użytkownika aplikacji i sprawdźrequireMention. - Używaj
openclaw logs --followpodczas wysyłania wiadomości testowej, aby zobaczyć, czy żądania docierają do gateway.
Powiązane
- Channels Overview — wszystkie obsługiwane kanały
- Pairing — uwierzytelnianie DM i przepływ pairingu
- Groups — zachowanie czatów grupowych i bramkowanie wzmianką
- Channel Routing — routing sesji dla wiadomości
- Security — model dostępu i utwardzanie