Developer and self-hosted

IRC

ใช้ IRC เมื่อคุณต้องการใช้งาน OpenClaw ในช่องแบบดั้งเดิม (#room) และข้อความส่วนตัว ติดตั้ง Plugin IRC อย่างเป็นทางการ แล้วกำหนดค่าภายใต้ channels.irc

เริ่มต้นอย่างรวดเร็ว

  1. ติดตั้ง Plugin:
bash
openclaw plugins install @openclaw/irc
  1. กำหนดค่าอย่างน้อยโฮสต์ ชื่อเล่น และช่องที่จะเข้าร่วมใน ~/.openclaw/openclaw.json:
json5
{  channels: {    irc: {      enabled: true,      host: "irc.example.com",      port: 6697,      tls: true,      nick: "openclaw-bot",      channels: ["#openclaw"],    },  },}
  1. เริ่มหรือเริ่ม Gateway ใหม่:
bash
openclaw gateway run

ควรใช้เซิร์ฟเวอร์ IRC ส่วนตัวสำหรับการประสานงานระหว่างบอต หากคุณตั้งใจใช้เครือข่าย IRC สาธารณะ ตัวเลือกทั่วไปได้แก่ Libera.Chat, OFTC และ Snoonet หลีกเลี่ยงช่องสาธารณะที่คาดเดาได้สำหรับการรับส่งข้อมูลช่องทางเบื้องหลังของบอตหรือฝูงบอต

การตั้งค่าการเชื่อมต่อ

คีย์ ค่าเริ่มต้น หมายเหตุ
host ไม่มี (จำเป็น) ชื่อโฮสต์ของเซิร์ฟเวอร์ IRC
port 6697 เมื่อใช้ TLS, 6667 แบบไม่เข้ารหัส 1-65535
tls true ตั้งเป็น false เฉพาะเมื่อตั้งใจใช้ข้อความธรรมดา
nick ไม่มี (จำเป็น) ชื่อเล่นของบอต
username ชื่อเล่น หรือ openclaw ชื่อผู้ใช้ IRC
realname OpenClaw ช่องชื่อจริง/GECOS
password / passwordFile ไม่มี รหัสผ่านเซิร์ฟเวอร์ โดยไฟล์ต้องเป็นไฟล์ปกติ
channels ไม่มี ช่องที่จะเข้าร่วม (["#openclaw"])
accounts / defaultAccount ไม่มี การตั้งค่าหลายบัญชี ตัวแปรสภาพแวดล้อมจะเติมเฉพาะบัญชีเริ่มต้น

ค่าเริ่มต้นด้านความปลอดภัย

  • IRC ใช้ซ็อกเก็ต TCP/TLS โดยตรง ซึ่งอยู่นอกการกำหนดเส้นทางพร็อกซีส่งต่อที่ผู้ดูแล OpenClaw จัดการ ในการปรับใช้ที่กำหนดให้การรับส่งข้อมูลขาออกทั้งหมดต้องผ่านพร็อกซีส่งต่อนั้น ให้ตั้ง channels.irc.enabled=false เว้นแต่จะได้รับอนุมัติอย่างชัดเจนให้เชื่อมต่อ IRC โดยตรง
  • ค่าเริ่มต้นของ channels.irc.dmPolicy คือ "pairing": ผู้ส่งข้อความส่วนตัวที่ไม่รู้จักจะได้รับรหัสจับคู่ ซึ่งคุณอนุมัติได้ด้วย openclaw pairing approve irc <code>
  • ค่าเริ่มต้นของ channels.irc.groupPolicy คือ "allowlist"
  • เมื่อใช้ groupPolicy="allowlist" ให้ตั้ง channels.irc.groups เพื่อกำหนดช่องที่อนุญาต
  • ใช้ TLS (channels.irc.tls=true) เว้นแต่คุณตั้งใจยอมรับการรับส่งข้อมูลแบบข้อความธรรมดา

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

ช่อง IRC มี "ด่าน" แยกกันสองระดับ:

  1. การเข้าถึงช่อง (groupPolicy + groups): บอตจะยอมรับข้อความจากช่องนั้นหรือไม่
  2. การเข้าถึงของผู้ส่ง (groupAllowFrom / groups["#channel"].allowFrom รายช่อง): ใครได้รับอนุญาตให้กระตุ้นบอตภายในช่องนั้น

คีย์การกำหนดค่า:

  • รายการอนุญาตสำหรับข้อความส่วนตัว (การเข้าถึงของผู้ส่งข้อความส่วนตัว): channels.irc.allowFrom
  • รายการอนุญาตผู้ส่งในกลุ่ม (การเข้าถึงของผู้ส่งในช่อง): channels.irc.groupAllowFrom
  • การควบคุมรายช่อง (กฎสำหรับช่อง ผู้ส่ง และการกล่าวถึง): channels.irc.groups["#channel"] พร้อม requireMention, allowFrom, enabled, tools, toolsBySender, skills และ systemPrompt
  • channels.irc.groupPolicy="open" อนุญาตช่องที่ไม่ได้กำหนดค่า (แต่ค่าเริ่มต้นยังคงกำหนดให้ต้องกล่าวถึง)

รายการในรายการอนุญาตควรใช้ข้อมูลระบุตัวตนผู้ส่งที่คงที่ (nick!user@host) การจับคู่ด้วยชื่อเล่นเพียงอย่างเดียวเปลี่ยนแปลงได้ และจะเปิดใช้งานเฉพาะเมื่อกำหนด channels.irc.dangerouslyAllowNameMatching: true

ข้อผิดพลาดที่พบบ่อย: allowFrom ใช้สำหรับข้อความส่วนตัว ไม่ใช่ช่อง

หากคุณเห็นบันทึก เช่น:

  • irc: drop group sender alice!ident@host (policy=allowlist)

...หมายความว่าผู้ส่งไม่ได้รับอนุญาตสำหรับข้อความใน กลุ่ม/ช่อง แก้ไขได้โดย:

  • ตั้ง channels.irc.groupAllowFrom (มีผลทั่วโลกสำหรับทุกช่อง) หรือ
  • ตั้งรายการอนุญาตผู้ส่งรายช่อง: channels.irc.groups["#channel"].allowFrom

ตัวอย่าง (อนุญาตให้ทุกคนใน #openclaw สนทนากับบอต):

json5
{  channels: {    irc: {      groupPolicy: "allowlist",      groups: {        "#openclaw": { allowFrom: ["*"] },      },    },  },}

การกระตุ้นให้ตอบกลับ (การกล่าวถึง)

แม้ช่องจะได้รับอนุญาต (ผ่าน groupPolicy + groups) และผู้ส่งได้รับอนุญาตแล้ว ค่าเริ่มต้นของ OpenClaw ในบริบทกลุ่มยังคง กำหนดให้ต้องกล่าวถึง ระบบจะถือว่ามีการกล่าวถึงบอตเมื่อข้อความมีชื่อเล่นของบอตที่เชื่อมต่ออยู่ หรือตรงกับรูปแบบการกล่าวถึงที่คุณกำหนดค่าไว้

ดังนั้นคุณอาจเห็นบันทึก เช่น drop channel … (missing-mention) เว้นแต่ข้อความจะมีรูปแบบการกล่าวถึงที่ตรงกับบอต

หากต้องการให้บอตตอบกลับในช่อง IRC โดยไม่ต้องกล่าวถึง ให้ปิดข้อกำหนดการกล่าวถึงสำหรับช่องนั้น:

json5
{  channels: {    irc: {      groupPolicy: "allowlist",      groups: {        "#openclaw": {          requireMention: false,          allowFrom: ["*"],        },      },    },  },}

หรือหากต้องการอนุญาตช่อง IRC ทั้งหมด (ไม่มีรายการอนุญาตรายช่อง) และยังคงตอบกลับโดยไม่ต้องกล่าวถึง:

json5
{  channels: {    irc: {      groupPolicy: "open",      groups: {        "*": { requireMention: false, allowFrom: ["*"] },      },    },  },}

หมายเหตุด้านความปลอดภัย (แนะนำสำหรับช่องสาธารณะ)

หากคุณอนุญาต allowFrom: ["*"] ในช่องสาธารณะ ทุกคนจะสามารถส่งพรอมต์ให้บอตได้ หากต้องการลดความเสี่ยง ให้จำกัดเครื่องมือสำหรับช่องนั้น

ใช้เครื่องมือชุดเดียวกันสำหรับทุกคนในช่อง

json5
{  channels: {    irc: {      groups: {        "#openclaw": {          allowFrom: ["*"],          tools: {            deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],          },        },      },    },  },}

ใช้เครื่องมือต่างกันตามผู้ส่ง (เจ้าของมีสิทธิ์มากกว่า)

ใช้ toolsBySender เพื่อใช้นโยบายที่เข้มงวดกว่ากับ "*" และนโยบายที่ผ่อนปรนกว่ากับชื่อเล่นของคุณ:

json5
{  channels: {    irc: {      groups: {        "#openclaw": {          allowFrom: ["*"],          toolsBySender: {            "*": {              deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],            },            "id:alice": {              deny: ["gateway", "nodes", "cron"],            },          },        },      },    },  },}

