Mainstream messaging
Google Chat
สถานะ: Plugin ที่ดาวน์โหลดได้สำหรับ DM + พื้นที่ผ่าน Webhook ของ Google Chat API (HTTP เท่านั้น)
การติดตั้ง
ติดตั้ง Google Chat ก่อนกำหนดค่า channel:
openclaw plugins install @openclaw/googlechat
เช็กเอาต์ในเครื่อง (เมื่อรันจาก git repo):
openclaw plugins install ./path/to/local/googlechat-plugin
การตั้งค่าอย่างรวดเร็ว (สำหรับผู้เริ่มต้น)
- สร้างโปรเจกต์ Google Cloud และเปิดใช้ Google Chat API
- ไปที่: ข้อมูลรับรอง Google Chat API
- เปิดใช้ API หากยังไม่ได้เปิดใช้
- สร้าง Service Account:
- กด Create Credentials > Service Account
- ตั้งชื่อได้ตามต้องการ (เช่น
openclaw-chat) - ปล่อยสิทธิ์ว่างไว้ (กด Continue)
- ปล่อย principals ที่มีสิทธิ์เข้าถึงว่างไว้ (กด Done)
- สร้างและดาวน์โหลด JSON Key:
- ในรายการ service accounts ให้คลิกบัญชีที่คุณเพิ่งสร้าง
- ไปที่แท็บ Keys
- คลิก Add Key > Create new key
- เลือก JSON แล้วกด Create
- เก็บไฟล์ JSON ที่ดาวน์โหลดไว้บนโฮสต์ Gateway ของคุณ (เช่น
~/.openclaw/googlechat-service-account.json) - สร้างแอป Google Chat ใน การกำหนดค่า Chat ของ Google Cloud Console:
- กรอก Application info:
- App name: (เช่น
OpenClaw) - Avatar URL: (เช่น
https://openclaw.ai/logo.png) - Description: (เช่น
Personal AI Assistant)
- App name: (เช่น
- เปิดใช้ Interactive features
- ภายใต้ Functionality ให้เลือก Join spaces and group conversations
- ภายใต้ Connection settings ให้เลือก HTTP endpoint URL
- ภายใต้ Triggers ให้เลือก Use a common HTTP endpoint URL for all triggers และตั้งค่าเป็น URL สาธารณะของ Gateway ตามด้วย
/googlechat- เคล็ดลับ: รัน
openclaw statusเพื่อหา URL สาธารณะของ Gateway
- เคล็ดลับ: รัน
- ภายใต้ Visibility ให้เลือก Make this Chat app available to specific people and groups in
<Your Domain> - ป้อนอีเมลของคุณ (เช่น
[email protected]) ในกล่องข้อความ - คลิก Save ที่ด้านล่าง
- กรอก Application info:
- เปิดใช้สถานะแอป:
- หลังจากบันทึกแล้ว ให้ รีเฟรชหน้า
- มองหาส่วน App status (โดยปกติอยู่ใกล้ด้านบนหรือด้านล่างหลังจากบันทึก)
- เปลี่ยนสถานะเป็น Live - available to users
- คลิก Save อีกครั้ง
- กำหนดค่า OpenClaw ด้วยพาธ service account + webhook audience:
- Env:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json - หรือ config:
channels.googlechat.serviceAccountFile: "/path/to/service-account.json"
- Env:
- ตั้งค่าประเภท + ค่าของ webhook audience (ให้ตรงกับ config แอป Chat ของคุณ)
- เริ่ม Gateway Google Chat จะ POST ไปยังพาธ Webhook ของคุณ
เพิ่มไปยัง Google Chat
เมื่อ Gateway ทำงานอยู่และอีเมลของคุณถูกเพิ่มในรายการ visibility แล้ว:
- ไปที่ Google Chat
- คลิกไอคอน + (บวก) ถัดจาก Direct Messages
- ในแถบค้นหา (ตำแหน่งที่คุณใช้เพิ่มผู้คนตามปกติ) ให้พิมพ์ App name ที่คุณกำหนดค่าไว้ใน Google Cloud Console
- หมายเหตุ: บอตจะ ไม่ ปรากฏในรายการเรียกดู "Marketplace" เพราะเป็นแอปส่วนตัว คุณต้องค้นหาด้วยชื่อ
- เลือกบอตของคุณจากผลลัพธ์
- คลิก Add หรือ Chat เพื่อเริ่มการสนทนาแบบ 1:1
- ส่ง "Hello" เพื่อทริกเกอร์ผู้ช่วย!
URL สาธารณะ (เฉพาะ Webhook)
Webhook ของ Google Chat ต้องใช้ endpoint HTTPS สาธารณะ เพื่อความปลอดภัย ให้ เปิดเผยเฉพาะพาธ /googlechat ต่ออินเทอร์เน็ต เก็บแดชบอร์ด OpenClaw และ endpoint ที่ละเอียดอ่อนอื่น ๆ ไว้ในเครือข่ายส่วนตัวของคุณ
ตัวเลือก A: Tailscale Funnel (แนะนำ)
ใช้ Tailscale Serve สำหรับแดชบอร์ดส่วนตัวและ Funnel สำหรับพาธ Webhook สาธารณะ วิธีนี้ทำให้ / เป็นส่วนตัวและเปิดเผยเฉพาะ /googlechat
-
ตรวจสอบว่า Gateway ของคุณ bind กับแอดเดรสใด:
ss -tlnp | grep 18789จดที่อยู่ IP ไว้ (เช่น
127.0.0.1,0.0.0.0หรือ IP ของ Tailscale เช่น100.x.x.x) -
เปิดเผยแดชบอร์ดให้เฉพาะ tailnet เท่านั้น (พอร์ต 8443):
# 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 Tailscale IP only (e.g., 100.106.161.80): tailscale serve --bg --https 8443 http://100.106.161.80:18789 -
เปิดเผยเฉพาะพาธ Webhook แบบสาธารณะ:
# 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 Tailscale IP only (e.g., 100.106.161.80): tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat -
อนุญาต node สำหรับการเข้าถึง Funnel: หากมีพรอมป์ ให้ไปที่ URL การอนุญาตที่แสดงในเอาต์พุตเพื่อเปิดใช้ Funnel สำหรับ node นี้ในนโยบาย tailnet ของคุณ
-
ตรวจสอบการกำหนดค่า:
tailscale serve status tailscale funnel status
URL Webhook สาธารณะของคุณจะเป็น:
https://<node-name>.<tailnet>.ts.net/googlechat
แดชบอร์ดส่วนตัวของคุณยังคงเข้าถึงได้เฉพาะ tailnet:
https://<node-name>.<tailnet>.ts.net:8443/
ใช้ URL สาธารณะ (ไม่มี :8443) ใน config แอป Google Chat
หมายเหตุ: การกำหนดค่านี้คงอยู่หลังรีบูต หากต้องการลบในภายหลัง ให้รัน
tailscale funnel resetและtailscale serve reset
ตัวเลือก B: Reverse Proxy (Caddy)
หากคุณใช้ reverse proxy เช่น Caddy ให้ proxy เฉพาะพาธที่กำหนด:
your-domain.com {
reverse_proxy /googlechat* localhost:18789
}
ด้วย config นี้ คำขอใด ๆ ไปยัง your-domain.com/ จะถูกละเว้นหรือส่งคืนเป็น 404 ขณะที่ your-domain.com/googlechat จะถูกส่งต่อไปยัง OpenClaw อย่างปลอดภัย
ตัวเลือก C: Cloudflare Tunnel
กำหนดค่า ingress rules ของ tunnel ให้ route เฉพาะพาธ Webhook:
- Path:
/googlechat->http://localhost:18789/googlechat - Default Rule: HTTP 404 (Not Found)
วิธีการทำงาน
- Google Chat ส่ง Webhook POST ไปยัง Gateway แต่ละคำขอมี header
Authorization: Bearer <token>- OpenClaw ตรวจสอบ bearer auth ก่อนอ่าน/แยกวิเคราะห์ body ของ Webhook ทั้งหมดเมื่อมี header อยู่
- รองรับคำขอ Google Workspace Add-on ที่มี
authorizationEventObject.systemIdTokenใน body ผ่าน pre-auth body budget ที่เข้มงวดกว่า
- OpenClaw ตรวจสอบ token กับ
audienceType+audienceที่กำหนดค่าไว้:audienceType: "app-url"→ audience คือ URL Webhook HTTPS ของคุณaudienceType: "project-number"→ audience คือหมายเลขโปรเจกต์ Cloud
- ข้อความถูก route ตาม space:
- DM ใช้ session key
agent:<agentId>:googlechat:direct:<spaceId> - Spaces ใช้ session key
agent:<agentId>:googlechat:group:<spaceId>
- DM ใช้ session key
- การเข้าถึง DM ใช้การจับคู่เป็นค่าเริ่มต้น ผู้ส่งที่ไม่รู้จักจะได้รับรหัสจับคู่ อนุมัติด้วย:
openclaw pairing approve googlechat <code>
- พื้นที่กลุ่มต้อง @-mention โดยค่าเริ่มต้น ใช้
botUserหากการตรวจจับ mention ต้องใช้ชื่อผู้ใช้ของแอป
เป้าหมาย
ใช้ตัวระบุเหล่านี้สำหรับการส่งและ allowlists:
- ข้อความส่วนตัว:
users/<userId>(แนะนำ) - อีเมลดิบ
[email protected]เปลี่ยนแปลงได้และใช้เฉพาะสำหรับการจับคู่ allowlist โดยตรงเมื่อchannels.googlechat.dangerouslyAllowNameMatching: true - เลิกใช้แล้ว:
users/<email>จะถูกถือเป็น user id ไม่ใช่ email allowlist - Spaces:
spaces/<spaceId>
จุดสำคัญของ Config
{
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",
webhookPath: "/googlechat",
botUser: "users/1234567890", // optional; helps mention detection
dm: {
policy: "pairing",
allowFrom: ["users/1234567890"],
},
groupPolicy: "allowlist",
groups: {
"spaces/AAAA": {
enabled: true,
requireMention: true,
users: ["users/1234567890"],
systemPrompt: "Short answers only.",
},
},
actions: { reactions: true },
typingIndicator: "message",
mediaMaxMb: 20,
},
},
}
หมายเหตุ:
- ข้อมูลรับรอง service account สามารถส่งแบบ inline ด้วย
serviceAccount(สตริง JSON) ได้เช่นกัน - รองรับ
serviceAccountRefด้วย (env/file SecretRef) รวมถึง refs รายบัญชีภายใต้channels.googlechat.accounts.<id>.serviceAccountRef - พาธ Webhook เริ่มต้นคือ
/googlechatหากไม่ได้ตั้งค่าwebhookPath dangerouslyAllowNameMatchingเปิดใช้งานการจับคู่ principal อีเมลที่เปลี่ยนแปลงได้สำหรับ allowlists อีกครั้ง (โหมดความเข้ากันได้ฉุกเฉิน)- มี reactions ให้ใช้งานผ่านเครื่องมือ
reactionsและchannels actionเมื่อเปิดใช้actions.reactions - การดำเนินการกับข้อความเปิดเผย
sendสำหรับข้อความและupload-fileสำหรับการส่งไฟล์แนบโดยชัดเจนupload-fileรับmedia/filePath/pathพร้อมmessage,filenameและการกำหนดเป้าหมาย thread แบบไม่บังคับ typingIndicatorรองรับnone,message(ค่าเริ่มต้น) และreaction(reactionต้องใช้ OAuth ของผู้ใช้)- ไฟล์แนบถูกดาวน์โหลดผ่าน Chat API และจัดเก็บใน media pipeline (จำกัดขนาดด้วย
mediaMaxMb)
รายละเอียดการอ้างอิงความลับ: การจัดการความลับ
การแก้ไขปัญหา
405 Method Not Allowed
หาก Google Cloud Logs Explorer แสดงข้อผิดพลาดเช่น:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
หมายความว่า webhook handler ยังไม่ได้ลงทะเบียน สาเหตุที่พบบ่อย:
-
ยังไม่ได้กำหนดค่า channel: ส่วน
channels.googlechatหายไปจาก config ของคุณ ตรวจสอบด้วย:openclaw config get channels.googlechatหากส่งคืน "Config path not found" ให้เพิ่มการกำหนดค่า (ดู จุดสำคัญของ Config)
-
Plugin ไม่ได้เปิดใช้: ตรวจสอบสถานะ Plugin:
openclaw plugins list | grep googlechatหากแสดงว่า "disabled" ให้เพิ่ม
plugins.entries.googlechat.enabled: trueใน config ของคุณ -
Gateway ไม่ได้รีสตาร์ต: หลังจากเพิ่ม config แล้ว ให้รีสตาร์ต Gateway:
openclaw gateway restart
ตรวจสอบว่า channel กำลังทำงาน:
openclaw channels status
# Should show: Google Chat default: enabled, configured, ...
ปัญหาอื่น ๆ
- ตรวจสอบ
openclaw channels status --probeสำหรับข้อผิดพลาด auth หรือ config audience ที่หายไป - หากไม่มีข้อความเข้ามา ให้ยืนยัน URL Webhook + event subscriptions ของแอป Chat
- หาก mention gating บล็อกการตอบกลับ ให้ตั้งค่า
botUserเป็นชื่อทรัพยากรผู้ใช้ของแอปและตรวจสอบrequireMention - ใช้
openclaw logs --followขณะส่งข้อความทดสอบเพื่อดูว่าคำขอไปถึง Gateway หรือไม่
เอกสารที่เกี่ยวข้อง:
ที่เกี่ยวข้อง
- ภาพรวม Channels — channel ทั้งหมดที่รองรับ
- การจับคู่ — การยืนยันตัวตน DM และโฟลว์การจับคู่
- กลุ่ม — พฤติกรรมแชตกลุ่มและ mention gating
- Channel Routing — session routing สำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความปลอดภัย