Developer and self-hosted

Tlon

Tlon เป็นเมสเซนเจอร์แบบกระจายศูนย์ที่สร้างบน Urbit โดย OpenClaw จะเชื่อมต่อกับ ship ของ Urbit และ ตอบกลับ DM และข้อความแชตกลุ่ม โดยค่าเริ่มต้น การตอบกลับในกลุ่มต้องมีการกล่าวถึงด้วย @ พร้อมมี กฎการให้สิทธิ์และขั้นตอนการอนุมัติโดยเจ้าของซ้อนทับอยู่ด้านบน

สถานะ: Plugin ที่รวมมาให้ รองรับ DM การกล่าวถึงในกลุ่ม เธรด Rich Text การอัปโหลด/ดาวน์โหลดรูปภาพ และ ระบบการอนุมัติโดยเจ้าของ แต่ไม่รองรับรีแอ็กชันและโพล

Plugin ที่รวมมาให้

Tlon รวมอยู่ใน OpenClaw รุ่นปัจจุบันแล้ว บิลด์แบบแพ็กเกจไม่จำเป็นต้องติดตั้งแยกต่างหาก

สำหรับบิลด์รุ่นเก่าหรือการติดตั้งแบบกำหนดเองที่ไม่รวม Tlon ให้ติดตั้งจาก npm:

bash
openclaw plugins install @openclaw/tlon

ใช้ชื่อแพ็กเกจเปล่าเพื่อติดตามแท็กรุ่นปัจจุบัน ปักหมุดเวอร์ชัน (@openclaw/tlon@x.y.z) เฉพาะเมื่อต้องการให้การติดตั้งทำซ้ำได้เท่านั้น

จาก checkout ในเครื่อง:

bash
openclaw plugins install ./path/to/local/tlon-plugin

รายละเอียด: Plugin

การตั้งค่า

bash
openclaw channels add --channel tlon --ship ~sampel-palnet --url https://your-ship-host --code lidlut-tabwed-pillex-ridrup

หรือแก้ไขการกำหนดค่าโดยตรง:

