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 ระบบจะติดตั้งให้ตามต้องการ ใช้ชื่อแพ็กเกจล้วนเพื่อติดตามรุ่นปัจจุบัน และตรึงเวอร์ชันที่แน่นอนเฉพาะเมื่อต้องการให้การติดตั้งทำซ้ำได้ ต้องใช้ 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 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"], }, }, }, },}ปิดข้อกำหนดการกล่าวถึงด้วย @
โดยค่าเริ่มต้น requireMention คือ true หากต้องการตอบกลับข้อความที่ได้รับอนุญาตทั้งหมด:
{ channels: { twitch: { accounts: { default: { requireMention: false, }, }, }, },}การแก้ไขปัญหา
ขั้นแรก ให้เรียกใช้คำสั่งวินิจฉัย:
openclaw doctoropenclaw channels status --probeบอตไม่ตอบกลับข้อความ
- ตรวจสอบการควบคุมการเข้าถึง: ตรวจสอบว่า ID ผู้ใช้ของคุณอยู่ใน
allowFromหรือนำallowFromออกชั่วคราวแล้วตั้งค่าallowedRoles: ["all"]เพื่อทดสอบ - ตรวจสอบด่านการกล่าวถึง: เมื่อใช้
requireMention: true(ค่าเริ่มต้น) ข้อความต้องกล่าวถึงชื่อผู้ใช้ของบอตด้วย @ - ตรวจสอบว่าบอตอยู่ในช่อง: บอตจะเข้าร่วมเฉพาะช่องที่ระบุใน
channel
ปัญหาเกี่ยวกับโทเค็น
ข้อผิดพลาด "Failed to connect" หรือข้อผิดพลาดในการยืนยันตัวตน:
- ตรวจสอบว่า
accessTokenเป็นค่าโทเค็นการเข้าถึง OAuth (คำนำหน้าoauth:ไม่บังคับ) - ตรวจสอบว่าโทเค็นมีขอบเขต
chat:readและchat:write - หากใช้การรีเฟรชโทเค็น ให้ตรวจสอบว่าได้ตั้งค่า
clientSecretและrefreshToken
การรีเฟรชโทเค็นไม่ทำงาน
ตรวจสอบบันทึกเพื่อหาเหตุการณ์การรีเฟรช:
Using env token source for mybotAccess token refreshed for user 123456 (expires in 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กำหนดให้ต้องกล่าวถึงด้วย @ เพื่อเรียกใช้บอต
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
ที่เกี่ยวข้อง
- การกำหนดเส้นทางช่อง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ภาพรวมช่อง — ช่องทั้งหมดที่รองรับ
- กลุ่ม — ลักษณะการทำงานของแชตกลุ่มและด่านการกล่าวถึง
- การจับคู่ — การยืนยันตัวตนผ่านข้อความส่วนตัวและขั้นตอนการจับคู่
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความแข็งแกร่ง