Developer and self-hosted
IRC
ใช้ IRC เมื่อคุณต้องการใช้งาน OpenClaw ในช่องแบบดั้งเดิม (#room) และข้อความส่วนตัว
ติดตั้ง Plugin IRC อย่างเป็นทางการ แล้วกำหนดค่าภายใต้ channels.irc
เริ่มต้นอย่างรวดเร็ว
- ติดตั้ง Plugin:
openclaw plugins install @openclaw/irc- กำหนดค่าอย่างน้อยโฮสต์ ชื่อเล่น และช่องที่จะเข้าร่วมใน
~/.openclaw/openclaw.json:
{ channels: { irc: { enabled: true, host: "irc.example.com", port: 6697, tls: true, nick: "openclaw-bot", channels: ["#openclaw"], }, },}- เริ่มหรือเริ่ม Gateway ใหม่:
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 มี "ด่าน" แยกกันสองระดับ:
- การเข้าถึงช่อง (
groupPolicy+groups): บอตจะยอมรับข้อความจากช่องนั้นหรือไม่ - การเข้าถึงของผู้ส่ง (
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 สนทนากับบอต):
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#openclaw": { allowFrom: ["*"] }, }, }, },}การกระตุ้นให้ตอบกลับ (การกล่าวถึง)
แม้ช่องจะได้รับอนุญาต (ผ่าน groupPolicy + groups) และผู้ส่งได้รับอนุญาตแล้ว ค่าเริ่มต้นของ OpenClaw ในบริบทกลุ่มยังคง กำหนดให้ต้องกล่าวถึง ระบบจะถือว่ามีการกล่าวถึงบอตเมื่อข้อความมีชื่อเล่นของบอตที่เชื่อมต่ออยู่ หรือตรงกับรูปแบบการกล่าวถึงที่คุณกำหนดค่าไว้
ดังนั้นคุณอาจเห็นบันทึก เช่น drop channel … (missing-mention) เว้นแต่ข้อความจะมีรูปแบบการกล่าวถึงที่ตรงกับบอต
หากต้องการให้บอตตอบกลับในช่อง IRC โดยไม่ต้องกล่าวถึง ให้ปิดข้อกำหนดการกล่าวถึงสำหรับช่องนั้น:
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#openclaw": { requireMention: false, allowFrom: ["*"], }, }, }, },}หรือหากต้องการอนุญาตช่อง IRC ทั้งหมด (ไม่มีรายการอนุญาตรายช่อง) และยังคงตอบกลับโดยไม่ต้องกล่าวถึง:
{ channels: { irc: { groupPolicy: "open", groups: { "*": { requireMention: false, allowFrom: ["*"] }, }, }, },}หมายเหตุด้านความปลอดภัย (แนะนำสำหรับช่องสาธารณะ)
หากคุณอนุญาต allowFrom: ["*"] ในช่องสาธารณะ ทุกคนจะสามารถส่งพรอมต์ให้บอตได้
หากต้องการลดความเสี่ยง ให้จำกัดเครื่องมือสำหรับช่องนั้น
ใช้เครื่องมือชุดเดียวกันสำหรับทุกคนในช่อง
{ channels: { irc: { groups: { "#openclaw": { allowFrom: ["*"], tools: { deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"], }, }, }, }, },}ใช้เครื่องมือต่างกันตามผู้ส่ง (เจ้าของมีสิทธิ์มากกว่า)
ใช้ toolsBySender เพื่อใช้นโยบายที่เข้มงวดกว่ากับ "*" และนโยบายที่ผ่อนปรนกว่ากับชื่อเล่นของคุณ:
{ 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 หลังเชื่อมต่อ:
{ channels: { irc: { nickserv: { enabled: true, service: "NickServ", password: "your-nickserv-password", }, }, },}ค่าเริ่มต้นจะดำเนินการยืนยันตัวตนกับ NickServ ทุกครั้งที่ตั้งรหัสผ่าน (กำหนด enabled เป็น false เฉพาะเมื่อต้องการไม่ใช้งาน) ค่าเริ่มต้นของ service คือ NickServ ส่วน passwordFile เป็นทางเลือกแทนการระบุ password โดยตรง
การลงทะเบียนครั้งเดียวแบบไม่บังคับเมื่อเชื่อมต่อ (register: true ต้องมี registerEmail):
{ channels: { irc: { nickserv: { register: true, registerEmail: "bot@example.com", }, }, },}ปิด register หลังลงทะเบียนชื่อเล่นแล้ว เพื่อหลีกเลี่ยงความพยายาม REGISTER ซ้ำ
ตัวแปรสภาพแวดล้อม
บัญชีเริ่มต้นรองรับ:
IRC_HOSTIRC_PORTIRC_TLSIRC_NICKIRC_USERNAMEIRC_REALNAMEIRC_PASSWORDIRC_CHANNELS(คั่นด้วยจุลภาค)IRC_NICKSERV_PASSWORDIRC_NICKSERV_REGISTER_EMAIL
ไม่สามารถตั้ง IRC_HOST จากไฟล์ .env ของพื้นที่ทำงานได้ โปรดดู ไฟล์ .env ของพื้นที่ทำงาน
การแก้ไขปัญหา
- หากบอตเชื่อมต่อได้แต่ไม่เคยตอบกลับในช่อง ให้ตรวจสอบ
channels.irc.groupsและ ตรวจสอบว่าข้อกำหนดการกล่าวถึงกำลังทิ้งข้อความหรือไม่ (missing-mention) หากต้องการให้บอตตอบกลับโดยไม่ต้องพิง ให้ตั้งrequireMention:falseสำหรับช่องนั้น - หากเข้าสู่ระบบไม่สำเร็จ ให้ตรวจสอบว่าชื่อเล่นพร้อมใช้งานและรหัสผ่านเซิร์ฟเวอร์ถูกต้อง
- หาก TLS ล้มเหลวบนเครือข่ายที่กำหนดเอง ให้ตรวจสอบโฮสต์/พอร์ตและการตั้งค่าใบรับรอง
เนื้อหาที่เกี่ยวข้อง
- ภาพรวมช่อง — ช่องทั้งหมดที่รองรับ
- การจับคู่ — การยืนยันตัวตนสำหรับข้อความส่วนตัวและขั้นตอนการจับคู่
- กลุ่ม — ลักษณะการทำงานของแชทกลุ่มและข้อกำหนดการกล่าวถึง
- การกำหนดเส้นทางช่อง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ความปลอดภัย — รูปแบบการเข้าถึงและการเพิ่มความแข็งแกร่งด้านความปลอดภัย