Dokumentacja zdarzeń na żywo

Ta strona opisuje kanoniczne dane zdarzeń emitowane przez Social Stream Ninja dla głównych platform. Używaj jej jako wspólnego źródła prawdy przy podłączaniu nowych źródeł, rozwiązywaniu problemów z integracjami lub ujednolicaniu etykiet interfejsu. Krótszą tabelę dla odbiorców znajdziesz w Zgodność zdarzeń i alertów.

Ważne: Dostępność zdarzeń zależy od źródła, uprawnień i ustawień przechwytywania. Aby ukryć wiersze oznaczone jako zdarzenia w doku lub nakładkach wyróżnionych wiadomości, dodaj &hideevents lub &hideallevents. Aby ukryć wybrane zdarzenia, użyj &filterevents=subscription_gift,new_follower,gifted. Te filtry mogą również ukrywać płatne wiersze zawierające event; zwykłe wiersze wpłat bez znacznika zdarzenia nie są dopasowywane przez filtry zdarzeń. Inne filtry wiadomości nadal obowiązują.
Wybierz metodę przechwytywania: Dla YouTube, Twitcha i Kicka Tryb WebSocket zwykle zapewnia szerszą obsługę zdarzeń. Standardowe przechwytywanie DOM odczytuje wiersze i karty faktycznie renderowane na stronie. Super Chat, Super Sticker i prezenty Jewel YouTube mają ścieżki przechwytywania w obu trybach; inne zdarzenia prezentów, napiwków i członkostw zależą od źródła. Obsługiwane ścieżki i wymagane ustawienia znajdziesz w tabelach platform.
Tworzysz automatyzacje? Zobacz Przewodnik po Event Flow aby dowiedzieć się, jak używać tych danych zdarzeń we własnych wyzwalaczach, alertach i przepływach. Przewodnik zawiera Dokumentacja zmiennych szablonów do formatowania tekstu.
Struktura danych: Wiersze czatu typu wpłata powinny używać hasDonation i opcjonalne donoValue. Nie ustawiaj event: "donation" tylko dlatego, że zwykły wiersz czatu/napiwku ma wartość; używaj konkretnych nazw zdarzeń tylko dla rzeczywistych działań platformy lub typów płatnych elementów, takich jak superchat, supersticker, gift lub jeweldonation. Użyj meta tylko na dodatkowe uporządkowane dane, których odbiorcy faktycznie potrzebują i których istniejące pola jeszcze nie obejmują.

Szybki przegląd dostępności funkcji

Użyj tej tabeli, aby sprawdzić, jakie typy alertów obecnie dostarcza każda metoda przechwytywania. Szczegółowe uwagi o danych znajdują się poniżej.

Dedykowane Multi-Stream Alert Box grupuje zdarzenia na żywo w sześć podstawowych kategorii alertów: Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host i Purchase, oraz dwie opcjonalnie włączane kategorie (Auction i Hype Train) włączane parametrami URL. Wyprowadza te kategorie z istniejących event, membership, subtitle, hasDonation i meta pola udokumentowane tutaj; osobny format danych nie jest wymagany.

Źródło Nowi subskrybenci / członkowie Nowi obserwujący Wpłaty Liczniki i dodatki
YouTube (most Data API) Dołączenia, odnowienia i prezenty członkostwa Indywidualne alerty o subskrybentach* + sumy Super Chat i Super Sticker Sumy widzów, subskrybentów i wyświetleń (odpytywane)
Twitch – przechwytywanie DOM Wiersze pakietów prezentów i powiadomienia o odbiorcach - Bity oznaczone przez hasDonation Liczba widzów, karty nagród i karty wyróżnień społeczności
Twitch – EventSub/WebSocket Natychmiastowe subskrypcje, odnowienia i prezenty Natychmiastowe obserwowania + suma obserwujących Cheers, Power-upy i wykorzystanie punktów kanału Sumy widzów/subskrybentów/obserwujących, status transmisji, powiadomienia reklam
TikTok Live - Karty obserwowania (gdy TikTok je wyświetla) Prezenty przeliczone na sumę monet Liczba widzów, alerty dołączenia i burze polubień
YouNow - Aktywność fanów i widowni - Liczba widzów z panelu widowni na żywo
Favorited Studio - - - Liczba widzów z karty widzów na żywo
Whatnot - - - Liczba widzów, alerty dołączenia, metadane aukcji na żywo, produkty i obrazy stanu losowań
eBay Live - - - Liczba widzów, liczba obserwujących, obrazy stanu kart wydarzeń na żywo, metadane stopki aukcji (gdy udostępnione), serduszka reakcji i metadane nadchodzących wydarzeń
Pole alertów Streamlabs Subskrypcje, prezenty, sponsorzy, obserwowania Cheer/bity, wpłaty (z walutą) Cheer/bity, wpłaty (hasDonation) Gdy pole alertów jest otwarte; dostępne również przez sources/websocket/streamlabs.html token gniazda
OBS Flow Actions - - - Zdarzenia wyjścia OBS, scen, bufora powtórek i zakończenia multimediów dla Event Flow, gdy actions.html jest połączone z OBS WebSocket
Kick – DOM - - - Liczba widzów i podstawowe komunikaty systemowe nagród/prezentów; do bogatszych alertów użyj mostu Kick
Kick – WebSocket/most Nowe subskrypcje, odnowienia i prezenty Alerty obserwowania + suma obserwujących Zdarzenia wsparcia/napiwków (kwota + waluta) Status transmisji, realizacje nagród i metadane profilu
Facebook Live - - Gwiazdki, gdy są widoczne w DOM Wiersze czatu, gwiazdki i odpytywanie liczby widzów
Rumble – przechwytywanie DOM - - Widoczne ceny Rant Czat, przychodzące rajdy i odpytywanie liczby widzów
Rumble – WebSocket/URL API Nowe i podarowane subskrypcje Alerty obserwowania + suma obserwujących Ranty/napiwki (kwota + waluta) Sumy widzów, sumy subskrybentów, status transmisji i strumień czatu
Streamplace - - - Liczba widzów oraz nazwy, kolory, odznaki, odpowiedzi i łącza czatu
WorldsWave - - Etykiety wpłat, jeśli są obecne Wyrenderowany czat na żywo oraz opcjonalne aktualizacje liczby widzów
CHZZK - - Widoczne wiersze wpłat cheese Wiersze czatu, obrazy odznak, emotki i odpytywanie liczby widzów
BEAM - - - Wiersze czatu i odpytywanie liczby widzów, gdy strona samego czatu udostępnia licznik widzów
Seal Team Sloth - - - Wyrenderowane wiersze czatu osobnego okna oraz viewer_update odpytuje przy włączonej liczbie widzów
Castyr - - - Wyrenderowane wiersze czatu osobnego okna oraz opcjonalne aktualizacje liczby widzów
RPLAY - - - Po zalogowaniu /live/chat/box/ osobne okno: type: "rplay" czat, awatary, obrazy odznak poziomów i emotki. Napiwki w monetach zachowują kwotę/jednostkę w hasDonation do wspólnego przeliczania USD, bez zdarzenia wpłaty. Opcjonalnie włączane viewer_update odpytywania używają całkowitego meta z publicznego punktu końcowego transmisji RPLAY. Przekazywane wiersze Twitcha są wykluczone.
FLEX TV - - - Wyrenderowane wiersze czatu z nazwami, kolorami autorów, obrazami odznak i metadanymi członków

*Alerty o subskrybentach YouTube są odpytywane i mogą być opóźnione lub niekompletne. Dokumentacja API nie gwarantuje stałego czterogodzinnego okna dostarczenia. Zobacz oficjalne ograniczenia API subskrypcji.

Przegląd pól

data oznacza tutaj obiekt wiadomości, a nie dodatkową otoczkę do dodania. Wiersze czatu i zdarzenia zawierające tylko metadane mają różne struktury: liczniki i obrazy stanu statusu mogą pomijać chatname/chatmessage. W tabelach platform wiadomość opisuje zwykły wiersz czatu, a nie dosłowny event: "message".

Pole Struktura Użycie
data.type ciąg tekstowy Identyfikator źródła używany przez nakładki, filtry i Event Flow. Instagram zachowuje czat na żywo jako instagramlive a komentarze poza transmisją jako instagram. Zobacz Przewodnik po typach źródeł dla wariantów, ogólnych źródeł i routingu wychodzącego.
data.chatname ciąg tekstowy Nazwa wyświetlana dostarczona przez źródło, używana przez przetwarzanie wiadomości i wyjścia inne niż nakładki. Skonfigurowany alias nazwy wyświetlanej użytkownika może zastąpić tę wartość tylko w kopiach danych transportowych doku i nakładek.
data.username ciąg tekstowy Nazwa użytkownika ze źródła, jeśli dostępna. Dane doku lub nakładki z zastosowanym aliasem mogą dodawać to pole, aby zachować oryginalne chatname dla akcji użytkownika; kanoniczna wiadomość pozostaje bez zmian.
data.userid ciąg tekstowy Identyfikator użytkownika właściwy dla platformy. Akcje użytkownika preferują tę wartość zamiast username i chatname.
data.platformciąg tekstowy (opcjonalne)Niektóre integracje dołączają to obok type. Wiele adapterów źródeł pomija to pole; użyj type do routingu źródła.
data.idciąg tekstowy | liczba (opcjonalne)Identyfikator wiadomości lub zdarzenia. Jego znaczenie zależy od źródła i transportu; nie zakładaj, że zawsze jest to natywny identyfikator moderacji platformy. Użyj meta.messageId gdy adapter udostępnia to do synchronizacji usuwania.
data.donoValueliczba (opcjonalne)Liczbowy odpowiednik USD dostarczony przez źródło, w tym oszacowania. Prawidłowa wartość (w tym zero) zastępuje przeliczenie currency.js. Bez niej odbiorcy szacują USD z hasDonation i kontekstu źródła. Oryginalne kwoty i jednostki pozostają w hasDonation i istniejących metadanych dostawcy.
data.chatbadgestablica | ciąg tekstowy (opcjonalne)Adresy URL obrazów odznak lub obiekty odznak (type: "img" z src, type: "svg" z html lub type: "text" z text). Przekaźnik zachowuje dosłowną etykietę odznaki tekstowej w opcjonalnym rawText i tworzy zakodowane text dla starszych nakładek. Przy kolejnych przekazaniach odtwórz text z rawText; nie koduj znaków specjalnych w text ponownie. Obecne renderery wyświetlają rawText dosłownie, gdy są obecne, a w przeciwnym razie zachowuj starszą obsługę zakodowanego tekstu. To pole reprezentacji, a nie pozwolenie na renderowanie HTML. Starsze źródła mogą wysyłać pojedynczy ciąg HTML zamiast tablicy. Nakładki renderujące odznaki akceptują oba formaty i lokalnie oczyszczają HTML oraz adresy URL odznak, również gdy nadawcą jest starsze rozszerzenie. Nieprawidłowe odznaki nie mogą uniemożliwiać wyświetlenia wiadomości czatu lub członkostwa.
data.event ciąg tekstowy | wartość logiczna Identyfikator aktywności systemowej (na przykład viewer_update, subscription_gift, giftpurchase). Zwykły czat powinien pozostawiać to pole puste/false, aby nakładki odróżniały komunikaty systemowe od rozmowy.
data.chatmessage ciąg tekstowy Treść wiadomości. Może zawierać oczyszczony HTML nadający się do renderowania tylko wtedy, gdy data.textonly ma wartość false.
data.textonly wartość logiczna Dotyczy tylko data.chatmessage. true oznacza renderowanie chatmessage jako zwykły tekst, zachowując dosłowne znaczniki i tekst przypominający encje; nie dekoduj, nie oczyszczaj jako HTML ani nie dodawaj znaczników formatowania do tej treści. Zastosuj styl zdarzenia do wyświetlanego elementu. false oznacza chatmessage może zawierać oczyszczony HTML nadający się do renderowania; starsze wiadomości bez tej flagi zachowują takie zachowanie HTML. Inne zwykłe pola są zwykłym tekstem, z wyjątkiem pól multimediów, takich jak chatimg i contentimg. Wyświetlaj pola zwykłego tekstu za pomocą textContent, albo jednokrotnie zakoduj znaki specjalne podczas tworzenia szablonu HTML; nie usuwaj ani wielokrotnie nie dekoduj ich zawartości.
data.contentimg ciąg tekstowy (opcjonalne) Adres URL obrazu treści lub obsługiwanego medium. W rozszerzeniu i aplikacji komputerowej opcjonalnie włączane allowExternalGifs ustawienie wypełnia puste pole pierwszym bezpośrednim łączem GIF HTTP(S) z tekstu wiadomości lub łącza HTML. Ścieżka URL musi kończyć się na .gif (bez rozróżniania wielkości liter); parametry zapytania i fragmenty są zachowywane. Nie wymaga klucza API, zachowuje chatmessage i istniejące załączniki oraz uwzględnia removeContentImage. Opcjonalne hideExternalGifUrl ustawienie dodaje meta.hideExternalGifUrl: true; dok i nakładka wyróżnionych wiadomości ukrywają wtedy pasujące łącze GIF dopiero po załadowaniu obrazu, zachowując otaczający tekst i oryginalne dane. Obrazy, które się nie załadują lub przekroczą limit czasu, zwijają kontener załącznika i pozostawiają widoczne łącze. Nakładka samych GIF-ów próbuje bezpośrednio wyświetlić obraz, jeśli pobranie bajtów obrazu się nie powiedzie; gdy czas animacji jest niedostępny, używa skonfigurowanego czasu wyświetlania. Nieudane lub zablokowane ładowanie przesuwa kolejkę. Nie dodaje event lub zmień źródło type. Zewnętrzne obrazy nie podlegają filtrowaniu treści i mogą się nie załadować, jeśli host blokuje osadzanie.
data.membership ciąg tekstowy Czytelny stan członkostwa, taki jak MEMBERSHIP, new_sponsor, gift_recipient. Interfejsy używają go do odznak, filtrów i ogłoszeń.
data.subtitle ciąg tekstowy Dodatkowy opis (staż członkostwa, podwyższenie poziomu, kto podarował...). Utrzymuj go krótkim i wyłącznie tekstowym, aby nakładki mogły umieścić go pod nazwą wyświetlaną.
data.hasDonation ciąg tekstowy Kwota pieniężna lub liczba wirtualnych prezentów ($5.00, 500 bits, 300 coins). Wypełnij nawet wtedy, gdy data.event jest puste, aby nakładki wpłat mogły je wykryć.
data.meta liczba | obiekt | ciąg tekstowy (starsze) Używaj zwykłych liczb całkowitych dla pojedynczych liczników (widzów, obserwujących, subskrybentów) i obiektów dla bogatszego kontekstu. Niektóre starsze zdarzenia, takie jak Twitch DOM community_highlight, zawierają ciąg tekstowy. Sprawdź strukturę danego zdarzenia przed odczytaniem właściwości obiektu; nowe uporządkowane szczegóły należą do obiektu.
data.firsttime wartość logiczna Ustaw na true gdy włączono wykrywanie osób piszących po raz pierwszy, lokalną bazę danych i jest to pierwsza zapisana wiadomość czatu danego użytkownika/źródła. Dok używa tego do wyróżniania pierwszej wiadomości i filtrów sygnału dźwiękowego pierwszej wiadomości; opcjonalne ustawienie odznaki pierwszej wiadomości dodaje odznakę liścia na początku chatbadges.
data.lastactivity liczba Znacznik czasu Unix w sekundach poprzedniej zapisanej aktywności czatu danego użytkownika, gdy włączono wykrywanie osób piszących po raz pierwszy i lokalną bazę danych. Pomijany dla zupełnie nowych użytkowników.

Transport sterowania nakładkami jest oddzielny od przechwytywanego czatu/zdarzeń. Zaktualizowane odbiorniki używają ssnControl kopertę zawierającą dostarczenie id, wyróżnij target, opcjonalny kanał odpowiedzi i identyfikator klienta obrazu stanu. Istniejące treści funkcji pozostają nienaruszone. Publiczne sterowanie funkcjami używa kanału 7; Actions zachowuje kanał 6. Stan ankiet i map zawiera należący do prowadzącego epoch, revision i reset znacznik; Timer, Ticker i Spotify używają ssnState z epoką i rewizją. Te znaczniki opisują stan prowadzącego, a nie odtworzoną historię głosów/czatu. Źródła nie mogą dodawać pól koperty sterowania do przechwyconych wiadomości. Potwierdzenie odbioru nie dowodzi ukończenia akcji ani widoczności w OBS. Zobacz status migracji dla obsługiwanych funkcji, negocjacji odpowiedzi i ograniczeń ponownego łączenia.

Phrase Guess używa natywnego {response: text} żądanie odpowiedzi czatu server2 i {action: "phraseGuessResponse", value: {type: "bot", chatname: name, chatmessage: text}} dla ogłoszeń wyłącznie w doku. Prowadzący musi włączyć przychodzące wiadomości server3; wyłączenie sterowania prowadzącego nadal blokuje te żądania. Ogłoszenia doku są przekazywane jako zwykłe wiersze czatu bota z textonly: true, bez wysyłania ich do pól wprowadzania czatu źródeł przechwytywania. Starszy tryb API zachowuje dotychczasowy format poleceń.

Konwencje meta

