Get started
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'รหัสตั้งค่าใช้ได้ครั้งเดียวและหมดอายุหลังจาก 10 นาที OpenClaw จะนำรหัสไปใช้ รับโทเค็นบอตที่สร้างใหม่พร้อมการตั้งค่าพื้นที่ทำงาน บันทึกบัญชี ตรวจสอบการเชื่อมต่อ และรายงานว่า Gateway ที่กำลังทำงานตรวจพบบัญชีดังกล่าวหรือไม่ ตัวรหัสตั้งค่าจะไม่ถูกจัดเก็บในคอนฟิก OpenClaw
การนำรหัสตั้งค่าไปใช้จะใช้ HTTPS สำหรับเซิร์ฟเวอร์สาธารณะ นอกจากนี้ยังรองรับ HTTP
แบบไม่เข้ารหัสสำหรับการติดตั้งภายในบนลูปแบ็กหรือเครือข่ายส่วนตัว รวมถึง localhost
ที่อยู่ IP ส่วนตัว และชื่อโฮสต์ภายในที่แปลงค่าได้เฉพาะเป็น
ที่อยู่ส่วนตัว
หาก 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 ยอมรับ ID พื้นที่ทำงาน (wsp_...) slug หรือชื่อที่แสดง
--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 ยอมรับ ID พื้นที่ทำงาน
(wsp_...) slug หรือชื่อ โดย Gateway จะแปลงเป็น ID เมื่อเริ่มต้น
คีย์คอนฟิกบัญชี
| คีย์ | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|
baseUrl |
ไม่มี (จำเป็น) | URL ของเซิร์ฟเวอร์ ClickClack |
token |
ไม่มี | โทเค็นบอตในรูปแบบสตริงธรรมดาหรือการอ้างอิงข้อมูลลับ (source: "env" | "file" | "exec") |
tokenFile |
ไม่มี | พาธไปยังไฟล์โทเค็นบอต มีลำดับความสำคัญเหนือ token |
workspace |
ไม่มี (จำเป็น) | ID พื้นที่ทำงาน slug หรือชื่อ |
replyMode |
"agent" |
"agent" เรียกใช้ไปป์ไลน์เอเจนต์แบบเต็ม ส่วน "model" ส่งการเติมข้อความจากโมเดลโดยตรงแบบสั้น |
defaultTo |
"channel:general" |
เป้าหมายที่ใช้เมื่อพาธขาออกไม่ได้ระบุเป้าหมาย |
allowFrom |
["*"] |
รายการอนุญาต ID ผู้ใช้สำหรับ DM และข้อความช่องขาเข้า |
botUserId |
ตรวจพบอัตโนมัติ | แปลงค่าจากข้อมูลประจำตัวของโทเค็นบอตเมื่อเริ่มต้น |
agentId |
ค่าเริ่มต้นของเส้นทาง | ตรึงข้อความขาเข้าของบัญชีนี้ไว้กับเอเจนต์หนึ่งราย |
toolsAllow |
ไม่มี | รายการอนุญาตเครื่องมือสำหรับการตอบกลับของเอเจนต์จากบัญชีนี้ |
model, systemPrompt |
ไม่มี | ใช้โดยการเติมข้อความ replyMode: "model" |
commandMenu |
true |
เผยแพร่คำสั่งแบบเนทีฟไปยังการเติมข้อความอัตโนมัติของเครื่องมือเขียนข้อความ ClickClack |
reconnectMs |
1500 |
ระยะหน่วงการเชื่อมต่อเรียลไทม์ใหม่ (100 ถึง 60000) |
หาก 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", }, }, }, },}โหมดการตอบกลับ
replyMode: "agent"(ค่าเริ่มต้น) จะส่งข้อความขาเข้าผ่านไปป์ไลน์เอเจนต์ตามปกติ รวมถึงการบันทึกเซสชันและนโยบายเครื่องมือreplyMode: "model"จะข้ามไปป์ไลน์เอเจนต์และใช้llm.completeของรันไทม์ Plugin สำหรับการตอบกลับจากบอตโดยตรง ซึ่งปรับรูปแบบเพิ่มเติมได้ด้วยmodelและsystemPromptผู้ให้บริการและโมเดลที่เลือกเป็นผู้กำหนดงบประมาณการเติมข้อความ
โหมดโมเดลจะเรียกใช้การเติมข้อความกับ ID เอเจนต์บอตที่แปลงค่าแล้ว ซึ่งต้องใช้
บิตความเชื่อถือ 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 รุ่นเก่าที่ไม่มีปลายทางนี้จะบันทึกที่ ระดับดีบัก ความล้มเหลวเหล่านี้จะไม่ขัดขวางการเริ่มต้นแบบเรียลไทม์ เมนูยังคง ใช้งานได้ขณะที่เอเจนต์ออฟไลน์ และจะถูกนำออกเมื่อบอตออกจาก พื้นที่ทำงาน
รุ่นนี้เผยแพร่เฉพาะข้อกำหนดคำสั่งแบบเนทีฟเท่านั้น จะไม่เพิ่มนามแฝงและ แค็ตตาล็อกคำสั่งของ skill, Plugin หรือคำสั่งที่กำหนดเองลงในเมนู หาก ชื่อหนึ่งได้รับการลงทะเบียนเป็นคำสั่งเครื่องหมายทับ HTTP ด้วย ClickClack จะส่งการลงทะเบียนนั้น ก่อน ส่วนคำสั่งเมนูอื่นจะดำเนินต่อผ่านการส่งข้อความตามปกติ
ใช้โหมด agent สำหรับหลักฐานการเชื่อมโยงข้ามบริการ สำหรับ
ID ข้อความ ClickClack ที่เชื่อถือได้ในรูปแบบมาตรฐาน msg_<ulid> ช่องจะสร้าง
ID การทำงาน OpenClaw แบบกำหนดแน่นอน clickclack:<message-id> จากนั้นการเรียกโมเดลแต่ละครั้ง
จะมองเห็นได้ในการวินิจฉัยเป็น clickclack:<message-id>:model:<n> และเมื่อ
เทิร์นนั้นใช้ ClawRouter ระบบจะส่ง ID การเรียกโมเดลเดียวกันเป็น X-Request-ID
โหมด model จะข้ามการวินิจฉัยการทำงาน/เซสชันของเอเจนต์ตามปกติ จึง
ไม่เหมาะกับพาธหลักฐานนี้
เมื่อเหตุการณ์เรียลไทม์มี payload.correlation_id ที่ผ่านการตรวจสอบ
ช่องจะส่งต่อค่าเป็น X-Correlation-ID ในการดึงข้อความที่เชื่อถือได้และ
คำขอตอบกลับ ClickClack ที่เกิดขึ้น ค่าจะใช้ชุดอักขระปลอดภัย
128 อักขระของ ClickClack (A-Z, a-z, 0-9, ., _, : และ -) ส่วนค่าที่ไม่ถูกต้อง
จะถูกละเว้น การเชื่อมโยงเหล่านี้มีเฉพาะตัวระบุเท่านั้น ไม่รวมเนื้อหาข้อความ
พรอมต์ การเติมข้อความ ข้อมูลประจำตัว หรือผลลัพธ์เครื่องมือโดยเด็ดขาด
การส่งสื่อแบบคงทน
การตอบกลับของเอเจนต์ที่มีสื่อจะใช้การส่งแบบคงทนซึ่งจำเป็น OpenClaw จะกำหนด nonce ของข้อความและการอัปโหลดที่เสถียรสำหรับแต่ละส่วนก่อนการเขียนไปยัง ClickClack ครั้งแรก เพื่อให้ การลองใหม่ใช้การอัปโหลดและข้อความเดิมแทนการใช้โควตาพื้นที่จัดเก็บ หรือเผยแพร่รายการซ้ำ หากมีการอัปโหลดอยู่แล้วหลังการเริ่มระบบใหม่ OpenClaw จะไม่อ่านพาธภายในเครื่องเดิมหรือ URL สื่อระยะไกลซ้ำ
สัญญาการกู้คืนนี้ต้องใช้เซิร์ฟเวอร์ ClickClack ที่รองรับ:
GET /api/uploads/by-nonceพร้อมX-ClickClack-Upload-Nonce: supportedในผลลัพธ์ทั้งกรณีที่พบและไม่พบGET /api/messages/by-nonceพร้อมX-ClickClack-Message-Nonce: supportedในผลลัพธ์ทั้งกรณีที่พบและไม่พบ- การสร้างข้อความและการเชื่อมโยงไฟล์แนบแบบทำซ้ำได้อย่างปลอดภัยสำหรับ nonce และการอัปโหลดเดียวกันที่จำกัดขอบเขตตามเจ้าของ
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 ต่อไฟล์ การส่งแบบเข้าคิวที่คงทนใช้ nonce แยกกันตามเจ้าของสำหรับ การอัปโหลดและแต่ละส่วนของข้อความ จากนั้นลองเชื่อมโยงไฟล์แนบอีกครั้งโดยใช้ ออบเจ็กต์เดิมเหล่านั้น โปรดดูสัญญาของเซิร์ฟเวอร์และพฤติกรรมการกู้คืนที่ การส่งสื่อแบบคงทน
ตัวอย่าง:
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เป็น ID, slug หรือชื่อของพื้นที่ทำงานที่ ClickClack ส่งคืน- ไม่มีคำตอบขาเข้า: ยืนยันว่าโทเค็นมีสิทธิ์อ่านแบบเรียลไทม์ และโปรดทราบว่าบอตจะเพิกเฉยต่อข้อความของตนเองและข้อความจากบอตอื่น
- ส่งข้อความไปยังช่องไม่สำเร็จ: ตรวจสอบว่าบอตเป็นสมาชิกของพื้นที่ทำงานและมี
bot:write - ไม่มีเมนูคำสั่ง: ยืนยันว่า
commandMenuไม่ใช่false, เซิร์ฟเวอร์ ClickClack รองรับPUT /api/bots/self/commandsและโทเค็นมีcommands:write