Google Chat (Chat API)
Estado: listo para mensajes directos y espacios mediante webhooks de Google Chat API (solo HTTP).Configuración rápida (principiante)
- Crea un proyecto de Google Cloud y habilita Google Chat API.
- Ve a: Google Chat API Credentials
- Habilita la API si aún no está habilitada.
- Crea una Service Account:
- Pulsa Create Credentials > Service Account.
- Asígnale el nombre que quieras (por ejemplo,
openclaw-chat). - Deja los permisos en blanco (pulsa Continue).
- Deja en blanco los principales con acceso (pulsa Done).
- Crea y descarga la JSON Key:
- En la lista de cuentas de servicio, haz clic en la que acabas de crear.
- Ve a la pestaña Keys.
- Haz clic en Add Key > Create new key.
- Selecciona JSON y pulsa Create.
- Guarda el archivo JSON descargado en tu host del gateway (por ejemplo,
~/.openclaw/googlechat-service-account.json). - Crea una app de Google Chat en Google Cloud Console Chat Configuration:
- Completa la Application info:
- App name: (por ejemplo,
OpenClaw) - Avatar URL: (por ejemplo,
https://openclaw.ai/logo.png) - Description: (por ejemplo,
Personal AI Assistant)
- App name: (por ejemplo,
- Habilita Interactive features.
- En Functionality, marca Join spaces and group conversations.
- En Connection settings, selecciona HTTP endpoint URL.
- En Triggers, selecciona Use a common HTTP endpoint URL for all triggers y configúralo con la URL pública de tu gateway seguida de
/googlechat.- Consejo: ejecuta
openclaw statuspara encontrar la URL pública de tu gateway.
- Consejo: ejecuta
- En Visibility, marca Make this Chat app available to specific people and groups in <Your Domain>.
- Introduce tu dirección de correo electrónico (por ejemplo,
user@example.com) en el cuadro de texto. - Haz clic en Save al final.
- Completa la Application info:
- Habilita el estado de la app:
- Después de guardar, actualiza la página.
- Busca la sección App status (normalmente cerca de la parte superior o inferior después de guardar).
- Cambia el estado a Live - available to users.
- Haz clic en Save de nuevo.
- Configura OpenClaw con la ruta de la cuenta de servicio y la audiencia del webhook:
- Entorno:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - O configuración:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- Entorno:
- Configura el tipo y el valor de la audiencia del webhook (debe coincidir con la configuración de tu app de Chat).
- Inicia el gateway. Google Chat hará POST a la ruta de tu webhook.
Añadir a Google Chat
Una vez que el gateway esté en ejecución y tu correo esté añadido a la lista de visibilidad:- Ve a Google Chat.
- Haz clic en el icono + (más) junto a Direct Messages.
- En la barra de búsqueda (donde normalmente añades personas), escribe el App name que configuraste en Google Cloud Console.
- Nota: el bot no aparecerá en la lista de exploración de “Marketplace” porque es una app privada. Debes buscarlo por nombre.
- Selecciona tu bot en los resultados.
- Haz clic en Add o Chat para iniciar una conversación 1:1.
- Envía “Hello” para activar el asistente.
URL pública (solo webhook)
Los webhooks de Google Chat requieren un endpoint HTTPS público. Por seguridad, expón solo la ruta/googlechat a internet. Mantén el panel de OpenClaw y otros endpoints sensibles en tu red privada.
Opción A: Tailscale Funnel (recomendada)
Usa Tailscale Serve para el panel privado y Funnel para la ruta pública del webhook. Esto mantiene/ como privado mientras expone solo /googlechat.
-
Comprueba a qué dirección está vinculado tu gateway:
Toma nota de la dirección IP (por ejemplo,
127.0.0.1,0.0.0.0o tu IP de Tailscale como100.x.x.x). -
Expón el panel solo a la tailnet (puerto 8443):
-
Expón públicamente solo la ruta del webhook:
- Autoriza el nodo para acceso Funnel: Si se te solicita, visita la URL de autorización que aparece en la salida para habilitar Funnel para este nodo en la política de tu tailnet.
-
Verifica la configuración:
https://<node-name>.<tailnet>.ts.net/googlechat
Tu panel privado seguirá siendo solo para la tailnet:
https://<node-name>.<tailnet>.ts.net:8443/
Usa la URL pública (sin :8443) en la configuración de la app de Google Chat.
Nota: esta configuración persiste tras reinicios. Para eliminarla más adelante, ejecutatailscale funnel resetytailscale serve reset.
Opción B: Proxy inverso (Caddy)
Si usas un proxy inverso como Caddy, redirige solo la ruta específica:your-domain.com/ se ignorará o devolverá 404, mientras que your-domain.com/googlechat se enruta de forma segura a OpenClaw.
Opción C: Cloudflare Tunnel
Configura las reglas de entrada de tu túnel para enrutar solo la ruta del webhook:- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: HTTP 404 (Not Found)
Cómo funciona
- Google Chat envía POST de webhook al gateway. Cada solicitud incluye una cabecera
Authorization: Bearer <token>.- OpenClaw verifica la autenticación bearer antes de leer o analizar cuerpos completos de webhook cuando la cabecera está presente.
- Las solicitudes de Google Workspace Add-on que incluyen
authorizationEventObject.systemIdTokenen el cuerpo son compatibles mediante un presupuesto de cuerpo previo a la autenticación más estricto.
- OpenClaw verifica el token con el
audienceTypey laaudienceconfigurados:audienceType: "app-url"→ la audiencia es la URL HTTPS de tu webhook.audienceType: "project-number"→ la audiencia es el número del proyecto de Cloud.
- Los mensajes se enrutan por espacio:
- Los mensajes directos usan la clave de sesión
agent:<agentId>:googlechat:direct:<spaceId>. - Los espacios usan la clave de sesión
agent:<agentId>:googlechat:group:<spaceId>.
- Los mensajes directos usan la clave de sesión
- El acceso a mensajes directos usa emparejamiento de forma predeterminada. Los remitentes desconocidos reciben un código de emparejamiento; apruébalo con:
openclaw pairing approve googlechat <code>
- Los espacios de grupo requieren una mención con @ de forma predeterminada. Usa
botUsersi la detección de menciones necesita el nombre de usuario de la app.
Destinos
Usa estos identificadores para la entrega y las listas de permitidos:- Mensajes directos:
users/<userId>(recomendado). - El correo sin formato
name@example.comes mutable y solo se usa para coincidencias directas en listas de permitidos cuandochannels.googlechat.dangerouslyAllowNameMatching: true. - Obsoleto:
users/<email>se trata como un id de usuario, no como una lista de permitidos de correo. - Espacios:
spaces/<spaceId>.
Aspectos destacados de la configuración
- Las credenciales de la cuenta de servicio también pueden pasarse en línea con
serviceAccount(cadena JSON). serviceAccountReftambién es compatible (env/file SecretRef), incluidas las referencias por cuenta enchannels.googlechat.accounts.<id>.serviceAccountRef.- La ruta predeterminada del webhook es
/googlechatsi no se configurawebhookPath. dangerouslyAllowNameMatchingvuelve a habilitar la coincidencia de principales por correo mutable para listas de permitidos (modo de compatibilidad de emergencia).- Las reacciones están disponibles mediante la herramienta
reactionsychannels actioncuandoactions.reactionsestá habilitado. - Las acciones de mensajes exponen
sendpara texto yupload-filepara envíos explícitos de archivos adjuntos.upload-fileaceptamedia/filePath/pathademás demessage,filenamey destino de hilo opcionales. typingIndicatoradmitenone,message(predeterminado) yreaction(la reacción requiere OAuth de usuario).- Los archivos adjuntos se descargan mediante Chat API y se almacenan en la canalización de medios (el tamaño está limitado por
mediaMaxMb).
Solución de problemas
405 Method Not Allowed
Si Google Cloud Logs Explorer muestra errores como:-
Canal no configurado: falta la sección
channels.googlechaten tu configuración. Verifícalo con:Si devuelve “Config path not found”, añade la configuración (consulta Aspectos destacados de la configuración). -
Plugin no habilitado: comprueba el estado del plugin:
Si muestra “disabled”, añade
plugins.entries.googlechat.enabled: truea tu configuración. -
Gateway no reiniciado: después de añadir la configuración, reinicia el gateway:
Otros problemas
- Comprueba
openclaw channels status --probepara detectar errores de autenticación o falta de configuración de audiencia. - Si no llegan mensajes, confirma la URL del webhook de la app de Chat y las suscripciones a eventos.
- Si la restricción por mención bloquea las respuestas, configura
botUsercon el nombre de recurso de usuario de la app y verificarequireMention. - Usa
openclaw logs --followmientras envías un mensaje de prueba para ver si las solicitudes llegan al gateway.
Relacionado
- Resumen de canales — todos los canales compatibles
- Emparejamiento — autenticación de mensajes directos y flujo de emparejamiento
- Grupos — comportamiento del chat grupal y restricción por mención
- Enrutamiento de canales — enrutamiento de sesiones para mensajes
- Seguridad — modelo de acceso y refuerzo