Developer and self-hosted
IRC
ใช้ IRC เมื่อคุณต้องการใช้ OpenClaw ในช่องแบบดั้งเดิม (#room) และข้อความโดยตรง
ติดตั้ง Plugin IRC อย่างเป็นทางการ แล้วกำหนดค่าภายใต้ channels.irc
เริ่มต้นอย่างรวดเร็ว
- ติดตั้ง Plugin:
openclaw plugins install @openclaw/irc- เปิดใช้การกำหนดค่า IRC ใน
~/.openclaw/openclaw.json - ตั้งค่าอย่างน้อย:
{ channels: { irc: { enabled: true, host: "irc.example.com", port: 6697, tls: true, nick: "openclaw-bot", channels: ["#openclaw"], }, },}แนะนำให้ใช้เซิร์ฟเวอร์ IRC ส่วนตัวสำหรับการประสานงานของบอต หากคุณตั้งใจใช้เครือข่าย IRC สาธารณะ ตัวเลือกทั่วไปได้แก่ Libera.Chat, OFTC และ Snoonet หลีกเลี่ยงช่องสาธารณะที่คาดเดาได้สำหรับทราฟฟิกช่องทางลับของบอตหรือกลุ่มงาน
- เริ่ม/รีสตาร์ต Gateway:
openclaw gateway runค่าเริ่มต้นด้านความปลอดภัย
- IRC ใช้ซ็อกเก็ต TCP/TLS แบบดิบภายนอกการกำหนดเส้นทางผ่านพร็อกซีส่งต่อที่จัดการโดยผู้ปฏิบัติการ OpenClaw ในการปรับใช้ที่กำหนดให้ทราฟฟิกขาออกทั้งหมดต้องผ่านพร็อกซีส่งต่อนั้น ให้ตั้งค่า
channels.irc.enabled=falseเว้นแต่การออก IRC โดยตรงจะได้รับอนุมัติอย่างชัดเจน channels.irc.dmPolicyมีค่าเริ่มต้นเป็น"pairing"channels.irc.groupPolicyมีค่าเริ่มต้นเป็น"allowlist"- เมื่อใช้
groupPolicy="allowlist"ให้ตั้งค่าchannels.irc.groupsเพื่อกำหนดช่องที่อนุญาต - ใช้ TLS (
channels.irc.tls=true) เว้นแต่คุณตั้งใจยอมรับการขนส่งแบบข้อความธรรมดา
การควบคุมการเข้าถึง
มี “ด่าน” แยกกันสองส่วนสำหรับช่อง IRC:
- การเข้าถึงช่อง (
groupPolicy+groups): บอตจะยอมรับข้อความจากช่องหรือไม่ - การเข้าถึงของผู้ส่ง (
groupAllowFrom/groups["#channel"].allowFromต่อช่อง): ใครได้รับอนุญาตให้เรียกใช้บอตภายในช่องนั้น
คีย์การกำหนดค่า:
- รายการอนุญาตของ DM (การเข้าถึงของผู้ส่ง DM):
channels.irc.allowFrom - รายการอนุญาตของผู้ส่งในกลุ่ม (การเข้าถึงของผู้ส่งในช่อง):
channels.irc.groupAllowFrom - การควบคุมต่อช่อง (ช่อง + ผู้ส่ง + กฎการกล่าวถึง):
channels.irc.groups["#channel"] channels.irc.groupPolicy="open"อนุญาตช่องที่ไม่ได้กำหนดค่าไว้ (ยังคงถูกกั้นด้วยการกล่าวถึงตามค่าเริ่มต้น)
รายการอนุญาตควรใช้อัตลักษณ์ผู้ส่งที่เสถียร (nick!user@host)
การจับคู่ด้วยชื่อเล่นล้วนเปลี่ยนแปลงได้ และเปิดใช้เฉพาะเมื่อ channels.irc.dangerouslyAllowNameMatching: true
ข้อผิดพลาดที่พบบ่อย: allowFrom ใช้สำหรับ DM ไม่ใช่ช่อง
หากคุณเห็นล็อกเช่น:
irc: drop group sender alice!ident@host (policy=allowlist)
...หมายความว่าผู้ส่งไม่ได้รับอนุญาตสำหรับข้อความ กลุ่ม/ช่อง แก้ไขได้โดยทำอย่างใดอย่างหนึ่ง:
- ตั้งค่า
channels.irc.groupAllowFrom(ส่วนกลางสำหรับทุกช่อง) หรือ - ตั้งค่ารายการอนุญาตของผู้ส่งต่อช่อง:
channels.irc.groups["#channel"].allowFrom
ตัวอย่าง (อนุญาตให้ทุกคนใน #tuirc-dev คุยกับบอตได้):
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#tuirc-dev": { allowFrom: ["*"] }, }, }, },}การเรียกให้ตอบกลับ (การกล่าวถึง)
แม้ว่าช่องจะได้รับอนุญาตแล้ว (ผ่าน groupPolicy + groups) และผู้ส่งได้รับอนุญาตแล้ว OpenClaw มีค่าเริ่มต้นเป็นการ กั้นด้วยการกล่าวถึง ในบริบทกลุ่ม
นั่นหมายความว่าคุณอาจเห็นล็อกเช่น drop channel … (missing-mention) เว้นแต่ข้อความจะมีรูปแบบการกล่าวถึงที่ตรงกับบอต
หากต้องการให้บอตตอบกลับในช่อง IRC โดยไม่ต้องมีการกล่าวถึง ให้ปิดการกั้นด้วยการกล่าวถึงสำหรับช่องนั้น:
{ channels: { irc: { groupPolicy: "allowlist", groups: { "#tuirc-dev": { requireMention: false, allowFrom: ["*"], }, }, }, },}หรือหากต้องการอนุญาตช่อง IRC ทั้งหมด (ไม่มีรายการอนุญาตต่อช่อง) และยังตอบกลับโดยไม่ต้องมีการกล่าวถึง:
{ channels: { irc: { groupPolicy: "open", groups: { "*": { requireMention: false, allowFrom: ["*"] }, }, }, },}หมายเหตุด้านความปลอดภัย (แนะนำสำหรับช่องสาธารณะ)
หากคุณอนุญาต allowFrom: ["*"] ในช่องสาธารณะ ใครก็สามารถส่งพรอมป์ถึงบอตได้
เพื่อลดความเสี่ยง ให้จำกัดเครื่องมือสำหรับช่องนั้น
เครื่องมือเดียวกันสำหรับทุกคนในช่อง
{ channels: { irc: { groups: { "#tuirc-dev": { allowFrom: ["*"], tools: { deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"], }, }, }, }, },}เครื่องมือต่างกันตามผู้ส่ง (เจ้าของมีสิทธิ์มากกว่า)
ใช้ toolsBySender เพื่อใช้นโยบายที่เข้มงวดกว่าสำหรับ "*" และผ่อนปรนกว่าสำหรับชื่อเล่นของคุณ:
{ channels: { irc: { groups: { "#tuirc-dev": { allowFrom: ["*"], toolsBySender: { "*": { deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"], }, "id:eigen": { deny: ["gateway", "nodes", "cron"], }, }, }, }, }, },}หมายเหตุ:
- คีย์
toolsBySenderควรใช้id:สำหรับค่าอัตลักษณ์ผู้ส่ง IRC:id:eigenหรือid:eigen!~eigen@174.127.248.171เพื่อการจับคู่ที่เข้มงวดยิ่งขึ้น - คีย์เดิมที่ไม่มีคำนำหน้ายังคงใช้ได้ และจะจับคู่เป็น
id:เท่านั้น - นโยบายผู้ส่งแรกที่ตรงกันจะถูกใช้;
"*"คือทางเลือกสำรองแบบไวลด์การ์ด
ดูเพิ่มเติมเกี่ยวกับการเข้าถึงกลุ่มเทียบกับการกั้นด้วยการกล่าวถึง (และการทำงานร่วมกันของทั้งสอง): /channels/groups
NickServ
เพื่อระบุตัวตนกับ NickServ หลังเชื่อมต่อ:
{ channels: { irc: { nickserv: { enabled: true, service: "NickServ", password: "your-nickserv-password", }, }, },}การลงทะเบียนครั้งเดียวเมื่อเชื่อมต่อแบบไม่บังคับ:
{ 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 จาก workspace .env ได้; ดู ไฟล์ Workspace .env
การแก้ไขปัญหา
- หากบอตเชื่อมต่อได้แต่ไม่เคยตอบกลับในช่อง ให้ตรวจสอบ
channels.irc.groupsและ ตรวจสอบว่าการกั้นด้วยการกล่าวถึงกำลังทิ้งข้อความหรือไม่ (missing-mention) หากคุณต้องการให้ตอบกลับโดยไม่ต้อง ping ให้ตั้งค่าrequireMention:falseสำหรับช่องนั้น - หากเข้าสู่ระบบไม่สำเร็จ ให้ตรวจสอบความพร้อมใช้งานของชื่อเล่นและรหัสผ่านเซิร์ฟเวอร์
- หาก TLS ไม่สำเร็จบนเครือข่ายแบบกำหนดเอง ให้ตรวจสอบโฮสต์/พอร์ตและการตั้งค่าใบรับรอง
ที่เกี่ยวข้อง
- ภาพรวมช่อง — ช่องทั้งหมดที่รองรับ
- การจับคู่ — การยืนยันตัวตน DM และโฟลว์การจับคู่
- กลุ่ม — พฤติกรรมแชตกลุ่มและการกั้นด้วยการกล่าวถึง
- การกำหนดเส้นทางช่อง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความแข็งแกร่ง