Aby zachować spójność paneli i automatyzacji, przestrzegaj tych konwencji przy rozszerzaniu data.meta:

  • viewer_update, follower_update, subscriber_update i likes_update używają zwykłej liczby całkowitej meta wartość. likes_update to wiążąca suma platformy: odbiorcy muszą ustawić wyświetlaną wartość, zamiast ją dodawać. Skrypt działający w tle agreguje liczby widzów do viewer_updates z obiektem indeksowanym według data.type.
  • giveaway_state to wygenerowany przez prowadzącego obraz stanu zawierający tylko metadane dla zarządzanych widoków. meta.giveaway wersja 2 zawiera giveawayId, trwałe roundId/epoch, zwiększając generation między nowymi rundami, revision w obrębie rundy, status, open, draw, keyword, count, ticketCount, zamrożone config, do 120 podglądowych entrants, oraz ostatnie 20 winners. Wpisy udostępniają id, name, platform i tickets; zwycięzcy dodają drawnAt i przyznane points. Coin Flip Pot dodaje outcome; Number Hunt dodaje number z publicznym low, high i ostatnie guesses, nigdy sekret. Odbiorcy filtrują według identyfikatora losowania i odrzucają starsze generacje/rewizje. To próbki do wyświetlenia, a nie pełna księga losów ani instrukcja wypłaty. Klucze portfeli, salda i rezerwacje nie trafiają do obrazów stanu dla widowni. Prowadzący publikuje w giveaway etykietę P2P i włączone strumienie WebSocket nakładek; nie oznacza to widoczności w OBS. Przewodnik.
  • meta.giveawayControlResult zawiera wynik akcji losowania Event Flow (ok, opcjonalne error, giveaway lub simulated). meta.giveawayHandled wymienia identyfikatory losowań już obsłużone przez akcję przepływu zgłoszenia/zakupu, aby automatyczne polecenie czatu nie mogło ponownie pobrać opłaty. Edytor dodaje meta.economyTest dla symulowanych akcji losowania; nie jest to zdarzenie platformy źródłowej ani dane autoryzacyjne.
  • video_stats używa uporządkowanego meta obiekt stanu zewnętrznego enkodera/serwera, w tym provider, label, online, bitrateKbps, rttMs, bufferMs, liczniki utraconych/odrzuconych pakietów i opcjonalne szczegóły kodeka.
  • Zdarzenia typu wpłata mogą zawierać obiekt opisowy: na przykład { amount, currency, supporter } dla Kicka, { bits } dla cheers Twitcha. Zdarzenia członkostwa mają własne metadane właściwe dla źródła; nie są automatycznie wpłatami pieniężnymi.
  • Znormalizowane wiadomości webhooków Stripe, Ko-fi, Buy Me a Coffee i Fourthwall zawierają ograniczony do dostawcy meta.webhookId, skopiowany ze stabilnego identyfikatora zdarzenia dostawcy, aby strony odbiorcze mogły pomijać duplikaty z ponowień i mieszanych transportów.
  • Rajdy Twitcha przekazują { fromId, fromLogin, viewers }. Inne źródła się różnią: Whatnot używa meta.numRaiders, natomiast SharePlay używa opcjonalnego meta.fromLogin/meta.viewers. Sprawdź wiersz danego źródła przed odczytaniem metadanych rajdu.
  • Realizacje nagród Twitch EventSub udostępniają meta.rewardId, cost, rewardTitle, redemptionId, oraz starsze alias obok przygotowanej wiadomości. Karty nagród DOM i inne źródła mogą dostarczać mniej pól lub inne pola.
  • user_banned zawiera tylko metadane dla widżetów moderacji. Celowo pomija chatname i chatmessage; użyj meta.username, meta.displayName, meta.avatarUrl i meta.profileUrl.
  • Transporty czatu obsługujące synchronizację usuwania przez sterowanie źródłem powinny udostępniać natywny identyfikator czatu platformy jako meta.messageId zamiast polegać na wewnętrznym elemencie doku data-mid wartość.
  • Usuwanie w źródłach używa {delete: {type, id}} dla znanego identyfikatora wiadomości doku lub {delete: {type, meta: {messageId}}} dla natywnego identyfikatora wiadomości platformy. Znany identyfikator usuwa tylko pasujące wiadomości. Gdy znany jest tylko docelowy użytkownik, wyślij {delete: {type, userid}} lub {delete: {type, chatname}} aby usunąć wiadomości tego użytkownika z tej platformy. Nigdy nie zastępuj tożsamości docelowego użytkownika tożsamością moderatora. Przychodzące usunięcia nie wymagają opcjonalnego ustawienia synchronizacji moderacji z doku do platformy.
  • Metadane tożsamości źródła SSApp mogą dodawać meta.ssnAccountRole, meta.ssnSourceId i meta.ssnSession gdy źródłu przypisano niestandardową rolę konta.
  • Event Flow może zażądać wyróżnienia przez ustawienie meta.featured = true w danych czatu, co automatycznie wyróżnia wiadomość w doku/nakładkach wyróżnionych wiadomości.
  • AI Event Overlay: działanie showAiEventOverlay wysyła kopię wiadomości, która je wywołała, do odbiorcy z etykietą aievent-CONFIGURATION_ID, dodając meta.aiEventOverlay: {profile: "CONFIGURATION_ID"}. Istniejące pola wiadomości i metadane w postaci obiektu są zachowywane; metadane skalarne są zachowywane jako meta.value. To dostarczenie do określonego odbiorcy, a nie nowe zdarzenie platformy. Oryginalna wiadomość nie jest modyfikowana. Zobacz przewodnik konfiguracji.
  • Opcjonalne meta.aiEventOverlay.variation wybiera dokładną frazę zatwierdzoną w zapisanych ustawieniach nakładki. Tekst widza i metadane wypełniają pola szablonu po jego wygenerowaniu.
  • Żądania wyświetlania AI Event Overlay wymagają profilu i jego prywatnego tokena wyświetlania. Ustawieniami i kluczami API można zarządzać wyłącznie w lokalnym oknie SSN. Odpowiedzi używają {aiEventResponse: {target, value}} lub {aiEventResponse: {target, error}}. Wygenerowane wyniki zawierają template, duration, warnings, oraz opcjonalne adresy URL danych multimedialnych w image/audio.
  • Nagrody w postaci nakładek AI opłacane punktami używają aiEventPresentation (id, profile, expiresAt, result, message) i potwierdzają odbiór przez aiEventDelivered (identyfikator dostarczenia). Zapisy obciążeń i kwoty zwrotów pozostają na hoście.
  • Event Flow może zażądać przypięcia w doku przez ustawienie meta.pinned = true; opcjonalne meta.pinnedTarget ogranicza to przypięcie do doku z pasującym label.
  • Druk termiczny Event Flow zapisuje swój wynik w meta.thermalPrintResult (success i opcjonalne code/error), zachowując zdarzenie czatu i pozostałe metadane. W przypadku zdarzeń z metadanymi liczbowymi lub innymi metadanymi niebędącymi obiektem diagnostyka pozostaje w wyniku akcji, a zdarzenie się nie zmienia.
  • Opcjonalnie włączane nagrody naklejek SSN: event: "sticker" jest wysyłane tylko do stickers etykietę nakładki po pobraniu punktów lojalnościowych. Ustawia platform i type do należącego do wiadomości źródłowej type, i zachowuje chatname, z pustym chatmessage, textonly: true i contentimg zawierające spakowaną względną ścieżkę obrazu lub zatwierdzony przez prowadzącego adres URL multimediów HTTPS. meta.sticker zawiera id, pack, name, cost, duration (sekundy), motion, redemptionId i expiresAt (milisekundy Unix). To nagroda SSN, a nie wpłata na platformie ani natywne zdarzenie punktów kanału. Zobacz galeria i przewodnik konfiguracji.
  • Odtwarzacz naklejek zwraca pakiet sterowania {action: "stickerReceipt", meta: {sticker: {redemptionId, success}}} do nadawcy, gdy obraz się załaduje lub ładowanie się nie powiedzie. Tylko potwierdzenia od połączonego stickers uczestnik połączenia rozstrzyga oczekującą realizację. Nieudane lub niepotwierdzone dostarczenie wyzwala zwrot; ten pakiet sterowania nie jest zdarzeniem czatu. Zalecany jest jeden aktywny widok naklejek na sesję.
  • Polecenia nakładki sceny AI używają { action: "aiOverlay", target, meta } lub odtwarzanie współprowadzącego sterowane dokiem używa { action: "cohostOverlay", target, meta }; zachowaj wszystkie szczegóły polecenia, takie jak command, text, emotion, avatar i tts wewnątrz meta.
  • Jeśli platforma udostępnia kilka liczników razem, preferuj uporządkowany obiekt z jawnymi kluczami (meta.viewer_count, meta.follower_count) zamiast nadawać ciągom tekstowym wiele znaczeń.
  • Nakładki handlowe powinny używać obiektów obrazu stanu w meta (na przykład auction_update i commerce_update) i unikaj doraźnych pól najwyższego poziomu.

Zakres obsługi platform

YouTube – standardowe przechwytywanie DOM

Implementacja: sources/youtube.js

  • Pozostaw kartę czatu na żywo otwartą. Przechwytywanie odczytuje karty członkostw i prezentów renderowane w danej sesji; widz nie musi być właścicielem kanału ani moderatorem. Dostęp konta i wybrany widok czatu mogą wpływać na widoczność wierszy.
  • Otwarcie nakładki liczby widzów i aktywności czatu z widoczną liczbą widzów automatycznie wysyła żądanie pobrania tej liczby. Ustawienia Pokaż liczbę widzów i Śledź aktywnych uczestników czatu również włączają zbieranie danych.
  • Dla alertów obserwowania i dodatkowych zdarzeń, włącz tryb WebSocket w ustawieniach rozszerzenia.
Zdarzenie Kiedy się uruchamia Uwagi o danych
sponsorship Nagłówek powitalny członkostwa bez jawnego tekstu czatu (nowi członkowie, dostarczone pakiety prezentów), w tym uporządkowane karty powitalne lub przetłumaczony tekst „Welcome to …”. membership wypełniane przetłumaczonym „MEMBERSHIP”; subtitle zawiera serię/poziom, gdy zostały wykryte; nameColor używa zieleni członkostwa, gdy dozwolone.
giftpurchase Baner zakupu pakietu prezentów (ytd-sponsorships-live-chat-gift-purchase). membership staje się gift_giver; subtitle zawiera liczbę prezentów, gdy jest znana; bez hasDonation lub donoValue.
giftredemption Ogłoszenie realizacji prezentu dla odbiorców. membership staje się „MEMBERSHIP”; subtitle zawiera „Gifted by …”.
resub Banery podwyższenia poziomu zawierające „upgraded to …”. subtitle przechwytuje nową etykietę poziomu; membership pozostaje „MEMBERSHIP”.
superchat, supersticker, jeweldonation Super Chat, Super Sticker, karty ogłoszeń wpłat i prezenty YouTube oparte na Jewels (yt-gift-message-view-model). hasDonation zawiera wartość; event identyfikuje typ płatnego elementu YouTube. Prezenty YouTube używają N Jewels gdy obecne lub 1 YouTube Gift gdy YouTube ukrywa liczbę. Obrazy prezentów używają contentimg, etykiety prezentów używają subtitle, a minimalne szczegóły prezentu są kopiowane do meta.youtubeGift.
jeweldonation efekt prezentu YouTube wyświetla animowany prezent Jewel nad czatem na żywo (ytls-gift-overlay-item-view-model). Wysyłane bezpośrednio do dedykowanego celu GIF/multimediów, aby animacja mogła się odtworzyć bez powielania zwykłego wiersza prezentu. contentimg zawiera zasób animacji i meta.youtubeGift.animationUrl/animationDescription zachowują szczegóły efektu.
reaction Reakcja widza pojawia się w fontannie emoji na żywo YouTube. Wysyłane bezpośrednio do dedykowanego celu reakcji. Anonimowe emoji i adres URL obrazu są zachowywane w chatmessage/contentimg i w meta.reactionType/reactionImage. Znane warianty na żywo to ❤, 😄, 🎉, 😳 i 💯.
thankyou Wiadomość zastępcza, gdy istnieje kwota wpłaty, ale nie podano tekstu czatu. Zachowuje hasDonation i automatycznie wstawia „Thank you for your donation!” dla nakładek.
redirect Baner przekierowania YouTube pojawia się na czacie na żywo (najbliższy odpowiednik powiadomienia o rajdzie). Przechwytywanie wyłącznie DOM z yt-live-chat-banner-redirect-renderer. Ustawia event na redirect i używa membership jako etykiety, aby nakładki renderowały je jak inne komunikaty systemowe.
viewer_update Odpytywanie co 30 s punktu końcowego liczby widzów Social Stream (odczyt strony w razie błędów limitu). meta jest całkowitą liczbą widzów na żywo; trafia do agregowanego viewer_updates w skrypcie działającym w tle.

Bloki członkostwa ustawiają również membership dla czatu moderatora/członka, natomiast subtitle zawiera liczbę miesięcy lub nazwy poziomów. sourceName/sourceImg wypełniane, gdy getChannelInfo powiedzie się. Standardowy czat DOM zawiera teraz meta.messageId gdy YouTube udostępnia natywny identyfikator wiadomości czatu na żywo, którego dok używa do synchronizacji usuwania.

YouTube – przechwytywanie WebSocket/Data API

Implementacja: sources/websocket/youtube.html, współdzielone funkcje pomocnicze w shared/

  • Domyślnie używa zakresów OAuth youtube.readonly i youtube.channel-memberships.creator. Opcjonalny dostęp do zapisu dodaje youtube.force-ssl do wysyłania czatu, moderacji, banów i edycji szczegółów transmisji; Google może przedstawiać to jako szerokie uprawnienie zarządzania YouTube, ponieważ YouTube nie udostępnia zakresu zapisu ograniczonego do czatu.
  • Statystyki kanału uwzględniają przełączniki poszczególnych ustawień (showsubscount, showviewercount).
  • API nie może dostarczać własnych obrazów odznak; zastępcze odznaki używają ikon emoji opisanych poniżej.
  • Gdy API jawnie zgłasza authorDetails.isChatModerator: true, dane czatu, Super Chat, Super Sticker, prezentów YouTube i podarowanych członkostw zawierają mod: true. Status moderatora nie jest wnioskowany ani przechowywany między zdarzeniami.
  • Alerty o nowych subskrybentach używają myRecentSubscribers API (odpytywane co 5 minut). Uwaga: wyniki mogą być opóźnione lub niekompletne; można rozpoznać tylko publicznie widoczne subskrypcje.
  • Banery przekierowania YouTube nie są udostępniane przez Data API, więc redirect pozostaje dostępne tylko w standardowym przechwytywaniu DOM.
Zdarzenie Kiedy się uruchamia Uwagi o danych
superchat Wpisy Super Chat z historii Data API lub odpytywania transmisji. hasDonation zachowuje kwotę witryny (waluta + wartość); event to superchat. Starsze wersje WebSocket używały event: "donation" dla tego wiersza, więc odbiorcy mogą nadal akceptować to jako starszy alias.
supersticker Super Sticker (tylko zastępczy tekst wiadomości, bez obrazu z API). hasDonation zawiera kwotę; chatmessage zawiera zdekodowany tekst opisu.
jeweldonation YouTube giftEvent wiadomości, gdy widzowie wymieniają Jewels na prezenty. hasDonation zawiera N Jewels lub 1 YouTube Gift gdy YouTube ukrywa liczbę; contentimg używa adresu URL zasobu prezentu, gdy jest udostępniony; subtitle zawiera etykietę prezentu; meta.youtubeGift zawiera dodatkowe szczegóły prezentu.
sponsorship Nowy członek dołącza przez newSponsorEvent. membership staje się new_sponsor lub new_member; meta zawiera originalEventType, czasy trwania i informacje o poziomie.
resub Odnowienia członkostwa lub podwyższenia poziomu. membership staje się renewed_member (odnowienia) lub upgraded_member (podwyższenia poziomu); subtitle pokazuje poziom.
giftpurchase Pakiety prezentów kupione przez API. membership ustawione na gift_giver; subtitle podaje liczbę/poziom; bez hasDonation lub donoValue.
giftredemption Powiadomienia o realizacji prezentów. membership gift_recipient; odznaki domyślnie mają postać 🎁; subtitle wskazuje podarowany poziom.
membermilestone Wiadomości o kamieniach milowych (memberMonth lub displayMessage obecne). membership member_milestone; subtitle podsumowuje miesiące + poziom; meta przechwytuje surowe mapowanie kamienia milowego.
viewer_update Statystyki transmisji (jednocześni widzowie), gdy raportowanie widzów jest włączone. meta to liczba całkowita; odpowiada skryptom DOM, aby dalsi odbiorcy mogli połączyć oba strumienie. Dok używający &showviewercount żąda zbierania liczby widzów przez 70 minut i odnawia to żądanie co godzinę bez trwałej zmiany globalnego ustawienia.
likes_update Odpytywanie oficjalnych statystyk filmu, gdy Wysyłaj sumy polubień platformy jest włączone. meta jest bieżącą całkowitą liczbą polubień filmu. Emituje przy zmianie liczby i okresowo przy braku zmian, aby dane odbiorców były aktualne. Globalne captureliketotals ustawienie to włącza; starsze captureyoutubelikes pozostaje aliasem zgodności. Włączenie w oknie ustawienia dla danego doku &showlikecount opcja również trwale włącza te globalne ustawienia przechwytywania, natomiast ręczne dodanie parametru URL steruje wyłącznie renderowaniem. Wyłączenie opcji wyświetlania nie wyłącza globalnego zbierania.
subscriber_update Odpytywanie statystyk kanału (subskrybenci) przy showsubscount nie jest jawnie wyłączone. meta jest łączną liczbą subskrybentów; interfejs aktualizuje liczniki panelu.
view_update Odpytywanie statystyk kanału (wyświetlenia od początku) przy showviewercount lub tryb hype jest aktywny. meta jest całkowitą liczbą wyświetleń.
live_chat_ended Czat na żywo staje się niedostępny dla przypisanej transmisji. meta.streamTitle wypełniane, gdy metadane transmisji były w pamięci podręcznej.
user_banned userBannedEvent z API czatu na żywo lub strumienia gRPC. Zdarzenie zawierające wyłącznie metadane dla widżetów moderacji. meta zawiera nazwę użytkownika/wyświetlaną, identyfikator kanału, URL awatara/profilu, moderatora, czas bana/wyciszenia i trwałość.
new_follower Nowy subskrybent wykryty przez myRecentSubscribers API (odpytywane co 5 minut). chatname jest nazwą kanału subskrybenta; chatmessage jest puste, chyba że wiadomości alertów o subskrybentach są włączone na stronie źródła YouTube. meta zawiera channelId, title, subscribedAt, a zgrupowane serie dodają grouped, count, others i subscribers. Uwaga: wyniki mogą być opóźnione lub niekompletne; można rozpoznać tylko publicznie widoczne subskrypcje.

Wiadomości czatu przekazywane z API używają meta.plainText dla wiadomości w zwykłym tekście obok bogatego chatmessage treści. To tekst, a nie HTML, i nadal może zawierać emoji Unicode. Odznaki członkostwa zastępczo używają emoji (⭐, 💝, 🏅, itp.), aby zachować zgodność z przechwytywaniem DOM. Zwykłe dane wiadomości czatu zawierają również meta.messageId aby akcje usuwania po stronie doku mogły wrócić do API moderacji YouTube.

Alerty o subskrybentach YouTube (new_follower)

Social Stream może teraz wykrywać nowych subskrybentów YouTube za pomocą myRecentSubscribers punkt końcowy API. Działa podobnie do alertów o subskrybentach Streamlabs.

Jak to działa:

  • Odpytuje API YouTube co 5 minut o ostatnich subskrybentów
  • Śledzi widzianych subskrybentów w localStorage, aby wykrywać nowych
  • Emituje new_follower zdarzenia z nazwą subskrybenta, awatarem i identyfikatorem kanału
  • Domyślnie pozostawia wiadomości alertów o subskrybentach wyłączone; po ich włączeniu używa bieżącego tłumaczenia ciągu alert-just-subscribed
  • Domyślnie grupuje serie większe niż trzech nowych subskrybentów, aby ponowne połączenia nie zalewały nakładek ani Event Flow
  • Wymaga włączenia trybu WebSocket w ustawieniach rozszerzenia

Ograniczenia (wynikają z API YouTube, nie z Social Stream):

  • Brak gwarantowanego opóźnienia dostarczenia – SSN odpytuje co pięć minut, ale API może zwracać wyniki opóźnione lub niekompletne. Nie polegaj na stałym czterogodzinnym oknie.
  • Tylko publiczne subskrypcje – Subskrybenci z prywatną listą subskrypcji nie wyzwalają alertów. Subskrypcje YouTube są domyślnie prywatne.
  • Tylko właściciel kanału – Możesz otrzymywać alerty o subskrybentach tylko dla kanałów, które posiadasz i na których jesteś uwierzytelniony.
  • Wykorzystanie limitu API – Każde odpytywanie kosztuje 1 jednostkę API. Przy odstępach 5 minut zużywa to około 288 jednostek dziennie (z domyślnego dziennego limitu 10 000).

Wyzwalacz edytora Event Flow: Użyj data.event === "new_follower" i data.type === "youtube"

YouTube WebSocket: skrócona dokumentacja zdarzeń i członkostw

