@openclaw/googlechat: MD y espacios mediante webhooks de la API de Google Chat (solo endpoint HTTP, sin Pub/Sub).
Instalar
Configuración rápida (principiante)
- Crea un proyecto de Google Cloud y habilita la API de Google Chat.
- Ve a: Credenciales de la API de Google Chat
- Habilita la API si aún no está habilitada.
- Crea una cuenta de servicio:
- Pulsa Crear credenciales > Cuenta de servicio.
- Ponle el nombre que quieras (por ejemplo,
openclaw-chat). - Deja en blanco los permisos y las entidades principales (Continuar y luego Listo).
- Crea y descarga la clave JSON:
- Haz clic en la nueva cuenta de servicio > pestaña Claves > Añadir clave > Crear clave nueva > JSON > Crear.
- Guarda el archivo JSON descargado en tu host del Gateway (por ejemplo,
~/.openclaw/googlechat-service-account.json). - Crea una app de Google Chat en la Configuración de Chat de Google Cloud Console:
- Rellena Información de la aplicación (nombre de la app, URL del avatar, descripción).
- Habilita Funciones interactivas.
- En Funcionalidad, marca Unirse a espacios y conversaciones de grupo.
- En Configuración de conexión, selecciona URL de endpoint HTTP.
- En Activadores, selecciona Usar una URL de endpoint HTTP común para todos los activadores y establécela en la URL pública de tu Gateway seguida de
/googlechat(consulta URL pública). - En Visibilidad, marca Hacer que esta app de Chat esté disponible para personas y grupos específicos en
<Your Domain>e introduce tu dirección de correo electrónico. - Haz clic en Guardar.
- Habilita el estado de la app: actualiza la página, busca Estado de la app, establécelo en En vivo: disponible para usuarios y vuelve a hacer clic en Guardar.
- Configura OpenClaw con la cuenta de servicio y la audiencia del Webhook (debe coincidir con la configuración de la app de Chat):
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json(solo cuenta predeterminada), o - Config: consulta Aspectos destacados de la configuración.
openclaw channels add --channel googlechattambién acepta--audience-type,--audience,--webhook-pathy--webhook-url.
- Env:
- Inicia el Gateway. Google Chat hará POST a tu ruta de Webhook (predeterminada:
/googlechat).
Añadir a Google Chat
Cuando el Gateway esté en ejecución y tu correo esté en la lista de visibilidad:- Ve a Google Chat.
- Haz clic en el icono + (más) junto a Mensajes directos.
- Busca el nombre de la app que configuraste en Google Cloud Console.
- El bot no aparece en la lista de exploración de Marketplace porque es una app privada; búscalo por nombre.
- Selecciona el bot, haz clic en Añadir o Chat y envía un mensaje.
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 y mantén privados el panel de OpenClaw y otros endpoints.
Opción A: Tailscale Funnel (recomendado)
Usa Tailscale Serve para el panel privado y Funnel para la ruta pública del Webhook.-
Comprueba a qué dirección está enlazado tu Gateway:
Anota la IP (por ejemplo,
127.0.0.1,0.0.0.0o una dirección Tailscale100.x.x.x). -
Expón el panel solo a la tailnet (puerto 8443):
-
Expón públicamente solo la ruta del Webhook:
- Si se te solicita, visita la URL de autorización que se muestra en la salida para habilitar Funnel para este nodo.
-
Verifica:
https://<node-name>.<tailnet>.ts.net/googlechat; el panel permanece solo en la tailnet en 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 los reinicios. Elimínala más adelante contailscale funnel resetytailscale serve reset.
Opción B: Proxy inverso (Caddy)
Proxy solo de la ruta del Webhook:your-domain.com/ se ignoran o devuelven 404, mientras que your-domain.com/googlechat se enruta a OpenClaw.
Opción C: Cloudflare Tunnel
Configura las reglas de ingreso del túnel para enrutar solo la ruta del Webhook:- Ruta:
/googlechat->http://localhost:18789/googlechat - Regla predeterminada: HTTP 404 (No encontrado)
Cómo funciona
- Google Chat envía JSON mediante POST a la ruta del Webhook del Gateway (solo POST, tipo de contenido JSON requerido, con límite de tasa por IP).
- OpenClaw autentica cada solicitud antes de despacharla:
- Los eventos de la aplicación de Chat llevan
Authorization: Bearer <token>; el token se verifica antes de analizar el cuerpo completo. - Los eventos de complementos de Google Workspace llevan el token en el cuerpo (
authorizationEventObject.systemIdToken) y se leen con un presupuesto de preautenticación más estricto (16 KB, 3 s) antes de la verificación.
- Los eventos de la aplicación de Chat llevan
- El token se comprueba contra
audienceType+audience:audienceType: "app-url"→ la audiencia es tu URL HTTPS del Webhook.audienceType: "project-number"→ la audiencia es el número del proyecto de Cloud.- Los tokens de complementos bajo
app-urltambién requieren queappPrincipalse establezca en el ID de cliente OAuth 2.0 numérico de la aplicación (21 dígitos, no un correo electrónico); de lo contrario, la verificación falla con una advertencia registrada.
- Los mensajes se enrutan por espacio:
- Los espacios obtienen sesiones por espacio
agent:<agentId>:googlechat:group:<spaceId>; las respuestas van al hilo del mensaje. - Los DM se agrupan en la sesión principal del agente de forma predeterminada; establece
session.dmScopepara sesiones de DM por interlocutor (consulta Sesión).
- Los espacios obtienen sesiones por espacio
- El acceso a DM 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 @mención de forma predeterminada. Las menciones se detectan a partir de anotaciones
USER_MENTIONde Chat dirigidas a la aplicación; establecebotUser(por ejemplo,users/1234567890) si la detección necesita el nombre de recurso de usuario de la aplicación. - Cuando una aprobación de ejecución o Plugin se inicia 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 llevan tokens de devolución de llamada opacos; el mensaje manual/approve <id> <decision>aparece solo cuando la entrega nativa no está disponible.
Destinos
Usa estos identificadores para entrega y listas de permitidos:- Mensajes directos:
users/<userId>(recomendado). - Espacios:
spaces/<spaceId>. - El correo electrónico sin procesar
name@example.comes mutable y solo se usa para coincidencia de listas de permitidos cuandochannels.googlechat.dangerouslyAllowNameMatching: true. - Obsoleto:
users/<email>se trata como un id de usuario, no como una entrada de lista de permitidos de correo electrónico. - Los prefijos
googlechat:,google-chat:ygchat:se aceptan y se eliminan.
Aspectos destacados de configuración
- Credenciales de cuenta de servicio:
serviceAccountFile(ruta),serviceAccount(cadena JSON u objeto en línea) oserviceAccountRef(env/file SecretRef). Las variables de entornoGOOGLE_CHAT_SERVICE_ACCOUNT(JSON en línea) yGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(ruta) se aplican solo a la cuenta predeterminada. Las configuraciones con varias cuentas usanchannels.googlechat.accounts.<id>con las mismas claves, incluidoserviceAccountRefpor cuenta. - La ruta predeterminada del Webhook es
/googlechatcuandowebhookPathno está establecido;webhookUrlpuede proporcionar la ruta en su lugar. - Las claves de grupo deben ser ids de espacio estables (
spaces/<spaceId>). Las claves de nombre para mostrar están obsoletas y se registran como tales. dangerouslyAllowNameMatchingvuelve a habilitar la coincidencia de principales de correo electrónico mutables para listas de permitidos (modo de compatibilidad de emergencia); doctor advierte sobre entradas de correo electrónico.- Las reacciones están habilitadas de forma predeterminada y se exponen mediante la herramienta
reactionsychannels action; deshabilítalas conactions.reactions: false. - Las tarjetas de aprobación nativas usan clics de botones
cardsV2de Google Chat, no eventos de reacción. Los aprobadores provienen dedm.allowFromodefaultToy deben ser valores numéricos establesusers/<id>. - Las acciones de mensaje exponen
sendpara texto yupload-filepara envíos explícitos de adjuntos.upload-fileaceptamedia/filePath/pathmásmessage,filenamey destino de hilo opcionales (threadId/replyTo). typingIndicator:message(predeterminado) publica un marcador de posición_<Bot> is typing..._y lo edita para convertirlo en la primera respuesta;nonelo deshabilita;reactionrequiere OAuth de usuario y actualmente vuelve amessagecon un error registrado bajo autenticación de cuenta de servicio.- Los adjuntos entrantes (primer adjunto por mensaje) se descargan mediante la API de Chat en la canalización de medios, con un límite de
mediaMaxMb(predeterminado 20). - Los mensajes creados por bots se ignoran de forma predeterminada. Con
allowBots: true, los mensajes de bot aceptados usan la protección contra bucles de bot compartida: configurachannels.defaults.botLoopProtectiony luego sobrescribe conchannels.googlechat.botLoopProtectionochannels.googlechat.groups.<space>.botLoopProtection.
Solución de problemas
405 Método no permitido
Si Google Cloud Logs Explorer muestra errores como:-
Canal no configurado: falta la sección
channels.googlechat. Verifícalo con:Si devuelve “Config path not found”, agrega la configuración (consulta Aspectos destacados de configuración). -
Plugin no habilitado: comprueba el estado del Plugin:
Si muestra “disabled”, agrega
plugins.entries.googlechat.enabled: truea tu configuración. -
Gateway no reiniciado después de cambios de configuración:
Otros problemas
openclaw channels status --probemuestra errores de autenticación y configuración de audiencia faltante (audienceyaudienceTypeson ambos obligatorios).- Si no llegan mensajes, confirma la URL del Webhook de la aplicación de Chat y la configuración del disparador.
- Si la compuerta de menciones bloquea respuestas, establece
botUseren el nombre de recurso de usuario de la aplicación y compruebarequireMention. openclaw logs --followal enviar un mensaje de prueba muestra si las solicitudes llegan al Gateway.
Relacionado
- Resumen de canales — todos los canales admitidos
- Enrutamiento de canales — enrutamiento de sesiones para mensajes
- Configuración del Gateway
- Grupos — comportamiento del chat grupal y control de menciones
- Emparejamiento — autenticación por DM y flujo de emparejamiento
- Reacciones
- Seguridad — modelo de acceso y refuerzo