Developer and self-hosted

ClickClack

ClickClack เชื่อมต่อ OpenClaw กับพื้นที่ทำงาน ClickClack ที่โฮสต์เองผ่านโทเค็นบอต ClickClack ที่รองรับโดยตรง

ใช้วิธีนี้เมื่อต้องการให้เอเจนต์ OpenClaw ปรากฏเป็นผู้ใช้บอต ClickClack โดย ClickClack รองรับทั้งบอตบริการอิสระและบอตที่ผู้ใช้เป็นเจ้าของ บอตที่ผู้ใช้เป็นเจ้าของจะเก็บ owner_user_id ไว้ และได้รับเฉพาะขอบเขตสิทธิ์ของโทเค็นที่คุณอนุญาตเท่านั้น

การตั้งค่าด่วน

ใน ClickClack ให้เปิด Workspace settings → Integrations → OpenClaw สร้าง บอตโดยใช้ Setup code (recommended) แล้วคัดลอกคำสั่งที่สร้างขึ้น:

bash
openclaw channels add clickclack --code 'https://clickclack.example.com/#XXXX-XXXX-XXXX'

สำหรับต้นทางของฟรอนต์เอนด์และ API ที่แยกกัน หรือ API ที่เมานต์ไว้ภายใต้พาธ ClickClack จะสร้าง เอนด์พอยต์สำหรับรับสิทธิ์ที่แน่นอนแทน:

bash
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 จะเชื่อมต่อโดยอัตโนมัติและไม่จำเป็นต้องใช้ คำสั่งที่สอง มิฉะนั้น ให้เริ่มต้นด้วย:

bash
openclaw gateway

คุณยังสามารถส่งรหัสแยกจาก URL ของเซิร์ฟเวอร์ได้:

bash
openclaw channels add clickclack --code XXXX-XXXX-XXXX --base-url https://clickclack.example.com

สำหรับการตั้งค่าแบบมีคำแนะนำ ให้เรียกใช้:

bash
openclaw onboard

เลือก ClickClack จากนั้นป้อน URL ของเซิร์ฟเวอร์ โทเค็นบอต และพื้นที่ทำงานเมื่อ ระบบแจ้ง การตั้งค่าแบบมีคำแนะนำจะตรวจสอบเซิร์ฟเวอร์ โทเค็น และพื้นที่ทำงานหลังจากบันทึก หาก การตรวจสอบล้มเหลว ระบบจะไม่ละทิ้งการกำหนดค่า

ทางเลือก: โทเค็นแบบกำหนดเอง

เลือก Manual token ใน ClickClack เมื่อกำหนดค่าไคลเอนต์ที่ไม่ใช่ OpenClaw หรือ เมื่อคุณต้องจัดการโทเค็นด้วยตนเองอย่างชัดเจน:

bash
openclaw channels add clickclack --base-url https://clickclack.example.com --token ccb_... --workspace default

workspace รองรับรหัสพื้นที่ทำงาน (wsp_...) สลัก หรือชื่อที่แสดง ไม่สามารถใช้ --code ร่วมกับ --token, --token-file หรือ --use-env ได้

ทางเลือก: โทเค็นจากตัวแปรสภาพแวดล้อม

บัญชีเริ่มต้นสามารถอ่าน CLICKCLACK_BOT_TOKEN แทนการจัดเก็บโทเค็น ในการกำหนดค่า:

bash
export CLICKCLACK_BOT_TOKEN="ccb_..."openclaw channels add clickclack --base-url https://clickclack.example.com --workspace default --use-envopenclaw gateway

บัญชีที่มีชื่อต้องใช้โทเค็นที่กำหนดค่าไว้หรือไฟล์โทเค็น ตัวแปรสภาพแวดล้อม ที่ใช้ร่วมกันถูกจำกัดไว้เฉพาะบัญชีเริ่มต้นโดยเจตนา

ข้อมูลอ้างอิง JSON5

รูปแบบการกำหนดค่าที่เทียบเท่าคือ:

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:

json5
{  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 ของตนเอง และใช้โทเค็นบอตของตนเอง

json5
{  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 แบบปกติไม่สามารถสร้างหรือซิงโครไนซ์ช่องได้

json5
{  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 อย่างชัดเจน:

json5
{  plugins: {    entries: {      clickclack: {        llm: {          allowAgentIdOverride: true,        },      },    },  },}

ปิดบิตความเชื่อถือนี้ไว้หากใช้เฉพาะโหมดตอบกลับ agent ค่าเริ่มต้น โหมดนั้นไม่จำเป็นต้องใช้บิตนี้

เมนูคำสั่ง

เมื่อ Gateway เริ่มทำงาน แต่ละบัญชีที่กำหนดค่าไว้จะเผยแพร่คำสั่งเนทีฟของ OpenClaw ไปยัง ClickClack คำสั่งเหล่านี้จะปรากฏในการเติมข้อความอัตโนมัติของตัวเขียน โดยมี แฮนเดิลของบอตเป็นป้ายกำกับ ชุดที่เผยแพร่จะถูกแทนที่ทั้งหมดทุกครั้งที่เริ่มทำงาน รวมถึงการล้างเมนูเก่าเมื่อแค็ตตาล็อกคำสั่งเนทีฟว่างเปล่า

การซิงค์เมนูคำสั่งเปิดใช้งานโดยค่าเริ่มต้น ตั้งค่า commandMenu: false ในบัญชี เพื่อเลือกไม่ใช้:

json5
{  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 แบบถาวรขณะที่เทิร์นกำลังดำเนินการ:

json5
{  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 ต่อไฟล์ การส่งแบบถาวรที่เข้าคิวจะใช้น็องซ์แยกตามขอบเขตเจ้าของสำหรับ การอัปโหลดและแต่ละส่วนของข้อความ จากนั้นลองเชื่อมโยงไฟล์แนบอีกครั้งโดยใช้ออบเจ็กต์ เดิมเหล่านั้น ดูสัญญาเซิร์ฟเวอร์และลักษณะการกู้คืนได้ที่ การส่งสื่อแบบถาวร

ตัวอย่าง:

bash
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
Was this useful?
On this page

On this page