data.event data.membership Scenariusz
sponsorshipnew_sponsorNowy członek przez newSponsorEvent
sponsorshipnew_memberNowy członek przez processMembership
resubrenewed_memberOdnowienie członkostwa
resubupgraded_memberPodwyższenie poziomu
giftpurchasegift_giverCzłonkostwa podarowane kanałowi
giftredemptiongift_recipientOtrzymano podarowane członkostwo
membermilestonemember_milestoneWiadomość rocznicowa członkostwa
superchat-Super Chat
supersticker-Super Sticker
user_banned-Zdarzenie bana/wyciszenia czasowego zawierające wyłącznie metadane
new_follower-Nowy subskrybent (odpytywany; możliwe opóźnienie)

Twitch – standardowe przechwytywanie DOM

Implementacja: sources/twitch.js

  • Pozostaw czat Twitcha otwarty. Powiadomienia o członkostwach i użytkownikach są przechwytywane, gdy Twitch je renderuje; nie ogranicza się to do kont nadawców lub moderatorów. Funkcje dotyczące konkretnego konta mogą wymagać uwierzytelniania.
  • Żądania liczby widzów trafiają do https://api.socialstream.ninja/twitch/viewers co 30 sekund.
  • Dla alertów obserwowania, rajdów i pełnej obsługi zdarzeń, włącz tryb WebSocket w ustawieniach rozszerzenia.
  • Powiadomienia Watch Streak udostępniane przez widzów są domyślnie wyłączone i wymagają Pokaż serie oglądania Twitch (Watch Streaks) ustawienie.
  • Opcjonalnie włączane PluralMind ustawienie może zastąpić chatname, nameColor, oraz część opakowaną przez proxy w chatmessage, i może dodać odznakę tekstową zaimków. username pozostaje loginem Twitcha; powiązane usunięcia zawierają delete.meta.pluralmind aby dok używał tego stabilnego loginu.
Zdarzenie Kiedy się uruchamia Uwagi o danych
reward Karty wykorzystania punktów kanału (w tym kontener nagród 7TV). chatmessage zawiera tekst realizacji; membership bez zmian.
giftpurchase Wiersze systemowe, takie jak „User gifting X Subs in the channel”. chatmessage jest wierszem systemowym, umożliwiając nakładkom wyróżnianie kampanii darczyńców.
subscription_gift Powiadomienia o podarowanych subskrypcjach („User gifted a Sub to …”). Oznacza zdarzenie dla filtrów wyróżnień; membership pozostaje etykietą odznaki odbiorcy.
viewer_update Pobieranie co 30 s z proxy liczby widzów Social Stream (0 w razie błędu). meta całkowita liczba widzów.
hype_train Przyklejone wyróżnienie społeczności Twitcha pokazuje aktywny Hype Train w osobnym oknie czatu. Zapasowy odczyt DOM zawierający wyłącznie metadane z meta.sourceMode ustawione na dom. Używa widocznego poziomu, zegara i meta.progressPercent gdy Twitch nie udostępnia sum punktów EventSub.
community_highlight Elementy wewnątrz widżetu „Community Highlight” Twitcha. meta jest wyodrębnionym tekstem wyróżnienia dla mechanizmów automatyzacji.
knock Zaproszenia do współpracy Stream Together wyświetlane nad czatem. chatmessage zawiera tekst zaproszenia; chatname pochodzi od użytkownika alertu, gdy jest dostępny.
watch_streak Opcjonalnie włączane powiadomienie Watch Streak udostępnione przez widza, renderowane na czacie Twitcha. meta.streakCount zawiera widoczną liczbę, gdy zostanie wykryta; meta.milestoneId używa identyfikatora powiadomienia DOM, gdy dostępny.

Bity/Cheers wypełniają hasDonation (na przykład „500 bits”), mimo że data.event pozostaje puste; opieraj się na tym polu podczas renderowania widżetów wpłat. Informacja o serii subskrypcji pojawia się w subtitle gdy odznaki udostępniają miesiące.

Twitch – EventSub/WebSocket

Implementacja: sources/websocket/twitch.js ze współdzielonym rdzeniem providers/twitch/chatClient.js

  • Zakresy OAuth: chat:read, chat:edit, user:write:chat, bits:read, moderator:read:followers, moderator:read:chatters, channel:read:subscriptions, channel:read:hype_train, channel:moderate, moderator:manage:banned_users, moderator:manage:chat_messages, channel:manage:broadcast, channel:read:redemptions, channel:read:ads, channel:manage:ads. Tokeny nadawcy odblokowują liczniki subskrybentów/obserwujących.
  • Zdarzenia dostarczane przez EventSub oraz odpytywanie Helix o sumy widzów/obserwujących/subskrybentów.
  • Tryb WebSocket dostarcza w czasie rzeczywistym alerty obserwowania, zdarzenia subskrypcji, rajdy, cheers, Power-upy, realizacje punktów kanału i metadane hype train.
  • Wiersze Shared Chat używają Twitch IRC source-room-id aby wypełnić sourceName/sourceImg z kanałem źródłowym, gdy różni się od połączonego kanału.
  • Powiadomienia Watch Streak udostępniane przez widzów są domyślnie wyłączone i wymagają Pokaż serie oglądania Twitch (Watch Streaks) ustawienie.
  • Opcjonalnie włączane PluralMind ustawienie może zastąpić chatname, nameColor, oraz część opakowaną przez proxy w chatmessage, i może dodać odznakę tekstową zaimków. username i userid zachowują tożsamość Twitcha; powiązane usunięcia zawierają delete.meta.pluralmind aby dok używał tych stabilnych pól.
Zdarzenie Kiedy się uruchamia Uwagi o danych
cheer Powiadomienia Cheer z EventSub channel.bits.use. hasDonation „N bits”; meta.bits liczbowe; chatmessage zachowuje surową wiadomość; zidentyfikowani przekazujący cheers zawierają chatimg.
powerup Wbudowane lub własne powiadomienia Power-up z EventSub channel.bits.use. Dane wyłącznie zdarzenia z pustym chatmessage i bez hasDonation, więc nie tworzy zwykłego wiersza czatu. meta.bits jest liczbowe i meta.powerUp zachowuje podtyp Twitcha, tytuł/identyfikator nagrody, szczegóły efektu i dostarczony tekst wiadomości, gdy dostępne.
new_subscriber channel.subscribe lub USERNOTICE z msg-id=sub. meta zawiera { userId, tier, isGift }; buforowana suma subskrybentów jest zwiększana, gdy jest dostępna; liczba widzów jest odpytywana osobno.
resub channel.subscription.message lub USERNOTICE msg-id=resub. meta zawiera serię i skumulowane miesiące; chatmessage zawiera tekst ponownej subskrypcji.
subscription_gift channel.subscription.gift lub USERNOTICE msg-id=subgift. meta udostępnia sumę podarowanych i poziom; chatmessage podsumowuje akcję.
reward channel.channel_points_custom_reward_redemption.add. meta zawiera identyfikator nagrody, tytuł, koszt, prompt, dane użytkownika, identyfikator/status realizacji i starszy alias. Bez pola najwyższego poziomu reward obiekt jest emitowany przez ten handler EventSub. Starsi odbiorcy mogą nadal prezentować channel_points jako przestarzały alias.
raid EventSub channel.raid lub USERNOTICE msg-id=raid. meta = { fromId, fromLogin, viewers }.
watch_streak Opcjonalnie włączane Twitch IRC USERNOTICE z msg-id=viewermilestone i msg-param-category=watch-streak. Uwzględnia widza w chatname, tekst powiadomienia Twitcha w chatmessage i meta.streakCount/meta.milestoneId. Pozostałe ogólne typy USERNOTICE nadal są ignorowane.
new_follower channel.follow Powiadomienia EventSub. Automatycznie zwiększa follower_update; meta zapisuje { userId, followedAt }.
viewer_update Helix streams odpytywanie co 30 sekund. meta całkowita liczba widzów; pomijana, chyba że statystyki widzów są włączone w ustawieniach.
follower_update Suma obserwujących Helix, wyzwalana po zdarzeniach obserwowania lub okresowym odpytywaniu. meta całkowita liczba obserwujących.
subscriber_update Suma subskrybentów Helix (wymaga tokenu nadawcy z zakresem subskrypcji). meta całkowita liczba subskrybentów.
stream_online / stream_offline EventSub stream.online/stream.offline. meta.startedAt obecne dla zdarzeń online; offline używa pustego obiektu.
ad_break / ad_request / ad_schedule Odpowiedzi API menedżera reklam (channel.ad_break.begin, ręczne POST channels/ads, GET channels/ads). meta opisuje czas trwania, osobę żądającą i dane harmonogramu dla paneli.
hype_train EventSub channel.hype_train.begin, channel.hype_train.progress i channel.hype_train.end powiadomienia v2. Zdarzenie zawierające wyłącznie metadane: bez chatname lub chatmessage. meta.phase to begin, progress lub end; meta zawiera identyfikator pociągu, poziom, postęp, cel, sumę, wspierających, pola czasu, flagę współdzielonego pociągu i trainType. Pociągi skarbów są udostępniane przez meta.trainType gdy Twitch je oznacza.
user_banned EventSub channel.ban, lub IRC CLEARCHAT rozwiązanie zapasowe, gdy zdarzenia banów EventSub są niedostępne. Zdarzenie zawierające wyłącznie metadane dla widżetów moderacji. meta zawiera nazwę użytkownika/wyświetlaną, identyfikator użytkownika, URL awatara/profilu, moderatora, powód, czas bana/wyciszenia i trwałość.

Dane czatu ponownie używają współdzielonego dostawcy, więc data.event jest wypełniane dla `/me` (action) i starsze bits znaczniki nawet poza przepływami EventSub. Wiadomości GIF Twitcha umieszczają zasób Giphy w contentimg, pozostaw chatmessage puste i zachowaj zastępczą etykietę Twitcha w meta.gifLabel. Logika usuwania duplikatów i wiadomości używa identyfikatorów wiadomości; wiadomości wysyłane przez SSN używają natywnego message_id z echa IRC Twitcha w data.id.

Metadane Twitch Hype Train

hype_train zawiera tylko metadane i nie zawiera chatname lub chatmessage. Panele powinny aktualizować istniejący widok pociągu według meta.id zamiast dopisywać każdą aktualizację postępu jako czat. Pasek metadanych (meta.html) wyświetla te zdarzenia jako pasek postępu u góry.

Pole Wpisz Uwagi
typeciąg tekstowyZawsze twitch.
eventciąg tekstowyZawsze hype_train.
meta.phaseciąg tekstowybegin, progress lub end.
meta.idciąg tekstowyStabilny identyfikator pociągu. Użyj go do dodawania/aktualizowania jednego widocznego widżetu pociągu.
meta.broadcasterUserIdciąg tekstowyIdentyfikator użytkownika nadawcy Twitch.
meta.broadcasterUserLoginciąg tekstowyLogin nadawcy Twitch.
meta.broadcasterUserNameciąg tekstowyNazwa wyświetlana nadawcy Twitch.
meta.totalliczba | nullŁączna wartość wsparcia zgłoszona przez Twitcha dla pociągu.
meta.progressliczba | nullBieżący postęp w realizacji celu poziomu.
meta.goalliczba | nullCel bieżącego poziomu.
meta.progressPercentliczba | nullZapasowy procent z DOM, gdy Twitch udostępnia tylko widoczny pasek postępu osobnego okna.
meta.levelliczba | nullBieżący lub końcowy poziom pociągu.
meta.topContributionstablicaNajwięksi wspierający. Każdy wpis zawiera userId, userLogin, userName, type, oraz liczbowe total.
meta.lastContributionobiekt | nullNajnowszy wkład, używający tej samej struktury wkładu co topContributions.
meta.sharedTrainParticipantstablicaSurowe dane uczestników współdzielonego pociągu z Twitcha, jeśli są dostarczane.
meta.startedAtciąg tekstowyZnacznik czasu ISO początku pociągu.
meta.expiresAtciąg tekstowyZnacznik czasu ISO wygaśnięcia bieżącego pociągu.
meta.endedAtciąg tekstowyZnacznik czasu ISO końca pociągu, lub pusty przed zakończeniem.
meta.cooldownEndsAtciąg tekstowyZnacznik czasu ISO końca przerwy, lub pusty przed zakończeniem.
meta.isSharedTrainwartość logicznaTrue, gdy Twitch oznacza pociąg jako współdzielony.
meta.trainTypeciąg tekstowyZwykle regular; pociągi skarbów są tu udostępniane, gdy Twitch je oznaczy.
meta.allTimeHighLevelliczba | nullNajwyższy historyczny poziom pociągu, gdy Twitch go udostępnia.
meta.allTimeHighTotalliczba | nullNajwyższa historyczna suma pociągu, gdy Twitch ją udostępnia.
meta.sourceModeciąg tekstowyOpcjonalny znacznik źródła, taki jak dom.
meta.eventSubTypeciąg tekstowyOryginalny typ EventSub: channel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end lub dom.community_highlight.

Twitch EventSub: skrócona dokumentacja zdarzeń

data.event Scenariusz
new_followerUżytkownik zaczął obserwować kanał
new_subscriberNowa subskrypcja
resubPonowna subskrypcja z wiadomością
subscription_giftSubskrypcje podarowane kanałowi
cheerPrzekazano bity
powerupUżyto wbudowanego lub własnego Power-up
rewardWykorzystanie punktów kanału
raidPrzychodzący rajd
viewer_updateLiczba jednoczesnych widzów
follower_updateŁączna liczba obserwujących
subscriber_updateŁączna liczba subskrybentów
stream_onlineTransmisja rozpoczęta
stream_offlineTransmisja zakończona
ad_breakRozpoczęto przerwę reklamową
hype_trainMetadane statusu Hype Train/Treasure Train
user_bannedUżytkownik został zbanowany lub czasowo wyciszony

OBS Flow Actions

Implementacja: actions.html przez zdarzenia OBS WebSocket v5, z dock.html Zdarzenia źródła przeglądarkowego OBS jako rozwiązanie zapasowe

  • Pozostaw nakładkę Flow Actions otwartą w tej samej sesji Social Stream co edytor/proces w tle Event Flow albo pozostaw dok załadowany w OBS.
  • Skonfiguruj OBS WebSocket v5 w OBS 28+; domyślny URL to ws://127.0.0.1:4455.
  • To zdarzenia systemowe Event Flow. Nie zawierają chatname lub chatmessage, a dodatkowe szczegóły OBS pozostają w meta.
Zdarzenie Kiedy się uruchamia Uwagi o danych
stream_started OBS zgłasza, że wyjście transmisji osiągnęło stan rozpoczęty. type to obs; event to stream_started; meta.source to obs-websocket lub obs-browser-source; meta.outputState może zawierać surowy stan wyjścia OBS.
stream_stopped OBS zgłasza, że wyjście transmisji osiągnęło stan zatrzymany. type to obs; event to stream_stopped; meta.outputActive może być false.
recording_started OBS zgłasza rozpoczęcie nagrywania. type to obs; meta.obsEvent identyfikuje źródło zdarzenia OBS.
recording_stopped OBS zgłasza zakończenie nagrywania. type to obs; meta.outputState może zawierać surowy stan WebSocket.
scene_changed OBS zmienia aktywną scenę programu. type to obs; meta.sceneName zawiera nazwę sceny, gdy OBS ją dostarcza.
media_ended Wejście multimedialne OBS kończy odtwarzanie. type to obs; meta.inputName i meta.inputUuid identyfikują wejście multimedialne.
replay_buffer_saved OBS zapisuje bufor powtórek. type to obs; meta.savedReplayPath może zawierać ścieżkę zapisanej powtórki.

Pole alertów Streamlabs

Implementacja: sources/streamlabs.js (DOM pola alertów); opcjonalny most przez gniazdo pod adresem sources/websocket/streamlabs.html

  • Pozostaw pole alertów Streamlabs otwarte w karcie lub źródle przeglądarkowym, aby alerty były renderowane; skrypt treści odczytuje DOM alertów w poszukiwaniu wiadomości/obrazów/tokenów.
  • Alerty typu wpłata ustawiają hasDonation (np. „$10 USD” lub „100 bits”) i opcjonalne donoValue w USD.
  • Wnioskowane typy zdarzeń: follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
  • W przypadku mostu przez gniazdo wklej token Streamlabs Socket API i połącz się; alerty są przekazywane bez strony pola alertów.
Zdarzenie Kiedy się uruchamia Uwagi o danych
donation Napiwki, cele charytatywne, JustGiving lub ogólne alerty „donated”. hasDonation zachowuje tekst waluty (np. „$36” lub „$10 CAD”); donoValue jest dostarczane tylko wtedy, gdy dostępna jest wartość USD; inne oznaczone kwoty używają wspólnego przeliczania walut.
cheer Alerty bitów/Cheer Twitcha. hasDonation staje się „100 bits”, a donoValue przechwytuje wartość USD.
subscription Alerty subskrypcji. Ustawione standardowe pola; chatmessage jest wierszem alertu; meta.tokens zawiera wartości tokenów (name, amount, levelName itd.).
gift Podarowane członkostwa/subskrypcje. meta.tokens.amount może pokazywać liczbę prezentów; meta.tokens.levelName może zawierać poziom.
follow Alerty obserwowania. Bez pól wpłaty; chatname odzwierciedla token nazwy alertu.
raid Alerty rajdów. meta.tokens.count zawiera liczbę uczestników rajdu, jeśli jest obecna.
redeem Alerty realizacji Cloudbot. meta.tokens.product przechwytuje realizowany przedmiot.
merch Alerty o zakupach gadżetów. meta.tokens.product zawiera nazwę zakupionego produktu.
superchat Alerty typu Super Chat z YouTube lub obsługiwanych integracji alertów. hasDonation zawiera kwotę; odbiorcy mogą nadal akceptować starsze donation aliasy.
sponsor Alerty typu sponsor/członek udostępniane przez Streamlabs. Standardowe pola; brak wpłaty, chyba że tekst zawiera kwotę.

TikTok Live – przechwytywanie DOM i strumień TikFinity

Implementacja: sources/tiktok.js dla natywnych stron TikToka oraz sources/tikfinity.js dla widżetu/iframe kanału aktywności TikFinity. SSApp nadal ma natywną integrację TikTok o najszerszej obsłudze zdarzeń (zobacz dokumentację SSApp).

  • Działa na stronie transmisji nadawcy. Banery prezentów/polubień/obserwowania są wypełniane tylko w uwierzytelnionej sesji.
  • TikTok dostarcza wiele zdarzeń wykrywanych w DOM bez wymagania trybu WebSocket – prezenty, obserwowania, polubienia i opcjonalne dołączenia są przechwytywane z wyrenderowanych wierszy.
  • Strony widżetów TikFinity pod adresem tikfinity.zerody.one/widget/activity-feed* również działają. Osadzony iframe kanału aktywności emituje te same kanoniczne pola danych TikToka dla czatu, obserwowania, udostępnień, prezentów, subskrypcji, opcjonalnych dołączeń i skrzyń skarbów.
  • Dodatkowe uwierzytelnianie API nie jest wymagane.
  • Natywny tryb SSApp nadal dodaje zdarzenia wykraczające poza ścieżki przechwytywania strony/widżetu: question_new, emote, viewer_update, oraz opcjonalnie włączaną agregację likes_update.
Zdarzenie Kiedy się uruchamia Uwagi o danych
gift Wiersze banerów prezentów lub DivGiftMessage wpisy. hasDonation przelicza na „N coins” (z zapasowym wyszukaniem prezentu); membership używa tekstu odznaki, gdy dostępny.
joined Powiadomienia o dołączeniu, gdy globalne Przechwytuj zdarzenia „joined” transmisji ustawienie jest włączone. Pomija powiadomienia o udostępnieniu; chatname może być puste dla niektórych ciągów systemowych.
followed Wiadomości o obserwowaniu odczytywane z kart społecznościowych. Zapewnia chatname istnieje przed emisją.
shared Wiersze udostępnień TikFinity. chatmessage jest wyrenderowanym tekstem udostępnienia.
subscribe Wiersze subskrypcji TikFinity. membership jest ustawiane na SUBSCRIBER.
envelope Wiersze skrzyń skarbów TikFinity. meta.coins i meta.canOpen zawierają szczegóły skrzyni.
liked Podsumowania burzy polubień wyzwalane przez karty społecznościowe TikToka. chatname jest dołączane, gdy TikTok je udostępnia; anonimowe/systemowe karty polubień nadal mogą emitować zdarzenia. TikTok wysyła to zwykłą ścieżką w tle. Proces w tle kieruje jedną kopię do nakładki reakcji, a następnie kontynuuje do głównego przetwarzania czatu/zdarzeń tylko wtedy, gdy capturelikeevent jest włączone.
likes_update SSApp otrzymuje wiążącą skumulowaną sumę TikTok LIVE, gdy captureliketotals jest włączone. meta jest bieżącą sumą całkowitą. SSApp wysyła pierwszą wartość natychmiast, łączy serie w najwyżej jedną aktualizację co pięć sekund, powtarza ostatnią wartość mniej więcej co 90 sekund i wysyła zero po zakończeniu transmisji. Jest to oddzielne od właściwego dla widza liked zdarzenia.
true (wartość logiczna) Ogólne komunikaty społecznościowe/systemowe, dla których TikTok nie dostarcza podtypu. Użyj chatmessage treści, aby ustalić prezentację; wartość logiczna true oznacza „zdarzenie systemowe – nieznany typ”.

membership odzwierciedla podpowiedzi odznak (poziomy subskrybentów). Pamięć podręczna awatarów zachowuje chatimg prawidłowe między zdarzeniami; jeśli DOM ukrywa kolor moderatorów, skrypt czyści nameColor. Wiersze prezentów TikFinity ustawiają również contentimg na ikonę prezentu, gdy dostępna. Aktualizacje serii prezentów natywnego DOM i TikFinity zawierają meta.tiktokGiftStreakId, meta.tiktokGiftCount i meta.tiktokGiftQuietMs aby nakładki mogły łączyć powtarzane aktualizacje; starsze identyfikatory serii są unikatowe dla instancji strony. Metadane prezentów mogą też zawierać tiktokGiftMessageId (oryginalny identyfikator wiadomości TikTok), tiktokGiftSenderId, groupId, giftId, giftName, streakable i repeatEnd. Natywne identyfikatory rozpoznają ten sam prezent w różnych oknach przechwytywania; niezerowy identyfikator grupy wraz z identyfikatorami nadawcy i prezentu rozpoznaje aktualizacje skumulowanej serii. Przechwytywanie WebSocket w SSApp dostarcza te same pola po zakończeniu serii, z count zachowane dla zgodności. Przełącznik wpłat jest sprawdzany przy przekazywaniu każdego prezentu: wyłączenie wpłat TikToka usuwa hasDonation i donoValue zachowując zdarzenie i metadane prezentu. TTS używa tych tożsamości do łączenia aktualizacji i pomijania ukończonych duplikatów przez maksymalnie dziesięć minut (ograniczona pamięć podręczna), a prezenty TikToka odczytuje jako nadawcę, ilość i nazwę prezentu. Starsze dane używają zastępczo istniejących identyfikatorów serii i tekstu wiadomości; tożsamość nie jest wnioskowana wyłącznie z tekstu prezentu. Odczytywanie prezentów TikToka używa wybranego języka TTS/głosu, niezależnie od języka interfejsu. Czasowniki ogłoszeń są przetłumaczone dla angielskiego, hiszpańskiego, portugalskiego, francuskiego, niemieckiego, włoskiego i niderlandzkiego; inne języki używają nadawcy, ilości i nazwy prezentu bez angielskiego czasownika. Uproszczony TTS zachowuje ten neutralny format. Nazwy prezentów pozostają takie, jak dostarcza platforma; nie tłumaczy to automatycznie katalogów prezentów ani wiadomości czatu i nie wnioskuje języka transmisji.

W tych aktualizacjach serii liczba i etykieta wpłaty są skumulowane: 1, 2, 3 oznacza trzy prezenty, nie sześć. Odbiorcy liczący sumy powinni dodawać tylko przyrost ponad największą kwotę już widzianą dla danego identyfikatora serii. Standardowe przechwytywanie obsługuje starsze klasy prezentów i obecne wiersze obrazu/liczby; oba zachowują event: "gift" i hasDonation. Przy nieznanych cenach zachowywane są liczby/nazwy prezentów do wyświetlenia, a szacowanie USD przyjmuje jedną monetę na prezent. Dostarczone przez źródło donoValue ma pierwszeństwo; wyrenderowane metadane prezentu mogą dostarczać coinsPerGift lub diamondsPerGift zanim potrzebna będzie tabela prezentów lub wartość domyślna. Oszacowania monet Standard/TikFinity i natywne oszacowania diamentów SSApp używają dotychczasowych odrębnych przeliczeń; żadne nie oznacza gwarantowanej wypłaty gotówki.

Whatnot

Implementacja: sources/whatnot.js

  • Otwórz stronę programu Whatnot na żywo z widocznym czatem; istniejące przechwytywanie WebSocket dostarcza czat, powiadomienia aukcji/sprzedaży, nieudane płatności, rajdy, wpłaty i szybkie aktualizacje widzów. Obrazy stanu produktów/losowań nadal zależą od sekcji DOM renderowanych w widoku programu.
  • Przechwytuj wydarzenia transmisji steruje zdarzeniami systemowymi Whatnot i aktualizacjami metadanych aukcji/katalogu; wiersze dołączeń wymagają również Przechwytuj zdarzenia „joined” transmisji; liczba widzów nadal uwzględnia przełączniki widzów/hype.
Zdarzenie Kiedy się uruchamia Uwagi o danych
viewer_update Zmiany liczby widzów z aktualizacji transmisji WebSocket, z odpytywaniem DOM jako rozwiązaniem zapasowym. meta to całkowita liczba widzów.
donation Zdarzenia napiwków i wkładów community boost Whatnot WebSocket. hasDonation zawiera sformatowaną kwotę; kontekst właściwy dla WebSocket pozostaje w meta.
raid Zdarzenia rajdów Whatnot WebSocket, w tym odpowiedzi aktywności z historii. meta.numRaiders jest dołączane, gdy Whatnot je dostarcza.
joined Wiersze czatu, których znormalizowana treść zaczyna się od joined, gdy Przechwytuj zdarzenia „joined” transmisji jest włączone. Używa tekstowych etykiet zdarzeń dla powiadomień o dołączeniu (nie wartości logicznej true).
auction_update Gdy zmienia się stan aukcji w stopce na żywo (tekst zwycięzcy/prowadzenia, tytuł, oferty, cena, zegar, status sprzedaży), często przyspieszany przez pakiety WebSocket cyklu życia aukcji. Zdarzenie zawierające wyłącznie metadane. Bez chatname/chatmessage; dane znajdują się w meta (na przykład meta.title, meta.bids, meta.price, meta.timer, meta.status).
commerce_update Gdy zmieniają się sekcje katalogu (produkty, zestawy niespodzianki, nadchodzące losowania), często przyspieszane przez pakiety WebSocket cyklu życia losowań/produktów. Obraz stanu zawierający wyłącznie metadane z licznikami sekcji i tablicami elementów w meta.products, meta.surpriseSets i meta.upcomingGiveaways.
auction_started, new_bid, auction_ended, product_sold Dociera odpowiednie powiadomienie WebSocket na żywo. To pojedyncze zdarzenia, oddzielne od istniejących obrazów stanu wyświetlania. platform/type: "whatnot", zapisane zwykłym tekstem chatname, userid gdy dostarczone, nazwa produktu w subtitle, oraz zapisane zwykłym tekstem chatmessage z textonly: true. Dostępne identyfikatory i szczegóły aukcji znajdują się w meta: productId, auctionId, orderId, transactionId, livestreamId, bidId, bids, auctionEndTime i status. Opcjonalne price jest w głównych jednostkach waluty, z priceText i currency gdy dostarczone.
payment_failed Nadchodzi powiadomienie WebSocket na żywo o nieudanej płatności. Te same dostępne pola kupującego, produktu i identyfikatorów, z meta.paymentStatus: "failed". Gdy tylko product.purchaserUserId identyfikuje kupującego, wypełnia userid w zdarzeniach sprzedaży/płatności, a nazwa kupującego pozostaje pusta. Kupujący nie jest wnioskowany z innej lub poprzedniej aukcji.
payment_succeeded Nadchodzi powiadomienie WebSocket na żywo o udanej płatności. meta.paymentStatus: "succeeded", z kupującym, produktem, identyfikatorem zamówienia i innymi dozwolonymi polami podanymi w tym powiadomieniu. Pozostaje to osobnym zdarzeniem płatności; nie emituje kolejnego purchase lub wpłata. Brakujące pola pozostają puste lub pominięte, nawet jeśli poprzednia sprzedaż je dostarczała.

Aktualizacje widoku aukcji/handlu pozostają obrazami stanu opartymi na DOM. Aby dopasować pojedyncze zdarzenie WebSocket w Event Flow, użyj Typ zdarzenia (zaawansowane), wybierz Zdarzenie niestandardowe, i wpisz dokładną nazwę. Etykiety mogą używać **{username}**\n{subtitle} z wybraną grubością tekstu; warunki mogą porównywać meta.paymentStatus z failed. Element przykład etykiety Whatnot do zaimportowania jest dostępne. Dotychczasowe ustawienia przechwytywania zdarzeń transmisji nadal obowiązują.

Dodatkowe opcjonalne pola to meta.catalogProductId (należące do pakietu product.productId), meta.parentProductId (product.parentId), meta.transactionType (typ sprzedaży Whatnot, bez zmian) oraz meta.placeOrderErrorReason (kod błędu zamówienia/płatności podany przez Whatnot). Te odwołania do produktów opisują katalog lub ofertę nadrzędną; nie zastępują identyfikatora zamówienia. Stan magazynowy nie jest traktowany jako zakupiona ilość.

Do automatyzacji po udanej płatności ustaw Typ zdarzenia (zaawansowane) wyzwalacz na Zdarzenie niestandardowe: payment_succeeded, i przefiltruj źródło do Whatnot. Istniejące warunki i szablony mogą używać z tego zdarzenia userid, chatname, subtitle i meta.orderId bezpośrednio. Zapamiętany zakup nie jest potrzebny, gdy powiadomienie zawiera wymagane szczegóły.

Zakończenie aukcji lub oznaczenie produktu jako sprzedanego nie potwierdza udanej płatności: te powiadomienia nie są emitowane jako opłacone purchase zdarzenia i nie ustawiają kwot wpłat. Zdarzenie sukcesu jest emitowane tylko dla otrzymanego payment_succeeded powiadomienie; przechwytywanie nie odpytuje o zakończenie płatności ani nie wnioskuje go ze sprzedaży. Inne paymentStatus wartości są przekazywane tylko wtedy, gdy zostały jawnie dostarczone w przechwyconym pakiecie. Brakujące identyfikatory są pomijane; sam identyfikator produktu może obejmować wiele sprzedaży, więc do powiązania powiadomień używaj dostarczonego identyfikatora zamówienia/aukcji. Przechwytywanie nie pamięta zakupów ani nie dopasowuje aktualizacji płatności; taki przepływ trzeba jawnie skonfigurować w Event Flow. Krótkotrwałe zduplikowane pakiety z dwóch istniejących mostów przechwytywania są pomijane. Surowe obiekty zamówień/płatności nie są przekazywane.

eBay Live

Połączenie sprzedawcy eBay w Monetization wymaga skonfigurowanej usługi eBay SSN i zgody OAuth sprzedawcy; opisane poniżej przechwytywanie eBay Live jest niezależne. Tryb sandbox używa adresów URL ofert środowiska sandbox, oznacza kupującego jako „eBay Sandbox buyer” i poprzedza wiadomość prefiksem „Sandbox test purchase:”. Zakupy sandbox zachowują ten sam kontrakt zakupu i mogą uruchamiać włączone alerty/akcje czatu podczas testowania. Zaimplementowany kontrakt płatności emituje event: "purchase", z type i platform ustawione na ebay. Wymaga opłaconego zamówienia pasującego do wybranego produktu. id to stabilny niejawny identyfikator pozycji zamówienia; chatname to „eBay buyer”, chatmessage jest zwykłym tekstem (textonly: true), subtitle jest nazwą produktu i opcjonalnym contentimg jest jego obrazem. meta.ebayPurchase zawiera itemId, itemName, quantity, oraz publiczne url. Bez tożsamości kupującego, danych wysyłkowych, hasDonation lub donoValue jest dołączane. Różni się to od odczytanych aktualizacji aukcji lub zapasów, które nie dowodzą płatności.

Implementacja: sources/ebay.js

  • Otwórz /ebaylive/events/<id>/chat lub /ebaylive/events/<id>/stream. Oba otrzymują ten sam strumień aukcji na żywo.
  • Publiczny strumień WebSocket dostarcza aukcje, oferty, zwycięzców, przedłużenia czasu i zmiany zapasów; zapytanie GraphQL tylko do odczytu dostarcza szczegóły oferty. Przechwytywanie DOM pozostaje rozwiązaniem zapasowym, gdy dane sieciowe są niedostępne.
  • Przechwytuj wydarzenia transmisji steruje obrazami stanu metadanych (auction_update, commerce_update); liczniki widzów nadal uwzględniają przełączniki widzów/hype.
Zdarzenie Kiedy się uruchamia Uwagi o danych
viewer_update Gdy zmienia się liczba widzów aktywnego wydarzenia (licznik nagłówka lub zapasowo etykieta wydarzenia na żywo). meta to całkowita liczba widzów.
follower_update Gdy punkt końcowy statystyk sprzedawcy zwraca liczbę jego obserwujących. meta to całkowita liczba obserwujących. Źródło odpytuje punkt końcowy sprzedawcy co 60 sekund; punkt końcowy może nadal zwracać wartość z pamięci podręcznej przez maksymalnie 5 minut.
auction_update Gdy zmieniają się metadane aktywnej aukcji. Zdarzenie zawierające wyłącznie metadane. Przechwytywanie sieciowe ustawia meta.sourceMode na network i dostarcza title, price, bidder, winner, bids, timer oraz endingAt. meta.ebay zawiera eventId, listingId, rekord oferty GraphQL (listing), bieżąca publiczna oferta z gniazda (eventListing), oraz najnowsza aktualizacja aukcji (update). Zachowują one kategorię, obrazy, waluty, ilości, szczegóły case break, wyniki aukcji i pola czasu bez utraty szczegółów platformy wskutek spłaszczenia. Rekord GraphQL jest pobranym obrazem stanu; oferta i aktualizacja z gniazda zawierają nowszy stan na żywo. Historia przy uruchomieniu/ponownym połączeniu jest włączana do bieżącego obrazu stanu zamiast emitowania dawnych wygranych. Usunięcie wszystkich prezentowanych ofert emituje status: "idle" z cardCount: 0 aby wyczyścić aukcję. Zapasowy odczyt DOM zachowuje pola karty odtwarzacza lub podglądu wydarzenia.
commerce_update Gdy zmieniają się sekcje obrazu stanu katalogu/wydarzenia na żywo. Obraz stanu zawierający wyłącznie metadane w meta. Tryb sieciowy zawiera eventId, navigation.viewerCount i playerCards dla aktualnie prezentowanych ofert, każdej z tym samym szczegółowym ebay obiekt jako obraz stanu aukcji. Pusta lista kart usuwa skasowane oferty. Zapasowy odczyt DOM może też zawierać liveEvents, livePreview, currentEvent i upcomingEvents.
reaction Gdy eBay Live renderuje animację serduszka/reakcji. Wysyłane bezpośrednio do dedykowanego celu reakcji. meta.reactionType to heart; eBay nie udostępnia nazwy danego użytkownika dla tych animacji DOM.

Zdarzenia metadanych eBay celowo pomijają chatname/chatmessage; nakładki odbiorcze powinny renderować na podstawie data.event + data.meta wyłącznie.

Kick – standardowe przechwytywanie DOM

Implementacja: sources/kick.js

  • Wymaga uwierzytelnionej sesji do pobrania zdjęć profilowych i odznak subskrybentów.
  • Ograniczone wykrywanie zdarzeń przez dopasowywanie tekstu czatu i odznaki; liczba widzów nadal działa po włączeniu przełącznika.
Zdarzenie Kiedy się uruchamia Uwagi o danych
gift Prezenty KICKs wykrywane na podstawie obrazu naklejki i widocznej kwoty waluty Kick. hasDonation zawiera N KICKs (1 KICK dla jednego), gdy widoczna kwota jest dostępna; contentimg zawiera obraz prezentu. Istniejący tekst wiadomości jest zachowywany.
reward Realizacje nagród („has redeemed …”). chatmessage zawiera tekst realizacji.
true (wartość logiczna) Ogólne komunikaty systemowe niepasujące do wzorców prezentów ani nagród. Użyj chatmessage treści, aby ustalić prezentację; wartość logiczna true oznacza „zdarzenie systemowe – nieznany typ”.
viewer_update Odpytuje API kanału Kick co 30 sekund (tylko przy włączonych statystykach widzów). meta całkowita liczba widzów; do subskrypcji, obserwowań lub napiwków użyj mostu Kick poniżej.

Kick – WebSocket/most

Implementacja: sources/websocket/kick.js ze współdzielonymi funkcjami pomocniczymi w providers/kick/core.js

  • OAuth przez most Social Stream Kick. Obecne zakresy to user:read, channel:read, channel:write, channel:rewards:read, chat:write, events:subscribe, moderation:ban, moderation:chat_message:manage i kicks:read. Tokeny są odświeżane automatycznie.
  • Udostępnienie webhooków Kick może potrwać kilka minut; interfejs wyświetla aktywne subskrypcje dla każdego kanału.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Dane czatu mostu. meta.plainText zawiera wiadomość w zwykłym tekście (która nadal może zawierać emoji); odznaki łączą platformę i pamięć podręczną profili. Odpowiedzi w wątkach wypełniają initial, reply i meta.reply gdy dostępne są szczegóły odpowiedzi lub zapamiętana wiadomość nadrzędna.
reward channel.reward.redemption.updated, oraz dane czatu/systemu z mostu wyglądające jak realizacje nagród. meta zawiera identyfikator nagrody/realizacji, tytuł, koszt, status, dane użytkownika i osobę realizującą.
new_subscriber channel.subscription.new. membership przypisane do roli subskrybenta; meta zawiera { subscriber, plan }.
resub channel.subscription.renewal. meta.duration (miesiące) oraz meta.plan dostępne; subtitle podsumowuje serię.
subscription_gift channel.subscription.gifts. meta.totalGifted, meta.gifter; odznaki zastępczo używają ikony 💝.
donation Zdarzenia wsparcia/napiwków wykrywane heurystyką typu zdarzenia; prezenty KICKs używają gift poniżej. hasDonation zawiera sformatowaną kwotę; meta zawiera { amount, currency, supporter, message, giftName }.
gift kicks.gifted (prezenty KICKs), zgodnie z odczytem DOM. hasDonation zawiera N KICKs (1 KICK dla jednego); contentimg zawiera obraz prezentu, gdy jest dostępny. Uporządkowane szczegóły prezentu pozostają w meta.
raid Obsługa zgodności ze starszymi danymi gniazda w formacie hostowania, takimi jak App\Events\StreamHostEvent. Obecny oficjalny katalog zdarzeń Kick nie zawiera subskrypcji rajdu/hostowania. Jeśli nadejdą zgodne starsze dane, są mapowane na kanoniczne raid; nie opieraj na tym bieżącego przepływu Kick.
new_follower channel.followed. Ikony obserwujących pochodzą z pamięci podręcznej profili; follower_update uruchamia się, gdy Kick dostarcza bieżące sumy.
follower_update Most dostarcza liczbę obserwujących w danych webhooka. meta suma całkowita; używana przez panele do celów liczby obserwujących.
stream_online / stream_offline livestream.status.updated. meta zawiera surową treść statusu z Kicka (is_live, title itd.).
viewer_update livestream.status.updated gdy Kick dołącza sumy jednoczesnych widzów. meta całkowita liczba widzów; emituje 0 przy statusie offline, aby wyczyścić nieaktualne liczniki.
user_banned moderation.banned z mostu/webhooka lub zdarzeń banów gniazda czatu Kick. Zdarzenie zawierające wyłącznie metadane dla widżetów moderacji. meta zawiera nazwę użytkownika/wyświetlaną, identyfikator użytkownika, URL awatara/profilu, moderatora, powód, czas bana/wyciszenia i trwałość.

Wyszukiwanie profili korzysta z profileCache; mapBadges łączy zasoby odznak Kicka z SVG z pamięci podręcznej, gdy dostępne. Gdy Kick zgłasza wpłaty w KICKs, most przelicza je na hasDonation oraz meta.amount z currency zastępczo używają „KICKs”. Dane czatu zawierają meta.messageId gdy most udostępnia natywny identyfikator wiadomości Kick, aby synchronizacja usuwania mogła wskazać właściwą wiadomość. Dane odpowiedzi zawierają meta.reply z nadrzędnym messageId, author i text gdy znane. Dostarczone szczegóły odpowiedzi pozostają dostępne nawet wtedy, gdy oryginalnej wiadomości nie ma w pamięci podręcznej; odpowiedź zawierająca tylko identyfikator bez zapamiętanego kontekstu nadal może nie mieć widocznego cytatu.

Kick WebSocket: skrócona dokumentacja zdarzeń

data.event Scenariusz
new_followerUżytkownik zaczął obserwować kanał
new_subscriberNowa subskrypcja
resubOdnowienie subskrypcji
subscription_giftPodarowane subskrypcje
rewardRealizacja nagrody kanału lub wiadomość czatu/systemowa przypominająca nagrodę
donationZdarzenie napiwku/wsparcia
giftZdarzenie prezentu KICKs
raidWyłącznie zgodność: starsze dane wejściowe hostowania/rajdu; nie jest to obecna oficjalna subskrypcja Kick
follower_updateŁączna liczba obserwujących
stream_onlineTransmisja rozpoczęta
stream_offlineTransmisja zakończona
user_bannedUżytkownik został zbanowany lub czasowo wyciszony

VPZone - WebSocket

Implementacja: sources/websocket/vpzone.js

  • Łączy się z wss://chat.vpzone.tv/ws?channel=USERNAME; OAuth żąda profile:read, chat:read, chat:write, channel:read, channel:write i chat:moderate. Token bearer można też podać ręcznie.
  • Płaskie ramki VPZone, takie jak type: "msg" są normalizowane do standardowych danych czatu.
  • Po stronie platformy delete_message / clear_chat ramki usuwają pasujące wiersze z doku; opcjonalne przełączniki synchronizują usunięcia i blokady doku z powrotem do VPZone (tylko właściciel kanału).
  • Właściciele kanałów otrzymują lokalny panel Stream Info na stronie, służący do aktualizowania tytułu i kategorii transmisji na żywo (ten sam wzorzec co na stronie źródła Twitch).
Zdarzenie Kiedy się uruchamia Uwagi o danych
message VPZone msg, message, new_message lub chat_message ramka WebSocket. chatname pochodzi z username; chatmessage pochodzi z body; flagi subskrybenta/właściciela/moderatora/VIP są kopiowane do chatbadges, flagi ról najwyższego poziomu oraz meta. Natywne identyfikatory wypełniają data.id i meta.messageId.
viewer_update VPZone presence ramka z count lub równoważne pole widzów. meta jest całkowitą liczbą widzów na żywo; trafia do agregowanego viewer_updates.
new_subscriber VPZone subscribe / subscription ramka. membership jest ustawiane na Subscriber, gdy obecne są flagi subskrypcji.
subscription_gift VPZone gift / gift_subscription ramka. Używa tej samej nazwy zdarzenia podarowanej subskrypcji co Twitch, Kick, Rumble i Velora. subtitle zawiera liczbę prezentów (x5) lub odbiorcę.
message + hasDonation VPZone system ramka z metadata.kind: "pixels_cheer" (napiwek w Pixels). Wiersz czatu zawierający wpłatę; hasDonation jest etykietą kwoty (na przykład 100 Pixels), meta.pixels liczbę całkowitą. event pozostaje puste; wykrywaj ten napiwek na podstawie hasDonation. Zdarzenia wsparcia mostu Kick używają zamiast tego event: "donation".
message odpowiedzi VPZone msg ramka zawierająca metadata.reply_to (identyfikator wiadomości, autor, fragment — zdenormalizowane po stronie serwera). Renderowane jak odpowiedzi Kick: initial zawiera etykietę „autor: fragment”, reply surowy tekst odpowiedzi, meta.reply uporządkowany cel. Uwzględnia wyklucz „replying to” ustawienie.
raid VPZone raid ramka z metadata.kind: "incoming". Ramki wychodzących rajdów są pomijane; meta.viewers zawiera wielkość rajdu, gdy jest dostarczona.
shoutout VPZone shoutout ramka (!so polecenie). meta.targetUser nazywa polecany kanał.
reward VPZone system ramka z metadata.kind: "channel_points_redeem". Wykorzystanie punktów kanału, z tą samą nazwą zdarzenia co nagrody Twitcha.
stream_online / stream_offline VPZone system ramki z metadata.kind: "stream_started" / "stream_ended". Przypisane do nazwy kanału (ramki nie zawierają osoby wykonującej czynność).
new_follower VPZone follow ramka. Mapowane na standardową strukturę zdarzenia obserwowania.
joined Zdarzenia WebSocket dołączenia/obecności VPZone, gdy Przechwytuj zdarzenia „joined” transmisji jest włączone. Mapowane na zdarzenie systemowe w stylu czatu z metadanymi osoby VPZone w meta.

Joystick

Implementacje: sources/joystick.js, sources/inject/joystick-ws.js i sources/websocket/joystick.js

  • Zwykłe źródło witryny Joystick 2.0 działa po zalogowaniu na /u/<channel>/chat stronę. Odczytuje należące do strony ChatChannel, WhisperChatChannel, EventLogChannel i SystemEventChannel Ramki Action Cable, z zapasowym odczytem wyrenderowanych wierszy w Electronie i przy ponownym łączeniu.
  • Wiadomości czatu witryny używają tych samych podstawowych pól co YouTube, Twitch i Kick: natywne id, chatname, chatmessage, chatimg, chatbadges, nameColor, membership, mod, private, username/userid i timestamp gdy Joystick je dostarcza. Gdy gniazdo pomija kolor nazwy użytkownika, wyrenderowany wiersz dostarcza takie samo nameColor pole używane przez doki z włączonymi kolorami.
  • Zmiany wiadomości w witrynie zastępują pasujący wiersz doku; usunięcia, wyciszenia i blokady usuwają pasujące wiersze według natywnego identyfikatora lub nazwy użytkownika.
  • Osobne źródło WebSocket używa danych uwierzytelniających bota Joystick (client_id + client_secret); źródło witryny używa sesji zalogowanej strony.
  • Uwierzytelnia przez https://joystick.tv/api/oauth/authorize, a następnie wymienia/odświeża tokeny pod adresem https://api.joystick.tv/api/oauth/token.
  • Łączy się z wss://api.joystick.tv/cable i subskrybuje GatewayChannel.
  • Opcjonalna wymiana tokenów OAuth służy do pomocniczych punktów końcowych, takich jak https://api.joystick.tv/api/users/stream-settings.
  • Osobne źródło z danymi uwierzytelniającymi bota nie emituje viewer_update. Źródło zalogowanej witryny emituje liczbę widzów, gdy gniazdo strony ją dostarcza, zgodnie z opisem poniżej.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Joystick ChatMessage, BotMessage, new_message, bot_message, event_bot_message, pvp_message, i szepty. Zwykły czat nie ma event. Natywny identyfikator jest umieszczany w polu najwyższego poziomu id i meta.messageId; role i stan prywatności używają ustalonych pól najwyższego poziomu/odznak.
new_follower Joystick StreamEvent z typem Followed. Używa standardowej struktury obserwowania i jest pozbawiane duplikatów względem pasującego wiersza bota Joystick. Opcjonalne meta.userId/meta.followedAt są dołączane tylko wtedy, gdy Joystick je dostarcza.
new_subscriber / subscription_gift Typy zdarzeń Joystick NewSubscription / GiftedSubscription. Używa zgodnych z Kickiem kluczy metadanych subskrypcji: eventType, subscriber, gifter, totalGifted, duration i plan.
donation Joystick StreamEvent typy Tipped / TipMenu. hasDonation zawiera kwotę i jednostkę tokenów na potrzeby wspólnego przeliczenia USD, gdy są dostępne, a pasujący wiersz bota Joystick jest pozbawiany duplikatów. meta używa ustalonych kluczy zdarzeń wsparcia Kick: eventType, supporter, amount, currency, message, giftName, giftType i tier.
stream_online / stream_offline Joystick StreamEvent typy, takie jak Started, StreamResuming, Ended, StreamEnding. Używane w automatyzacjach online/offline uwzględniających transport.
user_enter / user_leave Joystick UserPresence typy enter_stream / leave_stream. Powiadomienia o obecności są emitowane jako wiadomości zdarzeń i można je ukryć ustawieniami ukrywania zdarzeń. Ukrywanie zdarzeń ukrywa również zdarzenia transmisji niezwiązane z wpłatami.
viewer_update Źródło zalogowanej witryny otrzymuje ViewerCountUpdated przez EventLogChannel. Używa zwykłej liczby całkowitej meta, zgodnie z YouTube, Twitchem i Kickiem. Emitowane tylko przy włączonym przechwytywaniu liczby widzów lub trybie hype. Osobne źródło korzystające z danych logowania bota nadal nie otrzymuje liczby widzów.
follower_update / subscriber_update Zdarzenia aktualizacji liczby obserwujących/subskrybentów Joystick. Używa zwykłej liczby całkowitej meta, zgodnie z kontraktem licznika Twitcha.
Ignorowane powiadomienia wewnętrzne ChatMessageReceived, stan urządzenia oraz nieprzypisane odświeżenia widżetów, takie jak stan celu napiwków/PvP/subathonu. To powiadomienia transportu lub stanu strony, a nie zdarzenia Social Stream. Nie są przekształcane w wymyślone snake_case nazwy zdarzeń; rzeczywiste ChatChannel/new_message wiersz pozostaje jedynymi danymi czatu.

XP Sync

Implementacja: sources/xpsync.js

  • Wiersze czatu używają kanonicznych pól danych z type: "xpsync", w tym autor, wiadomość, awatar, odznaki w postaci obrazów i osadzonego SVG, kolor nazwy, członkostwo, flagi moderatora/członka/bota oraz natywny UUID wiadomości jako id gdy dostępne.
  • Odpowiedzi stosują konwencję źródeł DOM YouTube, Twitcha i Kicka: o ile prefiksy odpowiedzi nie są wyłączone, initial zawiera użytkownika, któremu odpowiadano, reply zachowuje wiadomość bez prefiksu oraz chatmessage otrzymuje widoczny prefiks odpowiedzi.
  • Wiersze wyróżnione przez Sparks są przechwytywane, mimo że XPSync renderuje je bez zwykłej klasy wiersza czatu i identyfikatora wiadomości; widoczna kwota jest udostępniana przez hasDonation jako N Sparks.
  • Przy włączonym przechwytywaniu zdarzeń wiersze zawierające „just followed” lub „followed the channel” emitują event: "new_follower".
  • Gdy liczba widzów jest włączona, stały dok czatu emituje event: "viewer_update" z liczby widzów filmu na żywo już załadowanej przez stronę XPSync i odświeża ją na podstawie aktualizacji strony transmisji XPSync. Osobne dane uwierzytelniające SSN nie są wymagane.

Instagram – przechwytywanie REST na żywo i skrzynka wiadomości

Implementacja: sources/instagram.js i sources/instagramlive.js (identyczne kopie)

  • Na stronach transmisji na żywo (/<user>/live/?broadcast_id=...), czat na żywo pochodzi z własnego internetowego API Instagrama, odpytywanego w tej samej domenie z plikiem cookie sesji: GET /api/v1/live/{broadcast_id}/get_comment/?last_comment_ts={ts} co około 2 s oraz POST /api/v1/live/{broadcast_id}/heartbeat_and_get_viewer_count/ co około 5 s przy włączonej liczbie widzów. Po 3 kolejnych błędach (lub gdy brak broadcast_id można wykryć) źródło zastępczo analizuje wyrenderowany DOM czatu.
  • Własny kanał aktywności konta jest odpytywany przez POST /api/v1/news/inbox/ co około 45 s na dowolnej stronie Instagrama. Pierwsze odpytywanie tylko inicjuje zbiór do usuwania duplikatów, więc historia nigdy nie jest odtwarzana; wpisy są deduplikowane według tuuid.
  • Wymagane nagłówki API (wszystkie stałe lub możliwe do wyprowadzenia): X-IG-App-ID: 936619743392459, X-CSRFToken (z pliku cookie), X-ASBD-ID: 359341, X-Requested-With: XMLHttpRequest, Content-Type: application/x-www-form-urlencoded.
  • Wszystkie zdarzenia kanału aktywności używają type: "instagram"; czat na żywo pozostaje type: "instagramlive". Zdarzenia polubień używają zwykłej ścieżki w tle: proces w tle wysyła jedną kopię do dedykowanej nakładki reakcji, a następnie uwzględnia je w głównym strumieniu czatu/zdarzeń tylko wtedy, gdy capturelikeevent jest włączone, zgodnie z TikTokiem i MeetMe. hideevents i własny filtr zdarzeń blokują je wszędzie. Ponieważ zdarzenia skrzynki należą do zalogowanego konta, są pomijane podczas oglądania cudzej transmisji (zarówno /<user>/live/ stronach i transmisji w przeglądarce relacji; własność jest ustalana dla każdego profilu i ponawiana po nieudanym wyszukaniu), a emitowane na własnej transmisji i wszystkich stronach bez transmisji. W danej chwili jedna aktywna karta Instagrama odpytuje skrzynkę konta, a odpytywanie działa tylko po zalogowaniu.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message (na żywo) Nowe wpisy w get_comment odpowiedź (comments[]/system_comments[]), lub nowe wiersze czatu DOM, gdy REST jest niedostępny. Standardowe dane czatu, type: "instagramlive". REST dostarcza dokładne user.username, user.profile_pic_url, oraz unikatowe pk używane do usuwania duplikatów.
viewer_update heartbeat_and_get_viewer_count zgłasza zmienione viewer_count, gdy włączone jest przechwytywanie liczby widzów lub tryb hype. meta całkowita liczba widzów. Odpytywanie zatrzymuje się, gdy broadcast_status nie jest już "live".
stream_online / stream_offline stream_online uruchamia się raz po rozpoczęciu sesji transmisji REST; stream_offline uruchamia się, gdy heartbeat zgłasza stan nienadawania broadcast_status (wymaga przechwytywania liczby widzów lub trybu hype). Zdarzenia zawierające wyłącznie metadane, zgodne ze wspólnym słownictwem statusu transmisji używanym przez Twitcha i Joystick.
new_follower Wpis w skrzynce wiadomości z typem obserwowania notif_name (lub story_type 12) pojawia się. chatname jest nowym obserwującym, chatimg ich zdjęcie profilowe, chatmessage tekst skrzynki (na przykład „x started following you.”).
follow_request Element private_user_follow_request pojawia się wpis (konta prywatne otrzymują prośby zamiast bezpośrednich obserwowań). Taka sama struktura jak new_follower, zachowywane osobno, aby automatyzacje mogły zatwierdzać prośby lub witać inaczej.
liked Wpis w skrzynce wiadomości z typem polubienia notif_name (w tym comment_like) pojawia się. Wspólne słownictwo polubień z TikTokiem/MeetMe. chatname jest osobą wykonującą czynność, chatmessage tekst skrzynki (na przykład „x liked your photo.”).
message (komentarz do własnego wpisu) Wpis w skrzynce wiadomości z typem komentarza notif_name pojawia się. Zwykły wiersz czatu (event: false), type: "instagram"; chatmessage zawiera tekst skrzynki wraz z fragmentem komentarza.
notification Dowolny inny typ wpisu w skrzynce wiadomości (wzmianki, oznaczenia, zakupy itd.). Ogólna kategoria zbiorcza; meta.notifName i meta.storyType zachowują surową klasyfikację wpisu.

Facebook Live

Implementacja: sources/facebook.js (odczyt DOM) i opcjonalny most Graph API pod adresem sources/websocket/facebook.html

  • Przechwytywanie DOM odczytuje wyrenderowane komentarze Facebooka; most Graph API zarządzanej strony odczytuje komentarze do filmu. Oba używają type: "facebook", standardowe pola czatu i brak event dla zwykłych komentarzy. Most API zawiera również opcjonalne platform: "facebook".
  • Most API używa userid dla identyfikatora autora, jeśli dostępny, timestamp dla prawidłowego czasu utworzenia w milisekundach Unix oraz contentimg dla obrazu załącznika HTTP(S) dostarczonego przez API. Komentarze zawierające tylko obraz mogą mieć puste chatmessage. textonly dotyczy tylko treści wiadomości: surowy tekst przy true, HTML z zakodowanymi znakami specjalnymi przy false.
  • Kontekst komentarza API używa meta.messageId (natywny identyfikator komentarza), meta.permalink, meta.videoId i meta.pageId. Wcześniejsze wersje API używały meta.commentId, zduplikowane pola autora/czasu w meta, i przekazywały tam surowe załączniki. Nowe wersje używają zamiast tego standardowych pól autora/czasu/multimediów; nie dodaje to obsługi synchronizacji usuwania.
  • Liczba widzów odświeża się tylko po włączeniu. Most API odczytuje jednoczesne live_views; nie zastępuje jej łącznymi wyświetleniami filmu ani nie wymyśla zera dla niedostępnej liczby. Przechwytywanie API nie wnioskuje gwiazdek, członkostw, wyróżnień ani odpowiedzi ze zwykłego tekstu komentarza.
  • Gwiazdki są przechwytywane z wyrenderowanego DOM czatu na żywo, gdy Facebook pokazuje widoczne N sent znacznik; wypełniają hasDonation i donoValue według 100 gwiazdek = $1 USD bez ustawiania data.event.
  • Do testowania dodaj ssnreplay=1 do URL Facebook Live, aby przetworzyć wiersze czatu już widoczne po odświeżeniu.
Zdarzenie Kiedy się uruchamia Uwagi o danych
viewer_update DOM odpytuje odznakę widzów na żywo; most API odpytuje jednoczesne wyświetlenia na żywo, gdy jest włączony. meta całkowita liczba widzów, zgodna z innymi źródłami. Brakujące lub nieczytelne liczby są pomijane; rzeczywiste zero jest prawidłowe.
hasDonation Gwiazdki Facebooka renderowane w DOM czatu na żywo. Standardowe dane czatu; hasDonation zawiera widoczną liczbę gwiazdek, na przykład 100 Stars i donoValue zawiera wartość USD. Gwiazdki nie ustawiają data.event.
highlightColor Facebook renderuje widoczne HIGHLIGHTED etykietę. Używa zwykłych pól czatu i highlightColor; bez data.event jest ustawione. Gwiazdki nadal używają hasDonation.

Online Church

Implementacja: sources/onlinechurch.js

  • Opiera się na odczycie DOM publicznego czatu i nagłówka multimediów.
  • Liczba widzów odświeża się tylko wtedy, gdy Pokaż liczbę widzów lub tryb hype jest włączony.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Nowe wpisy pojawiają się pod #publicchat. Standardowe dane czatu z nazwą nadawcy, awatarem, odznakami i opcjonalną etykietą członkostwa, jeśli występuje w DOM.
viewer_update Odpytuje odznakę obecnych widzów w nagłówku multimediów co 10 s. meta całkowita liczba widzów; wysyła 0 gdy odznaki brakuje lub jest nieczytelna, aby wyczyścić nieaktualne liczniki.

SharePlay.tv

Implementacja: sources/shareplay.js

  • Opiera się na odczycie DOM szuflady czatu na żywo na stronach kanałów SharePlay.
  • Po podłączeniu odczytu emitowane są tylko nowo wstawione wiersze czatu i karty; istniejąca historia jest celowo ignorowana.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Nowe wiersze czatu pojawiają się w głównym strumieniu czatu. Standardowe dane czatu z autorem, awatarem, obrazami odznak i emotkami z zachowanym HTML. Odpowiedzi w wątkach wypełniają również initial, reply i meta.reply gdy wiersz nadrzędny nadal jest obecny.
raid SharePlay wstawia kartę Blitz do strumienia czatu na żywo. Mapowane na kanoniczne zdarzenie rajdu. meta.cardType to "blitz", z opcjonalnym meta.fromLogin i meta.viewers gdy tekst karty je udostępnia.
shoutout SharePlay wstawia kartę polecenia/obserwowania do strumienia czatu. Emitowane jako data.event = "shoutout". Obraz banera karty jest przekazywany przez contentimg, natomiast meta.cardType i meta.action zachowują etykietę karty/tekst przycisku.
viewer_update Odpytuje widoczną odznakę widzów w nagłówku co 10 s. meta całkowita liczba widzów; emitowana tylko wtedy, gdy Pokaż liczbę widzów lub tryb hype jest włączony i wysyła 0 gdy odznaka stanie się nieczytelna, aby wyczyścić nieaktualne liczniki.

Streamplace

Implementacja: sources/streamplace.js

  • Odczytuje stronę transmisji Streamplace renderowaną w React i przy podłączaniu pomija widoczną historię czatu.
  • Wiadomości przekazywane, takie jak Name (Discord): message są normalizowane do nazwy przekazywanego nadawcy.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Po podłączeniu pojawiają się nowe wiersze czatu Streamplace. Standardowe dane czatu z nameColor, chatbadges, łącza z zachowanym HTML i pola odpowiedzi initial, reply i meta.reply gdy widoczne.
viewer_update Odznaka widzów w nagłówku zmienia się przy włączonym przechwytywaniu liczby widzów lub trybie hype. meta całkowita liczba widzów.

WorldsWave

Implementacja: sources/worldswave.js

  • Obsługuje strony transmisji na żywo WorldsWave i adresy URL samego czatu, takie jak https://worldswave.com/kn_livecmd.php?cmd=viewStream&streamId=STREAM_ID&chatonly=1.
  • Używa stabilnego data-ww-*/ww-chat-* znaczniki, gdy dostępne, zachowując starsze selektory kontackt dla stron samego czatu i starszych układów.
  • Istniejąca historia czatu jest pomijana przy podłączaniu przechwytywania; testuj nową wiadomością.
  • Liczba widzów wymaga Pokaż liczbę widzów lub tryb hype. Dedykowane zdarzenia prezentów/napiwków i odsyłanie wiadomości nie są zaimplementowane. Wyrenderowany wiersz może nadal dostarczać etykietę wpłaty przez data-ww-donation.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Pojawia się nowy wyrenderowany wiersz czatu WorldsWave. Standardowe dane czatu z type: "worldswave", nazwę nadawcy, awatar, opcjonalny identyfikator użytkownika, kolor nazwy, odznaki, status moderatora, członkostwo, wartość wpłaty, załącznik i tożsamość kanału. Stabilne identyfikatory wiadomości WorldsWave są udostępniane jako meta.messageId i pozbawiane duplikatów między równoczesnymi panelami podglądu/pełnego czatu. Obrazy w treści wiadomości pozostają oczyszczone, gdy tryb samego tekstu jest wyłączony.
viewer_update Widoczna suma widzów na żywo zmienia się przy włączonym przechwytywaniu liczby widzów lub trybie hype. meta jest całkowitą liczbą widzów. Stabilne data-ww-viewer-count wartość ma pierwszeństwo; skrócone starsze wartości, takie jak 1.2K są normalizowane jako rozwiązanie zapasowe.

FLEX TV

Implementacja: sources/flextv.js

  • Odczytuje wyrenderowany panel czatu na https://www.flextv.co.kr/channels/*/live stronach.
  • Panel czatu musi być widoczny. Istniejąca historia czatu jest pomijana przy podłączaniu źródła, więc testuj nowym wierszem czatu.
  • Dla tego źródła nie udokumentowano jeszcze liczby widzów, wpłat ani ścieżki odsyłania wiadomości.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Nowe widoczne FLEX TV .chat-item wiersze pojawiają się w strumieniu czatu na żywo. Standardowe dane czatu z type: "flextv", chatname, chatmessage, nameColor, obrazy odznak w chatbadges, a szczegóły członków FLEX w meta gdy udostępnione przez data-member.

Seal Team Sloth

Implementacja: sources/sealteamsloth.js

  • Odczytuje wyrenderowany czat osobnego okna na https://sealteamsloth.com/popout-chat/* stronach.
  • Liczba widzów wymaga Pokaż liczbę widzów lub tryb hype.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Pojawia się nowy wyrenderowany wiersz czatu Seal Team Sloth. Standardowe dane czatu z type: "sealteamsloth", nazwę nadawcy, awatar i treść wiadomości.
viewer_update Widoczna suma widzów na żywo zmienia się przy włączonym przechwytywaniu liczby widzów lub trybie hype. meta jest całkowitą liczbą widzów; skrócone wartości, takie jak 1.2K są normalizowane.

MeetMe - przechwytywanie DOM i WebSocket

Implementacja: sources/meetme.js

  • Odczytuje wyrenderowany DOM czatu na żywo MeetMe na app.meetme.com/live/view/... stronach i wewnątrz api.gateway.meetme-live.com/web-live/... iframe.
  • Gdy WebSocket iframe jest dostępny, wss://video-live.meetme.com/ ramki są analizowane przed zapasowym odczytem DOM, aby przechwycić bogatsze zdarzenia na żywo.
  • hideevents ukrywa zdarzenia niezwiązane z wpłatami; prezenty MeetMe i wpłaty diamentów nadal wypełniają pola wpłat. capturejoinedevent włącza powiadomienia o dołączeniu/ponownym dołączeniu. Dotyczące konkretnej osoby liked zdarzenia używają wspólnego routingu w tle sterowanego przez capturelikeevent; agreguj reaction efekty pozostają jawnie kierowane do nakładki reakcji.
  • Liczba widzów preferuje widoczny licznik w nagłówku MeetMe, używając sum WebSocket tylko wtedy, gdy licznik DOM jest niedostępny. Liczby są emitowane przy zmianie, a ostatnia liczba jest powtarzana mniej więcej co 30 sekund, gdy showviewercount/hypemode jest włączone; sumy obserwujących są wysyłane tylko po zmianie i ograniczone do częstotliwości około 60 sekund.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Nowe SNSChatMessage docierają ramki WebSocket lub nowe ChatMessage_* Wiersze DOM pojawiają się w ChatHistoryContainer_*. Standardowe dane czatu z nazwą nadawcy, awatarem, HTML/tekstem wiadomości i obrazami/tekstem odznak. Szczegóły wiersza DOM są płaskim meta klucze, w tym messageId, roomId, level, levelColor, badgeLabels, badgeSrcs, badgeClasses, isBouncer, isTopStreamer, isBestOfTheWeek, rank i rowClassName. Dane WebSocket ustawiają meta.source = "websocket".
joined / rejoined / left SNSChatParticipant docierają ramki tworzenia, aktualizacji lub usuwania WebSocket albo MeetMe renderuje w DOM join-cell wiersz. Powiadomienia o dołączeniu/ponownym dołączeniu wymagają Przechwytuj zdarzenia „joined” transmisji. Emituje komunikaty systemowe w stylu czatu z nazwą/awatarem osoby, gdy MeetMe je udostępnia. meta.isNewViewer, meta.viewerLevelId, meta.isBouncer i meta.isSubscriber zachowują stan uczestników.
new_follower MeetMe renderuje wiersz DOM dodania do ulubionych/obserwowania, taki jak Favorited. Używa wspólnego słownictwa zdarzeń obserwowania. chatname jest osobą wykonującą czynność, chatimg jest wykrytym zdjęciem profilowym, jeśli dostępne, a płaskie meta.favoriteText/meta.targetName zachowują oryginalne szczegóły wiersza.
gift SNSGiftMessage docierają ramki WebSocket albo MeetMe renderuje obraz prezentu w wierszu czatu. hasDonation zawiera widoczną etykietę prezentu lub wartość diamentów, contentimg zawiera obraz prezentu, gdy jest udostępniony, a płaskie klucze, takie jak meta.giftName, meta.giftCount, meta.amount i meta.currency zachowują uporządkowane szczegóły. Element gift zdarzenie jest zarezerwowane dla rzeczywistych ramek/wierszy prezentów; renderowanie wpłat powinno nadal opierać się na hasDonation.
donation SNSDiamond ramki WebSocket udostępniają aktywność diamentów. Dedykowane ramki diamentów są traktowane jako zdarzenia wpłaty. hasDonation jest formatowane jako diamenty do wspólnego przeliczania USD oraz meta.amount/meta.currency pozostają płaskie dla automatyzacji.
liked / reaction SNSLike docierają ramki WebSocket. Polubienia przypisane do konkretnej osoby używają tego samego liked słownictwo i scentralizowany routing w tle co TikTok. Zagregowane/anonimowe sumy polubień są wysyłane tylko do celu reakcji jako reaction, z płaskim meta.reactionType, meta.totalLikes i meta.subscriberLikes. Różnica dotyczy znaczenia zdarzenia, a nie anonimowości: capturelikeevent steruje tylko indywidualnymi liked/like zdarzenia.
follower_update SNSVideo metadane WebSocket udostępniają sumy obserwujących. meta jest całkowitą liczbą obserwujących, zgodną ze wspólną konwencją zdarzeń liczników.
guest_update SNSVideoGuestBroadcast docierają ramki tworzenia/aktualizacji. Zdarzenie zawierające wyłącznie metadane stanu gościa/współprowadzącego na żywo. Płaskie meta klucze obejmują status, position, totalGuests, isMuted, guestBroadcastId, videoViewerId i broadcastId.
viewer_update Widoczna odznaka widzów w nagłówku zmienia się lub SNSVideo metadane WebSocket udostępniają sumy widzów, gdy odznaka jest niedostępna; niezmienione sumy są powtarzane mniej więcej co 30 sekund przy włączonej funkcji. meta całkowita liczba widzów; emitowana tylko przy włączonym przechwytywaniu liczby widzów lub trybie hype.

Velora

Implementacja: sources/velora.js i sources/websocket/velora.js

  • Tryb Standard odczytuje widoczny DOM czatu; tryb WebSocket używa Velora Events API z OAuth.
  • Obsługiwane adresy URL trybu Standard obejmują https://velora.tv/*, https://velora.tv/dashboard/stream/popout?panels=chat%2Cactivity&channel=CHANNEL&layout=vertical i https://velora.tv/dashboard/stream/popout/CHANNEL/obs-chat.
  • Karty typu Volts i punkty kanału są emitowane jako dane zdarzeń, gdy udostępnia je DOM lub Events API.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Pojawiają się nowe wiersze czatu Velora lub docierają wiadomości czatu Events API. Standardowe dane czatu z zachowanymi odznakami, kolorem autora, łączami i emotkami, gdy tryb samego tekstu jest wyłączony.
volts Karty Volts Velora lub channel.volts Docierają dane Events API. hasDonation zawiera wyświetlaną kwotę Volts; przechwytywanie DOM zawiera meta.source = "dom".
channel_points Karty punktów kanału/realizacji Velora lub channel.channel_points_redemption Docierają dane Events API. chatmessage zawiera wiadomość realizacji lub tytuł nagrody; meta.rewardTitle identyfikuje nagrodę, gdy jest dostępna.
subscription Widoczny wiersz aktywności Velora informuje, że użytkownik został członkiem/subskrybentem kanału. membership zawiera widoczną etykietę członkostwa.
viewer_update Widoczna liczba widzów zmienia się przy włączonym przechwytywaniu liczby widzów lub trybie hype. meta całkowita liczba widzów.

Parti - przechwytywanie czatu profilu / osobnego okna

Implementacja: sources/parti.js

  • Obsługuje adresy URL profili, takie jak https://parti.com/USERNAME i adresy URL osobnych okien, takie jak https://parti.com/popout-chat?id=USER_ID.
  • Liczba widzów używa punktu końcowego heartbeat transmisji Parti, gdy włączono przechwytywanie liczby widzów lub tryb hype.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Widoczne wiersze czatu Parti pojawiają się w strumieniu czatu profilu lub osobnego okna. Standardowe dane czatu; nameColor zachowuje wyrenderowany kolor autora Parti i chatmessage zachowuje zawartość osadzoną, chyba że włączono tryb samego tekstu.
donation Widoczne wiersze napiwków Parti informują, że użytkownik przekazał określoną kwotę. hasDonation zawiera wyświetlaną kwotę, meta.amount/meta.currency są wypełniane, gdy można je odczytać, meta.amountText zachowuje surowy tekst kwoty oraz donoValue jest ustawiane dla napiwków USD.
viewer_update Sygnał heartbeat Parti zwraca liczbę widzów na żywo. meta jest całkowitą liczbą widzów; strona używa ponownie jednego tokenu heartbeat na okno źródła, aby nie zawyżać liczby.

CHZZK - przechwytywanie osobnego okna czatu

Implementacja: sources/chzzk.js

  • Obsługuje https://chzzk.naver.com/live/*/chat i https://chzzk.naver.com/iframe/live/*/chat.
  • Liczba widzów używa punktu końcowego odpytywania statusu transmisji CHZZK, gdy włączono przechwytywanie liczby widzów lub tryb hype.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Widoczne wiersze czatu CHZZK pojawiają się w strumieniu osobnego okna czatu. Standardowe dane czatu z type: "chzzk", nameColor, adresy URL obrazów odznak w chatbadges, oraz wyrenderowane emotki w chatmessage chyba że włączono tryb samego tekstu.
czat z hasDonation Widoczne wiersze wpłat cheese CHZZK pojawiają się na czacie. hasDonation zawiera wyświetlaną kwotę cheese. Te wiersze nie ustawiają data.event.
viewer_update Odpytywanie statusu transmisji zwraca liczbę widzów. meta jest całkowitą liczbą widzów.

Rumble - standardowe przechwytywanie DOM

Implementacja: sources/rumble.js

  • Wymaga uwierzytelnionych plików cookie sesji, aby service.php API widzów odpowie.
  • Wyrenderowane wiersze Rant dostarczają hasDonation; karty przychodzących rajdów dostarczają event: "raid". To źródło DOM nie emituje strumienia zdarzeń subskrybentów/obserwujących mostu API.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Widoczne wiersze czatu Rumble pojawiają się na stronie lub w osobnym oknie czatu. Standardowe dane czatu; chatmessage zachowuje HTML obrazów emotek Rumble po ich wyrenderowaniu przez stronę, chyba że włączono tryb samego tekstu.
viewer_update Wywołuje należące do Rumble video.watching-now usługę co 30 s. meta całkowita liczba widzów; używa credentials: 'include' aby ponownie użyć plików cookie sesji.
czat z hasDonationWidoczny wiersz Rant zawiera cenę.hasDonation zachowuje wyrenderowaną cenę; znacznik zdarzenia wpłaty nie jest dodawany.
raidNa czacie pojawia się karta przychodzącego rajdu.Używa widocznej wiadomości rajdu i opcjonalnego obrazu karty w contentimg.

Rumble - WebSocket/URL API

Implementacja: sources/websocket/rumble.js

  • Wymaga należącego do twórcy adresu URL Live Stream API z https://rumble.com/account/livestream-api. Dokumentacja Rumble podaje, że ten URL zawiera klucz transmisji na żywo, nie wymaga osobnego uwierzytelniania i należy udostępniać go tylko zaufanym podmiotom.
  • Transport tylko do odczytu. Publiczna dokumentacja Rumble Live Stream API nie opisuje oficjalnego punktu końcowego wysyłania czatu, więc to źródło przekazuje wiadomości/zdarzenia do Social Stream, ale nie wysyła czatu z powrotem do Rumble.
  • livestreams[].chat jest wypełniane tylko wtedy, gdy wybrana transmisja jest na żywo. Użyj ?streamId=... aby przypiąć konkretną transmisję, gdy API udostępnia ich więcej; nieprawidłowe identyfikatory teraz powodują błąd zamiast cichego przejścia na inną transmisję.
  • Strona ustala również https://rumble.com/chat/popup/<livestreams[].id> aby można było bezpośrednio otworzyć zwykły wstrzyknięty czat w osobnym oknie bez wcześniejszego ładowania należącego do nadawcy /live stronę.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Nowe wpisy docierają ze strumienia czatu SSE Rumble po ustaleniu przez oficjalne API livestreams[].id; zastępczo używa livestreams[].chat.recent_messages. Standardowe dane czatu. meta.source to rumble_sse gdy strumień czatu SSE jest dostępny i zawiera adresy URL awatarów z users[].image.1; w przeciwnym razie zastępczo używa live_stream_api bez awatarów. Gdy katalog emotek osobnego okna jest dostępny, chatmessage renderuje emotki shortcode Rumble jako HTML obrazów i meta.plainText zachowuje oryginalny tekst shortcode.
