Developer and self-hosted
Twitch
รองรับแชต Twitch ผ่านอินเทอร์เฟซแชต (IRC) ของ Twitch โดยใช้ไคลเอนต์ Twurple โดย OpenClaw จะลงชื่อเข้าใช้ด้วยบัญชีบอต Twitch เข้าร่วมหนึ่งช่องต่อหนึ่งบัญชีที่กำหนดค่า และตอบกลับในช่องนั้น
การติดตั้ง
Twitch จัดส่งในรูปแบบ Plugin อย่างเป็นทางการ โดยไม่ได้เป็นส่วนหนึ่งของการติดตั้งแกนหลัก
รีจิสทรี npm
openclaw plugins install @openclaw/twitchเช็กเอาต์ในเครื่อง
openclaw plugins install ./path/to/local/twitch-pluginplugins install จะลงทะเบียนและเปิดใช้งาน Plugin การเลือก Twitch ระหว่าง openclaw onboard หรือ openclaw channels add จะติดตั้ง Plugin เมื่อต้องการ ใช้ชื่อแพ็กเกจเปล่าเพื่อติดตามรุ่นปัจจุบัน และตรึงเวอร์ชันแบบเจาะจงเฉพาะเมื่อต้องการให้การติดตั้งทำซ้ำได้อย่างแน่นอน ต้องใช้ OpenClaw 2026.4.10 หรือใหม่กว่า
รายละเอียด: Plugin
การตั้งค่าด่วน
ติดตั้ง Plugin
ดูการติดตั้งด้านบน
สร้างบัญชีบอต Twitch
สร้างบัญชี Twitch แยกสำหรับบอตโดยเฉพาะ (หรือใช้บัญชีที่มีอยู่)
สร้างข้อมูลรับรอง
- เลือก Bot Token
- ตรวจสอบว่าได้เลือกขอบเขต
chat:readและchat:write - คัดลอก Client ID และ Access Token
ค้นหา ID ผู้ใช้ Twitch
ใช้ https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/ เพื่อแปลงชื่อผู้ใช้เป็น ID ผู้ใช้ Twitch
กำหนดค่าโทเค็น
- สภาพแวดล้อม:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(เฉพาะบัญชีเริ่มต้น) - หรือการกำหนดค่า:
channels.twitch.accessToken
หากตั้งค่าทั้งสองอย่าง การกำหนดค่าจะมีลำดับความสำคัญสูงกว่า (ตัวแปรสภาพแวดล้อมเป็นเพียงทางเลือกสำรองสำหรับบัญชีเริ่มต้น)
เริ่ม Gateway
openclaw gateway runการกำหนดค่าขั้นต่ำ:
{ channels: { twitch: { enabled: true, username: "openclaw", // บัญชี Twitch ของบอต (ใช้ยืนยันตัวตน) accessToken: "oauth:abc123...", // โทเค็นการเข้าถึง OAuth (หรือใช้ตัวแปรสภาพแวดล้อม OPENCLAW_TWITCH_ACCESS_TOKEN) clientId: "xyz789...", // Client ID จาก Token Generator channel: "yourchannel", // แชตของช่อง Twitch ที่จะเข้าร่วม (จำเป็น) allowFrom: ["123456789"], // (แนะนำ) เฉพาะ ID ผู้ใช้ Twitch ของคุณ }, },}คืออะไร
- ช่อง Twitch ที่ Gateway เป็นเจ้าของ
- การกำหนดเส้นทางแบบตายตัว: การตอบกลับจะส่งกลับไปยังช่อง Twitch ที่เป็นต้นทางของข้อความเสมอ
- แต่ละช่องที่เข้าร่วมจะจับคู่กับคีย์เซสชันกลุ่มที่แยกจากกัน
agent:<agentId>:twitch:group:<channel> usernameคือบัญชีของบอต (บัญชีที่ใช้ยืนยันตัวตน) ส่วนchannelคือห้องแชตที่จะเข้าร่วม รายการบัญชีหนึ่งรายการจะเข้าร่วมเพียงหนึ่งช่องเท่านั้น- โทเค็นใช้ได้ทั้งแบบมีและไม่มีคำนำหน้า
oauth:; OpenClaw จะปรับให้เป็นรูปแบบมาตรฐานได้ทั้งสองแบบ (ตัวช่วยตั้งค่าคาดหวังรูปแบบoauth:)
ความทนทานของข้อความขาเข้า
OpenClaw จะจัดคิวข้อความแชต Twitch ที่ยอมรับแต่ละข้อความแบบคงทนก่อนส่งต่อไปยังกระบวนการปกติ ข้อความที่รอดำเนินการหรือสามารถลองใหม่ได้จะยังคงอยู่หลัง Gateway รีสตาร์ต ประมวลผลตามลำดับสำหรับช่องที่กำหนดค่า และใช้ ID ข้อความของ Twitch เพื่อระงับรายการคิวซ้ำตราบใดที่ยังมีระเบียนการดำเนินการเสร็จสมบูรณ์ที่กำลังใช้งานหรือเก็บรักษาอยู่
แชต Twitch จะไม่เล่น PRIVMSG ซ้ำหลังจากไคลเอนต์ยอมรับแล้ว วิธีนี้ช่วยป้องกันช่วงที่ระบบอาจล่มระหว่างการยอมรับในเครื่องกับการส่งต่อ แต่ไม่สามารถกู้คืนข้อความที่พลาดไปก่อนการรับเข้าแบบคงทน หากการเพิ่มลงในคิวล้มเหลว OpenClaw จะบันทึกความล้มเหลว การเชื่อมต่อใหม่จะไม่ขอให้ Twitch ส่งข้อความนั้นอีกครั้ง
การรีเฟรชโทเค็น (ไม่บังคับ)
OpenClaw ไม่สามารถรีเฟรชโทเค็นจาก Twitch Token Generator ได้ ให้สร้างใหม่เมื่อหมดอายุ (โทเค็นมีอายุไม่กี่ชั่วโมงและไม่ต้องลงทะเบียนแอป)
สำหรับการรีเฟรชอัตโนมัติ ให้สร้างแอปของคุณเองที่ Twitch Developer Console และเพิ่ม:
{ channels: { twitch: { clientSecret: "your_client_secret", refreshToken: "your_refresh_token", }, },}เมื่อตั้งค่าทั้งสองอย่าง Plugin จะใช้ผู้ให้บริการการยืนยันตัวตนที่รองรับการรีเฟรช ซึ่งจะต่ออายุโทเค็นก่อนหมดอายุและบันทึกการรีเฟรชแต่ละครั้ง หากไม่มี refreshToken ระบบจะบันทึก token refresh disabled (no refresh token); หากไม่มี clientSecret ระบบจะกลับไปใช้โทเค็นแบบคงที่ (ไม่รีเฟรช)
การรองรับหลายบัญชี
ใช้ channels.twitch.accounts พร้อมข้อมูลรับรองแยกสำหรับแต่ละบัญชี ดูรูปแบบที่ใช้ร่วมกันได้ที่การกำหนดค่า
ตัวอย่าง (บัญชีบอตหนึ่งบัญชีในสองช่อง):
{ channels: { twitch: { accounts: { channel1: { username: "openclaw", accessToken: "oauth:abc123...", clientId: "xyz789...", channel: "yourchannel", }, channel2: { username: "openclaw", accessToken: "oauth:def456...", clientId: "uvw012...", channel: "secondchannel", }, }, }, },}การควบคุมการเข้าถึง
allowFrom คือรายการอนุญาตแบบตายตัวของ ID ผู้ใช้ Twitch เมื่อตั้งค่านี้ ระบบจะไม่สนใจ allowedRoles; หากต้องการใช้การเข้าถึงตามบทบาทแทน ให้ไม่ต้องตั้งค่า allowFrom
บทบาทที่ใช้ได้: "moderator", "owner", "vip", "subscriber", "all"
รายการอนุญาต ID ผู้ใช้ (ปลอดภัยที่สุด)
{ channels: { twitch: { accounts: { default: { allowFrom: ["123456789", "987654321"], }, }, }, },}ตามบทบาท
{ channels: { twitch: { accounts: { default: { allowedRoles: ["moderator", "vip"], }, }, }, },}ปิดข้อกำหนดให้ @mention
โดยค่าเริ่มต้น requireMention คือ true หากต้องการตอบกลับข้อความที่ได้รับอนุญาตทั้งหมด:
{ channels: { twitch: { accounts: { default: { requireMention: false, }, }, }, },}การแก้ไขปัญหา
ขั้นแรก ให้เรียกใช้คำสั่งวินิจฉัย:
openclaw doctoropenclaw channels status --probeบอตไม่ตอบกลับข้อความ
- ตรวจสอบการควบคุมการเข้าถึง: ตรวจสอบว่า ID ผู้ใช้ของคุณอยู่ใน
allowFromหรือลบallowFromชั่วคราวและตั้งค่าallowedRoles: ["all"]เพื่อทดสอบ - ตรวจสอบด่านการกล่าวถึง: เมื่อใช้
requireMention: true(ค่าเริ่มต้น) ข้อความต้อง @mention ชื่อผู้ใช้ของบอต - ตรวจสอบว่าบอตอยู่ในช่อง: บอตจะเข้าร่วมเฉพาะช่องที่ระบุใน
channel
ปัญหาเกี่ยวกับโทเค็น
ข้อผิดพลาด "Failed to connect" หรือข้อผิดพลาดในการยืนยันตัวตน:
- ตรวจสอบว่า
accessTokenเป็นค่าโทเค็นการเข้าถึง OAuth (คำนำหน้าoauth:ไม่บังคับ) - ตรวจสอบว่าโทเค็นมีขอบเขต
chat:readและchat:write - หากใช้การรีเฟรชโทเค็น ให้ตรวจสอบว่าได้ตั้งค่า
clientSecretและrefreshToken
การรีเฟรชโทเค็นไม่ทำงาน
ตรวจสอบบันทึกเพื่อหาเหตุการณ์การรีเฟรช:
ใช้แหล่งโทเค็นจากสภาพแวดล้อมสำหรับ mybotรีเฟรชโทเค็นการเข้าถึงสำหรับผู้ใช้ 123456 แล้ว (หมดอายุใน 14400s)หากพบ token refresh disabled (no refresh token):
- ตรวจสอบว่าได้ระบุ
clientSecret - ตรวจสอบว่าได้ระบุ
refreshToken
การกำหนดค่า
การกำหนดค่าบัญชี
usernamestringrequiredชื่อผู้ใช้ของบอต (บัญชีที่ใช้ยืนยันตัวตน)
accessTokenstringrequiredโทเค็นการเข้าถึง OAuth ที่มี chat:read และ chat:write (การกำหนดค่าหรือตัวแปรสภาพแวดล้อมสำหรับบัญชีเริ่มต้น)
clientIdstringrequiredClient ID ของ Twitch (จาก Token Generator หรือแอปของคุณ) ไม่บังคับในสคีมา แต่จำเป็นสำหรับการเชื่อมต่อ
channelstringrequiredช่องที่จะเข้าร่วม
enabledbooleandefault: trueเปิดใช้งานบัญชีนี้
clientSecretstringไม่บังคับ: สำหรับการรีเฟรชโทเค็นอัตโนมัติ
refreshTokenstringไม่บังคับ: สำหรับการรีเฟรชโทเค็นอัตโนมัติ
expiresInnumberระยะเวลาจนโทเค็นหมดอายุเป็นวินาที (การติดตามการรีเฟรช)
obtainmentTimestampnumberการประทับเวลาเมื่อได้รับโทเค็น (การติดตามการรีเฟรช)
allowFromstring[]รายการอนุญาต ID ผู้ใช้ เมื่อตั้งค่าแล้ว ระบบจะไม่สนใจบทบาท
allowedRoles'Array<"moderator"requireMentionbooleandefault: trueกำหนดให้ต้อง @mention เพื่อเรียกใช้บอต
responsePrefixstringเขียนทับคำนำหน้าการตอบกลับขาออกสำหรับบัญชีนี้
ตัวเลือกผู้ให้บริการ
channels.twitch.enabled- เปิด/ปิดการเริ่มต้นช่องchannels.twitch.username/accessToken/clientId/channel- การกำหนดค่าบัญชีเดียวแบบเรียบง่าย (บัญชีdefaultโดยนัย; มีลำดับความสำคัญเหนือaccounts.default)channels.twitch.accounts.<accountName>- การกำหนดค่าหลายบัญชี (ฟิลด์บัญชีทั้งหมดด้านบน)channels.twitch.defaultAccount- ชื่อบัญชีที่จะใช้เป็นค่าเริ่มต้นchannels.twitch.markdown.tables- โหมดการแสดงผลตาราง Markdown (off|bullets|code|block)
ตัวอย่างฉบับเต็ม:
{ channels: { twitch: { enabled: true, username: "openclaw", accessToken: "oauth:abc123...", clientId: "xyz789...", channel: "yourchannel", clientSecret: "secret123...", refreshToken: "refresh456...", allowFrom: ["123456789"], accounts: { second: { username: "mybot", accessToken: "oauth:def456...", clientId: "uvw012...", channel: "your_channel", enabled: true, expiresIn: 14400, obtainmentTimestamp: 1706092800000, allowedRoles: ["moderator"], }, }, }, },}การทำงานของเครื่องมือ
เอเจนต์สามารถส่งข้อความ Twitch ผ่านการดำเนินการ send ของเครื่องมือข้อความ:
{ channel: "twitch", action: "send", to: "#mychannel", message: "Hello Twitch!",}to ไม่บังคับและมีค่าเริ่มต้นเป็น channel ที่กำหนดค่าไว้สำหรับบัญชี
ความปลอดภัยและการปฏิบัติการ
- ปฏิบัติต่อโทเค็นเสมือนรหัสผ่าน - ห้ามคอมมิตโทเค็นไปยัง git
- ใช้การรีเฟรชโทเค็นอัตโนมัติ สำหรับบอตที่ทำงานเป็นเวลานาน
- ใช้รายการอนุญาตของ ID ผู้ใช้ แทนชื่อผู้ใช้เพื่อควบคุมการเข้าถึง
- ตรวจสอบบันทึก เพื่อดูเหตุการณ์การรีเฟรชโทเค็นและสถานะการเชื่อมต่อ
- จำกัดขอบเขตโทเค็นให้น้อยที่สุด - ขอเฉพาะ
chat:readและchat:write - หากติดขัด: รีสตาร์ต Gateway หลังจากยืนยันว่าไม่มีกระบวนการอื่นครอบครองเซสชันอยู่
ขีดจำกัด
- 500 อักขระ ต่อข้อความ การตอบกลับที่ยาวกว่านี้จะถูกแบ่งตามขอบเขตคำ
- Markdown จะถูกนำออกก่อนส่ง (แชต Twitch เป็นข้อความธรรมดา และการขึ้นบรรทัดใหม่จะเปลี่ยนเป็นช่องว่าง)
- OpenClaw ไม่ได้เพิ่มการจำกัดอัตราของตนเอง โดยไคลเอนต์แชต Twurple จะจัดการขีดจำกัดอัตราของ Twitch
เนื้อหาที่เกี่ยวข้อง
- การกำหนดเส้นทางช่องทาง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ภาพรวมช่องทาง — ช่องทางที่รองรับทั้งหมด
- กลุ่ม — ลักษณะการทำงานของแชตกลุ่มและการควบคุมด้วยการกล่าวถึง
- การจับคู่ — การยืนยันตัวตนทาง DM และขั้นตอนการจับคู่
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความปลอดภัย