OpenClaw Google Chat 채널
Google Chat API의 HTTP 엔드포인트를 통해 OpenClaw를 Google Chat에 연결합니다. 이 엔터프라이즈 통합을 통해 AI 어시스턴트를 Google Workspace 내에서 운영할 수 있습니다 — 다이렉트 메시지와 스페이스(Space) 대화를 처리합니다. 봇은 Google Chat의 HTTP POST 요청을 수신하고, 서비스 계정을 통해 Bearer 토큰을 검증하며, OpenClaw Gateway를 통해 메시지를 라우팅합니다.
Google Chat 지원 기능
텍스트 메시지
지원
미디어 및 파일
지원
리액션
지원
스레드
지원
음성 메시지
미지원
그룹 채팅
지원
Google Chat 사전 요구사항
- Google Workspace 계정(Business 또는 Enterprise 버전). 인증 범위 승인 및 앱 가시성 설정에는 도메인 관리자 권한이 필요할 수 있습니다
- Google Chat API가 활성화된 Google Cloud 프로젝트
- JSON 키 파일이 생성된 서비스 계정
- OpenClaw Gateway가 실행 중이며 구성 완료
- Webhook용 공개 접근 가능한 HTTPS 엔드포인트(예: Tailscale Funnel, Caddy 또는 Cloudflare Tunnel)
Google Chat 빠른 설정
Google Chat API 활성화 및 서비스 계정 생성
Google Cloud Console로 이동하여 Google Chat API를 활성화합니다. 새 서비스 계정(예: 'openclaw-chat')을 생성하고, 권한 구성을 건너뛴 다음 JSON 키 파일을 생성하여 다운로드합니다. 파일을 Gateway 호스트에 저장합니다(예: ~/.openclaw/googlechat-service-account.json).
Google Cloud Console에서 Chat 앱 구성
Google Cloud Console의 Chat 구성 페이지에서 앱 이름, 아바타 URL, 설명을 설정합니다. 대화형 기능을 활성화하고 앱이 스페이스와 그룹 대화에 참여할 수 있도록 합니다. 연결 설정으로 'HTTP 엔드포인트 URL'을 선택하고 Gateway의 공개 URL 뒤에 '/googlechat'를 추가하여 입력합니다('openclaw status'로 Gateway URL 확인).
가시성 설정, 앱 활성화 및 테스트
앱 가시성을 도메인 내 특정 사용자 또는 그룹으로 제한합니다. 구성을 저장하고 페이지를 새로고침한 후 앱 상태를 '라이브 — 사용자에게 제공 가능'으로 변경합니다. Google Chat에서 '다이렉트 메시지' 옆의 '+' 아이콘을 클릭하고 앱 이름을 검색하여 테스트 메시지를 보냅니다.
Google Chat 구성 예시
{
"channels": {
"googlechat": {
"serviceAccountFile": "~/.openclaw/googlechat-service-account.json",
"webhookPath": "/googlechat"
}
}
}Google Chat 상세 문서
아키텍처 개요
서비스 계정 설정
{
"channels": {
"googlechat": {
"serviceAccountFile": "~/.openclaw/googlechat-service-account.json"
}
}
}Chat 앱 구성
공개 URL 및 Webhook 구성
# Tailscale Funnel 예시:
tailscale funnel --set-path=/googlechat localhost:18789
# Caddy 예시:
reverse_proxy /googlechat* localhost:18789
# Cloudflare Tunnel 인그레스 구성:
- hostname: your-domain.com
path: /googlechat
service: http://localhost:18789
- service: http_status:404DM 및 그룹 정책
{
"channels": {
"googlechat": {
"dmPolicy": "pairing",
"groupPolicy": "allowlist",
"groupAllowList": ["spaces/AAAA1234"]
}
}
}타겟 및 세션 라우팅
{
"channels": {
"googlechat": {
"botUser": "users/123456789",
"spaces": {
"spaces/AAAA1234": {
"systemPrompt": "당신은 엔지니어링 팀을 위한 유용한 어시스턴트입니다."
}
}
}
}
}Google Chat 구성 참조
| Key | Type | Default | Description |
|---|---|---|---|
| serviceAccountFile | string | "" | Google Cloud 서비스 계정 JSON 키 파일 경로 |
| audience | string | "app-url" | Bearer 토큰 검증의 오디언스 유형. app-url이면 Google Chat이 OIDC ID 토큰을 보내고, project-number이면 자체 서명 JWT를 보냅니다. 옵션: app-url, project-number |
| audienceValue | string | "" | 토큰 검증에 사용되는 오디언스 값(URL 또는 프로젝트 번호) |
| webhookPath | string | "/googlechat" | Google Chat Webhook 수신을 위한 HTTP 엔드포인트 경로 |
| botUser | string | "" | 봇 사용자 식별자(users/<id>), 스페이스에서의 @멘션 감지용 |
| dmPolicy | string | "pairing" | 봇에 DM을 보낼 수 있는 사용자를 제어. 옵션: pairing, allowlist, open, disabled |
| allowFrom | string[] | [] | 봇에 메시지를 보낼 수 있는 사용자 ID 또는 이메일(dmPolicy가 allowlist일 때 적용) |
| groupPolicy | string | "disabled" | 그룹 스페이스 정책. 옵션: disabled, allowlist, open |
| groupAllowList | string[] | [] | groupPolicy가 allowlist일 때 허용되는 스페이스 ID |
| spaces.<id>.systemPrompt | string | "" | 특정 Google Chat 스페이스의 사용자 정의 AI 시스템 프롬프트 |
| mediaMaxMb | number | 20 | 최대 미디어 파일 크기(메가바이트) |
| actions.typing | boolean | true | AI가 응답을 생성하는 동안 타이핑 표시기 전송 |
Google Cloud 서비스 계정 JSON 키 파일 경로
Bearer 토큰 검증의 오디언스 유형. app-url이면 Google Chat이 OIDC ID 토큰을 보내고, project-number이면 자체 서명 JWT를 보냅니다. 옵션: app-url, project-number
토큰 검증에 사용되는 오디언스 값(URL 또는 프로젝트 번호)
Google Chat Webhook 수신을 위한 HTTP 엔드포인트 경로
봇 사용자 식별자(users/<id>), 스페이스에서의 @멘션 감지용
봇에 DM을 보낼 수 있는 사용자를 제어. 옵션: pairing, allowlist, open, disabled
봇에 메시지를 보낼 수 있는 사용자 ID 또는 이메일(dmPolicy가 allowlist일 때 적용)
그룹 스페이스 정책. 옵션: disabled, allowlist, open
groupPolicy가 allowlist일 때 허용되는 스페이스 ID
특정 Google Chat 스페이스의 사용자 정의 AI 시스템 프롬프트
최대 미디어 파일 크기(메가바이트)
AI가 응답을 생성하는 동안 타이핑 표시기 전송
Google Chat 자주 묻는 질문
Google Chat 문제 해결
Google Chat 플러그인이 활성화되지 않았거나, channels.googlechat 구성 섹션이 누락되었거나, 구성 변경 후 Gateway가 재시작되지 않음.
서비스 계정 파일 경로가 올바르지 않거나, 오디언스 설정이 일치하지 않거나, Bearer 토큰이 만료됨.
@멘션 감지를 위한 봇 사용자 식별자가 구성되지 않았거나 스페이스가 허용 목록에 없음.
공개 URL이 올바르게 구성되지 않았거나, 방화벽이 수신 연결을 차단하거나, SSL 인증서가 유효하지 않음.