donation Nowe wpisy Rant pojawiają się w livestreams[].chat.recent_rants. hasDonation zawiera kwotę sformatowaną w USD; meta zawiera amount_cents, amount_dollars i expiresOn.
new_follower Nowe wpisy pojawiają się w followers.recent_followers. Zdarzenie systemowe z chatname ustawione na nazwę użytkownika obserwującego i znacznik czasu w meta.followedOn.
new_subscriber Nowe wpisy pojawiają się w subscribers.recent_subscribers. membership jest ustawiane na SUBSCRIBER; subtitle odzwierciedla udokumentowaną kwotę USD, gdy Rumble ją dostarcza.
subscription_gift Nowe wpisy pojawiają się w gifted_subs.recent_gifted_subs. chatname jest darczyńcą, hasDonation staje się N Gifted i meta zawiera totalGifted, remainingGifts, giftType i videoId.
follower_update Za każdym razem, gdy zmienia się wybrany licznik obserwujących. meta całkowita liczba obserwujących. Domyślnie followers.num_followers; z ?followerMode=total, używa followers.num_followers_total gdy Rumble je dostarcza.
subscriber_update Za każdym razem, gdy subscribers.num_subscribers zmienia się. meta całkowita liczba subskrybentów.
stream_online / stream_offline Gdy wybrana transmisja przełącza się między stanem na żywo i offline. meta zawiera oczyszczony podzbiór pól transmisji (id, title, createdOn, etykiety kategorii, polubienia/negatywne oceny i całkowitą liczbę widzów). Wrażliwe wartości, takie jak stream_key celowo nie są przekazywane.
viewer_update Za każdym razem, gdy livestreams[].watching_now zmienia się dla wybranej transmisji. meta całkowita liczba jednoczesnych widzów; emituje 0 gdy wybrana transmisja przechodzi offline, aby wyczyścić nieaktualne liczniki.

Ten transport jest przeznaczony dla kanałów, które posiadasz lub którymi zarządzasz. Ponieważ URL API zawiera klucz transmisji na żywo, nie ujawniaj go w nakładkach, logach, zrzutach ekranu ani współdzielonych profilach przeglądarki. Awatary czatu pochodzą ze strumienia czatu SSE Rumble, gdy oficjalne API ustali identyfikator transmisji; ten transport nie odczytuje stron Rumble w poszukiwaniu awatarów.

YouNow - przechwytywanie DOM

Implementacja: sources/younow.js

  • Odczytuje wyrenderowany DOM czatu na żywo i emituje standardowe dane czatu z type: "younow".
  • Wiersze aktywności widowni, takie jak is watching, I became a fan! i invited N fans to this broadcast. są oznaczone przez event: true aby filtry zdarzeń mogły nimi kierować.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Nowe wiersze czatu pojawiają się na czacie widowni na żywo. Standardowe dane czatu; wiersze aktywności fanów/widowni ustawiają event: true.
viewer_update Widoczny licznik panelu widowni zmienia się, gdy showviewercount/hypemode jest włączone. meta całkowita liczba widzów; emituje 0 gdy licznik znika.

Favorited Studio - przechwytywanie DOM

Implementacja: sources/favorited.js

  • Odczytuje wyrenderowany DOM czatu na żywo i emituje standardowe dane czatu z type: "favorited".
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Pojawiają się nowe wiersze czatu. Standardowe dane czatu.
viewer_update Licznik na karcie widzów na żywo zmienia się, gdy showviewercount/hypemode jest włączone. meta całkowita liczba widzów odczytana z content-live-viewers karcie.

BEAM - przechwytywanie DOM

Implementacja: sources/beamstream.js

  • Odczytuje wyrenderowany DOM czatu na żywo i emituje standardowe dane czatu z type: "beamstream".
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Pojawiają się nowe wiersze czatu. Standardowe dane czatu ze zwykłym tekstem w chatname, adres URL awatara w chatimg, a adresy URL obrazów lub obiekty odznak SVG w chatbadges. Pola ukryte na stronie przechwytywania Beam pozostają puste. Natywne łącza profili Beam nie są traktowane jako zewnętrzne źródła przekazywania. contentimg może zawierać osadzone załączniki video/webm, gdy są udostępnione.
viewer_update Element licznika widzów zmienia się, gdy showviewercount/hypemode jest włączone. meta całkowita liczba widzów; emitowana tylko wtedy, gdy strona czatu udostępnia licznik widzów.

Castyr - przechwytywanie DOM

Implementacja: sources/castyr.js

  • Odczytuje nowe wyrenderowane wiersze czatu z https://castyr.live/homebeta/popout-chat/* i emituje standardowe dane czatu z type: "castyr".
  • Istniejąca historia czatu jest pomijana przy podłączaniu źródła.
Zdarzenie Kiedy się uruchamia Uwagi o danych
message Nowe .chat-message pojawia się wiersz. Standardowe dane czatu z nazwą nadawcy, wyrenderowaną treścią wiadomości i kolorem nazwy, jeśli jest udostępniony.
viewer_update Widoczny licznik aktywnego czatu zmienia się, gdy showviewercount/hypemode jest włączone. meta jest liczbą całkowitą odczytaną z elementu aktywnego czatu Castyr z atrybutem title.

SOOP - przechwytywanie DOM odtwarzacza

Implementacja: sources/sooplive.js. Obsługuje ujednolicone play.sooplive.com odtwarzacz i starsze play.sooplive.co.kr adresy URL. Dawny globalny układ czatu nadal jest rozpoznawany, gdy jest udostępniony.

Czat publiczny emituje type/platform: "sooplive", zapisane zwykłym tekstem chatname/userid, nameColor, oraz oczyszczone chatmessage. Istniejące wiersze, zduplikowane identyfikatory wiadomości, kopie tłumaczeń i prywatne szepty są wykluczone. Emotki stają się bezpiecznymi obrazami lub tekstem alternatywnym w trybie samego tekstu.

Z showviewercount lub hypemode włączone, viewer_update zawiera liczbę całkowitą meta z należącego do odtwarzacza #nAllViewer. Osobne okna samego czatu mogą nie udostępniać tej liczby. SSApp używa pełnego odtwarzacza przy otwieraniu odłączonego okna, ponieważ obecne osobne okna SOOP zależą od okna, które je otworzyło.

Gosh - przechwytywanie czatu kanału

Implementacja: sources/gosh.js. Otwórz https://gosh.com/USERNAME z widocznym czatem lub wklej ten URL w Add other source w SSApp. Osobne okno czatu nie jest wymagane.

Nowe wiersze czatu emitują type/platform: "gosh", zapisane zwykłym tekstem chatname, nameColor, oraz oczyszczone chatmessage. Obrazy i GIF-y w treści zachowują bezpieczne adresy HTTP(S). Z textonlymode, obrazy stają się tekstem alternatywnym lub [image] gdy tekst alternatywny jest niedostępny. Awatary, odznaki, wpłaty i członkostwa pozostają puste, gdy nie ma ich w przechwyconym wierszu.

Pozostaw wirtualizowany czat przewinięty do najnowszych wiadomości. Istniejąca historia, ponownie renderowane wiersze i komunikaty systemowe bez autora są wykluczone. Indeksy renderowania pozostają wewnętrzne i nie są emitowane jako natywne identyfikatory wiadomości. Nie są wnioskowane żadne zdarzenia obserwowania, wpłat, liczby widzów ani moderacji.

Livacha - przechwytywanie pokoju czatu

Implementacja: sources/livacha.js. Otwórz https://livacha.com/chat/ROOM z widocznym czatem lub wklej URL pokoju w Add other source w SSApp.

Nowe wiersze czatu emitują type/platform: "livacha", zapisane zwykłym tekstem chatname, chatimg, nameColor, oraz oczyszczone chatmessage. Względne adresy URL awatarów i obrazów w treści stają się bezwzględnymi adresami HTTP(S). Akapity, podziały wierszy i listy są spłaszczane do jednej wiadomości czatu. Z textonlymode, obrazy stają się tekstem alternatywnym lub [image].

Identyfikatory wiadomości są używane wewnętrznie, aby uniknąć ponownego przechwytywania zmian i ponownie zamontowanych wierszy. Początkowa historia i starsze wiadomości dodane na początku są pomijane; znaczniki czasu i menu reakcji pozostają poza przechwytywaną treścią. Nie są wnioskowane zdarzenia wpłat, członkostw, moderacji ani liczby widzów.

Stream.space - eksperymentalne przechwytywanie DOM

Implementacja: sources/streamspace.js. Dopasowuje tylko https://beta.stream.space/chat-popup.php?channel=USERNAME i odpowiednik https://stream.space okno.

Nowe wyrenderowane wiersze czatu emitują type: "streamspace", platform: "streamspace", zapisane zwykłym tekstem chatname/userid, chatmessage, awatar chatimg, poziom w postaci obrazu chatbadges i nameColor. Emotki w treści są odtwarzane jako bezpieczne obrazy lub ich tekst alternatywny, gdy textonlymode jest włączone. Istniejąca historia, powiadomienia powitalne, podglądy odpowiedzi i przypięte duplikaty są wykluczone.

viewer_update zawiera liczbę całkowitą meta odczytane z #popupViewersNum gdy showviewercount lub hypemode jest włączone. Nie są wnioskowane zdarzenia wpłat, członkostw ani moderacji.

Eksperymentalne: podczas sprawdzania okno beta pozostało na ekranie Loading. SSApp załadował okno i przechwycił aktualizacje widzów, ale dostarczanie czatu na żywo i okno produkcyjne pozostają niezweryfikowane. SSN nie może przechwycić wiadomości, których witryna nie renderuje.

w.tv i Prime - przechwytywanie DOM

Implementacje: sources/wtv.js na https://w.tv/USERNAME/chat i sources/prime.js na https://prime.gs/USERNAME?chat_popout=1.

Nowe wiersze czatu używają type/platform z wtv lub prime, zapisane zwykłym tekstem chatname, nameColor, oraz oczyszczone chatmessage. Emotki w treści stają się bezpiecznymi obrazami lub tekstem alternatywnym w trybie samego tekstu. Prime zawiera też należące do wiersza userid i obsługuje zarówno łącza profili po zalogowaniu, jak i etykiety nazw użytkowników bez zalogowania. Awatary i odznaki pozostają puste, gdy są niedostępne w zweryfikowanej strukturze wiersza.

Początkowa historia, przypięte karty i podglądy odpowiedzi są wykluczone. w.tv wirtualizuje czat: pozostaw przewinięty do najnowszych wiadomości, aby je przechwytywać. Jego identyfikatory testowe DOM są indeksami renderowania, a nie natywnymi identyfikatorami wiadomości. Prime pomija starszą historię załadowaną nad początkowymi wiadomościami i elementy zastępcze ignorowanych użytkowników.

Żadne z okien nie udostępnia zweryfikowanej liczby widzów transmisji, więc te adaptery nie emitują aktualizacji widzów ani nie wnioskują zdarzeń wpłat, subskrypcji lub moderacji.

Spójność zdarzeń między platformami

Użyj tej tabeli, aby zrozumieć mapowanie podobnych pojęć między platformami. W miarę możliwości nowe źródła powinny stosować wspólne nazwy zdarzeń z pierwszej kolumny.

Pojęcie YouTube WS Twitch WS Kick WS
Nowy członek/subskrybent sponsorship new_subscriber new_subscriber
Odnowienie/ponowna subskrypcja resub resub resub
Podarowane subskrypcje giftpurchase subscription_gift subscription_gift
Otrzymano prezent giftredemption - -
Kamień milowy membermilestone - -
Wpłata/napiwek superchat, supersticker, jeweldonation z hasDonation cheer (bity) donation
Nowy obserwujący new_follower (odpytywane)* new_follower new_follower
Liczba widzów viewer_update viewer_update viewer_update
Liczba obserwujących - follower_update follower_update
Liczba subskrybentów subscriber_update subscriber_update -
Status transmisji live_chat_ended stream_online/stream_offline stream_online/stream_offline
Rajd - raid -
Realizacja nagrody - reward reward

Uwagi dotyczące spójności

  • YouTube używa sponsorship dla nowych członków, natomiast Twitch i Kick używają new_subscriber. Rozważ sprawdzanie obu przy tworzeniu wyzwalaczy dla wielu platform.
  • resub jest spójne we wszystkich trzech platformach dla odnowień.
  • Zdarzenia prezentów różnią się: YouTube używa giftpurchase/giftredemption, natomiast Twitch i Kick używają subscription_gift.
  • Wpłaty różnią się zależnie od platformy: YouTube używa konkretnych nazw płatnych zdarzeń, takich jak superchat, supersticker i jeweldonation z hasDonation; Twitch ma bity (cheer); Kick ma napiwki (donation).
  • new_follower jest teraz spójne we wszystkich trzech platformach, ale YouTube odpytuje ostatnich subskrybentów i może zwracać wyniki opóźnione lub niekompletne.
  • Polubienia i reakcje mają osobne kontrakty: indywidualne liked/like zdarzenia docierają do nakładki reakcji, chyba że są globalnie odfiltrowane, i wchodzą do głównego przetwarzania tylko wtedy, gdy capturelikeevent jest włączone. Wizualne lub natywne dla platformy reaction zdarzenia zachowują routing określony przez producenta. Zagregowane likes_update licznikami osobno steruje captureliketotals.

Zakres obsługi i ograniczenia zgodności

Ta dokumentacja opisuje zaimplementowane dane, a nie gwarancję, że każda platforma dostarcza każde zdarzenie. Puste hasDonation przypisania w źródle nie dowodzą obsługi wpłat. Widoczność DOM, uprawnienia konta, przełączniki przechwytywania i dostępność API nadal decydują o odbieranych danych. Przekazywanie usuwania jest właściwe dla źródła; nie zakładaj powszechnej synchronizacji moderacji.

Śledzone rozbieżności i luki

Para/obszar Zaobserwowana rozbieżność / luka Wpływ
Twitch: Standard a WebSocket Wspólne: reward, subscription_gift, viewer_update, hype_train, oraz opcjonalnie włączane watch_streak. Tylko Standard: giftpurchase, knock, community_highlight. Tylko WebSocket: new_subscriber, resub, cheer, powerup, raid, new_follower, follower_update, subscriber_update. channel_points jest teraz przestarzałym starszym aliasem realizacji nagród Twitcha; nowe integracje powinny opierać się na reward.
Kick: Standard a WebSocket Standard emituje lekkie znaczniki (gift, reward, wartość logiczną true, viewer_update). WebSocket dodaje oficjalne zdarzenia obserwowania, subskrypcji, prezentów, realizacji nagród, KICKs, moderacji i statusu transmisji. Zachowuje obsługę zgodności ze starszym raid dane, ale Kick obecnie nie oferuje oficjalnej subskrypcji rajdu/hostowania. Tryb WebSocket jest bogatszy; przy przełączaniu należy sprawdzić automatyzacje oparte na nazwach zdarzeń występujących tylko w trybie Standard. Nie wymagaj zdarzenia rajdu Kick.
YouTube: Standard a WebSocket Wspólne: superchat, supersticker, jeweldonation, sponsorship, resub, giftpurchase, giftredemption, viewer_update. Tylko Standard: thankyou, redirect. Tylko WebSocket: membermilestone, new_follower, subscriber_update, view_update, likes_update (opcjonalnie włączane). Podstawowe nazwy członkostw/zdarzeń są spójne w obu; Super Chat, Super Sticker i Jewels używają hasDonation, podczas gdy zakupy/realizacje prezentów członkostwa tego nie robią.
Wszystkie interfejsy Wiele źródeł wypełnia hasDonation bez ustawiania data.event. To prawidłowe; renderowanie wpłat powinno opierać się na hasDonation, z data.event zarezerwowane dla znaczenia systemowego/zdarzeń.

Aliasy i starsze nazwy właściwe dla źródeł

Te mapowania dotyczą podanego źródła/kontekstu, a nie globalnych zamienników. Obsługa aliasów przez odbiorców zależy od strony. Obecne źródła DOM TikToka i TikFinity nadal emitują followed; Velora używa subscription i channel_points, a Streamlabs używa subscription. Akceptuj bieżący kontrakt źródła i jego odpowiednie starsze aliasy zamiast zmieniać nazwę każdego pasującego zdarzenia.

Alias / starsza nazwa Kanoniczny zamiennik Kontekst
subscriptionnew_subscriberNowa subskrypcja Twitch/Kick
subgiftsubscription_giftPodarowana subskrypcja Twitch
membershipsponsorshipNowy członek YouTube (ogólne)
new_membersponsorshipNowy członek YouTube
new_membershipsponsorshipNowy członek YouTube
newmembersponsorshipNowy członek YouTube
new-membershipsponsorshipOdczyt DOM YouTube (wariant z łącznikami)
upgraded_membershipresubPodwyższenie poziomu YouTube
upgraded-membershipresubOdczyt DOM YouTube (wariant z łącznikami)
membership_upgraderesubPodwyższenie poziomu YouTube
membership_milestonemembermilestoneWiadomość o kamieniu milowym YouTube
member_milestonemembermilestoneWiadomość o kamieniu milowym YouTube (wariant z podkreśleniami)
gift_membershipgiftpurchasePakiet prezentów YouTube
membership_giftgiftpurchasePakiet prezentów YouTube
giftmembershipsgiftpurchasePakiet prezentów YouTube (wariant liczby mnogiej)
gifted_membershipgiftredemptionOtrzymany prezent YouTube
gifted_membershipsgiftpurchasePakiet prezentów YouTube (wariant liczby mnogiej)
community_giftgiftpurchasePakiet prezentów dla społeczności
channel_pointsrewardRealizacja nagrody Twitch WebSocket (starszy alias)
followednew_followerBieżące dane wyjściowe DOM/TikFinity TikToka; akceptuj obie nazwy przy łączeniu trybów przechwytywania TikToka.

Korzystanie z tej dokumentacji

  • Dodając nowe zdarzenie, używaj istniejącego słownictwa (subscription_gift, viewer_update, itp.), gdy tylko to możliwe. Jeśli odstępstwo jest nieuniknione, opisz je tutaj wraz z uzasadnieniem.
  • Pozostaw data.meta przewidywalne: preferuj płaskie klucze, nigdy nie przeciążaj ciągów tekstowych mieszanymi danymi i zawsze podawaj jednostki (currency, bits, duration).
  • Aktualizuj tę stronę razem ze zmianami danych; instrukcje dla agentów aktualizuj tylko wtedy, gdy zmieniają się wspólne zasady programowania.
  • Sprawdzaj zmiany danych zarówno względem emitującego źródła, jak i odbierającej nakładki lub wyzwalacza Event Flow.
  • Przechwytywanie zależy od obsługi źródła i ustawień. Aby ukryć wiersze oznaczone jako zdarzenia w doku lub nakładkach wyróżnionych wiadomości, dodaj &hideevents lub &hideallevents. Aby ukryć wybrane zdarzenia, użyj &filterevents=subscription_gift,new_follower,gifted.
  • Dla YouTube, Twitcha i Kicka włącz Tryb WebSocket dla najszerszej obsługi zdarzeń właściwych dla platformy. Przechwytywanie prezentów/wpłat YouTube (w tym prezentów i Super Chat) jest dostępne w trybach Standard i WebSocket; WebSocket dodaje kolejne typy zdarzeń. Dokładny zakres nadal zależy od platformy, roli konta i przyznanych zakresów.

Powrót na górę

Nakładki monetyzacji

Napiwki NinjaBacker używają platform: "ninjabacker", type: "ninjabacker", chatname, zapisane zwykłym tekstem chatmessage, textonly: true, poprzedzony prefiksem źródła id, sformatowane hasDonation, oraz liczbowe donoValue. Są to zwykłe wiersze typu wpłata bez event nadpisanie. meta.ninjabacker zawiera ISO currency i w głównych jednostkach waluty amount. Anonimowe napiwki używają nazwy wyświetlanej Anonymous. Źródło używa transmisji SSE na żywo (bez odtwarzania historii) lub opcjonalnego odbiornika podpisanych webhooków w API SSN (do siedmiu dni dostarczania z kolejki). Niezawodne dostarczenia używają stabilnego ninjabacker:delivery:DELIVERY_ID id. Żaden tryb nie odbiera cofnięć z powodu zwrotów/sporów. Dane uwierzytelniające odbiornika i sekrety podpisywania nigdy nie trafiają do danych zdarzeń. Wartości callbackId kontrolowane przez wywołującego nie stanowią tożsamości płatności i nie są przekazywane. Testowe napiwki panelu są wykluczone z wierszy wpłat. Emitują event: "monetization_test" z meta.ninjabackerTest zawierające id i at (milisekundy Unix), wyłącznie dla dedykowanego alertu podglądu.