หมายเหตุ:

  • คีย์ toolsBySender ควรใช้คำนำหน้าที่ชัดเจน (channel:, id:, e164:, username:, name:) สำหรับ IRC ให้ใช้ id: ร่วมกับค่าข้อมูลระบุตัวตนผู้ส่ง: id:alice หรือ id:alice!~alice@203.0.113.7 เพื่อการจับคู่ที่เข้มงวดยิ่งขึ้น
  • ระบบยังคงยอมรับคีย์แบบเก่าที่ไม่มีคำนำหน้า โดยจะจับคู่ในรูปแบบ id: เท่านั้น และแสดงคำเตือนการเลิกใช้งาน
  • นโยบายผู้ส่งรายการแรกที่ตรงกันจะมีผล ส่วน "*" เป็นตัวสำรองแบบไวลด์การ์ด

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึงกลุ่มเทียบกับข้อกำหนดการกล่าวถึง (และการทำงานร่วมกัน) ได้ที่: /channels/groups

NickServ

หากต้องการยืนยันตัวตนกับ NickServ หลังเชื่อมต่อ:

json5
{  channels: {    irc: {      nickserv: {        enabled: true,        service: "NickServ",        password: "your-nickserv-password",      },    },  },}

ค่าเริ่มต้นจะดำเนินการยืนยันตัวตนกับ NickServ ทุกครั้งที่ตั้งรหัสผ่าน (กำหนด enabled เป็น false เฉพาะเมื่อต้องการไม่ใช้งาน) ค่าเริ่มต้นของ service คือ NickServ ส่วน passwordFile เป็นทางเลือกแทนการระบุ password โดยตรง

