Mainstream messaging
Google Chat
Google Chat ทำงานในรูปแบบ Plugin อย่างเป็นทางการ @openclaw/googlechat: รองรับข้อความส่วนตัวและพื้นที่ผ่าน Webhook ของ Google Chat API (เฉพาะปลายทาง HTTP ไม่มี Pub/Sub)
ติดตั้ง
openclaw plugins install @openclaw/googlechatเช็กเอาต์ภายในเครื่อง (เมื่อเรียกใช้จากคลัง git):
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 แล้วตามด้วย Done)
- สร้างและดาวน์โหลด คีย์ JSON:
- คลิก Service Account ใหม่ > แท็บ Keys > Add Key > Create new key > JSON > Create
- จัดเก็บไฟล์ JSON ที่ดาวน์โหลดไว้บนโฮสต์ Gateway ของคุณ (เช่น
~/.openclaw/googlechat-service-account.json) - สร้างแอป Google Chat ใน การกำหนดค่า Chat ของ Google Cloud Console:
- กรอก Application info (ชื่อแอป, URL รูปประจำตัว, คำอธิบาย)
- เปิดใช้ 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(ดู URL สาธารณะ) - ภายใต้ Visibility ให้เลือก Make this Chat app available to specific people and groups in
<Your Domain>และป้อนที่อยู่อีเมลของคุณ - คลิก Save
- เปิดใช้สถานะแอป: รีเฟรชหน้า ค้นหา App status ตั้งค่าเป็น Live - available to users แล้วคลิก Save อีกครั้ง
- กำหนดค่า OpenClaw ด้วย Service Account และกลุ่มเป้าหมายของ Webhook (ต้องตรงกับการกำหนดค่าแอป Chat):
- ตัวแปรสภาพแวดล้อม:
GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json(เฉพาะบัญชีเริ่มต้น) หรือ - การกำหนดค่า: ดู จุดสำคัญของการกำหนดค่า นอกจากนี้
openclaw channels add --channel googlechatยังรองรับ--audience-type,--audience,--webhook-pathและ--webhook-url
- ตัวแปรสภาพแวดล้อม:
- เริ่ม Gateway จากนั้น Google Chat จะส่ง POST ไปยังพาธ Webhook ของคุณ (ค่าเริ่มต้นคือ
/googlechat)
เพิ่มลงใน Google Chat
เมื่อ Gateway ทำงานแล้วและอีเมลของคุณอยู่ในรายการการมองเห็น:
- ไปที่ Google Chat
- คลิกไอคอน + (บวก) ถัดจาก Direct Messages
- ค้นหา ชื่อแอป ที่คุณกำหนดค่าไว้ใน Google Cloud Console
- บอตจะ_ไม่_ปรากฏในรายการเรียกดูของ Marketplace เนื่องจากเป็นแอปส่วนตัว ให้ค้นหาด้วยชื่อ
- เลือกบอต คลิก Add หรือ Chat แล้วส่งข้อความ
URL สาธารณะ (เฉพาะ Webhook)
Webhook ของ Google Chat ต้องใช้ปลายทาง HTTPS สาธารณะ เพื่อความปลอดภัย ให้เปิดเผยต่ออินเทอร์เน็ตเฉพาะพาธ /googlechat และเก็บแดชบอร์ด OpenClaw รวมถึงปลายทางอื่นไว้เป็นส่วนตัว
ตัวเลือก A: Tailscale Funnel (แนะนำ)
ใช้ Tailscale Serve สำหรับแดชบอร์ดส่วนตัว และใช้ Funnel สำหรับพาธ Webhook สาธารณะ
-
ตรวจสอบว่า Gateway ของคุณผูกอยู่กับที่อยู่ใด:
bash ss -tlnp | grep 18789จด IP ไว้ (เช่น
127.0.0.1,0.0.0.0หรือที่อยู่ Tailscale รูปแบบ100.x.x.x) -
เปิดเผยแดชบอร์ดให้เฉพาะ tailnet (พอร์ต 8443):
bash # หากผูกกับ localhost (127.0.0.1 หรือ 0.0.0.0):tailscale serve --bg --https 8443 http://127.0.0.1:18789 # หากผูกกับ IP ของ Tailscale เท่านั้น:tailscale serve --bg --https 8443 http://100.x.x.x:18789 -
เปิดเผยต่อสาธารณะเฉพาะพาธ Webhook:
bash # หากผูกกับ localhost (127.0.0.1 หรือ 0.0.0.0):tailscale funnel --bg --set-path /googlechat http://127.0.0.1:18789/googlechat # หากผูกกับ IP ของ Tailscale เท่านั้น:tailscale funnel --bg --set-path /googlechat http://100.x.x.x:18789/googlechat -
หากระบบแจ้ง ให้ไปที่ URL การอนุญาตที่แสดงในผลลัพธ์เพื่อเปิดใช้ Funnel สำหรับ Node นี้
-
ตรวจสอบ:
bash tailscale serve statustailscale funnel status
URL Webhook สาธารณะของคุณคือ https://<node-name>.<tailnet>.ts.net/googlechat ส่วนแดชบอร์ดยังคงเข้าถึงได้เฉพาะผ่าน tailnet ที่ https://<node-name>.<tailnet>.ts.net:8443/ ใช้ URL สาธารณะ (โดยไม่มี :8443) ในการกำหนดค่าแอป Google Chat
หมายเหตุ: การกำหนดค่านี้จะคงอยู่หลังการรีบูต หากต้องการนำออกภายหลัง ให้ใช้
tailscale funnel resetและtailscale serve reset
ตัวเลือก B: พร็อกซีย้อนกลับ (Caddy)
ทำพร็อกซีเฉพาะพาธ Webhook:
your-domain.com { reverse_proxy /googlechat* localhost:18789}คำขอไปยัง your-domain.com/ จะถูกละเว้นหรือได้รับ 404 ขณะที่ your-domain.com/googlechat จะถูกกำหนดเส้นทางไปยัง OpenClaw
ตัวเลือก C: Cloudflare Tunnel
กำหนดค่ากฎขาเข้าของ Tunnel ให้กำหนดเส้นทางเฉพาะพาธ Webhook:
- พาธ:
/googlechat->http://localhost:18789/googlechat - กฎเริ่มต้น: HTTP 404 (ไม่พบ)
วิธีการทำงาน
- Google Chat ส่ง JSON ด้วย POST ไปยังพาธ Webhook ของ Gateway (รองรับเฉพาะ POST, ต้องใช้ชนิดเนื้อหา JSON และมีการจำกัดอัตราต่อ IP)
- OpenClaw พิสูจน์ตัวตนทุกคำขอก่อนส่งต่อ:
- เหตุการณ์จากแอป Chat มี
Authorization: Bearer <token>โดยจะตรวจสอบโทเค็นก่อนแยกวิเคราะห์เนื้อหาทั้งหมด - เหตุการณ์จาก Google Workspace Add-on มีโทเค็นอยู่ในเนื้อหา (
authorizationEventObject.systemIdToken) และจะถูกอ่านภายใต้งบประมาณก่อนการพิสูจน์ตัวตนที่เข้มงวดยิ่งขึ้น (16 KB, 3 วินาที) ก่อนตรวจสอบ
- เหตุการณ์จากแอป Chat มี
- ระบบตรวจสอบโทเค็นกับ
audienceType+audience:audienceType: "app-url"→ กลุ่มเป้าหมายคือ URL Webhook แบบ HTTPS ของคุณaudienceType: "project-number"→ กลุ่มเป้าหมายคือหมายเลขโปรเจกต์ Cloud- โทเค็น Add-on ภายใต้
app-urlยังกำหนดให้ตั้งค่าappPrincipalเป็นรหัสไคลเอ็นต์ OAuth 2.0 แบบตัวเลขของแอป (21 หลัก ไม่ใช่อีเมล) มิฉะนั้นการตรวจสอบจะล้มเหลวพร้อมบันทึกคำเตือน
- ข้อความจะถูกกำหนดเส้นทางตามพื้นที่:
- พื้นที่ใช้เซสชันแยกตามพื้นที่
agent:<agentId>:googlechat:group:<spaceId>โดยการตอบกลับจะถูกส่งไปยังเธรดของข้อความ - โดยค่าเริ่มต้น ข้อความส่วนตัวจะรวมเข้าในเซสชันหลักของเอเจนต์ ตั้งค่า
session.dmScopeเพื่อใช้เซสชันข้อความส่วนตัวแยกตามคู่สนทนา (ดู เซสชัน)
- พื้นที่ใช้เซสชันแยกตามพื้นที่
- โดยค่าเริ่มต้น การเข้าถึงข้อความส่วนตัวใช้การจับคู่ ผู้ส่งที่ไม่รู้จักจะได้รับรหัสจับคู่ ให้อนุมัติด้วย:
openclaw pairing approve googlechat <code>
- โดยค่าเริ่มต้น พื้นที่กลุ่มต้องมีการกล่าวถึงด้วย @ ระบบตรวจหาการกล่าวถึงจากคำอธิบายประกอบ
USER_MENTIONของ Chat ที่ระบุเป้าหมายเป็นแอป หากการตรวจหาต้องใช้ชื่อทรัพยากรผู้ใช้ของแอป ให้ตั้งค่าbotUser(เช่นusers/1234567890) - เมื่อการอนุมัติคำสั่ง exec หรือ Plugin เริ่มต้นจาก Google Chat และมีการกำหนดผู้อนุมัติ
users/<id>ที่เสถียร OpenClaw จะโพสต์การ์ดอนุมัติแบบเนทีฟ (cardsV2) ในพื้นที่หรือเธรดต้นทาง ปุ่มบนการ์ดจะมีโทเค็นคอลแบ็กแบบทึบ ส่วนพรอมต์แบบกำหนดเอง/approve <id> <decision>จะปรากฏเฉพาะเมื่อไม่สามารถส่งแบบเนทีฟได้
เป้าหมาย
ใช้ตัวระบุต่อไปนี้สำหรับการส่งและรายการอนุญาต:
- ข้อความส่วนตัว:
users/<userId>(แนะนำ) - พื้นที่:
spaces/<spaceId> - อีเมลดิบ
name@example.comสามารถเปลี่ยนแปลงได้ และจะใช้สำหรับจับคู่กับรายการอนุญาตเฉพาะเมื่อchannels.googlechat.dangerouslyAllowNameMatching: true - เลิกใช้แล้ว:
users/<email>จะถือว่าเป็นรหัสผู้ใช้ ไม่ใช่รายการอนุญาตอีเมล - ระบบยอมรับและตัดคำนำหน้า
googlechat:,google-chat:และgchat:ออก
จุดสำคัญของการกำหนดค่า
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", // หรือ serviceAccountRef: { source: "file", provider: "filemain", id: "/channels/googlechat/serviceAccount" } audienceType: "app-url", audience: "https://gateway.example.com/googlechat", appPrincipal: "123456789012345678901", // เฉพาะการตรวจสอบ Add-on; รหัสไคลเอ็นต์ OAuth แบบตัวเลข webhookPath: "/googlechat", botUser: "users/1234567890", // ไม่บังคับ; ช่วยตรวจหาการกล่าวถึง allowBots: false, dm: { policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { enabled: true, requireMention: true, users: ["users/1234567890"], systemPrompt: "ตอบสั้น ๆ เท่านั้น", }, }, typingIndicator: "message", mediaMaxMb: 20, }, },}หมายเหตุ:
- ข้อมูลเข้าสู่ระบบของ Service Account:
serviceAccountFile(พาธ),serviceAccount(สตริงหรือออบเจ็กต์ JSON แบบอินไลน์) หรือserviceAccountRef(SecretRef จากตัวแปรสภาพแวดล้อม/ไฟล์) ตัวแปรสภาพแวดล้อมGOOGLE_CHAT_SERVICE_ACCOUNT(JSON แบบอินไลน์) และGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(พาธ) มีผลเฉพาะกับบัญชีเริ่มต้น การตั้งค่าหลายบัญชีใช้channels.googlechat.accounts.<id>พร้อมคีย์เดียวกัน รวมถึงserviceAccountRefแยกตามบัญชี - พาธ Webhook เริ่มต้นคือ
/googlechatเมื่อไม่ได้ตั้งค่าwebhookPath; หรือwebhookUrlสามารถระบุพาธแทนได้ - คีย์กลุ่มต้องเป็นรหัสพื้นที่ที่เสถียร (
spaces/<spaceId>) คีย์ที่เป็นชื่อที่แสดงเลิกใช้แล้ว และระบบจะบันทึกไว้ว่าเป็นเช่นนั้น dangerouslyAllowNameMatchingเปิดใช้การจับคู่ตัวการหลักด้วยอีเมลที่เปลี่ยนแปลงได้อีกครั้งสำหรับรายการอนุญาต (โหมดความเข้ากันได้ฉุกเฉิน) โดย doctor จะเตือนเกี่ยวกับรายการอีเมล- การดำเนินการแสดงความรู้สึกของ Google Chat ไม่ได้ถูกเปิดเผย Plugin ใช้การพิสูจน์ตัวตนด้วย Service Account ขณะที่ปลายทางแสดงความรู้สึกของ Google Chat ต้องใช้การพิสูจน์ตัวตนของผู้ใช้ ระบบยอมรับการกำหนดค่า
actions.reactionsที่มีอยู่เพื่อความเข้ากันได้ แต่ไม่มีผลใด ๆ - การ์ดอนุมัติแบบเนทีฟใช้การคลิกปุ่ม
cardsV2ของ Google Chat ไม่ใช่เหตุการณ์แสดงความรู้สึก ผู้อนุมัติมาจากdm.allowFromหรือdefaultToและต้องเป็นค่าusers/<id>แบบตัวเลขที่เสถียร - การดำเนินการกับข้อความเปิดเผยเฉพาะการ
sendข้อความ การอัปโหลดไฟล์แนบของ Google Chat ต้องใช้การพิสูจน์ตัวตนของผู้ใช้ แต่ Plugin นี้ใช้การพิสูจน์ตัวตนด้วย Service Account จึงไม่เปิดเผยการอัปโหลดไฟล์ขาออก typingIndicator:message(ค่าเริ่มต้น) จะโพสต์ข้อความตัวแทน_<Bot> is typing..._และแก้ไขให้เป็นการตอบกลับแรก;noneจะปิดใช้;reactionต้องใช้ OAuth ของผู้ใช้ และในปัจจุบันจะย้อนกลับไปใช้messageพร้อมบันทึกข้อผิดพลาดเมื่อใช้การพิสูจน์ตัวตนด้วย Service Account- ไฟล์แนบขาเข้า (ไฟล์แนบแรกต่อข้อความ) จะถูกดาวน์โหลดผ่าน Chat API เข้าสู่ไปป์ไลน์สื่อ โดยจำกัดขนาดด้วย
mediaMaxMb(ค่าเริ่มต้น 20) - โดยค่าเริ่มต้น ระบบจะละเว้นข้อความที่บอตเป็นผู้เขียน เมื่อใช้
allowBots: trueข้อความจากบอตที่ยอมรับจะใช้ การป้องกันลูปของบอต ร่วมกัน: กำหนดค่าchannels.defaults.botLoopProtectionแล้วเขียนทับด้วยchannels.googlechat.botLoopProtectionหรือchannels.googlechat.groups.<space>.botLoopProtection
รายละเอียดการอ้างอิงข้อมูลลับ: การจัดการข้อมูลลับ
การแก้ไขปัญหา
405 ไม่อนุญาตให้ใช้เมธอด
หาก Google Cloud Logs Explorer แสดงข้อผิดพลาด เช่น:
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowedยังไม่ได้ลงทะเบียนตัวจัดการ Webhook สาเหตุที่พบบ่อย:
-
ไม่ได้กำหนดค่าช่องทาง: ไม่มีส่วน
channels.googlechatตรวจสอบด้วย:bash openclaw config get channels.googlechatหากส่งคืน "Config path not found" ให้เพิ่มการกำหนดค่า (ดู จุดสำคัญของการกำหนดค่า)
-
ไม่ได้เปิดใช้ Plugin: ตรวจสอบสถานะ Plugin:
bash openclaw plugins list | grep googlechatหากแสดง "disabled" ให้เพิ่ม
plugins.entries.googlechat.enabled: trueในการกำหนดค่าของคุณ -
ไม่ได้เริ่ม Gateway ใหม่ หลังเปลี่ยนแปลงการกำหนดค่า:
bash openclaw gateway restart
ตรวจสอบว่าช่องทางกำลังทำงาน:
openclaw channels status# ควรแสดง: Google Chat default: enabled, configured, ...ปัญหาอื่น ๆ
openclaw channels status --probeจะแสดงข้อผิดพลาดในการพิสูจน์ตัวตนและการกำหนดค่ากลุ่มเป้าหมายที่ขาดหายไป (ต้องมีทั้งaudienceและaudienceType)- หากไม่มีข้อความเข้ามา ให้ตรวจสอบ URL Webhook และการกำหนดค่าทริกเกอร์ของแอป Chat
- หากการจำกัดด้วยการกล่าวถึงขัดขวางการตอบกลับ ให้ตั้งค่า
botUserเป็นชื่อทรัพยากรผู้ใช้ของแอปและตรวจสอบrequireMention - การใช้
openclaw logs --followขณะส่งข้อความทดสอบจะแสดงว่าคำขอมาถึง Gateway หรือไม่
ที่เกี่ยวข้อง
- ภาพรวมช่องทาง — ช่องทางทั้งหมดที่รองรับ
- การกำหนดเส้นทางช่องทาง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- การกำหนดค่า Gateway
- กลุ่ม — ลักษณะการทำงานของแชตกลุ่มและการควบคุมด้วยการกล่าวถึง
- การจับคู่ — การยืนยันตัวตนผ่านข้อความส่วนตัวและขั้นตอนการจับคู่
- ความปลอดภัย — รูปแบบการเข้าถึงและการเสริมความแข็งแกร่งด้านความปลอดภัย