event: "monetization_update" to obraz stanu zawierający tylko metadane z type/platform: "socialstream". meta.monetization.wishlist zawiera enabled, qr, position, rank, total, publiczny url i bieżący item (name, amount, currency, image, publiczny url) lub null. meta.monetization.ninja zawiera enabled, qr, position, username i publiczny url napiwków. Prywatne identyfikatory Tip ID nigdy nie są dołączane. meta.monetization.ebay zawiera enabled, qr, position, display (cycle/cheapest/first), seconds, opcjonalne ustawienia ogłoszeń i publiczne items. Każdy element ma id, name, amount, currency, image, url, auction, startingBid, endsAt, available, bought i updatedAt. Czasy są w milisekundach Unix. Nie zawiera danych uwierzytelniających sprzedawcy ani tożsamości kupującego.

Potwierdzony przez prowadzącego zakup z listy życzeń zawiera również meta.wishlistPurchase z id, name, opcjonalnym supporter i at (milisekundy Unix). To potwierdzenie prowadzącego, a nie powiadomienie o płatności Amazon, i nie liczy się jako wpłata pieniężna. Nakładki powinny usuwać duplikaty według id i ignorować stare powiadomienia o zakupach.

Opłacone zamówienia Shopify

Opcjonalny odbiornik podpisanych powiadomień Shopify emituje platform/type: "shopify" i event: "purchase" tylko dla orders/paid z financial_status: "paid", dodatnią sumę test: false, bez anulowania i z aktualnym znacznikiem czasu aktualizacji podpisanej treści. Powiadomienia testowe, nieopłacone, nieaktualne, anulowane i o zwrotach nie emitują akcji zakupu. Nie jest wnioskowana intencja podarowania prezentu.

chatname to Anonymous; pola klienta, prywatne notatki i adresy URL zamówień są wykluczone. chatmessage jest zwykłym tekstem z textonly: true; subtitle zawiera do trzech publicznych tytułów produktów. meta.commerce zawiera orderTotal i currency w walucie sklepu oraz quantity gdy znana jest pełna prawidłowa liczba. Odbiorca i przeznaczenie fizyczne/cyfrowe pozostają nieustawione. Bez hasDonation lub donoValue jest ustawione. id to stabilny niejawny skrót ograniczony do sklepu/zamówienia z prefiksem Shopify; nie jest to surowy identyfikator zamówienia.

Zakupy używają istniejącej aktywności, kategorii Purchase w multi-alerts i ścieżek Event Flow. Promowanie produktów używa istniejącego meta.monetization.commerce katalogu. Zaimportowanie produktu lub ustawienie jego etykiety promocyjnej na Gift nie generuje zdarzenia zakupu ani prezentu. Konfiguracja Shopify i ograniczenia dostarczania.

Prezenty i handel

Użyj event: "gift" dla prezentu, giftcontribution dla płatnego wsparcia na prezent, giftfunded dla zakończenia finansowania oraz purchase dla sprzedaży produktu. Te nazwy są niezależne od dostawcy i od tego, czy produkt jest fizyczny, czy cyfrowy. Zarezerwuj starsze giftpurchase zdarzenie dla podarowanych członkostw; Throne wcześniej używał tej nazwy błędnie, a teraz emituje gift. Dotychczasowe źródła zdarzeń członkostwa pozostają bez zmian. Własne filtry nazw zdarzeń Throne powinny przejść na gift; filtry wpłat nie wymagają zmian.

hasDonation pozostaje sygnałem zgodności dla płatnego wsparcia, z donoValue zawierające dostarczoną lub oszacowaną wartość USD. Prezenty i wkłady zachowują te pola. Zakończenie finansowania pomija oba, aby nie liczyć wkładów dwukrotnie. Zwykła sprzedaż produktów domyślnie je pomija, zachowując kontrakt eBay. Nie wnioskuj intencji prezentu ze sklepu, URL listy życzeń ani fizycznego przedmiotu: zakup dla kupującego lub innego odbiorcy pozostaje sprzedażą, chyba że źródło jawnie wskazuje prezent dla twórcy.

Opcjonalne współdzielone meta.commerce pola to recipient (creator, buyer, other), itemType (physical, digital, service), quantity (dodatnia liczba produktów), currency (waluta ISO), goalAmount (cel finansowania w głównych jednostkach waluty, nigdy nowy przychód) oraz orderTotal (znana opłacona suma zamówienia w głównych jednostkach waluty; handel, nie przychód z wpłat). Pomiń nieznane dane. Nazwy produktów przechowuj w subtitle, obrazy w contentimg, oraz tekst dotyczący wspierającego w chatmessage. Istniejące metadane dostawcy pozostają dostępne. Throne dostarcza odbiorcę i walutę, a po zakończeniu także goalAmount; eBay dostarcza ilość. Żadne nie zgaduje typu produktu ani nie ujawnia prywatnych informacji odbiorcy.

Kanał aktywności wyświetla te zdarzenia nawet bez tekstu wspierającego. Multi-alerts używa prezentacji wpłat dla prezentów i wkładów, w tym osobnego powiadomienia Gift Fully Funded bez wartości pieniężnej. Zakupy mają osobną kategorię Purchase, domyślnie włączoną, z purchasestyle, purchasesound, purchaseaccent i disablepurchases sterowanie przez URL. Alerty zakupu nie zmieniają sum wpłat.

Event Flow oferuje te nazwy zdarzeń w wyzwalaczach Event Type i Other Event. Wyzwalacze wpłat nadal sprawdzają hasDonation; wyzwalacze Gift Sub zachowują znaczenie członkostwa. Compare Property przyjmuje ścieżki zagnieżdżone, takie jak meta.commerce.recipient. Szablony akcji przyjmują {meta.commerce.quantity} i {meta.commerce.currency}, obok istniejących {donation}, {subtitle} i {meta}. Ścieżki zagnieżdżone rozróżniają wielkość liter, brakujące wartości są wyświetlane jako puste, a przechodzenie po prototypie jest zabronione.

Webhooki handlu twórcy i nakładki promocyjne

Publiczne płatności Donation w Ko-fi zachowują hasDonation i otrzymują USD donoValue. Płatności za subskrypcję używają new_subscriber lub resub, z poziomem w membership. Shop Order i Commission używają purchase bez wartości wpłat. Prywatne zdarzenia Ko-fi pozostają wykluczone. JSON zakodowany w formularzu jest dekodowany raz; nazwy i wiadomości są zwykłym tekstem.

Buy Me a Coffee donation.created zachowuje wsparcie pieniężne; extra_purchase.created i commission_order.created stają się purchase. wishlist_payment.created staje się giftcontribution używając wyłącznie tej kwoty płatności; meta.commerce.completed zapisuje flagę zakończenia dostawcy bez emitowania kolejnego wiersza pieniężnego. membership.started staje się new_subscriber z poziomem w membership, bez dotychczasowego nieprawidłowego używania hasDonation dla nazwy poziomu. Kwota rozpoczęcia subskrypcji nie jest niezależnie traktowana jako opłacone obciążenie. Zdarzenia testowe, zwrócone, nieudane oraz nieobsługiwane aktualizacje/cykle życia nie tworzą płatnych alertów. Ukryte notatki wspierających są pomijane.

Fourthwall obsługuje ORDER_PLACED (purchase), GIFT_PURCHASE (gift, odbiorca other), DONATION (zwykły wiersz wpłaty) i SUBSCRIPTION_PURCHASED (new_subscriber). Istniejące sumy zamówień zachowują hasDonation dla zgodności wstecznej, oznaczone meta.commerce.legacyDonationValue: true; jest to jawny wyjątek od nowych ustawień domyślnych sprzedaży produktów. Zamówienia z wykorzystanymi kartami podarunkowymi emitują alert zakupu bez wartości wpłaty: nowego obciążenia nie da się wiarygodnie wywnioskować z sumy zamówienia, a zakup prezentu został już policzony. Nazwiska z danych rozliczeniowych i adresy e-mail nie służą jako publiczna tożsamość. Zdarzenia testowe panelu i aktualizacje zamówień nie generują płatnych alertów.

Te adaptery zachowują istniejący przekaźnik, akcje botów, Event Flow i routing miejsc docelowych, z meta.webhookId usuwanie duplikatów. Udostępniają publiczne nazwy, wiadomości w zwykłym tekście, znane nazwy produktów w subtitle, oraz ISO meta.commerce.currency obok liczbowych wartości wpłat, gdy ma to zastosowanie. Nie dodają rozliczania zwrotów ani nowego uwierzytelniania odbiornika; użyj istniejącej skonfigurowanej trasy webhooka dostawcy.

meta.monetization.commerce w monetization_update zawiera enabled, qr, position, display (first/cycle), seconds i publiczną tablicę items. Każdy element ma name, url, image, opcjonalne amount (null, gdy nieznane), currency i purpose (shop/gift/support/membership). To szczegóły promocji wprowadzone przez prowadzącego, a nie dowód płatności. Dodawanie lub edytowanie elementów nie emituje zdarzenia wpłaty ani zakupu. Ogólna nakładka używa mode=commerce; view=both|showcase|card|alerts oddziela promocję od aktywności. Opcjonalne parametry URL style, scale, cardevery, cardfor i onlytype sterują prezentacją. Istniejące tryby dostawców przyjmują również sterowanie widokiem i harmonogramem. Zobacz przewodnik konfiguracji.

Zdarzenia prezentów Throne

Opcjonalna integracja Monetization przekazuje podpisane zdarzenia Throne z platform i type ustawione na throne. Wszystkie trzy używają stabilnego identyfikatora dostarczenia id, zapisane zwykłym tekstem chatname, chatmessage z textonly: true, nazwę produktu w subtitle, oraz opcjonalną miniaturę HTTPS w contentimg.

zdarzenieZnaczenieKwota wpłaty / ranga
giftZakupiony prezenthasDonation i USD donoValue; +1 do rangi prezentu
giftcontributionWkład w prezentTylko kwota wkładu; bez zwiększania rangi
giftfundedZakończono zbiórkę na prezentNie hasDonation lub donoValue, unikając podwójnego liczenia wcześniejszych wkładów; +1 do rangi prezentu

meta.throne zawiera itemName, creator (publiczna nazwa użytkownika), completed, currency i w głównych jednostkach waluty amount. Dla giftfunded, kwota opisuje cel, a nie nowy przychód. Anonimowi darczyńcy pozostają Anonymous; zakończone prezenty społecznościowe używają Community. Prywatne pola płatności i wysyłki nigdy nie są przekazywane.

monetization_update obrazy stanu dodatkowo zawierają meta.monetization.throne: enabled, username, url, qr, position, rank i gifts. Te obrazy stanu nie zawierają adresu URL webhooka ani danych uwierzytelniających nasłuchiwania.

Polecenia głosowe prowadzącego (wersja testowa aplikacji komputerowej)

Element Event Flow Gdy powiem... wyzwalacz otrzymuje zaufane lokalne polecenia mikrofonowe z SSApp. Jego wewnętrzny kontekst akcji używa chatname: "Host", type: "hostvoice", rozpoznaną frazę w chatmessage i textonly: true. To nie jest przychodzące zdarzenie platformy ani nowy transport czatu. Wysłanie tych pól przez czat nie może aktywować wyzwalacza głosowego.

Wymaga zaktualizowanej aplikacji komputerowej, jawnego uruchomienia mikrofonu i włączenia akcji po trybie Test. Zobacz konfiguracja podglądu i stan weryfikacji.

Sterowanie wyświetlaniem produktów

Istniejące monetization_update obrazy stanu mogą zawierać meta.monetization.commerce.live: null dla zapisanego harmonogramu lub {mode: "show" | "hide", url?: "https://...", until: 0 | epochMilliseconds}. Show dopasowuje dokładny zapisany URL produktu; brak produktu oznacza brak karty. Dodatnie until po wygaśnięciu przywraca zapisany harmonogram; zero trwa do zmiany lub ponownego uruchomienia SSN. Hide ukrywa promocje, nie alerty o płatnej aktywności.

commerce.viewerURL jest opublikowanym adresem URL sklepu tylko do odczytu lub pustym ciągiem. Gdy jest obecny, promocyjne kody QR prowadzą do niego. Nigdy nie zawiera sesji SSN ani klucza publikowania. Produkty pozostają w commerce.items. Sterowanie wyświetlaniem, importy i publikowanie nie emitują zdarzeń wpłaty/zakupu. Zobacz Sterowanie produktami dla Event Flow i użycia zdalnego API.

Element Event Flow commerceControl akcja czeka na odpowiedź bezpośrednią/Chrome (do ośmiu sekund). W zwykłych danych zdarzeń zachowuje zdarzenie i dodaje meta.commerceControlResult: {success: true, commerce: controlState} lub {success: false, error: "..."}. Dla istniejącego liczbowego, tablicowego lub innego niebędącego obiektem meta, metadane pozostają bez zmian, a diagnostyka jest zwracana jako commerceControlResult w wyniku akcji zamiast tego. Nieudane polecenia sterowania zatrzymują dalsze akcje w tym łańcuchu bez pomijania oryginalnego zdarzenia płatności. Przekroczenie limitu czasu nie dowodzi, że sterowanie nie zostało zastosowane; sprawdź stan przed ponowieniem względnego polecenia, takiego jak Next. Sukces potwierdza lokalny stan wyboru/ukrycia/harmonogramu, nigdy widoczność w OBS ani synchronizację strony publicznej.

Nazwane przepływy Stream Deck / API

Ten wyzwalacz nazwanego przepływu tworzy wewnętrzną wiadomość Event Flow z type: "api", event: "workflow_trigger", chatname: "Stream Deck / API", puste chatmessage i textonly: true. Jego meta.workflow obiekt zawiera nazwę wyzwalacza i dostarczone przez wywołującego JSON data obiekt. Odczytuj wartości przez szablony, takie jak {meta.workflow.data.minutes}. Oceniane są tylko zapisane, włączone przepływy jawnie pasujące do tego wyzwalacza. To nie jest przychodzące zdarzenie widza/czatu i nie jest rozsyłane jako czat; skopiowanie tych pól do czatu nie aktywuje nazwanego wyzwalacza.

Pilotaż widowni NinjaChatter

Eksperymentalny sparowany łącznik rozszerzenia wysyła wiersze wyłącznie do wyświetlenia z type: socialstreamchat, platform: ninjachatter i textonly: true. meta.ninjachatter zawiera origin: audience, opisowe provider, oraz publiczne room ID. Te wiersze omijają odpowiedzi platformy, boty, wyzwalacze Event Flow i punkty. Wyświetlany dostawca nie stanowi upoważnienia. Starsze przechwytywanie źródła NinjaChatter zawiera meta.ninjachatter.room do usuwania duplikatów właściwego dla pokoju.

Cheer używa osobnej uwierzytelnionej ścieżki zgłoszenia i wyniku, nigdy specjalnego polecenia czatu. Stały preset emituje istniejące zdarzenie nakładki Actions show_text wiadomość przez trzy sekundy. Jej otrzymanie oznacza przyjęcie przez transport, a nie potwierdzone wyświetlenie w OBS. Żadne dane widowni nie mogą wybierać dowolnych akcji. Pilotaż jest domyślnie wyłączony w NinjaChatter; Electron zachowuje istniejący przekaźnik do czasu zatwierdzenia nowej granicy prywatnego parowania.

Tablice miejsc handlowych i ostatnia sprzedaż

Istniejące monetization_update zdarzenie (type/platform: socialstream) zawiera także meta.monetization.boards. Jego board zawiera title, style (miejsca/drużyny), columns (1–20), visible, oraz do 120 spots. Każde miejsce ma tekstowe id, zapisane zwykłym tekstem label, status (available/claimed/revealed) oraz result (zwykły tekst, pusty do ujawnienia). Zajęcia i ujawnienia są stanem wyświetlania wprowadzonym przez prowadzącego, a nie dowodem zakupu ani losowym przydziałem.

boards.sales zawiera do 100 ostatnich rekordów: id, title, opcjonalne amount (null, gdy nieznane), currency, quantity, source i at (czas zarejestrowania w milisekundach Unix). automatic włącza zbieranie, salesVisible steruje wyświetlaniem i revision zwiększa się przy zmianach. Automatyczne zbieranie przyjmuje tylko purchase zdarzenia z Shopify, sprzedawcy eBay, Fourthwall, Ko-fi i Buy Me a Coffee; zdarzenia prywatne/testowe są wykluczone. Metadane aukcji, napiwki, prezenty i zajęcia miejsc nie są traktowane jako zakupy. Automatyczne rekordy nie zastępują ceny produktu sumami zamówień, cenami ofert ani kwotami wpłat. Ręczne rekordy używają source: "Host confirmed".

Stan jest zachowywany w prywatnym magazynie monetyzacji tej instalacji; publiczne obrazy stanu wykluczają identyfikatory usuwania duplikatów dostarczeń, tożsamość kupującego i sekrety. Jawnie wyświetlane sprzedaże zachowują identyfikatory zdarzeń na potrzeby usuwania. Zwroty wymagają usunięcia przez prowadzącego. Zduplikowane identyfikatory zakupów są pamiętane osobno (do 2000), także po wyczyszczeniu widocznej historii. Istniejące getCommerceState odpowiedź zawiera commerce.boards; commerceControl przyjmuje polecenia tablic/sprzedaży udokumentowane w przewodniku po tablicach. Ręczne zmiany rozsyłają zaktualizowany stan, ale nigdy nie tworzą zdarzeń zakupu, sum wpłat ani płatnych nagród. Nakładki znikają, gdy obraz stanu prowadzącego nie dociera od 35 sekund.

Dodatki do przepływu sprzedawcy: commerce.boards.board.id identyfikuje generację tablicy. Ręczne saleAdd może dostarczać boardId i spotId aby atomowo zapisać sprzedaż i zająć to miejsce; zduplikowane powiązane sprzedaże nadal znajdujące się w ostatniej historii są odrzucane. saleRemove z reopenSpot: true zwalnia to miejsce tylko wtedy, gdy generacja tablicy nadal się zgadza. Publiczne wpisy sprzedaży pomijają te pola powiązań operatora. Opcjonalne platform przy ręcznej sprzedaży zachowuje jej źródło do filtrowania, natomiast source: "Host confirmed" identyfikuje metodę potwierdzenia. amount jest sumą dla wpisu, w tym jego quantity. Należące do adaptera opłaconych zamówień eBay meta.ebayPurchase.quantity jest zachowywane.

salesSettings.auctionSource włącza pomocnika produktów Whatnot lub eBay Live. Należące do odpowiedzi sterowania commerce.auction zawiera tylko source, title, priceText, status i at z ostatnio przechwyconego auction_update, lub null. Wygasa po pięciu minutach i jest czyszczone po zmianie źródła, bezczynnym obrazie stanu lub ponownym uruchomieniu. Pomocnik jest przeznaczony wyłącznie dla operatora: nie jest zapisywany ani dołączany do transmisji dla widowni; tożsamość licytującego/zwycięzcy jest odrzucana. Skrypty źródeł i dane zdarzeń aukcji pozostają bez zmian. Skopiowanie szkicu nie potwierdza płatności ani nie tworzy sprzedaży.