Developer and self-hosted
ClickClack
ClickClack เชื่อมต่อ OpenClaw กับพื้นที่ทำงาน ClickClack ที่โฮสต์เองผ่านโทเค็นบอต ClickClack ที่รองรับโดยตรง
ใช้วิธีนี้เมื่อต้องการให้เอเจนต์ OpenClaw ปรากฏเป็นผู้ใช้บอต ClickClack โดย ClickClack รองรับทั้งบอตบริการอิสระและบอตที่ผู้ใช้เป็นเจ้าของ บอตที่ผู้ใช้เป็นเจ้าของจะเก็บ owner_user_id ไว้ และได้รับเฉพาะขอบเขตสิทธิ์ของโทเค็นที่คุณอนุญาตเท่านั้น
การตั้งค่าด่วน
ใน ClickClack ให้เปิด Workspace settings → Integrations → OpenClaw สร้าง บอตโดยใช้ Setup code (recommended) แล้วคัดลอกคำสั่งที่สร้างขึ้น:
openclaw channels add clickclack --code 'https://clickclack.example.com/#XXXX-XXXX-XXXX'สำหรับต้นทางของฟรอนต์เอนด์และ API ที่แยกกัน หรือ API ที่เมานต์ไว้ภายใต้พาธ ClickClack จะสร้าง เอนด์พอยต์สำหรับรับสิทธิ์ที่แน่นอนแทน:
openclaw channels add clickclack --code 'https://api.example.com/services/clickclack/api/bot-setup-codes/claim#XXXX-XXXX-XXXX'รหัสตั้งค่าใช้ได้ครั้งเดียวและหมดอายุหลังจาก 10 นาที OpenClaw จะรับสิทธิ์ด้วยรหัสดังกล่าว รับโทเค็นบอตที่สร้างขึ้นใหม่และการตั้งค่าพื้นที่ทำงาน บันทึกบัญชี ตรวจสอบการเชื่อมต่อ และรายงานว่า Gateway ที่กำลังทำงานตรวจพบการตั้งค่านี้หรือไม่ สำหรับเอนด์พอยต์แบบระบุเวอร์ชันที่แน่นอน OpenClaw จะตรวจสอบและบันทึกฐาน API มาตรฐาน ที่ ClickClack ส่งคืน รวมถึงคำนำหน้าพาธใดๆ โดยจะไม่จัดเก็บรหัสตั้งค่า ไว้ในการกำหนดค่า OpenClaw
การรับสิทธิ์ด้วยรหัสตั้งค่าใช้ HTTPS สำหรับเซิร์ฟเวอร์สาธารณะ นอกจากนี้ยังรองรับ HTTP ธรรมดาสำหรับ
การติดตั้งภายในเครื่องบนที่อยู่ลูปแบ็ก เช่น localhost และ 127.0.0.1
หาก OpenClaw กำลังทำงานอยู่แล้ว ClickClack จะเชื่อมต่อโดยอัตโนมัติและไม่จำเป็นต้องใช้ คำสั่งที่สอง มิฉะนั้น ให้เริ่มต้นด้วย:
openclaw gatewayคุณยังสามารถส่งรหัสแยกจาก URL ของเซิร์ฟเวอร์ได้:
openclaw channels add clickclack --code XXXX-XXXX-XXXX --base-url https://clickclack.example.comสำหรับการตั้งค่าแบบมีคำแนะนำ ให้เรียกใช้:
openclaw onboardเลือก ClickClack จากนั้นป้อน URL ของเซิร์ฟเวอร์ โทเค็นบอต และพื้นที่ทำงานเมื่อ ระบบแจ้ง การตั้งค่าแบบมีคำแนะนำจะตรวจสอบเซิร์ฟเวอร์ โทเค็น และพื้นที่ทำงานหลังจากบันทึก หาก การตรวจสอบล้มเหลว ระบบจะไม่ละทิ้งการกำหนดค่า
ทางเลือก: โทเค็นแบบกำหนดเอง
เลือก Manual token ใน ClickClack เมื่อกำหนดค่าไคลเอนต์ที่ไม่ใช่ OpenClaw หรือ เมื่อคุณต้องจัดการโทเค็นด้วยตนเองอย่างชัดเจน:
openclaw channels add clickclack --base-url https://clickclack.example.com --token ccb_... --workspace defaultworkspace รองรับรหัสพื้นที่ทำงาน (wsp_...) สลัก หรือชื่อที่แสดง
ไม่สามารถใช้ --code ร่วมกับ --token, --token-file หรือ --use-env ได้
ทางเลือก: โทเค็นจากตัวแปรสภาพแวดล้อม
บัญชีเริ่มต้นสามารถอ่าน CLICKCLACK_BOT_TOKEN แทนการจัดเก็บโทเค็น
ในการกำหนดค่า:
export CLICKCLACK_BOT_TOKEN="ccb_..."openclaw channels add clickclack --base-url https://clickclack.example.com --workspace default --use-envopenclaw gatewayบัญชีที่มีชื่อต้องใช้โทเค็นที่กำหนดค่าไว้หรือไฟล์โทเค็น ตัวแปรสภาพแวดล้อม ที่ใช้ร่วมกันถูกจำกัดไว้เฉพาะบัญชีเริ่มต้นโดยเจตนา
ข้อมูลอ้างอิง JSON5
รูปแบบการกำหนดค่าที่เทียบเท่าคือ:
{ channels: { clickclack: { enabled: true, baseUrl: "https://clickclack.example.com", token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", defaultTo: "channel:general", }, },}บัญชีจะถือว่าได้รับการกำหนดค่าเฉพาะเมื่อกำหนด baseUrl แหล่งที่มาของโทเค็น และ
workspace ครบทั้งหมด แหล่งที่มาของโทเค็นอาจเป็น token, tokenFile หรือ
CLICKCLACK_BOT_TOKEN สำหรับบัญชีเริ่มต้น workspace รองรับรหัสพื้นที่ทำงาน
(wsp_...) สลัก หรือชื่อ โดย Gateway จะแปลงเป็นรหัสเมื่อเริ่มทำงาน
คีย์การกำหนดค่าบัญชี
| คีย์ | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|
baseUrl |
ไม่มี (จำเป็น) | URL สาธารณะของ ClickClack ที่ใช้สำหรับลิงก์ซึ่งเปิดในเบราว์เซอร์ |
apiBaseUrl |
baseUrl |
เอนด์พอยต์เซิร์ฟเวอร์ถึงเซิร์ฟเวอร์ที่ไม่บังคับ สำหรับ REST และทราฟฟิก WebSocket แบบเรียลไทม์ |
token |
ไม่มี | โทเค็นบอตในรูปแบบสตริงธรรมดาหรือการอ้างอิงข้อมูลลับ (source: "env" | "file" | "exec") |
tokenFile |
ไม่มี | พาธไปยังไฟล์โทเค็นบอต มีลำดับความสำคัญเหนือ token |
workspace |
ไม่มี (จำเป็น) | รหัสพื้นที่ทำงาน สลัก หรือชื่อ |
replyMode |
"agent" |
"agent" เรียกใช้ไปป์ไลน์เอเจนต์แบบเต็ม ส่วน "model" ส่งการเติมข้อความโมเดลโดยตรงแบบสั้น |
defaultTo |
"channel:general" |
เป้าหมายที่ใช้เมื่อพาธขาออกไม่ได้ระบุเป้าหมาย |
allowFrom |
["*"] |
รายการอนุญาตรหัสผู้ใช้สำหรับ DM ขาเข้าและข้อความในช่อง |
botUserId |
ตรวจหาอัตโนมัติ | แปลงจากข้อมูลประจำตัวของโทเค็นบอตเมื่อเริ่มทำงาน |
agentId |
ค่าเริ่มต้นของเส้นทาง | ตรึงข้อความขาเข้าของบัญชีนี้ไว้กับเอเจนต์หนึ่งราย |
toolsAllow |
ไม่มี | รายการอนุญาตเครื่องมือสำหรับการตอบกลับของเอเจนต์จากบัญชีนี้ |
model, systemPrompt |
ไม่มี | ใช้โดยการเติมข้อความ replyMode: "model" |
commandMenu |
true |
เผยแพร่คำสั่งเนทีฟไปยังการเติมข้อความอัตโนมัติในเครื่องมือเขียนข้อความของ ClickClack |
reconnectMs |
1500 |
ระยะหน่วงก่อนเชื่อมต่อเรียลไทม์ใหม่ (100 ถึง 60000) |
discussions |
ปิดใช้งาน | การตั้งค่าช่องที่จัดการแยกตามเซสชัน ดูการสนทนาของเซสชัน |
คงชื่อโฮสต์สาธารณะที่มีการควบคุมด้วยการยืนยันตัวตนไว้
ใช้ apiBaseUrl เมื่อ ClickClack และ Gateway ของ OpenClaw ทำงานบนโฮสต์เดียวกัน
แต่ชื่อโฮสต์ ClickClack สาธารณะได้รับการป้องกันด้วย Gateway การยืนยันตัวตน
เช่น Cloudflare Access:
{ channels: { clickclack: { baseUrl: "https://clack.openclaw.ai", apiBaseUrl: "http://127.0.0.1:8484", token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", }, },}ชื่อโฮสต์สาธารณะยังคงควบคุมด้วยการยืนยันตัวตนอย่างสมบูรณ์สำหรับผู้ใช้เบราว์เซอร์ได้ OpenClaw
ใช้เอนด์พอยต์ลูปแบ็กสำหรับคำขอ REST การตรวจสอบการตั้งค่า และ
WebSocket แบบเรียลไทม์ ขณะที่ลิงก์ embedUrl และ openUrl ของการสนทนายังคง
ใช้ baseUrl สาธารณะ หากละเว้น apiBaseUrl ทราฟฟิกทั้งหมดจะใช้
baseUrl ซึ่งคงลักษณะการทำงานเดิมไว้
หาก plugins.allow เป็นรายการจำกัดที่ไม่ว่างเปล่า การเลือก
ClickClack อย่างชัดเจนในการตั้งค่าช่องหรือการเรียกใช้ openclaw plugins enable clickclack
จะเพิ่ม clickclack ต่อท้ายรายการนั้น การติดตั้งระหว่างการเริ่มต้นใช้งานใช้ลักษณะ
การเลือกอย่างชัดเจนแบบเดียวกัน พาธเหล่านี้จะไม่แทนที่ plugins.deny หรือการตั้งค่า
plugins.enabled: false ส่วนกลาง การเรียกใช้
openclaw plugins install @openclaw/clickclack โดยตรงจะเป็นไปตามนโยบาย
การติดตั้ง Plugin ตามปกติ และยังบันทึก ClickClack ไว้ในรายการอนุญาตที่มีอยู่ด้วย
บอตหลายตัว
แต่ละบัญชีจะเปิดการเชื่อมต่อเรียลไทม์กับ ClickClack ของตนเอง และใช้โทเค็นบอตของตนเอง
{ channels: { clickclack: { enabled: true, baseUrl: "https://clickclack.example.com", defaultAccount: "service", accounts: { service: { token: { source: "env", provider: "default", id: "CLICKCLACK_SERVICE_BOT_TOKEN" }, workspace: "default", defaultTo: "channel:general", agentId: "service-bot", }, support: { token: { source: "env", provider: "default", id: "CLICKCLACK_SUPPORT_BOT_TOKEN" }, workspace: "default", defaultTo: "dm:usr_...", agentId: "support-bot", }, }, }, },}การสนทนาของเซสชัน
เปิดใช้งานการสนทนาในบัญชี ClickClack หนึ่งบัญชี เพื่อให้แต่ละเซสชัน OpenClaw มี
ช่อง ClickClack เฉพาะ โทเค็นของบัญชีต้องมี
channels:write (ชุด bot:admin มีขอบเขตสิทธิ์นี้อยู่) ส่วนโทเค็นตั้งค่า bot:write
แบบปกติไม่สามารถสร้างหรือซิงโครไนซ์ช่องได้
{ channels: { clickclack: { enabled: true, baseUrl: "https://clickclack.example.com", token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", discussions: { enabled: true, workspace: "default", controlUrlBase: "https://team.openclaw.ai", section: "Sessions", }, }, },}discussions.workspace รองรับรหัสพื้นที่ทำงาน สลัก หรือชื่อที่แสดงแบบเดียวกับ
workspace ระดับบัญชี และใช้ค่านั้นเป็นค่าเริ่มต้น section ควบคุม
ส่วนแถบด้านข้างของ ClickClack และมีค่าเริ่มต้นเป็น Sessions เมื่อ
กำหนด controlUrlBase ช่องที่จัดการจะลิงก์กลับไปยังเส้นทางเซสชันจริงของ Control UI
ซึ่งคือ /chat?session=<encoded-session-key>
เปิดใช้งานการสนทนาในบัญชี ClickClack เพียงหนึ่งบัญชีเท่านั้น ผู้ให้บริการ Gateway ไม่มี ตัวเลือกบัญชี ดังนั้นระบบจะปฏิเสธบัญชีการสนทนาที่เปิดใช้งานไว้หลายบัญชี แทนที่จะเลือกบัญชีหนึ่งตามลำดับการกำหนดค่า
การเปิดการสนทนาจะสร้างช่อง ClickClack สาธารณะที่ทำเครื่องหมายว่าจัดการจากภายนอก Plugin จะซิงโครไนซ์ป้ายกำกับเซสชัน หมวดหมู่ และสถานะการเก็บถาวรให้ตรงกัน การคืนค่าเซสชันจะคืนค่าช่องของเซสชัน การล้างหมวดหมู่เซสชัน จะย้ายช่องกลับไปยังส่วนเริ่มต้นที่กำหนดค่าไว้ การลบเซสชัน OpenClaw จะเก็บช่อง ClickClack ไว้ในคลังแทนการลบ เพื่อให้ ประวัติยังคงพร้อมใช้งาน Plugin จะปรับการผูกข้อมูลให้สอดคล้องกันเมื่อมีการใช้ RPC ของการสนทนา และประมาณหนึ่งครั้งต่อนาทีตราบใดที่ยังมีการผูกข้อมูลอยู่
ข้อความขาเข้าในช่องที่จัดการจะใช้เซสชันย่อยที่กำหนดค่าได้แน่นอนภายใต้
รหัสเอเจนต์เดียวกับเซสชันหลักที่แนบอยู่ เอเจนต์ย่อยจะได้รับแจ้งว่า
ต้องสังเกตเซสชันหลักใด และสามารถใช้ sessions_history และ session_status
(changesSince มีประโยชน์สำหรับการตรวจสอบแบบเพิ่มทีละส่วน) เอเจนต์จะใช้ sessions_send เฉพาะ
เมื่อผู้คนในการสนทนาขอให้ส่งต่อหรือชี้นำเซสชันหลัก
การผูกข้อมูล การอ้างอิงความเป็นเจ้าของที่จัดการ และข้อมูลประจำตัวเพียร์ของเซสชันย่อยจะรวม
รหัสเซสชัน OpenClaw ที่เจาะจง พร้อมกับเซิร์ฟเวอร์ ClickClack และ
ช่องที่ตรึงไว้ การรีเซ็ตคีย์เซสชันที่ใช้ซ้ำได้หรือเปลี่ยนเป้าหมายบัญชีจะเพิกถอน
ช่องเดิมภายในเครื่อง เก็บช่องไว้ในคลังเมื่อข้อมูลรับรองเดิมยังใช้งานได้ และ
ไม่สามารถใช้ทรานสคริปต์ย่อยเดิมซ้ำได้ ข้อความที่มาถึงผ่าน
การผูกข้อมูลที่เก็บถาวร รีเซ็ต ปิดใช้งาน หรือเปลี่ยนเป้าหมายแล้วจะถูกละทิ้ง แทนที่จะย้อนกลับ
ไปใช้การกำหนดเส้นทางช่องปกติของบัญชี การผูกข้อมูลที่ปล่อยแล้วจะคงเครื่องหมาย
ช่องที่ถูกเพิกถอนแบบถาวรไว้ เพื่อให้เหตุการณ์เรียลไทม์ที่ล่าช้ายังคงปิดกั้นเมื่อเกิดข้อผิดพลาด ความเป็นเจ้าของ
ระยะไกลใช้คีย์จากเซิร์ฟเวอร์ ClickClack และรหัสช่อง ดังนั้นการเปลี่ยนชื่อบัญชีภายในเครื่อง
จึงไม่สามารถเปลี่ยนช่องที่จัดการให้เป็นช่องทั่วไปได้
คง tools.sessions.visibility ไว้ที่ค่าเริ่มต้น tree ซึ่งปลอดภัยกว่า Plugin
จะติดตั้งการอนุญาตที่จำกัดตามโฮสต์เฉพาะระหว่างแต่ละเซสชันย่อยกับเซสชัน
หลักที่แนบอยู่เท่านั้น รวมถึงฮุกนโยบายเครื่องมือที่บล็อกการค้นหาเซสชันและ
เป้าหมายข้ามเซสชัน โดยอนุญาต sessions_history, session_status และ
sessions_send เฉพาะสำหรับเซสชันหลักที่แนบอยู่ และป้องกันไม่ให้การเรียกสถานะ
เปลี่ยนโมเดลของเซสชันนั้น เครื่องมือเหล่านั้นยังคงต้องอยู่ในรายการอนุญาตเครื่องมือ
ที่มีผลของเอเจนต์ พรอมต์ระบบเป็นเพียงคำแนะนำ ส่วนการอนุญาตของโฮสต์
และฮุกคือขอบเขตการให้สิทธิ์
เซิร์ฟเวอร์ ClickClack ต้องรองรับฟิลด์ช่องที่มีการจัดการ (external_managed,
external_ref, external_url และ sidebar_section) ในการสร้างและ
อัปเดตช่อง และส่งคืนฟิลด์เหล่านี้ในการตอบกลับของช่อง OpenClaw ตรวจสอบสัญญานั้น
ก่อนบันทึกการผูก หากการตอบกลับจากการสร้างสูญหาย การเปิดครั้งถัดไปจะรับช่วง
ช่องตาม external_ref ที่เซิร์ฟเวอร์บังคับใช้แทนการสร้างช่องใหม่
จนกว่าจะปรับสถานะผลลัพธ์นั้นให้ตรงกัน การจองที่รอดำเนินการจะแยกกัก
เหตุการณ์ที่ไม่ได้ผูกไว้ในพื้นที่ทำงานปลายทาง ตัวปรับสถานะแบบหยาบ
จะรับช่วงช่องเมื่อเซสชันเดิมยังทำงานอยู่ หรือเก็บช่องเข้าคลังหลังจาก
รีเซ็ต และจะล้างการจองเมื่อไม่มีการสร้างช่องระยะไกล
การอ้างอิงนั้นประกอบด้วยเนมสเปซถาวรต่อการติดตั้ง OpenClaw พร้อมกับ
แฮชของคีย์เซสชัน รหัสเซสชันจริง ปลายทาง ClickClack และรุ่นการผูก
แบบถาวร Gateway ที่แยกจากกันไม่สามารถรับช่วงช่องของกันและกันได้
เซสชันที่รีเซ็ตไม่สามารถสืบทอดประวัติช่องเก่า และการเดินทางไปกลับของบัญชีหรือพื้นที่ทำงาน
ไม่สามารถรับช่วงช่องเดิมอีกครั้ง การผูกยังถูกตรึงไว้กับ URL ของเซิร์ฟเวอร์
ClickClack ที่กำหนดค่าไว้ และจะถูกทำให้ใช้ไม่ได้หากบัญชีถูกเปลี่ยนเป้าหมาย
การเปลี่ยนหรือลบ controlUrlBase จะอัปเดตหรือล้างลิงก์ช่องที่มีการจัดการ
ในการปรับสถานะรอบถัดไป การเปลี่ยน
discussions.workspace จะเก็บการผูกเก่าเข้าคลังและปล่อยการผูกนั้นก่อนจึงจะสามารถเปิดช่อง
ในพื้นที่ทำงานใหม่ได้ เมื่อข้อมูลประจำตัวของพื้นที่ทำงานเก่ายังคงได้รับการกำหนดค่า
หากโทเค็นถูกแทนที่ด้วยข้อมูลประจำตัวที่จำกัดขอบเขตเฉพาะพื้นที่ทำงานและ
ไม่สามารถเข้าถึงพื้นที่ทำงานเก่าได้ OpenClaw จะบันทึกช่องเก่าว่าถูกเพิกถอนและ
ปล่อยการผูกโดยไม่พยายามใช้โทเค็นทดแทน ให้เก็บช่องที่ตกค้างนั้น
เข้าคลังจาก ClickClack
เซสชันหลักที่แนบอยู่ยังได้รับเครื่องมือ discussion แบบดึงข้อมูลอย่างเดียว เครื่องมือนี้อ่าน
ข้อความล่าสุดและการตอบกลับในเธรดช่วงล่าสุดเป็นระเบียนที่เอสเคปและระบุผู้เขียน
หนึ่งระเบียนต่อข้อความ โดยไม่มีผลข้างเคียงด้านการเขียนหรือวงจรชีวิต การค้นหารากของช่องและเธรด
มีงบประมาณคำขอคงที่ ผลลัพธ์จะแจ้งเตือนอย่างชัดเจนเมื่อ
ขอบเขตความปลอดภัยนั้นอาจทำให้เธรดเก่าที่ยังทำงานอยู่ถูกละเว้น
โหมดการตอบกลับ
replyMode: "agent"(ค่าเริ่มต้น) ส่งข้อความขาเข้าผ่านไปป์ไลน์เอเจนต์ตามปกติ รวมถึงการบันทึกเซสชันและนโยบายเครื่องมือreplyMode: "model"ข้ามไปป์ไลน์เอเจนต์และใช้llm.completeของรันไทม์ Plugin สำหรับการตอบกลับโดยตรงจากบอต โดยอาจปรับรูปแบบด้วยmodelและsystemPromptผู้ให้บริการและโมเดลที่เลือกเป็นผู้กำหนดงบประมาณการประมวลผลคำตอบ
โหมดโมเดลเรียกใช้การประมวลผลคำตอบกับรหัสเอเจนต์ของบอตที่แก้ไขค่าแล้ว ซึ่งจำเป็นต้องเปิด
บิตความเชื่อถือ plugins.entries.clickclack.llm.allowAgentIdOverride: true
อย่างชัดเจน:
{ plugins: { entries: { clickclack: { llm: { allowAgentIdOverride: true, }, }, }, },}ปิดบิตความเชื่อถือนี้ไว้หากใช้เฉพาะโหมดตอบกลับ agent ค่าเริ่มต้น
โหมดนั้นไม่จำเป็นต้องใช้บิตนี้
เมนูคำสั่ง
เมื่อ Gateway เริ่มทำงาน แต่ละบัญชีที่กำหนดค่าไว้จะเผยแพร่คำสั่งเนทีฟของ OpenClaw ไปยัง ClickClack คำสั่งเหล่านี้จะปรากฏในการเติมข้อความอัตโนมัติของตัวเขียน โดยมี แฮนเดิลของบอตเป็นป้ายกำกับ ชุดที่เผยแพร่จะถูกแทนที่ทั้งหมดทุกครั้งที่เริ่มทำงาน รวมถึงการล้างเมนูเก่าเมื่อแค็ตตาล็อกคำสั่งเนทีฟว่างเปล่า
การซิงค์เมนูคำสั่งเปิดใช้งานโดยค่าเริ่มต้น ตั้งค่า commandMenu: false ในบัญชี
เพื่อเลือกไม่ใช้:
{ channels: { clickclack: { enabled: true, token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", commandMenu: false, }, },}โทเค็นต้องมี commands:write บันเดิล bot:write และ
bot:admin ปัจจุบันของ ClickClack มีขอบเขตนี้รวมอยู่ และยังสามารถมอบ
แยกต่างหากได้ โทเค็นที่สร้างก่อนเริ่มใช้เมนูคำสั่งอาจต้องเพิ่ม
ขอบเขตนี้หรือใช้โทเค็นทดแทน
การซิงค์ดำเนินการแบบพยายามให้ดีที่สุดและทำหนึ่งครั้งต่อการเริ่ม Gateway แต่ละครั้ง ขอบเขตที่ขาดหายหรือความล้มเหลวของเครือข่าย จะบันทึกคำเตือน ส่วนเซิร์ฟเวอร์ ClickClack รุ่นเก่าที่ไม่มีเอ็นด์พอยต์จะบันทึกที่ ระดับดีบัก ความล้มเหลวเหล่านี้ไม่ขัดขวางการเริ่มระบบแบบเรียลไทม์ เมนูยังคง ใช้งานได้ขณะที่เอเจนต์ออฟไลน์ และจะถูกลบเมื่อบอตออกจาก พื้นที่ทำงาน
รุ่นนี้เผยแพร่เฉพาะข้อกำหนดคำสั่งเนทีฟเท่านั้น นามแฝงและ แค็ตตาล็อกคำสั่งจาก Skills, Plugin หรือคำสั่งกำหนดเองจะไม่ถูกเพิ่มในเมนู หาก ชื่อหนึ่งได้รับการลงทะเบียนเป็นคำสั่ง HTTP แบบสแลชด้วย ClickClack จะส่งต่อ การลงทะเบียนนั้นก่อน ส่วนคำสั่งเมนูอื่นจะดำเนินการต่อผ่านการส่งข้อความ ตามปกติ
ใช้โหมด agent สำหรับหลักฐานการเชื่อมโยงข้ามบริการ สำหรับรหัสข้อความ
ClickClack ที่เชื่อถือได้ในรูปแบบมาตรฐาน msg_<ulid> ช่องจะสร้าง
รหัสการทำงาน OpenClaw แบบกำหนดแน่นอน clickclack:<message-id> จากรหัสดังกล่าว จากนั้นการเรียกโมเดลแต่ละครั้ง
จะมองเห็นได้ในการวินิจฉัยเป็น clickclack:<message-id>:model:<n> และเมื่อ
เทิร์นนั้นใช้ ClawRouter รหัสการเรียกโมเดลเดียวกันจะถูกส่งเป็น X-Request-ID
โหมด model ข้ามการวินิจฉัยการทำงาน/เซสชันของเอเจนต์ตามปกติ จึง
ไม่เหมาะสำหรับเส้นทางหลักฐานนี้
เมื่อเหตุการณ์แบบเรียลไทม์มี payload.correlation_id ที่ตรวจสอบแล้ว
ช่องจะส่งค่านี้เป็น X-Correlation-ID ในการดึงข้อความที่เชื่อถือได้และ
คำขอตอบกลับ ClickClack ที่เกิดขึ้น ค่าจะใช้ชุดอักขระปลอดภัย
128 อักขระของ ClickClack (A-Z, a-z, 0-9, ., _, : และ -) โดยจะละเว้นค่าที่ไม่ถูกต้อง
การเชื่อมโยงเหล่านี้มีเฉพาะตัวระบุเท่านั้น ไม่รวมเนื้อหาข้อความ
พรอมต์ ผลลัพธ์การประมวลผล ข้อมูลประจำตัว หรือเอาต์พุตเครื่องมือ
การส่งสื่อแบบถาวร
การตอบกลับของเอเจนต์ที่มีสื่อต้องใช้การส่งแบบถาวร OpenClaw กำหนด น็องซ์ของข้อความและการอัปโหลดที่คงที่สำหรับแต่ละส่วนก่อนการเขียนไปยัง ClickClack ครั้งแรก เพื่อให้ การลองใหม่ใช้การอัปโหลดและข้อความเดิมแทนการใช้โควตาพื้นที่จัดเก็บ หรือเผยแพร่รายการซ้ำ หากมีการอัปโหลดอยู่แล้วหลังการเริ่มระบบใหม่ OpenClaw จะไม่อ่านพาธในเครื่องหรือ URL สื่อระยะไกลต้นฉบับอีกครั้ง
สัญญาการกู้คืนนี้ต้องใช้เซิร์ฟเวอร์ ClickClack ที่รองรับ:
GET /api/uploads/by-nonceพร้อมX-ClickClack-Upload-Nonce: supportedสำหรับผลลัพธ์ทั้งที่พบและไม่พบGET /api/messages/by-nonceพร้อมX-ClickClack-Message-Nonce: supportedสำหรับผลลัพธ์ทั้งที่พบและไม่พบ- การสร้างข้อความและการเชื่อมโยงไฟล์แนบแบบทำซ้ำได้โดยไม่เกิดผลซ้ำ สำหรับ น็องซ์และการอัปโหลดเดียวกันที่จำกัดขอบเขตตามเจ้าของ
ข้อผิดพลาด 404 ทั่วไปของเซิร์ฟเวอร์รุ่นเก่าจะไม่ถือเป็นหลักฐานว่าไม่มีการส่ง OpenClaw จะปล่อยให้สถานะการส่งยังไม่ได้ข้อยุติแทนการเสี่ยงสร้างรายการซ้ำ ให้อัปเดต ClickClack ก่อนเปิดใช้งานการตอบกลับของเอเจนต์ที่สร้างสื่อ
แถวกิจกรรมของเอเจนต์
โดยค่าเริ่มต้น ช่อง ClickClack จะไม่แสดงสิ่งใดขณะที่เทิร์นของเอเจนต์กำลังทำงาน และจะแสดงเฉพาะคำตอบสุดท้าย ตั้งค่า agentActivity: true ในบัญชีเพื่อเผยแพร่แถวข้อความ agent_commentary และ agent_tool แบบถาวรขณะที่เทิร์นกำลังดำเนินการ:
{ channels: { clickclack: { enabled: true, token: { source: "env", provider: "default", id: "CLICKCLACK_BOT_TOKEN" }, workspace: "default", agentActivity: true, }, },}ข้อกำหนดและลักษณะการทำงาน:
- ปิดโดยค่าเริ่มต้น การตั้งค่ามาตรฐานและเซิร์ฟเวอร์ ClickClack รุ่นเก่าจะไม่ได้รับผลกระทบ
- ต้องมีขอบเขตโทเค็น
agent_activity:writeขอบเขตนี้แยกจากbot:writeและไม่ได้รับการสืบทอดจากขอบเขตดังกล่าว ให้สร้างโทเค็นบอตพร้อม--scopes bot:write,agent_activity:write(หรือมอบขอบเขตให้โทเค็นที่มีอยู่) ก่อนเปิดใช้งานตัวเลือก - ลดระดับการทำงานแบบพยายามให้ดีที่สุด หากโทเค็นไม่มี
agent_activity:writeหรือเซิร์ฟเวอร์ปฏิเสธการเขียนกิจกรรม ระบบจะบันทึกความล้มเหลวและยังคงส่งคำตอบสุดท้ายได้ตามปกติ โดยจะไม่มีแถวกิจกรรมปรากฏ - แถวจะถูกจัดกลุ่มต่อเทิร์น (
turn_id) และรวมเข้าด้วยกันเพื่อให้หนึ่งขั้นตอนเชิงตรรกะมีหนึ่งแถว ส่วนแถวเครื่องมือใช้รูปแบบความคืบหน้าเดียวกับ Discord/Slack/Telegram (ชื่อเครื่องมือพร้อมรายละเอียดคำสั่ง) - ข้อมูลเมตาการระบุแหล่งที่มา โพสต์ที่เอเจนต์เป็นผู้เขียน (แถวกิจกรรมและคำตอบสุดท้าย) มีฟิลด์
author_modelและauthor_thinkingที่แก้ไขค่าจากโมเดลจริงซึ่งใช้ในเทิร์น (รวมถึงหลังการใช้ทางเลือกสำรอง) เซิร์ฟเวอร์ที่ไม่ได้กำหนดคอลัมน์เหล่านี้จะเพิกเฉยต่อฟิลด์ JSON ที่ไม่รู้จัก ส่วนเซิร์ฟเวอร์ที่จัดเก็บฟิลด์เหล่านี้สามารถตอบได้ว่า "โมเดลใดกล่าวบรรทัดนี้ ที่ระดับการคิดใด" สำหรับแต่ละข้อความ
เป้าหมาย
channel:<name-or-id>ส่งไปยังช่องในพื้นที่ทำงาน เป้าหมายแบบไม่มีคำนำหน้าจะใช้channel:เป็นค่าเริ่มต้นdm:<user_id>สร้างหรือใช้การสนทนาโดยตรงกับผู้ใช้นั้นซ้ำthread:<message_id>ตอบกลับในเธรดที่มีข้อความนั้นเป็นราก
เป้าหมายขาออกที่ระบุอย่างชัดเจนอาจมีคำนำหน้าผู้ให้บริการ clickclack: หรือ cc: ด้วย
สื่อขาออกใช้ API อัปโหลดของ ClickClack จากนั้นแนบการอัปโหลดแบบถาวร เข้ากับข้อความในช่อง การตอบกลับในเธรด หรือ DM ที่สร้างขึ้น ไฟล์ในเครื่องและ URL สื่อระยะไกลที่รองรับจะเป็นไปตามนโยบายการเข้าถึงสื่อตามปกติของ OpenClaw โดยมีขีดจำกัด 64 MiB ต่อไฟล์ การส่งแบบถาวรที่เข้าคิวจะใช้น็องซ์แยกตามขอบเขตเจ้าของสำหรับ การอัปโหลดและแต่ละส่วนของข้อความ จากนั้นลองเชื่อมโยงไฟล์แนบอีกครั้งโดยใช้ออบเจ็กต์ เดิมเหล่านั้น ดูสัญญาเซิร์ฟเวอร์และลักษณะการกู้คืนได้ที่ การส่งสื่อแบบถาวร
ตัวอย่าง:
openclaw message send --channel clickclack --target channel:general --message "hello"openclaw message send --channel clickclack --target dm:usr_123 --message "hello"openclaw message send --channel clickclack --target thread:msg_123 --message "following up"สิทธิ์
ขอบเขตโทเค็น ClickClack บังคับใช้โดย API ของ ClickClack
bot:read: อ่านข้อมูลพื้นที่ทำงาน/ช่อง/ข้อความ/เธรด/DM/เรียลไทม์/โปรไฟล์bot:write:bot:readรวมถึงข้อความในช่อง การตอบกลับในเธรด DM การอัปโหลด และการเผยแพร่เมนูคำสั่งbot:admin:bot:writeรวมถึงการสร้างช่องcommands:write: เผยแพร่เมนูคำสั่งของบอต รวมอยู่ในบันเดิลbot:writeและbot:adminปัจจุบัน และสามารถมอบแยกต่างหากได้agent_activity:write: แถวกิจกรรมของเอเจนต์แบบถาวร (agent_commentary/agent_tool) ไม่ได้รับการสืบทอดจากbot:writeหรือbot:adminและจำเป็นเฉพาะเมื่อตั้งค่าagentActivity: true
OpenClaw ต้องใช้เพียง bot:write ปัจจุบันสำหรับการแชตกับเอเจนต์ตามปกติและการซิงค์เมนูคำสั่ง เพิ่ม agent_activity:write เมื่อเปิดใช้งาน แถวกิจกรรมของเอเจนต์
การแก้ไขปัญหา
ClickClack is not configured for account "<id>": ตั้งค่าbaseUrl,token(เช่น ผ่านCLICKCLACK_BOT_TOKEN) และworkspaceสำหรับบัญชีนั้นClickClack workspace not found: <value>: ตั้งค่าworkspaceเป็นรหัส สลัก หรือชื่อพื้นที่ทำงานที่ ClickClack ส่งคืน- ไม่มีการตอบกลับขาเข้า: ยืนยันว่าโทเค็นมีสิทธิ์อ่านแบบเรียลไทม์ และโปรดทราบว่าบอตจะเพิกเฉยต่อข้อความของตนเองและข้อความจากบอตอื่น
- การส่งไปยังช่องล้มเหลว: ตรวจสอบว่าบอตเป็นสมาชิกของพื้นที่ทำงานและมี
bot:write - ไม่มีเมนูคำสั่ง: ยืนยันว่า
commandMenuไม่ใช่false, เซิร์ฟเวอร์ ClickClack รองรับPUT /api/bots/self/commandsและโทเค็นมีcommands:write