json5
{  channels: {    tlon: {      enabled: true,      ship: "~sampel-palnet",      url: "https://your-ship-host",      code: "lidlut-tabwed-pillex-ridrup",      ownerShip: "~your-main-ship", // แนะนำ: ship ของคุณ ซึ่งได้รับสิทธิ์เสมอ    },  },}

รีสตาร์ต Gateway หลังจากแก้ไขการกำหนดค่าโดยตรง จากนั้นส่ง DM ถึงบอตหรือกล่าวถึงบอตด้วย @ ใน ช่องกลุ่ม

ความคงทนของข้อมูลขาเข้า

OpenClaw จะจัดเก็บเหตุการณ์ DM และแชตกลุ่มของ Tlon ที่ยอมรับแล้วก่อนส่งต่อให้เอเจนต์ เทิร์นที่รอดำเนินการหรือลองใหม่ได้จะยังคงอยู่หลังจาก Gateway รีสตาร์ต และงานจะยังคงประมวลผลแบบเรียงลำดับต่อช่องกลุ่มหรือคู่สนทนาโดยตรง ID ข้อความ Urbit ที่เสถียรยังช่วยระงับเหตุการณ์ที่ถูกส่งซ้ำ ตราบใดที่ยังมีระเบียนคิวหรือระเบียนการเสร็จสิ้นที่เก็บรักษาไว้

การส่งมอบระหว่างขอบเขตคิวกับเอเจนต์เป็นแบบอย่างน้อยหนึ่งครั้ง: หากระบบขัดข้องระหว่างการส่งต่อ อาจมีการเล่นซ้ำหนึ่งเทิร์น ดังนั้นการดำเนินการของเอเจนต์ที่ก่อให้เกิดผลข้างเคียงภายนอกควรมีคุณสมบัติ idempotent เมื่อทำได้

Ship ส่วนตัว/LAN

โดยค่าเริ่มต้น OpenClaw จะบล็อกชื่อโฮสต์และช่วง IP ส่วนตัว/ภายในเพื่อป้องกัน SSRF หาก ship ของคุณทำงานบนเครือข่ายส่วนตัว (localhost, IP ของ LAN, ชื่อโฮสต์ภายใน) ให้เลือกอนุญาตอย่างชัดเจน:

json5
{  channels: {    tlon: {      url: "http://localhost:8080",      network: {        dangerouslyAllowPrivateNetwork: true,      },    },  },}

มีผลกับเป้าหมาย เช่น http://localhost:8080, http://192.168.x.x:8080 และ http://my-ship.local:8080 เปิดใช้งานตัวเลือกนี้เฉพาะกับ URL ของ ship ที่คุณเชื่อถือเท่านั้น เนื่องจากจะปิดใช้การป้องกัน SSRF สำหรับคำขอ HTTP ของบัญชีนั้น

ช่องกลุ่ม

ปักหมุดช่องด้วยตนเอง หรือเปิดใช้การค้นหาอัตโนมัติ:

json5
{  channels: {    tlon: {      groupChannels: ["chat/~host-ship/general", "chat/~host-ship/support"],      autoDiscoverChannels: true,    },  },}

เมื่อไม่ได้ตั้งค่าในการกำหนดค่า autoDiscoverChannels จะมีค่าเริ่มต้นเป็น false; วิซาร์ดการตั้งค่าจะกำหนดค่าเริ่มต้นของ พรอมต์เป็นใช่ และเขียน true อย่างชัดเจน เมื่อเปิดใช้ OpenClaw จะสืบค้นกลุ่มที่เข้าร่วมเมื่อเริ่มต้นระบบ เฝ้าดูช่องใหม่เมื่อมีการยอมรับคำเชิญเข้ากลุ่ม และตรวจสอบซ้ำทุก 2 นาที

การควบคุมการเข้าถึง

รายการอนุญาต DM (ว่าง = ไม่อนุญาต DM เว้นแต่ผู้ส่งคือ ownerShip):

json5
{  channels: {    tlon: {      dmAllowlist: ["~zod", "~nec"],    },  },}

การให้สิทธิ์กลุ่มมีค่าเริ่มต้นเป็น restricted ต่อช่อง ตั้งค่า defaultAuthorizedShips เป็น ค่าพื้นฐาน และกำหนดทับตาม nest ของแต่ละช่อง:

json5
{  channels: {    tlon: {      defaultAuthorizedShips: ["~zod"],      authorization: {        channelRules: {          "chat/~host-ship/general": {            mode: "restricted",            allowedShips: ["~zod", "~nec"],          },          "chat/~host-ship/announcements": {            mode: "open",          },        },      },    },  },}

เมื่อบอตตอบกลับภายในเธรดแล้ว บอตจะตอบข้อความภายหลังในเธรดนั้นต่อไป โดยไม่ต้องมีการกล่าวถึงอีกครั้ง

ตั้งค่า channels.tlon.implicitMentions.threadParticipation: false เพื่อกำหนดให้ต้องมีการกล่าวถึงอย่างชัดเจนครั้งใหม่ สำหรับข้อความติดตามเหล่านั้น การกำหนดทับระดับบัญชีใช้ channels.tlon.accounts.<id>.implicitMentions ขณะนี้ Tlon ไม่ได้สร้างข้อเท็จจริง replyToBot หรือ quotedBot ดังนั้นแฟล็กเหล่านั้นจึงไม่มีผลที่นี่

เจ้าของและระบบการอนุมัติ

json5
{  channels: {    tlon: {      ownerShip: "~your-main-ship",    },  },}

ship ของเจ้าของได้รับสิทธิ์ทุกที่: คำเชิญ DM จะได้รับการยอมรับโดยอัตโนมัติเสมอ คำเชิญเข้ากลุ่มจะ ได้รับการยอมรับโดยอัตโนมัติเสมอ และข้อความในช่องจะผ่านการให้สิทธิ์เสมอ เจ้าของไม่จำเป็นต้อง อยู่ใน dmAllowlist, defaultAuthorizedShips หรือ groupInviteAllowlist

เมื่อตั้งค่า ownerShip คำขอที่ไม่ได้รับสิทธิ์จะไม่เพียงถูกทิ้ง แต่จะถูกจัดคิวเป็น การอนุมัติที่รอดำเนินการและส่ง DM ถึงเจ้าของ:

  • คำขอ DM จาก ship ที่ไม่ได้อยู่ใน dmAllowlist
  • การกล่าวถึงในช่องที่ผู้ส่งไม่ผ่านการให้สิทธิ์
  • คำเชิญเข้ากลุ่มจาก ship ที่ไม่ได้อยู่ใน groupInviteAllowlist (เมื่อปิดการยอมรับอัตโนมัติ หรือเปิดอยู่แต่ ผู้เชิญไม่อยู่ในรายการอนุญาต)

เจ้าของตอบกลับทาง DM เพื่อดำเนินการกับคำขอ:

การตอบกลับของเจ้าของ ผล
approve / deny / block ดำเนินการกับการอนุมัติที่รอดำเนินการล่าสุด
approve <id> / deny <id> ดำเนินการกับการอนุมัติที่ระบุด้วย ID
block บล็อก ship ในระบบดั้งเดิมด้วย เพื่อไม่ให้เชื่อมต่อใหม่
unblock ~ship ยกเลิกการบล็อกในระบบดั้งเดิม
blocked แสดงรายการ ship ที่ถูกบล็อกอยู่
pending แสดงรายการคำขออนุมัติที่รอดำเนินการ

หากไม่ได้กำหนดค่า ownerShip DM และการกล่าวถึงในช่องที่ไม่ได้รับสิทธิ์จะถูกทิ้งและบันทึกลงล็อกเท่านั้น โดยจะไม่มีพรอมต์การอนุมัติ

การตั้งค่าการยอมรับอัตโนมัติ

ยอมรับคำเชิญ DM โดยอัตโนมัติจาก ship ที่อยู่ใน dmAllowlist แล้ว (เจ้าของจะได้รับการยอมรับ โดยอัตโนมัติเสมอไม่ว่าแฟล็กนี้จะเป็นค่าใด):

json5
{  channels: {    tlon: {      autoAcceptDmInvites: true,    },  },}

ยอมรับคำเชิญเข้ากลุ่มโดยอัตโนมัติจากรายการอนุญาต (ปฏิเสธโดยค่าเริ่มต้น: เมื่อ autoAcceptGroupInvites: true และ groupInviteAllowlist ว่างเปล่า จะไม่ยอมรับคำเชิญจากผู้ที่ไม่ใช่เจ้าของ):

json5
{  channels: {    tlon: {      autoAcceptGroupInvites: true,      groupInviteAllowlist: ["~zod"],    },  },}

การโหลดซ้ำทันทีผ่านที่เก็บการตั้งค่า Urbit

การตั้งค่าส่วนใหญ่ข้างต้น (dmAllowlist, groupInviteAllowlist, groupChannels, defaultAuthorizedShips, autoDiscoverChannels, autoAcceptDmInvites, autoAcceptGroupInvites, ownerShip, showModelSignature) จะถูกทำสำเนาไปยังเอเจนต์ %settings ของ ship (desk moltbot, bucket tlon) ในการเรียกใช้ครั้งแรก จากนั้นจึงอ่านจากที่นั่นแบบสด ดังนั้นการเปลี่ยนแปลงที่ทำผ่านไคลเอนต์ Landscape หรือคำสั่งการตั้งค่าของ Skills ที่รวมมาให้จะมีผลโดยไม่ต้อง รีสตาร์ต Gateway นอกจากนี้ channelRules และการอนุมัติที่รอดำเนินการยังถูกจัดเก็บไว้ที่นั่นในรูปแบบ JSON ด้วย การกำหนดค่า ไฟล์ยังคงเป็นแหล่งข้อมูลจริงสำหรับค่าที่ไม่เคยเขียนลงในที่เก็บการตั้งค่า

เป้าหมายการส่งมอบ (CLI/cron)

ใช้กับ openclaw message send หรือการส่งมอบด้วย cron:

  • DM: ~sampel-palnet หรือ dm/~sampel-palnet
  • กลุ่ม: chat/~host-ship/channel หรือ group:~host-ship/channel

Skills ที่รวมมาให้

Plugin รวม @tloncorp/tlon-skill ซึ่งเป็น CLI สำหรับ การดำเนินการกับ Urbit โดยตรง และพร้อมใช้งานโดยอัตโนมัติเมื่อติดตั้ง Plugin แล้ว:

  • กิจกรรม: การกล่าวถึง การตอบกลับ รายการที่ยังไม่ได้อ่าน
  • ช่อง: แสดงรายการ สร้าง เปลี่ยนชื่อ
  • ผู้ติดต่อ: แสดงรายการ/รับ/อัปเดตโปรไฟล์
  • กลุ่ม: สร้าง เข้าร่วม ขั้นตอนการเชิญ/ขอเข้าร่วม บทบาท
  • ฮุก: จัดการฮุกของช่อง
  • ข้อความ: ประวัติ ค้นหา
  • DM: ส่ง แสดงรีแอ็กชัน ยอมรับ/ปฏิเสธ
  • โพสต์: แสดงรีแอ็กชัน ลบ
  • สมุดบันทึก: โพสต์ไปยังช่องไดอารี
  • การตั้งค่า: โหลดการกำหนดค่า Plugin ซ้ำทันทีผ่านที่เก็บการตั้งค่าด้านบน

ความสามารถ

ฟีเจอร์ สถานะ
ข้อความโดยตรง รองรับ
กลุ่ม/ช่อง รองรับ (ค่าเริ่มต้นต้องมีการกล่าวถึง)
เธรด รองรับ (ตอบกลับต่อไปเมื่อเข้าร่วมแล้ว)
Rich Text แปลง Markdown เป็นรูปแบบดั้งเดิมของ Tlon
รูปภาพ ดาวน์โหลดขาเข้า อัปโหลดขาออก
รีแอ็กชัน ผ่าน Skills ที่รวมมาให้ เท่านั้น
โพล ไม่รองรับ
คำสั่งดั้งเดิม ค่าเริ่มต้นอนุญาตเฉพาะเจ้าของ

การแก้ไขปัญหา

bash
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctor

ความล้มเหลวที่พบบ่อย:

  • ไม่สนใจ DM: ผู้ส่งไม่ได้อยู่ใน dmAllowlist และไม่ได้กำหนดค่า ownerShip สำหรับขั้นตอนการอนุมัติ
  • ไม่สนใจข้อความกลุ่ม: ไม่พบ/ไม่ได้ปักหมุดช่อง หรือผู้ส่งไม่ผ่านการให้สิทธิ์และไม่มี ownerShip สำหรับจัดคิวการอนุมัติ
  • ข้อผิดพลาดในการเชื่อมต่อ: ตรวจสอบว่าเข้าถึง URL ของ ship ได้ ตั้งค่า network.dangerouslyAllowPrivateNetwork สำหรับ ship ในเครื่อง
  • ข้อผิดพลาดในการยืนยันตัวตน: รหัสเข้าสู่ระบบจะหมุนเวียน ให้คัดลอกรหัสปัจจุบันจาก ship ของคุณ

ข้อมูลอ้างอิงการกำหนดค่า

การกำหนดค่าแบบเต็ม: การกำหนดค่า

คีย์ ความหมาย
channels.tlon.enabled เปิด/ปิดการเริ่มต้นช่อง
channels.tlon.ship ชื่อ ship Urbit ของบอต (เช่น ~sampel-palnet)
channels.tlon.url URL ของ ship (เช่น https://sampel-palnet.tlon.network)
channels.tlon.code รหัสเข้าสู่ระบบของ ship
channels.tlon.network.dangerouslyAllowPrivateNetwork อนุญาต URL ของ ship บน localhost/LAN (เลือกใช้ SSRF)
channels.tlon.ownerShip ship ของเจ้าของ: ได้รับสิทธิ์เสมอและรับคำขออนุมัติ
channels.tlon.dmAllowlist ship ที่อนุญาตให้ส่ง DM (ว่าง = ไม่มีนอกจากเจ้าของ)
channels.tlon.autoAcceptDmInvites ยอมรับ DM จาก ship ใน dmAllowlist โดยอัตโนมัติ
channels.tlon.autoAcceptGroupInvites ยอมรับคำเชิญเข้ากลุ่มจาก groupInviteAllowlist โดยอัตโนมัติ
channels.tlon.groupInviteAllowlist ship ที่คำเชิญเข้ากลุ่มจะได้รับการยอมรับโดยอัตโนมัติ
channels.tlon.autoDiscoverChannels ค้นหาช่องกลุ่มที่เข้าร่วมโดยอัตโนมัติ (ค่าเริ่มต้น: false)
channels.tlon.implicitMentions.threadParticipation อนุญาตให้ข้อความติดตามในเธรดที่เข้าร่วมข้ามข้อกำหนดการกล่าวถึง
channels.tlon.groupChannels nest ของช่องที่ปักหมุดด้วยตนเอง
channels.tlon.defaultAuthorizedShips ship ที่ได้รับสิทธิ์สำหรับทุกช่อง (ใช้เมื่อไม่มีกฎที่ตรงกัน)
channels.tlon.authorization.channelRules โหมดการยืนยันสิทธิ์และรายการอนุญาตต่อ nest ของช่อง
channels.tlon.showModelSignature ต่อท้าย _[Generated by <model>]_ ในข้อความตอบกลับ
channels.tlon.responsePrefix คำนำหน้าแบบคงที่ที่เติมไว้หน้าข้อความตอบกลับขาออก
channels.tlon.accounts.<id> บัญชีเพิ่มเติมที่มีชื่อ (การตั้งค่าแบบหลาย ship)

หมายเหตุ

  • การตอบกลับในกลุ่มต้องมีการกล่าวถึงด้วย @ (เช่น ~your-bot-ship) เว้นแต่บอตจะเข้าร่วมเธรดนั้นแล้ว
  • การตอบกลับเธรดจะอยู่ภายในเธรด และบอตยังได้รับข้อความ 10 รายการล่าสุดจากบริบทของเธรดโดยเพิ่มไว้ด้านหน้า สำหรับเอเจนต์
  • Rich text (ตัวหนา ตัวเอียง โค้ด หัวข้อ รายการ) จะแปลงเป็นรูปแบบเนทีฟของ Tlon
  • การส่งข้อความขาเข้าที่ขอข้อมูลสรุปของช่อง (เช่น "สรุป ช่องนี้") จะเรียกใช้การสรุปประวัติในตัวแทนขั้นตอนการตอบกลับตามปกติ

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page