Developer and self-hosted

Twitch

รองรับแชต Twitch ผ่านอินเทอร์เฟซแชต (IRC) ของ Twitch โดยใช้ไคลเอนต์ Twurple OpenClaw ลงชื่อเข้าใช้ด้วยบัญชีบอต Twitch เข้าร่วมหนึ่งช่องต่อบัญชีที่กำหนดค่า และตอบกลับในช่องนั้น

การติดตั้ง

Twitch จัดส่งในรูปแบบ Plugin อย่างเป็นทางการ และไม่ได้เป็นส่วนหนึ่งของการติดตั้งแกนหลัก

รีจิสทรี npm

bash
openclaw plugins install @openclaw/twitch

เช็กเอาต์ในเครื่อง

bash
openclaw plugins install ./path/to/local/twitch-plugin

plugins install จะลงทะเบียนและเปิดใช้ Plugin เมื่อเลือก Twitch ระหว่าง openclaw onboard หรือ openclaw channels add ระบบจะติดตั้งให้ตามต้องการ ใช้ชื่อแพ็กเกจล้วนเพื่อติดตามรุ่นปัจจุบัน และตรึงเวอร์ชันที่แน่นอนเฉพาะเมื่อต้องการให้การติดตั้งทำซ้ำได้ ต้องใช้ OpenClaw 2026.4.10 หรือใหม่กว่า

รายละเอียด: Plugin

การตั้งค่าอย่างรวดเร็ว

  • ติดตั้ง Plugin

    ดูการติดตั้งด้านบน

  • สร้างบัญชีบอต Twitch

    สร้างบัญชี Twitch เฉพาะสำหรับบอต (หรือใช้บัญชีที่มีอยู่)

  • สร้างข้อมูลรับรอง

    ใช้ Twitch Token Generator:

    • เลือก 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

    bash
    openclaw gateway run
  • การกำหนดค่าขั้นต่ำ:

    json5
    {  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 แล้วเพิ่ม:

    json5
    {  channels: {    twitch: {      clientSecret: "your_client_secret",      refreshToken: "your_refresh_token",    },  },}

    เมื่อตั้งค่าทั้งสองอย่าง Plugin จะใช้ผู้ให้บริการยืนยันตัวตนที่รองรับการรีเฟรช ซึ่งต่ออายุโทเค็นก่อนหมดอายุและบันทึกการรีเฟรชแต่ละครั้ง หากไม่มี refreshToken ระบบจะบันทึก token refresh disabled (no refresh token) และหากไม่มี clientSecret ระบบจะย้อนกลับไปใช้โทเค็นแบบคงที่ (ไม่รีเฟรช)

    การรองรับหลายบัญชี

    ใช้ channels.twitch.accounts พร้อมข้อมูลรับรองแยกตามบัญชี ดูรูปแบบที่ใช้ร่วมกันได้ที่การกำหนดค่า

    ตัวอย่าง (บัญชีบอตหนึ่งบัญชีในสองช่อง):

    json5
    {  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 ผู้ใช้ (ปลอดภัยที่สุด)

    json5
    {  channels: {    twitch: {      accounts: {        default: {          allowFrom: ["123456789", "987654321"],        },      },    },  },}

    ตามบทบาท

    json5
    {  channels: {    twitch: {      accounts: {        default: {          allowedRoles: ["moderator", "vip"],        },      },    },  },}

    ปิดข้อกำหนดการกล่าวถึงด้วย @

    โดยค่าเริ่มต้น requireMention คือ true หากต้องการตอบกลับข้อความที่ได้รับอนุญาตทั้งหมด:

    json5
    {  channels: {    twitch: {      accounts: {        default: {          requireMention: false,        },      },    },  },}

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

    ขั้นแรก ให้เรียกใช้คำสั่งวินิจฉัย:

    bash
    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
    การรีเฟรชโทเค็นไม่ทำงาน

    ตรวจสอบบันทึกเพื่อหาเหตุการณ์การรีเฟรช:

    text
    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 (จากการกำหนดค่าหรือตัวแปรสภาพแวดล้อมสำหรับบัญชีเริ่มต้น)

    clientIdstringrequired

    Client 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)

    ตัวอย่างฉบับเต็ม:

    json5
    {  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 ของเครื่องมือส่งข้อความ:

    json5
    {  channel: "twitch",  action: "send",  to: "#mychannel",  message: "Hello Twitch!",}

    to ไม่บังคับ และมีค่าเริ่มต้นเป็น channel ที่กำหนดค่าไว้ของบัญชี

    ความปลอดภัยและการปฏิบัติการ

    • ปฏิบัติต่อโทเค็นเหมือนรหัสผ่าน - ห้ามคอมมิตโทเค็นไปยัง git
    • ใช้การรีเฟรชโทเค็นอัตโนมัติ สำหรับบอตที่ทำงานเป็นเวลานาน
    • ใช้รายการอนุญาต ID ผู้ใช้ แทนชื่อผู้ใช้สำหรับการควบคุมการเข้าถึง
    • เฝ้าติดตามบันทึก สำหรับเหตุการณ์การรีเฟรชโทเค็นและสถานะการเชื่อมต่อ
    • จำกัดขอบเขตโทเค็นให้น้อยที่สุด - ขอเฉพาะ chat:read และ chat:write
    • หากติดขัด: เริ่ม Gateway ใหม่หลังจากยืนยันว่าไม่มีกระบวนการอื่นเป็นเจ้าของเซสชัน

    ขีดจำกัด

    • 500 อักขระ ต่อข้อความ การตอบกลับที่ยาวกว่าจะถูกแบ่งเป็นส่วนตามขอบเขตของคำ
    • Markdown จะถูกนำออกก่อนส่ง (แชต Twitch เป็นข้อความธรรมดา และบรรทัดใหม่จะเปลี่ยนเป็นช่องว่าง)
    • OpenClaw ไม่เพิ่มการจำกัดอัตราด้วยตัวเอง ไคลเอนต์แชต Twurple จะจัดการขีดจำกัดอัตราของ Twitch

    ที่เกี่ยวข้อง

    Was this useful?
    On this page

    On this page