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.
Na tej stronie
Przejdź do wspólnych reguł pól, implementacji platformy lub uwag o zgodności pod koniec.
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.
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.platform | cią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.id | cią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.donoValue | liczba (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.chatbadges | tablica | 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. |
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 |
sponsorship | new_sponsor | Nowy członek przez newSponsorEvent |
sponsorship | new_member | Nowy członek przez processMembership |
resub | renewed_member | Odnowienie członkostwa |
resub | upgraded_member | Podwyższenie poziomu |
giftpurchase | gift_giver | Członkostwa podarowane kanałowi |
giftredemption | gift_recipient | Otrzymano podarowane członkostwo |
membermilestone | member_milestone | Wiadomość 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 |
type | ciąg tekstowy | Zawsze twitch. |
event | ciąg tekstowy | Zawsze hype_train. |
meta.phase | ciąg tekstowy | begin, progress lub end. |
meta.id | ciąg tekstowy | Stabilny identyfikator pociągu. Użyj go do dodawania/aktualizowania jednego widocznego widżetu pociągu. |
meta.broadcasterUserId | ciąg tekstowy | Identyfikator użytkownika nadawcy Twitch. |
meta.broadcasterUserLogin | ciąg tekstowy | Login nadawcy Twitch. |
meta.broadcasterUserName | ciąg tekstowy | Nazwa wyświetlana nadawcy Twitch. |
meta.total | liczba | null | Łączna wartość wsparcia zgłoszona przez Twitcha dla pociągu. |
meta.progress | liczba | null | Bieżący postęp w realizacji celu poziomu. |
meta.goal | liczba | null | Cel bieżącego poziomu. |
meta.progressPercent | liczba | null | Zapasowy procent z DOM, gdy Twitch udostępnia tylko widoczny pasek postępu osobnego okna. |
meta.level | liczba | null | Bieżący lub końcowy poziom pociągu. |
meta.topContributions | tablica | Najwięksi wspierający. Każdy wpis zawiera userId, userLogin, userName, type, oraz liczbowe total. |
meta.lastContribution | obiekt | null | Najnowszy wkład, używający tej samej struktury wkładu co topContributions. |
meta.sharedTrainParticipants | tablica | Surowe dane uczestników współdzielonego pociągu z Twitcha, jeśli są dostarczane. |
meta.startedAt | ciąg tekstowy | Znacznik czasu ISO początku pociągu. |
meta.expiresAt | ciąg tekstowy | Znacznik czasu ISO wygaśnięcia bieżącego pociągu. |
meta.endedAt | ciąg tekstowy | Znacznik czasu ISO końca pociągu, lub pusty przed zakończeniem. |
meta.cooldownEndsAt | ciąg tekstowy | Znacznik czasu ISO końca przerwy, lub pusty przed zakończeniem. |
meta.isSharedTrain | wartość logiczna | True, gdy Twitch oznacza pociąg jako współdzielony. |
meta.trainType | ciąg tekstowy | Zwykle regular; pociągi skarbów są tu udostępniane, gdy Twitch je oznaczy. |
meta.allTimeHighLevel | liczba | null | Najwyższy historyczny poziom pociągu, gdy Twitch go udostępnia. |
meta.allTimeHighTotal | liczba | null | Najwyższa historyczna suma pociągu, gdy Twitch ją udostępnia. |
meta.sourceMode | ciąg tekstowy | Opcjonalny znacznik źródła, taki jak dom. |
meta.eventSubType | ciąg tekstowy | Oryginalny 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_follower | Użytkownik zaczął obserwować kanał |
new_subscriber | Nowa subskrypcja |
resub | Ponowna subskrypcja z wiadomością |
subscription_gift | Subskrypcje podarowane kanałowi |
cheer | Przekazano bity |
powerup | Użyto wbudowanego lub własnego Power-up |
reward | Wykorzystanie punktów kanału |
raid | Przychodzący rajd |
viewer_update | Liczba jednoczesnych widzów |
follower_update | Łączna liczba obserwujących |
subscriber_update | Łączna liczba subskrybentów |
stream_online | Transmisja rozpoczęta |
stream_offline | Transmisja zakończona |
ad_break | Rozpoczęto przerwę reklamową |
hype_train | Metadane statusu Hype Train/Treasure Train |
user_banned | Uż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_follower | Użytkownik zaczął obserwować kanał |
new_subscriber | Nowa subskrypcja |
resub | Odnowienie subskrypcji |
subscription_gift | Podarowane subskrypcje |
reward | Realizacja nagrody kanału lub wiadomość czatu/systemowa przypominająca nagrodę |
donation | Zdarzenie napiwku/wsparcia |
gift | Zdarzenie prezentu KICKs |
raid | Wyłącznie zgodność: starsze dane wejściowe hostowania/rajdu; nie jest to obecna oficjalna subskrypcja Kick |
follower_update | Łączna liczba obserwujących |
stream_online | Transmisja rozpoczęta |
stream_offline | Transmisja zakończona |
user_banned | Uż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 hasDonation | Widoczny wiersz Rant zawiera cenę. | hasDonation zachowuje wyrenderowaną cenę; znacznik zdarzenia wpłaty nie jest dodawany. |
raid | Na 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.
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 |
subscription | new_subscriber | Nowa subskrypcja Twitch/Kick |
subgift | subscription_gift | Podarowana subskrypcja Twitch |
membership | sponsorship | Nowy członek YouTube (ogólne) |
new_member | sponsorship | Nowy członek YouTube |
new_membership | sponsorship | Nowy członek YouTube |
newmember | sponsorship | Nowy członek YouTube |
new-membership | sponsorship | Odczyt DOM YouTube (wariant z łącznikami) |
upgraded_membership | resub | Podwyższenie poziomu YouTube |
upgraded-membership | resub | Odczyt DOM YouTube (wariant z łącznikami) |
membership_upgrade | resub | Podwyższenie poziomu YouTube |
membership_milestone | membermilestone | Wiadomość o kamieniu milowym YouTube |
member_milestone | membermilestone | Wiadomość o kamieniu milowym YouTube (wariant z podkreśleniami) |
gift_membership | giftpurchase | Pakiet prezentów YouTube |
membership_gift | giftpurchase | Pakiet prezentów YouTube |
giftmemberships | giftpurchase | Pakiet prezentów YouTube (wariant liczby mnogiej) |
gifted_membership | giftredemption | Otrzymany prezent YouTube |
gifted_memberships | giftpurchase | Pakiet prezentów YouTube (wariant liczby mnogiej) |
community_gift | giftpurchase | Pakiet prezentów dla społeczności |
channel_points | reward | Realizacja nagrody Twitch WebSocket (starszy alias) |
followed | new_follower | Bieżą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.
| zdarzenie | Znaczenie | Kwota wpłaty / ranga |
|---|
gift | Zakupiony prezent | hasDonation i USD donoValue; +1 do rangi prezentu |
giftcontribution | Wkład w prezent | Tylko kwota wkładu; bez zwiększania rangi |
giftfunded | Zakończono zbiórkę na prezent | Nie 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.