คู่มือตัวควบคุม ท่าทาง และไอคอน Stream Deck ทั้งหมด
สร้างเวิร์กโฟลว์ที่เรียกได้
- ทริกเกอร์ที่มีชื่อStream Deck / API
- เงื่อนไขและแอ็กชันEvent Flow ที่คุณบันทึก
- ปลายทางFlow Actions, OBS หรือการเชื่อมต่ออื่น
- เปิด Event Flow จาก SSN สร้างโฟลว์เฉพาะหรือเลือก ปุ่ม Stream Deck / API เทมเพลต
- เพิ่ม เรียกจาก Stream Deck / API ใน Stream Deck และ API กลุ่มทริกเกอร์
- ตั้งชื่อว่า
intermissionชื่อต้องตรงทุกตัวและแยกตัวพิมพ์เล็กใหญ่ ใช้ชื่อสั้นที่อธิบายชัดเจน - เชื่อมเอาต์พุตกับ แสดงข้อความ (Show Text) ตั้งข้อความเป็น
Back in five minutesแล้วเลือกระยะเวลาและเลเยอร์ที่ต้องการ - บันทึกโฟลว์แล้วเปิดใช้ โฟลว์ที่ไม่บันทึกมีเฉพาะในตัวแก้ไข ส่วนโฟลว์ที่ปิดเรียกไม่ได้ เทมเพลตเริ่มต้นตั้งใจปิดจนกว่าคุณตั้งค่าเสร็จ
- เปิด โอเวอร์เลย์ Flow Actions ด้วยลิงก์ที่ SSN สร้าง สำหรับผู้ชม ให้เพิ่ม URL นั้นเป็นแหล่งเบราว์เซอร์ OBS ตัวแก้ไขเองไม่ใช่โอเวอร์เลย์
โฟลว์ที่ไม่มีทริกเกอร์ชื่อนี้เรียกผ่าน workflow API ไม่ได้ การเรียกเวิร์กโฟลว์ไม่แทรกแชตจำลองเข้าแผงด็อก เหตุการณ์ OBS เดิมและแชตปกติยังใช้ทริกเกอร์เดิม
โฟลว์รวมทริกเกอร์ที่มีชื่อกับตัวกรองผ่านโหนดตรรกะได้ แยกระบบอัตโนมัติที่ไม่เกี่ยวข้องเป็นคนละโฟลว์ เพราะทุกสาขาทริกเกอร์/ตรรกะในโฟลว์ที่เลือกจะประเมินด้วยเหตุการณ์ API การกดซ้ำเริ่มการทำงานแยก ใส่ ตัวจำกัดอัตรา (Rate Limiter) โหนดสถานะหลังทริกเกอร์หากต้องการคูลดาวน์
เชื่อมปุ่ม Stream Deck
- ตั้งค่าของปลั๊กอิน การตั้งค่า พร้อมเซสชัน SSN และรหัสผ่านหากมี ใช้ ทดสอบการเชื่อมต่อ (Test Connection).
- ลาก คำสั่งพรีเซ็ต (Preset Command) ลงบนปุ่ม
- เลือก Event Flow workflows → Run workflow.
- เลือก รีเฟรชเวิร์กโฟลว์ แล้วเลือกโฟลว์และทริกเกอร์ที่บันทึกไว้ ปุ่มเก็บทั้งรหัสโฟลว์และชื่อทริกเกอร์
- กดหนึ่งครั้งแล้วดูโอเวอร์เลย์ Flow Actions เครื่องหมายถูกบนปุ่มหมายถึง SSN ยอมรับการเรียก
ตัวเลือกเวิร์กโฟลว์คงการเลือกที่หายไปไว้ หลังเปลี่ยนชื่อ ปิด ลบ หรือนำเข้าโฟลว์ ให้รีเฟรชและเลือกใหม่ โฟลว์ที่นำเข้าเป็นโฟลว์ใหม่มีรหัสต่างกัน หากต้องการเลือกตามชื่อข้ามหลายโฟลว์ให้ใช้ช่อง Value แทน
คำสั่งกำหนดเอง: ตั้ง Action เป็น triggerWorkflow เว้น Target ว่าง แล้วป้อน {"trigger":"intermission"} เป็น Value แล้วเปิด รอคำตอบ (Wait for response) พรีเซ็ตมีตัวช่วยเลือกและกรองตามความสามารถ
หลายแอ็กชัน (Multi Actions): แต่ละคำขอเวิร์กโฟลว์ตอบรับการยอมรับอย่างรวดเร็ว ขั้น Stream Deck ถัดไปอาจเริ่มก่อนแอ็กชันหน่วงในเวิร์กโฟลว์จบ หากลำดับสำคัญ ให้จัดลำดับและหน่วงเวลาใน Event Flow
ส่งค่ากำหนดเอง
ในช่อง Value ของปุ่มหรือคำขอ API:
{
"trigger": "intermission",
"flowId": "YOUR_SAVED_FLOW_ID",
"data": { "name": "Back in five minutes", "minutes": 5 }
}ตั้ง Show Text เป็น {meta.workflow.data.name} Compare Property อ่านค่า meta.workflow.data.minutes Data เป็นออบเจ็กต์ JSON ที่ไม่บังคับ และจะอยู่ใน meta.workflow.data และไม่สามารถแทนตัวตนเหตุการณ์หรือให้สิทธิ์แชต
ไม่ใส่ flowId เพื่อเรียกทุกโฟลว์ที่เปิดใช้และมีชื่อทริกเกอร์ตรงกัน โหนดทริกเกอร์หลายตัวที่ตรงกันในโฟลว์เดียวก็ประเมินโฟลว์นั้นเพียงครั้งเดียว หากต้องการรันโฟลว์เดียว ให้คงรหัสจากตัวเลือกหรือคำตอบค้นหา
เหตุการณ์ที่ใช้ภายในโฟลว์ที่เลือกมี type: "api", event: "workflow_trigger", chatname: "Stream Deck / API" ค่าเปล่าสำหรับ chatmessage และข้อมูลด้านบน แชตปกติที่คัดลอกฟิลด์เหล่านั้นไม่สามารถเปิดทริกเกอร์ API ที่มีชื่อได้
ตัวอย่าง API
เปิด SSN ให้ทำงานไว้ นี่เป็นคำสั่งควบคุม Social Stream ระยะไกล ไม่ใช้ API AI/MCP ในเครื่องที่แยกของ SSApp เก็บรหัสเซสชันจริงเป็นส่วนตัว
ค้นหาทริกเกอร์ที่ใช้ได้
{"action":"getWorkflowTriggers","get":"list-1","apiid":"YOUR_SESSION"}คอลแบ็กมี result.payload.triggers:
{"triggers":[{"flowId":"flow-123","flowName":"Intermission","trigger":"intermission"}]}
เรียกเวิร์กโฟลว์ที่มีชื่อ
{
"action": "triggerWorkflow",
"value": {"trigger":"intermission","flowId":"flow-123","data":{"name":"Back shortly"}},
"get": "run-1",
"apiid": "YOUR_SESSION"
}ใช้ค่าที่ไม่ซ้ำ get ข้อความไม่ซ้ำสำหรับแต่ละคำขอ คอลแบ็กที่สำเร็จมี result.ok: true, result.status: "accepted", และ result.payload.matchedFlows การยอมรับหมายถึงพบโฟลว์ที่เปิดใช้และจัดให้ทำงานแล้ว ไม่ได้หมายความว่าแอ็กชันหน่วงเวลา เว็บฮุก คำสั่ง OBS หรือการเล่นสื่อทุกอย่างเสร็จแล้ว
WebSocket
เปิดใช้ การควบคุมส่วนขยายจากระยะไกลผ่าน API ใน SSN เชื่อมกับ wss://io.socialstream.ninja เข้าร่วมด้วย {"join":"YOUR_SESSION","out":1,"in":2} แล้วส่งคำขอด้านบน ช่อง 1 ส่งคำสั่งควบคุม ช่อง 2 ส่งคอลแบ็ก คุณไม่ต้องเปิดช่องแชตสำหรับเวิร์กโฟลว์
HTTP
เปิดการตั้งค่าควบคุม API ระยะไกลเดียวกัน แทนรหัสเซสชันตัวอย่างก่อนใช้:
POST https://io.socialstream.ninja/YOUR_SESSION
Content-Type: application/json
{"action":"triggerWorkflow","value":{"trigger":"intermission","data":{"name":"Back shortly"}}}สำหรับทริกเกอร์ที่มีชื่อแบบง่าย ใช้สิ่งนี้ได้ด้วย: GET https://io.socialstream.ninja/YOUR_SESSION/triggerWorkflow/null/intermission ส่วนที่สี่ของเส้นทางบรรจุ JSON ที่เข้ารหัส URL เพื่อส่งค่าแบบมีโครงสร้างได้ เข้ารหัสค่า JSON ทั้งหมดด้วย encodeURIComponent(JSON.stringify(value))ช่องส่งกำหนดเองใช้ ?channel=N.
P2P
โหมด P2P เริ่มต้นของปลั๊กอินส่งเพย์โหลดเดียวกันผ่านช่องข้อมูล VDO.Ninja เดิมของ SSN ไม่ต้องเปิดสวิตช์ WebSocket API บนเซิร์ฟเวอร์สำหรับ P2P ไคลเอนต์ P2P เดิมควรส่งคำขอนี้ผ่านการเชื่อมต่อควบคุม SSN ที่มีอยู่ ไม่ต้องเปิด API AI ในเครื่อง
ข้อผิดพลาดและความเข้ากันได้
WORKFLOW_NOT_FOUND: ไม่มีโฟลว์ที่บันทึกและเปิดใช้ตรงกับชื่อทริกเกอร์/รหัสโฟลว์INVALID_VALUE: ทริกเกอร์หาย/ไม่ถูกต้อง JSON ผิดรูปแบบ รหัสโฟลว์ไม่ถูกต้อง หรือ data ไม่ใช่ออบเจ็กต์CONTROL_UNAVAILABLE: SSN หรือการควบคุมโฮสต์ระยะไกลปิดอยู่TARGET_UNAVAILABLE: Event Flow ยังโหลดอยู่- ไฟล์ Social Stream รุ่นเก่าอาจไม่ประกาศแอ็กชันเหล่านี้ ตรวจ
getCapabilities→ssn.actions.triggerWorkflowและgetWorkflowTriggersต้องติดตั้งทั้งทริกเกอร์ใหม่และปลั๊กอินที่อัปเดต หมายเลขรุ่น SSApp อย่างเดียวไม่ระบุรุ่นไฟล์ Social Stream ที่โหลดจากระยะไกล
อย่าลองคำสั่งที่เปลี่ยนสถานะซ้ำอัตโนมัติเมื่อคำตอบรับหาย เพราะเวิร์กโฟลว์อาจเริ่มแล้ว ตรวจเอาต์พุตก่อน API นี้ไม่มีคิวสถานะการทำงาน
สิ่งที่แต่ละการเชื่อมต่อต้องมี
| แอ็กชันเวิร์กโฟลว์ | ปลายทาง/การตั้งค่าที่ต้องมี | สิ่งที่ต้องตรวจ |
|---|---|---|
| Show Text สื่อ เสียง และล้างเลเยอร์ | โอเวอร์เลย์ Flow Actions ที่เชื่อมต่อในเซสชันเดียวกัน ใช้แหล่งเบราว์เซอร์ OBS สำหรับเอาต์พุตผู้ชม | เอาต์พุตที่มองเห็น เลเยอร์ ระยะเวลา และเส้นทางเสียง คำสั่งสำเร็จไม่ได้ยืนยันว่าฉาก OBS มองเห็นอยู่ |
| ตัวควบคุม OBS | Flow Actions เชื่อมกับ OBS ด้วยที่อยู่/รหัสผ่านที่ตั้งไว้ และชื่อฉาก/แหล่งข้อมูลตรงกัน | สถานะ OBS จริง ดู คู่มือ OBS. |
| ปักหมุด/แสดงข้อความเด่น | แผงด็อกเริ่มต้นที่เชื่อมต่อ เลือกรหัสข้อความจริงหรือเพย์โหลดข้อความเต็ม | รายการปักหมุดแผงด็อกและโอเวอร์เลย์ข้อความเด่น ข้อความแชตว่างของทริกเกอร์ API ไม่ใช่แชตที่มีประโยชน์ด้วยตัวเอง |
| เรียกเว็บฮุก (Call Webhook) | URL วิธี HTTP และเนื้อหา JSON ในแอ็กชัน | คำตอบตัวรับและฟิลด์ข้อผิดพลาด Event Flow คำตอบรับ Stream Deck มาถึงก่อนผลลัพธ์ที่หน่วงหรือมาจากภายนอก |
| Send Message / ส่งต่อ | แหล่งข้อมูลที่เชื่อมต่อและเขียนได้ พร้อมปลายทางชัดเจน | แชตปลายทางจริง คำขอเวิร์กโฟลว์ไม่ได้อนุญาตให้ข้ามขีดจำกัดแพลตฟอร์ม |
| สินค้าและการสนับสนุน | สินค้าที่บันทึก/เปิดใช้และโอเวอร์เลย์การขาย | สถานะเลือก/ซ่อน/ตามตารางของ SSN ดู ตัวควบคุมสินค้า. |
| แจกของรางวัล ตั๋ว คะแนน | การแจกของรางวัล/ระบบคะแนนที่ตั้งไว้และตัวผู้กระทำที่เหมาะสม เหตุการณ์ API ที่มีชื่อไม่มีตัวตนผู้ชม | ใช้พรีเซ็ตแจกของรางวัลระดับโฮสต์สำหรับการควบคุมโฮสต์ อย่าถือเหตุการณ์ API เป็นการซื้อของผู้ชม ดู แจกของรางวัลและคะแนน. |
| TTS, Spotify, การพิมพ์, MIDI | การเชื่อมต่อ สิทธิ์ อุปกรณ์ หรือบัญชีของแต่ละการเชื่อมต่อ | ปลายทาง/อุปกรณ์จริง การติดตั้ง Stream Deck ไม่ได้ตั้งค่าการเชื่อมต่อเหล่านี้ |
คู่มือ Event Flow ฉบับเต็ม · ตัวอย่างใช้งาน · เอกสารอ้างอิง API
ท่าทางสำหรับตัวจับเวลาและแชต
ตัวจับเวลา: หมุนหนึ่งคลิกเพื่อ ±10 วินาทีตามค่าเริ่มต้น กดปุ่มหมุนค้างขณะหมุน เพื่อ ±1 นาที (6 เท่าของขั้นที่ตั้งไว้) กด/ปล่อยโดยไม่หมุนเพื่อเริ่ม/หยุดชั่วคราว แตะหน้าจอตัวจับเวลาเพื่อรีเฟรช กดค้างที่ หน้าจอ เพื่อรีเซ็ต การกดปุ่มหมุนจริงค้างอย่างเดียวไม่รีเซ็ต
ตรวจแชต: หมุนซ้ายเพื่อแชตเก่า ขวาเพื่อแชตใหม่ กดปุ่มหมุนเพื่อปักหมุดข้อความที่กำลังดู แตะหน้าจอเพื่อแสดงข้อความปักหมุดถัดไปเป็นข้อความเด่น กดหน้าจอค้างเพื่อยกเลิกปักหมุดข้อความที่กำลังดู เปิดแผงด็อกเริ่มต้นไว้ ในโหมด WebSocket เปิดส่งต่อแชตทางช่อง 4
เปิด Help and diagnostics → Controls, icons and workflow guide ในปลั๊กอินเพื่อดูคู่มือออฟไลน์ฉบับเต็ม แอ็กชันทั้งห้าประเภท ทุกพรีเซ็ต/ไอคอน พฤติกรรมรีเซ็ต ค่าเริ่มต้น และการแก้ปัญหา
เอกสารอ้างอิงรายการโหนด Event Flow
รายการโหนดมี 45 ทริกเกอร์ 67 แอ็กชัน โหนดตรรกะห้าโหนด และโหนดสถานะสี่โหนด ทุกรายการมีป้ายข้อความคู่กับสัญลักษณ์ เลือกโหนดเพื่อดูการตั้งค่าและสิ่งจำเป็นในการเชื่อมต่อ ไอคอนในรายการไม่ได้ยืนยันว่าปลายทางเชื่อมต่อแล้ว
ทริกเกอร์ กำหนดว่าโฟลว์เริ่มเมื่อใด เชื่อมเงื่อนไขด้วย AND/OR เมื่อจำเป็น แอ็กชัน ทำงานตามลำดับที่เชื่อม โหนดสถานะ จดจำค่าระหว่างเหตุการณ์ สำหรับคูลดาวน์ปุ่ม เลือก ตัวจำกัดอัตรา (Rate Limiter) (THROTTLE) ไม่ใช่แอ็กชัน Delay เพราะ Delay เลื่อนทุกครั้งออกไปและไม่ระงับการกดซ้ำ
ทริกเกอร์: Stream Deck และ API (1)
- ▶ เรียกจาก Stream Deck / API —
apiTrigger
ทริกเกอร์: 📣 เหตุการณ์สตรีม (9)
- 👋 ผู้ติดตามใหม่ (New Follower) —
eventNewFollower - ⭐ สมาชิกใหม่ (New Subscriber) —
eventNewSubscriber - 🔄 สมัครใหม่/ต่ออายุ (Resub/Renewal) —
eventResub - 🎁 สมาชิกของขวัญ (Gift Sub) —
eventGiftSub - 💰 บริจาค / ทิป (Donation / Tip) —
eventDonation - 🚀 Raid —
eventRaid - 💎 Cheer/Bits —
eventCheer - 📋 เหตุการณ์อื่น... (Other Event...) —
eventOther - ✏️ เหตุการณ์กำหนดเอง (Custom Event) —
eventCustom
ทริกเกอร์: OBS Studio (7)
- OBS เริ่มสตรีม (OBS Stream Started) —
obsStreamStarted - OBS หยุดสตรีม (OBS Stream Stopped) —
obsStreamStopped - OBS เริ่มบันทึก (OBS Recording Started) —
obsRecordingStarted - OBS หยุดบันทึก (OBS Recording Stopped) —
obsRecordingStopped - OBS เปลี่ยนฉาก (OBS Scene Changed) —
obsSceneChanged - สื่อ OBS เล่นจบ (OBS Media Ended) —
obsMediaEnded - OBS บันทึกรีเพลย์บัฟเฟอร์แล้ว (OBS Replay Buffer Saved) —
obsReplaybufferSaved
ทริกเกอร์: 💬 ข้อความแชต (6)
- 💬 ข้อความใดก็ได้ (Any Message) —
anyMessage - 🔍 ข้อความมี (Message Contains) —
messageContains - ▶️ ข้อความขึ้นต้นด้วย (Message Starts With) —
messageStartsWith - ⏹️ ข้อความลงท้ายด้วย (Message Ends With) —
messageEndsWith - 🟰 ข้อความเท่ากับ (Message Equals) —
messageEquals - 🔤 Regex ข้อความ (Message Regex) —
messageRegex
ทริกเกอร์: 📊 คุณสมบัติข้อความ (7)
- 📏 ความยาวข้อความ (Message Length) —
messageLength - 🔢 จำนวนคำ (Word Count) —
wordCount - 😀 มีอีโมจิ (Contains Emoji) —
containsEmoji - 🔗 มีลิงก์ (Contains Link) —
containsLink - 💰 มีการบริจาค (Has Donation) —
hasDonation - ⚖️ เปรียบเทียบคุณสมบัติ (Compare Property) —
compareProperty - ⚙️ ตัวกรองคุณสมบัติข้อความ (Message Properties Filter) —
messageProperties
ทริกเกอร์: 👤 ผู้ใช้และแหล่งข้อมูล (6)
- 📡 จากแหล่งข้อมูล (From Source) —
fromSource - 📺 จากชื่อช่อง (From Channel Name) —
fromChannelName - 👤 จากผู้ใช้ (From User) —
fromUser - 👑 บทบาทผู้ใช้ (User Role) —
userRole - 🧠 ผู้ใช้ถูกจดจำแล้ว (User Is Remembered) —
userMemoryContains - 🎁 ใช้คะแนนช่องแลกรางวัล (Channel Point Redemption) —
channelPointRedemption
ทริกเกอร์: ⏰ เวลาและการสุ่ม (4)
- 🎲 โอกาสสุ่ม (Random Chance) —
randomChance - ⏰ ช่วงเวลา (Time Interval) —
timeInterval - 🎤 เมื่อฉันพูดว่า... (When I say...) —
voicePhrase - 🕐 เวลาของวัน (Time of Day) —
timeOfDay
ทริกเกอร์: 🎹 MIDI (3)
- 🎹 MIDI Note On —
midiNoteOn - 🎹 MIDI Note Off —
midiNoteOff - 🎛️ MIDI Control Change —
midiCC
ทริกเกอร์: 📦 ขั้นสูง (2)
- 📣 ประเภทเหตุการณ์ (ขั้นสูง) (Event Type (Advanced)) —
eventType - โค้ดกำหนดเอง (Custom Code) —
customJs
แอ็กชัน: 💬 การจัดการข้อความ (14)
- 🚫 บล็อกข้อความ (Block Message) —
blockMessage - ✅ คืนข้อความ (Return Message) —
returnMessage - ⚡ ทำต่อแบบอะซิงโครนัส (Continue Async) —
continueAsync - ✏️ แก้ไขข้อความ (Modify Message) —
modifyMessage - ⬅️ เพิ่มส่วนหน้า (Add Prefix) —
addPrefix - ➡️ เพิ่มส่วนท้าย (Add Suffix) —
addSuffix - 🔄 ค้นหาและแทนที่ (Find & Replace) —
findReplace - ✂️ ลบข้อความ (Remove Text) —
removeText - 🎨 ตั้งคุณสมบัติ (Set Property) —
setProperty - 🌟 แสดงข้อความเด่น (Feature Message) —
featureMessage - ปักหมุดข้อความ (Pin Message) —
pinMessage - 💬 ส่งข้อความ (Send Message) —
sendMessage - 📢 ส่งต่อแชต (Relay Chat) —
relay - 🪞 ตัวกรองข้อความสะท้อน (Reflection Filter) —
reflectionFilter
แอ็กชัน: 🔌 การเชื่อมต่อ (6)
- เรียกโค้ดกำหนดเอง (Execute Custom Code) —
customJs - 🖨️ พิมพ์ฉลากความร้อน (Print Thermal Label) —
printThermal - 🌐 เรียกเว็บฮุก (Call Webhook) —
webhook - ⬆️ เพิ่มคะแนน (Add Points) —
addPoints - ⬇️ ใช้คะแนน (Spend Points) —
spendPoints - 🎁 แจกของรางวัล / ตั๋ว (Giveaway / Tickets) —
giveawayControl
แอ็กชัน: 🎨 สื่อและเอฟเฟกต์ (7)
- 🖼️ แสดงโอเวอร์เลย์สื่อ (Display Media Overlay) —
playTenorGiphy - 👤 แสดงอวาตาร์ (Show Avatar) —
showAvatar - 🛍 สินค้าและการสนับสนุน (Products & Support) —
commerceControl - 📝 แสดงข้อความ (Show Text) —
showText - 🗑️ ล้างเลเยอร์ (Clear Layer) —
clearLayer - 🔊 เล่นคลิปเสียง (Play Audio Clip) —
playAudioClip - ⏱️ หน่วงเวลา (Delay) —
delay
แอ็กชัน: 🎬 OBS Studio (14)
- 🎬 เปลี่ยนฉาก (Change Scene) —
obsChangeScene - 👁️ สลับแหล่งข้อมูล (Toggle Source) —
obsToggleSource - 📝 ตั้งข้อความแหล่งข้อมูล (Set Text Source) —
obsSetText - ⏯️ ควบคุมแหล่งสื่อ (Control Media Source) —
obsMediaControl - 🔊 ตั้งระดับเสียงแหล่งข้อมูล (Set Source Volume) —
obsSetVolume - 🔄 รีเฟรชแหล่งเบราว์เซอร์ (Refresh Browser Source) —
obsRefreshBrowser - 🎨 สลับฟิลเตอร์ (Toggle Filter) —
obsSetSourceFilter - 🔇 ปิด/เปิดเสียง (Mute/Unmute Audio) —
obsMuteSource - 🔴 เริ่มบันทึก (Start Recording) —
obsStartRecording - ⏹️ หยุดบันทึก (Stop Recording) —
obsStopRecording - 📡 เริ่มสตรีม (Start Streaming) —
obsStartStreaming - ⏹️ หยุดสตรีม (Stop Streaming) —
obsStopStreaming - ⏺️ ควบคุมรีเพลย์บัฟเฟอร์ (Control Replay Buffer) —
obsReplayBufferControl - 💾 บันทึกรีเพลย์บัฟเฟอร์ (Save Replay Buffer) —
obsReplayBuffer
แอ็กชัน: 🎵 Spotify (10)
- ⏭️ ข้ามเพลง (Skip Track) —
spotifySkip - ⏮️ เพลงก่อนหน้า (Previous Track) —
spotifyPrevious - ⏸️ หยุดชั่วคราว (Pause) —
spotifyPause - ▶️ ทำต่อ (Resume) —
spotifyResume - ⏯️ สลับเล่น/หยุดชั่วคราว (Toggle Play/Pause) —
spotifyToggle - 🔊 ตั้งระดับเสียง (Set Volume) —
spotifyVolume - 📋 เพิ่มเข้าคิว (Add to Queue) —
spotifyQueue - 🎵 ประกาศเพลงที่เล่น (Announce Now Playing) —
spotifyNowPlaying - 🔀 สลับสุ่มเพลง (Toggle Shuffle) —
spotifyShuffle - 🔁 ตั้งโหมดเล่นซ้ำ (Set Repeat Mode) —
spotifyRepeat
แอ็กชัน: 🔊 ข้อความเป็นเสียง (5)
- 🗣️ อ่านข้อความ (Speak Text) —
ttsSpeak - 🔇 สลับ TTS (Toggle TTS) —
ttsToggle - ⏭️ ข้าม TTS (Skip TTS) —
ttsSkip - 🗑️ ล้างคิว TTS (Clear TTS Queue) —
ttsClear - 🔊 ตั้งระดับเสียง TTS (Set TTS Volume) —
ttsVolume
แอ็กชัน: 🎹 MIDI (2)
- 🎹 ส่งโน้ต (Send Note) —
midiSendNote - 🎛️ ส่ง Control Change —
midiSendCC
แอ็กชัน: 🧠 หน่วยความจำผู้ใช้ (4)
- 🧠 จดจำผู้ใช้ (Remember User) —
rememberUser - 👋 ลืมผู้ใช้ (Forget User) —
forgetUser - 🧹 ล้างผู้ใช้ทั้งหมด (Clear All Users) —
clearUserMemory - 🎟️ สุ่มเลือกผู้ใช้ (Pick Random User) —
pickRandomUser
แอ็กชัน: 🔧 ควบคุมสถานะ (5)
- 🚦 ตั้งสถานะเกต (Set Gate State) —
setGateState - 🔄 รีเซ็ตโหนดสถานะ (Reset State Node) —
resetStateNode - 🔢 ตั้งค่าตัวนับ (Set Counter Value) —
setCounter - ➕ เพิ่มตัวนับ (Increment Counter) —
incrementCounter - ตรวจตัวนับ (Check Counter) —
checkCounter
โหนดตรรกะและสถานะ
- 🔀 เกต AND —
AND - 🔄 เกต OR —
OR - 🚫 เกต NOT —
NOT - 🎲 เกต RANDOM —
RANDOM - 🚫 ตรวจคำไม่เหมาะสม (Check Bad Words) —
CHECK_BAD_WORDS - 🚦 สวิตช์เปิด/ปิด (On/Off Switch) —
GATE - 🔢 ตัวนับ (Counter) —
COUNTER - ⏲️ ตัวจำกัดอัตรา (Rate Limiter) —
THROTTLE - 🧠 หน่วยความจำผู้ใช้ (User Memory) —
USER_MEMORY
ตัวกรองข้อความ คะแนนผู้ชม และแอ็กชันผู้ใช้ที่จดจำต้องมีข้อมูลข้อความ/ผู้ใช้ที่มีความหมาย ปุ่มโฮสต์ไม่ได้ระบุผู้ชมจริงหรือเป้าหมายตอบกลับต้นทาง เลือกตัวควบคุมโฮสต์หรือปลายทางที่ตั้งไว้อย่างชัดเจน อย่าใช้เวิร์กโฟลว์ที่มีชื่อเพื่อปลอมเป็นผู้ชม
สำหรับรายละเอียดการเชื่อมโหนด ดู คู่มือ Event Flow, คู่มือโหนดสถานะ, คู่มือหน่วยความจำผู้ใช้, และ คู่มือ OBS.
ไล่แก้ความล้มเหลว
- เริ่มจากโฟลว์ Show Text แบบง่ายและตรวจเอาต์พุต
- บันทึกและเปิดใช้ แล้วรีเฟรชรายการเวิร์กโฟลว์ Stream Deck ตรวจทั้งชื่อทริกเกอร์และรหัสโฟลว์
- ยืนยันว่าเปิด SSN สถานะเชื่อมต่อเป็น Online และโอเวอร์เลย์ปลายทางเชื่อมเซสชันเดียวกัน
- ตรวจคอลแบ็ก API หรือข้อมูลวินิจฉัยปลั๊กอินเพื่อหาข้อผิดพลาดการค้นหา/ตรวจสอบ หากล้มเหลวหลังยอมรับแล้ว ให้ตรวจปลายทางและบันทึกการทำงาน Event Flow
- เพิ่มการเชื่อมต่อทีละอย่าง ทดสอบการกดซ้ำ โฟลว์ที่ปิด และการเชื่อมต่อใหม่ก่อนใช้จริง
แผงทดสอบแชตปกติของตัวแก้ไขส่งเหตุการณ์แชต ไม่ได้จำลองเป็นทริกเกอร์ API ที่มีชื่อ ทดสอบทริกเกอร์นี้ผ่าน Stream Deck หรือ API เพื่อยืนยันเส้นทางทั้งหมด