การลงทะเบียนครั้งเดียวแบบไม่บังคับเมื่อเชื่อมต่อ (register: true ต้องมี registerEmail):

json5
{  channels: {    irc: {      nickserv: {        register: true,        registerEmail: "bot@example.com",      },    },  },}

ปิด register หลังลงทะเบียนชื่อเล่นแล้ว เพื่อหลีกเลี่ยงความพยายาม REGISTER ซ้ำ

ตัวแปรสภาพแวดล้อม

บัญชีเริ่มต้นรองรับ:

  • IRC_HOST
  • IRC_PORT
  • IRC_TLS
  • IRC_NICK
  • IRC_USERNAME
  • IRC_REALNAME
  • IRC_PASSWORD
  • IRC_CHANNELS (คั่นด้วยจุลภาค)
  • IRC_NICKSERV_PASSWORD
  • IRC_NICKSERV_REGISTER_EMAIL

ไม่สามารถตั้ง IRC_HOST จากไฟล์ .env ของพื้นที่ทำงานได้ โปรดดู ไฟล์ .env ของพื้นที่ทำงาน

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

  • หากบอตเชื่อมต่อได้แต่ไม่เคยตอบกลับในช่อง ให้ตรวจสอบ channels.irc.groups และ ตรวจสอบว่าข้อกำหนดการกล่าวถึงกำลังทิ้งข้อความหรือไม่ (missing-mention) หากต้องการให้บอตตอบกลับโดยไม่ต้องพิง ให้ตั้ง requireMention:false สำหรับช่องนั้น
  • หากเข้าสู่ระบบไม่สำเร็จ ให้ตรวจสอบว่าชื่อเล่นพร้อมใช้งานและรหัสผ่านเซิร์ฟเวอร์ถูกต้อง
  • หาก TLS ล้มเหลวบนเครือข่ายที่กำหนดเอง ให้ตรวจสอบโฮสต์/พอร์ตและการตั้งค่าใบรับรอง

เนื้อหาที่เกี่ยวข้อง

  • ภาพรวมช่อง — ช่องทั้งหมดที่รองรับ
  • การจับคู่ — การยืนยันตัวตนสำหรับข้อความส่วนตัวและขั้นตอนการจับคู่
  • กลุ่ม — ลักษณะการทำงานของแชทกลุ่มและข้อกำหนดการกล่าวถึง
  • การกำหนดเส้นทางช่อง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
  • ความปลอดภัย — รูปแบบการเข้าถึงและการเพิ่มความแข็งแกร่งด้านความปลอดภัย
Was this useful?
On this page

On this page