Get started

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'

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

การนำรหัสตั้งค่าไปใช้จะใช้ HTTPS สำหรับเซิร์ฟเวอร์สาธารณะ นอกจากนี้ยังรองรับ HTTP แบบไม่เข้ารหัสสำหรับการติดตั้งภายในบนลูปแบ็กหรือเครือข่ายส่วนตัว รวมถึง localhost ที่อยู่ IP ส่วนตัว และชื่อโฮสต์ภายในที่แปลงค่าได้เฉพาะเป็น ที่อยู่ส่วนตัว

หาก 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 ยอมรับ ID พื้นที่ทำงาน (wsp_...) slug หรือชื่อที่แสดง --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 ยอมรับ 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 ของตนเองและใช้โทเค็นบอตของตนเอง

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",        },      },    },  },}

โหมดการตอบกลับ

  • replyMode: "agent" (ค่าเริ่มต้น) จะส่งข้อความขาเข้าผ่านไปป์ไลน์เอเจนต์ตามปกติ รวมถึงการบันทึกเซสชันและนโยบายเครื่องมือ
  • replyMode: "model" จะข้ามไปป์ไลน์เอเจนต์และใช้ llm.complete ของรันไทม์ Plugin สำหรับการตอบกลับจากบอตโดยตรง ซึ่งปรับรูปแบบเพิ่มเติมได้ด้วย model และ systemPrompt ผู้ให้บริการและโมเดลที่เลือกเป็นผู้กำหนดงบประมาณการเติมข้อความ

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

รุ่นนี้เผยแพร่เฉพาะข้อกำหนดคำสั่งแบบเนทีฟเท่านั้น จะไม่เพิ่มนามแฝงและ แค็ตตาล็อกคำสั่งของ 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 แบบคงทนขณะที่เทิร์นกำลังดำเนินอยู่:

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

ตัวอย่าง:

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 เป็น ID, slug หรือชื่อของพื้นที่ทำงานที่ ClickClack ส่งคืน
  • ไม่มีคำตอบขาเข้า: ยืนยันว่าโทเค็นมีสิทธิ์อ่านแบบเรียลไทม์ และโปรดทราบว่าบอตจะเพิกเฉยต่อข้อความของตนเองและข้อความจากบอตอื่น
  • ส่งข้อความไปยังช่องไม่สำเร็จ: ตรวจสอบว่าบอตเป็นสมาชิกของพื้นที่ทำงานและมี bot:write
  • ไม่มีเมนูคำสั่ง: ยืนยันว่า commandMenu ไม่ใช่ false, เซิร์ฟเวอร์ ClickClack รองรับ PUT /api/bots/self/commands และโทเค็นมี commands:write
Was this useful?
On this page

On this page