Google Chat (Chat API)
상태: Google Chat API 웹훅(HTTP 전용)을 통해 다이렉트 메시지 및 스페이스를 지원할 준비가 되어 있습니다.빠른 설정 (초보자용)
- Google Cloud 프로젝트를 생성하고 Google Chat API를 활성화하세요.
- 이동: Google Chat API Credentials
- API가 활성화되지 않은 경우, 활성화하세요.
- 서비스 계정을 생성하세요:
- 자격 증명 생성 > 서비스 계정을 누르세요.
- 원하는 이름을 입력하세요 (예:
openclaw-chat). - 권한을 비워 둡니다 (계속을 누르세요).
- 액세스 권한이 있는 주체를 비워 둡니다 (완료를 누르세요).
- JSON 키를 생성하고 다운로드하세요:
- 서비스 계정 목록에서 방금 생성한 계정을 클릭합니다.
- 키 탭으로 이동합니다.
- 키 추가 > 새 키 생성을 클릭합니다.
- JSON을 선택하고 생성을 누르세요.
- 다운로드한 JSON 파일을 게이트웨이 호스트에 저장하세요 (예:
~/.openclaw/googlechat-service-account.json). - Google Cloud Console Chat Configuration에서 Google Chat 앱을 만듭니다:
- 응용 프로그램 정보를 완성합니다:
- 앱 이름: (예:
OpenClaw) - 아바타 URL: (예:
https://openclaw.ai/logo.png) - 설명: (예:
Personal AI Assistant)
- 앱 이름: (예:
- 대화형 기능을 활성화합니다.
- 기능 아래에서 스페이스와 그룹 대화 참여를 선택합니다.
- 연결 설정 아래에서 HTTP 엔드포인트 URL을 선택합니다.
- 트리거 아래에서 모든 트리거에 공통 HTTP 엔드포인트 URL 사용을 선택하고 게이트웨이의 공개 URL에
/googlechat을 추가합니다.- 팁:
openclaw status를 실행하여 게이트웨이의 공개 URL을 확인하세요.
- 팁:
- 가시성 아래에서 이 Chat 앱을 특정 사람 및 그룹에 사용 가능하게 설정을 선택합니다.
- 텍스트 박스에 이메일 주소를 입력하세요 (예:
user@example.com). - 아래쪽의 저장을 클릭합니다.
- 응용 프로그램 정보를 완성합니다:
- 앱 상태 활성화:
- 저장 후, 페이지를 새로고침합니다.
- 앱 상태 섹션을 찾습니다 (보통 저장 후 상단이나 하단에 위치함).
- 상태를 사용 가능 - 사용자에게 사용 가능으로 변경합니다.
- 저장을 다시 클릭합니다.
- 서비스 계정 경로 및 웹훅 수신자와 함께 OpenClaw를 구성합니다:
- 환경 변수:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - 또는 설정:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json".
- 환경 변수:
- 웹훅 수신자 유형 및 값을 설정합니다 (Chat 앱 설정과 일치시킵니다).
- 게이트웨이를 시작하세요. Google Chat이 웹훅 경로로 POST를 보냅니다.
Google Chat에 추가
게이트웨이가 실행 중이고 이메일이 가시성 목록에 추가된 후:- Google Chat으로 이동하세요.
- 다이렉트 메시지 옆의 + (플러스) 아이콘을 클릭하세요.
- 검색 바(일반적으로 사람을 추가하는 곳)에 Google Cloud Console에 구성한 앱 이름을 입력하세요.
- 참고: 봇은 비공개 앱이므로 “Marketplace” 목록에는 나타나지 않습니다. 이름으로 검색해야 합니다.
- 결과에서 귀하의 봇을 선택하십시오.
- 추가 또는 채팅을 클릭하여 1:1 대화를 시작하세요.
- “Hello”를 보내어 비서를 활성화하세요!
공개 URL (웹훅 전용)
Google Chat 웹훅은 공개 HTTPS 엔드포인트가 필요합니다. 보안상 오직/googlechat 경로만 인터넷에 공개하세요. OpenClaw 대시보드 및 기타 민감한 엔드포인트는 사설 네트워크에 두십시오.
옵션 A: Tailscale Funnel (추천)
사설 대시보드에는 Tailscale Serve를, 공개 웹훅 경로에는 Funnel을 사용하세요. 이는/을 비공개로 유지하면서 오직 /googlechat만 노출합니다.
-
게이트웨이가 바인딩된 주소를 확인하세요:
IP 주소를 기록하세요 (예:
127.0.0.1,0.0.0.0, 또는100.x.x.x와 같은 Tailscale IP). -
대시보드를 테일넷에만 노출하세요 (포트 8443):
-
웹훅 경로만 공개적으로 노출하세요:
- Funnel 액세스를 위한 노드를 승인하세요: 승인하라는 메시지가 표시되면, 출력에 표시된 승인 URL을 방문하여 이 노드의 테일넷 정책에서 Funnel을 활성화하세요.
-
구성을 확인하세요:
https://<node-name>.<tailnet>.ts.net/googlechat
사설 대시보드는 테일넷 전용입니다:
https://<node-name>.<tailnet>.ts.net:8443/
공개 URL (8443 없이)을 Google Chat 앱 설정에 사용하세요.
참고: 이 구성은 재부팅 후에도 유지됩니다. 나중에 제거하려면tailscale funnel reset및tailscale serve reset을 실행하세요.
옵션 B: Reverse Proxy (Caddy)
Caddy와 같은 리버스 프록시를 사용하는 경우, 특정 경로만 프록시하세요:your-domain.com/에 대한 모든 요청은 무시되거나 404로 반환되며, your-domain.com/googlechat은 안전하게 OpenClaw로 라우팅됩니다.
옵션 C: Cloudflare Tunnel
웹훅 경로만 라우팅하도록 터널의 인그레스 규칙을 구성하세요:- 경로:
/googlechat->http://localhost:18789/googlechat - 기본 규칙: HTTP 404 (Not Found)
작동 원리
- Google Chat이 게이트웨이로 웹훅 POST를 보냅니다. 각 요청에는
Authorization: Bearer <토큰>헤더가 포함됩니다. - OpenClaw는 구성된
audienceType+audience에 대해 토큰을 검증합니다:audienceType: "app-url"→ 수신자는 HTTPS 웹훅 URL입니다.audienceType: "project-number"→ 수신자는 Cloud 프로젝트 번호입니다.
- 메시지는 공간에 따라 라우팅됩니다:
- 다이렉트 메시지는 세션 키
agent:<agentId>:googlechat:dm:<spaceId>를 사용합니다. - 스페이스는 세션 키
agent:<agentId>:googlechat:group:<spaceId>를 사용합니다.
- 다이렉트 메시지는 세션 키
- 디폴트로 다이렉트 메시지 접근은 페어링입니다. 알 수 없는 발신자는 페어링 코드를 받으며, 이를 승인하려면 다음을 사용하세요:
openclaw pairing approve googlechat <code>
- 그룹 공간은 기본적으로 @멘션이 필요합니다. 앱의 사용자 이름이 멘션 감지에 필요한 경우
botUser를 사용하세요.
타겟
배송 및 허용 목록을 위한 다음 식별자를 사용하세요:- 다이렉트 메시지:
users/<userId>(추천) 또는 원시 이메일name@example.com(변경 가능한 주체). - 사용되지 않음:
users/<email>은 사용자 아이디로 간주되며, 이메일 허용 목록이 아닙니다. - 스페이스:
spaces/<spaceId>.
설정 하이라이트
- 서비스 계정 자격 증명은
serviceAccount(JSON 문자열)로 인라인 전달될 수도 있습니다. webhookPath가 설정되지 않으면 기본 웹훅 경로는/googlechat입니다.- 리액션은
actions.reactions가 활성화된 경우reactions도구 및channels action을 통해 사용할 수 있습니다. typingIndicator는none,message(기본값),reaction(리액션은 사용자 OAuth 필요)을 지원합니다.- 첨부 파일은 Chat API를 통해 다운로드되며 미디어 파이프라인에 저장됩니다 (
mediaMaxMb에 따라 크기 제한).
문제 해결
405 Method Not Allowed
Google Cloud Logs Explorer에 다음과 같은 오류가 표시되는 경우:-
채널이 구성되지 않음: 구성에
channels.googlechat섹션이 누락되었습니다. 다음으로 확인하세요:“Config path not found”를 반환하면 구성(설정 하이라이트 참조)을 추가하세요. -
플러그인이 활성화되지 않음: 플러그인 상태를 확인하세요:
“disabled”로 표시되면 구성에
plugins.entries.googlechat.enabled: true를 추가하세요. -
게이트웨이가 재시작되지 않음: 설정 추가 후 게이트웨이를 재시작하세요:
기타 문제
- 인증 오류나 누락된 수신자 구성을
openclaw channels status --probe로 확인하세요. - 메시지가 도착하지 않는 경우, Chat 앱의 웹훅 URL 및 이벤트 구독을 확인하세요.
- 멘션 게이팅이 회신을 차단하는 경우,
botUser를 앱의 사용자 리소스 이름으로 설정하고requireMention을 확인하세요. openclaw logs --follow를 사용하여 테스트 메시지를 보낼 때 요청이 게이트웨이에 도달하는지 확인하세요.