Mainstream messaging
Google Chat
Google Chat se ejecuta como el Plugin oficial @openclaw/googlechat: mensajes directos y espacios mediante Webhooks de la API de Google Chat (solo endpoint HTTP, sin Pub/Sub).
Instalación
openclaw plugins install @openclaw/googlechatRepositorio local (cuando se ejecuta desde un repositorio git):
openclaw plugins install ./path/to/local/googlechat-pluginConfiguración rápida (principiantes)
- Cree un proyecto de Google Cloud y habilite la Google Chat API.
- Vaya a: Credenciales de la API de Google Chat
- Habilite la API si aún no está habilitada.
- Cree una Service Account:
- Pulse Create Credentials > Service Account.
- Asígnele el nombre que desee (por ejemplo,
openclaw-chat). - Deje en blanco los permisos y las entidades principales (Continue y, después, Done).
- Cree y descargue la clave JSON:
- Haga clic en la nueva cuenta de servicio > pestaña Keys > Add Key > Create new key > JSON > Create.
- Guarde el archivo JSON descargado en el host del Gateway (por ejemplo,
~/.openclaw/googlechat-service-account.json). - Cree una aplicación de Google Chat en la configuración de Chat de Google Cloud Console:
- Complete Application info (nombre de la aplicación, URL del avatar y descripción).
- Habilite Interactive features.
- En Functionality, marque Join spaces and group conversations.
- En Connection settings, seleccione HTTP endpoint URL.
- En Triggers, seleccione Use a common HTTP endpoint URL for all triggers y establézcalo en la URL pública del Gateway seguida de
/googlechat(consulte URL pública). - En Visibility, marque Make this Chat app available to specific people and groups in
<Your Domain>e introduzca su dirección de correo electrónico. - Haga clic en Save.
- Habilite el estado de la aplicación: actualice la página, busque App status, establézcalo en Live - available to users y vuelva a pulsar Save.
- Configure OpenClaw con la cuenta de servicio y la audiencia del Webhook (debe coincidir con la configuración de la aplicación de Chat):
- Variable de entorno:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json(solo para la cuenta predeterminada), o - Configuración: consulte Aspectos destacados de la configuración.
openclaw channels add --channel googlechattambién acepta--audience-type,--audience,--webhook-pathy--webhook-url.
- Variable de entorno:
- Inicie el Gateway. Google Chat enviará solicitudes POST a la ruta de su Webhook (de forma predeterminada,
/googlechat).
Añadir a Google Chat
Una vez que el Gateway esté en ejecución y su correo electrónico figure en la lista de visibilidad:
- Vaya a Google Chat.
- Haga clic en el icono + (más) junto a Direct Messages.
- Busque el App name que configuró en Google Cloud Console.
- El bot no aparece en la lista de exploración de Marketplace porque es una aplicación privada; búsquelo por su nombre.
- Seleccione el bot, haga clic en Add o Chat y envíe un mensaje.
URL pública (solo Webhook)
Los Webhooks de Google Chat requieren un endpoint HTTPS público. Por seguridad, exponga a Internet únicamente la ruta /googlechat y mantenga privados el panel de OpenClaw y los demás endpoints.
Opción A: Tailscale Funnel (recomendada)
Use Tailscale Serve para el panel privado y Funnel para la ruta pública del Webhook.
-
Compruebe a qué dirección está vinculado el Gateway:
bash ss -tlnp | grep 18789Anote la IP (por ejemplo,
127.0.0.1,0.0.0.0o una dirección de Tailscale100.x.x.x). -
Exponga el panel únicamente a la tailnet (puerto 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 a Tailscale IP only:tailscale serve --bg --https 8443 http://100.x.x.x:18789 -
Exponga públicamente solo la ruta del 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 a Tailscale IP only:tailscale funnel --bg --set-path /googlechat http://100.x.x.x:18789/googlechat -
Si se le solicita, visite la URL de autorización que aparece en la salida para habilitar Funnel en este Node.
-
Verifique:
bash tailscale serve statustailscale funnel status
La URL pública del Webhook es https://<node-name>.<tailnet>.ts.net/googlechat; el panel permanece disponible solo en la tailnet en https://<node-name>.<tailnet>.ts.net:8443/. Use la URL pública (sin :8443) en la configuración de la aplicación de Google Chat.
Nota: Esta configuración se conserva tras los reinicios. Para eliminarla más adelante, use
tailscale funnel resetytailscale serve reset.
Opción B: proxy inverso (Caddy)
Envíe mediante proxy únicamente la ruta del Webhook:
your-domain.com { reverse_proxy /googlechat* localhost:18789}Las solicitudes a your-domain.com/ se ignoran o devuelven un error 404, mientras que your-domain.com/googlechat se dirige a OpenClaw.
Opción C: Cloudflare Tunnel
Configure las reglas de entrada del túnel para dirigir únicamente la ruta del Webhook:
- Path:
/googlechat->http://localhost:18789/googlechat - Default rule: HTTP 404 (Not Found)
Funcionamiento
- Google Chat envía JSON mediante POST a la ruta del Webhook del Gateway (solo POST, se requiere el tipo de contenido JSON y se aplica un límite de frecuencia por IP).
- OpenClaw autentica cada solicitud antes de procesarla:
- Los eventos de la aplicación de Chat incluyen
Authorization: Bearer <token>; el token se verifica antes de analizar el cuerpo completo. - Los eventos de complementos de Google Workspace incluyen el token en el cuerpo (
authorizationEventObject.systemIdToken) y se leen con límites de preautenticación más estrictos (16 KB, 3 s) antes de la verificación.
- Los eventos de la aplicación de Chat incluyen
- El token se comprueba con
audienceType+audience:audienceType: "app-url"→ la audiencia es la URL HTTPS de su Webhook.audienceType: "project-number"→ la audiencia es el número del proyecto de Cloud.- Los tokens de complementos con
app-urlrequieren además queappPrincipalesté establecido en el ID de cliente numérico de OAuth 2.0 de la aplicación (21 dígitos, no un correo electrónico); de lo contrario, la verificación falla y se registra una advertencia.
- Los mensajes se enrutan por espacio:
- Los espacios reciben sesiones específicas por espacio
agent:<agentId>:googlechat:group:<spaceId>; las respuestas se envían al hilo del mensaje. - De forma predeterminada, los mensajes directos se agrupan en la sesión principal del agente; establezca
session.dmScopepara crear sesiones de mensajes directos por interlocutor (consulte Sesión).
- Los espacios reciben sesiones específicas por espacio
- De forma predeterminada, el acceso a los mensajes directos utiliza emparejamiento. Los remitentes desconocidos reciben un código de emparejamiento; apruébelo con:
openclaw pairing approve googlechat <code>
- De forma predeterminada, los espacios de grupo requieren una @mención. Las menciones se detectan mediante anotaciones
USER_MENTIONde Chat dirigidas a la aplicación; establezcabotUser(por ejemplo,users/1234567890) si la detección necesita el nombre de recurso de usuario de la aplicación. - Cuando se inicia una aprobación de ejecución o de Plugin desde Google Chat y hay configurado un aprobador estable
users/<id>, OpenClaw publica una tarjeta de aprobación nativa (cardsV2) en el espacio o hilo de origen. Los botones de la tarjeta contienen tokens opacos de devolución de llamada; la indicación manual/approve <id> <decision>solo aparece cuando la entrega nativa no está disponible.
Destinos
Use estos identificadores para la entrega y las listas de permitidos:
- Mensajes directos:
users/<userId>(recomendado). - Espacios:
spaces/<spaceId>. - La dirección de correo sin procesar
name@example.comes mutable y solo se utiliza para comprobar la lista de permitidos cuandochannels.googlechat.dangerouslyAllowNameMatching: true. - Obsoleto:
users/<email>se trata como un ID de usuario, no como una entrada de correo electrónico de la lista de permitidos. - Se aceptan y eliminan los prefijos
googlechat:,google-chat:ygchat:.
Aspectos destacados de la configuración
{ 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", appPrincipal: "123456789012345678901", // add-on verification only; numeric OAuth client ID 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.", }, }, typingIndicator: "message", mediaMaxMb: 20, }, },}Notas:
- Credenciales de la cuenta de servicio:
serviceAccountFile(ruta),serviceAccount(cadena JSON u objeto insertado) oserviceAccountRef(SecretRef de variable de entorno/archivo). Las variables de entornoGOOGLE_CHAT_SERVICE_ACCOUNT(JSON insertado) yGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(ruta) se aplican únicamente a la cuenta predeterminada. Las configuraciones con varias cuentas utilizanchannels.googlechat.accounts.<id>con las mismas claves, incluido unserviceAccountRefpor cuenta. - La ruta predeterminada del Webhook es
/googlechatcuandowebhookPathno está establecido;webhookUrlpuede proporcionar la ruta en su lugar. - Las claves de grupo deben ser identificadores estables de espacios (
spaces/<spaceId>). Las claves basadas en nombres visibles están obsoletas y se registran como tales. dangerouslyAllowNameMatchingvuelve a habilitar la comparación de entidades principales mediante direcciones de correo mutables para las listas de permitidos (modo de compatibilidad de emergencia); el doctor advierte sobre las entradas de correo electrónico.- Las acciones de reacción de Google Chat no están disponibles. El Plugin utiliza autenticación mediante cuenta de servicio, mientras que los endpoints de reacciones de Google Chat requieren autenticación de usuario. La configuración existente de
actions.reactionsse acepta por compatibilidad, pero no tiene ningún efecto. - Las tarjetas de aprobación nativas utilizan clics en botones
cardsV2de Google Chat, no eventos de reacción. Los aprobadores proceden dedm.allowFromodefaultToy deben ser valores numéricos estables con el formatousers/<id>. - Las acciones de mensajes solo ofrecen el envío de texto mediante
send. La carga de archivos adjuntos de Google Chat requiere autenticación de usuario, mientras que este Plugin utiliza autenticación mediante cuenta de servicio, por lo que no se ofrece la carga de archivos salientes. typingIndicator:message(valor predeterminado) publica un marcador de posición_<Bot> is typing..._y lo sustituye por la primera respuesta;nonelo deshabilita;reactionrequiere OAuth de usuario y, actualmente, con la autenticación mediante cuenta de servicio utilizamessagecomo alternativa y registra un error.- Los archivos adjuntos entrantes (el primero de cada mensaje) se descargan mediante la API de Chat y se introducen en el flujo de procesamiento multimedia, con el límite de
mediaMaxMb(20 de forma predeterminada). - De forma predeterminada, se ignoran los mensajes creados por bots. Con
allowBots: true, los mensajes de bots aceptados utilizan la protección compartida contra bucles de bots: configurechannels.defaults.botLoopProtectiony, después, sobrescríbala conchannels.googlechat.botLoopProtectionochannels.googlechat.groups.<space>.botLoopProtection.
Detalles sobre las referencias a secretos: Gestión de secretos.
Solución de problemas
405 Método no permitido
Si el explorador de registros de Google Cloud muestra errores como:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not AllowedEl controlador del Webhook no está registrado. Causas habituales:
-
Canal no configurado: falta la sección
channels.googlechat. Verifíquelo con:bash openclaw config get channels.googlechatSi devuelve "Config path not found", añada la configuración (consulte Aspectos destacados de la configuración).
-
Plugin no habilitado: compruebe el estado del Plugin:
bash openclaw plugins list | grep googlechatSi muestra "disabled", añada
plugins.entries.googlechat.enabled: truea su configuración. -
El Gateway no se ha reiniciado después de cambiar la configuración:
bash openclaw gateway restart
Compruebe que el canal esté en ejecución:
openclaw channels status# Should show: Google Chat default: enabled, configured, ...Otros problemas
openclaw channels status --probemuestra los errores de autenticación y la ausencia de configuración de audiencia (audienceyaudienceTypeson obligatorios).- Si no llega ningún mensaje, confirme la URL del Webhook de la aplicación de Chat y la configuración de los activadores.
- Si el requisito de mención bloquea las respuestas, establezca
botUseren el nombre de recurso de usuario de la aplicación y comprueberequireMention. - Ejecutar
openclaw logs --followmientras envía un mensaje de prueba muestra si las solicitudes llegan al Gateway.
Relacionado
- Descripción general de los canales — todos los canales compatibles
- Enrutamiento de canales — enrutamiento de sesiones para mensajes
- Configuración del Gateway
- Grupos — comportamiento de los chats grupales y control de menciones
- Emparejamiento — autenticación de mensajes directos y flujo de emparejamiento
- Seguridad — modelo de acceso y protección