Etkinlik Akışı Sistemi

Etkinlik Akışı düzenleyicisi kılavuzu

Social Stream Ninja için güvenilir otomasyonlar oluşturun. Bu rehber temelleri, mantık düğümlerini, sinyal akışını ve içerik üreticilerinin sık sorduğu pratik konuları (sohbet yankısını önlemek ve AND/NOT bloklarını ne zaman birleştirmek gibi) anlatır.

Türkçe

0. Hızlı Tanıtım

Etkinlik Akışı düğüm tabanlı düzenleyicidir. Her çizgi mesaj verisi ve mantıksal durum taşır (true = devam et, false = dur). Şunu kullanın: kaynaklar etkinlik eklemek için, mantık düğümleri kararları filtrelemek için ve eylemler eylemleri gerçekleştirmek için (sohbet gönderme, katman kontrolü, mesaj aktarma vb.).
Katılımcıları hatırlamak, sonraki uygunluğu kontrol etmek, benzersiz kullanıcı çekilişi yapmak veya adlandırılmış bir listeyi temizlemek mi gerekiyor? Şunu açın: Kullanıcı Belleği kılavuzu ortak durum modeli, ekran görüntüleri ve içe aktarılabilir örnek için.

Bu düzenleyici nedir?

Etkinlik Akışı düzenleyicisi Social Stream Ninja'nın “gelişmiş otomasyon” katmanıdır. Basit açılır pencere anahtarlarının üzerinde yer alır ve kendi yönlendirme mantığınızı yazmanızı sağlar. Şunlara ihtiyacınız olduğunda kullanın:

  • Sohbeti filtrelerle hizmetler arasında aktarın (ör. Twitch'i Discord'a yansıtın ama komutları engelleyin).
  • AND/OR/NOT mantığıyla sadakate dayalı komutlar, anahtar kelime oyunları veya çekiliş katılım denetimi oluşturun.
  • Akışta zenginleştirdiğiniz verilere göre özel katmanlar, ses, OBS sahneleri veya webhook'lar tetikleyin.
  • Birden fazla platformu tek otomasyonda birleştirin (Kick + Twitch + YouTube tek akıştan yönlendirilir).

Açılır pencereyi “hızlı ön ayarlar”, Etkinlik Akışı'nı ise özel iş akışları için araç takımı olarak düşünün.

Başlatma ve Temeller

  • Ana panonun menüsünden Etkinlik Akışı düzenleyicisini açın (masaüstü veya uzantı).
  • Her proje dışa aktarılana kadar yerel kaydedilir. Şunu kullanın: Export yedeklemek veya paylaşmak için.
  • Şu adla anılan tuvallerde çalışın: akışlar. Her akış aynı anda birden fazla platforma abone olabilir.

Düğümlere Genel Bakış

  • Girdiler (sol bağlantı noktaları) mesaj bağlamını bekler.
  • Çıktılar (sağ bağlantı noktaları) aynı bağlamı ve yapılan düzenlemeleri çıkarır.
  • Mantık düğümleri şu kanallardan çıktı verebilir: true ve isteğe bağlı false .

Veri Yapısı

Her mesaj JSON nesnesi taşır. Zorunlu anahtarlar şu yapıyı izler: docs/event-reference.html (platform, type, chatname, chatmessage vb.). Özel verileri şu alana ekleyin: meta.

Her akış bir tetikleyiciyle başlar

Eylem düğümleri (yeşil) kendiliğinden çalışmaz — yalnızca üstlerindeki tetikleyici düğümü (mavi) şu sonucu verdiğinde çalışır: true. Yalnızca birbirine bağlı eylemlerden oluşan akış geçerli görünür ama zinciri başlatan hiçbir şey olmadığından sürekli boşta kalır. Düğüm adları düğümün ne yaptığını açıklar, ne zaman gerçekleştiğini değil: Mesajı Öne Çıkar akış kendisine ulaştığında mesajı öne çıkarır — başka yerde mesaj öne çıkardığınızda tetiklenmez.

Tetikleyici düğümü olmadan birbirine bağlı iki eylem düğümü
❌ Hiç çalışmaz. Mesajı Öne Çıkar ve Metni Seslendir ikisi de eylemler; üstte tetikleyici yoksa zinciri hiçbir şey başlatmaz.
Mesajı Öne Çıkar ve Metni Seslendir eylemlerine bağlı Herhangi Bir Mesaj tetikleyicisi
✅ Çalışır. Bir Herhangi Bir Mesaj tetikleyicisi (veya Mesaj İçerir, regex, bağış etkinliği vb.) zinciri başlatır; ardından her iki eylem eşleşen her mesajda çalışır.

Akış Eylemleri Katmanı (Eylem Çıktısı)

Bir uyarı şablonuyla başlayın:

Seçin: Bağış: kutlama + seslendirme hazır animasyon ve sentetik teşekkür klibi için veya gelişmiş Bağış: animasyon + ses + OBS filtresi şablonu. Yeni uyarı şablonları önce yapılandırıp test edebilmeniz için devre dışı başlar. OBS şablonunda her iki filtre eyleminde de kaynak ve normalde kapalı olan aynı filtreyi seçin.

Ses klibi oynat ve Çoklu Uyarılar artık 17 seslik ortak kitaplığı kullanır: alkış, davul rulosu, geçiş sesi, kasa ve diğer efektler, etiketlenmiş dört sentetik İngilizce ifade ve basit sesler. Dinle / Durdur görünür oynatma durumuyla yerel önizleme yapar. Yine kayıt yükleyebilir veya uygulamaya yerel dosya seçebilirsiniz. Değişen adlar veya mesajlar için mevcut şu seçeneği kullanın: Metni Seslendir eylemi.

Etkinlik Akışı şu kaynak üzerinden oynatır: Flow Actions tarayıcı kaynağı; Çoklu Uyarılar kendi tarayıcı kaynağı üzerinden oynatır. Çift oynatmayı önlemek için aynı etkinlikte yalnızca birinde sesi açık tutun. Özelliklerini düzenlemek için Tab ile akış düğümüne geçip Enter veya Boşluk'a basın.

Şu gibi düğümler: Ses klibi oynat, Medya katmanını göster, ve OBS kontrolleri bir görüntüleme yüzeyi gerektirir. Bu yüzey, şu adresten sunulan Akış Eylemleri katman sayfasıdır: actions.html. Etkinlik Akışı eylemlerinin görünebileceği bir yer olması için yayın yazılımınızda (OBS/Streamer.bot tarayıcı panelleri vb.) çalışır tutun.

Ses Klibi Çal eylemine bağlı Herhangi Bir Mesaj tetikleyicisi
Bu akış tamamdır ve her mesajda tetiklenir — ancak ses Akış Eylemleri katman sayfasında çalar, düzenleyicide çalmaz. Düzenleyicinin Önizleme düğmesi yerel oynatır; canlı oynatma katmanın açık olmasını gerektirir. Tarayıcı otomatik oynatmayı engellerse şuna tıklayın: Sesi etkinleştir Akış Eylemleri sayfasında, son engellenen klibi yeniden denemek için. Sayfanın başka yerine tıklamak da oynatmayı etkinleştirir. OBS Tarayıcı Kaynağı normalde otomatik oynatmaya izin verir.
Nasıl açılır (açılır pencere/panodan):
  1. Ana Social Stream Ninja açılır penceresini açın (şuradan yüklenen pencere: popup.html veya uzantı simgesi).
  2. “Akış Eylemleri” kartına kaydırın. Şu düğmeyi kullanın: [bağlantıyı kopyala] veya kart içindeki URL'ye tıklayın.
  3. Bağlantı şöyle görünür: https://socialstream.ninja/actions.html?session=YOURSESSION. OBS Tarayıcı Kaynağı'na yapıştırın (1920×1080 önerilir) veya herhangi bir katman tarayıcısında açın.
Bağımsız uygulamada yerel medya kullanımı:
  1. Ses Klibi Çal veya Medya Katmanı Göster eyleminde şuna tıklayın: Yerel dosya seç.
  2. Tıklayın: OBS için Yerel Flow Actions URL'sini kopyala ve barındırılan Akış Eylemleri URL'si yerine oluşturulan localhost URL'sini kullanın.
  3. SSApp'i çalışır tutun. Seçili dosya taşınırsa eyleme dönüp şuna tıklayın: Yeniden bağla.

Chrome uzantısı tek başına disk dosyalarını sunamaz. Masaüstü yardımcı uygulaması yoksa Yükle'yi veya barındırılan URL'yi kullanın. Şuraya bakın: Etkinlik Akışı için Medya Dosyaları rehberi tam kurulum için.

Yüklendiğinde bu katman şunları yapabilir:

  • Akışlarınızın tetiklediği GIPHY veya doğrudan medya URL'lerini, metni ve konfetiyi gösterin.
  • İzleyicilerin duyabilmesi için sesleri (TTS, ses klipleri) yerel çalın.
  • Açılır penceredeki Akış Eylemleri bölümünde bulunan WebSocket ayarları üzerinden OBS ile iletişim kurun (sahne değiştirme, kaynak anahtarları, GDI+/FreeType metin güncellemeleri, tekrar arabelleği vb.).
OBS kontrol modları:
  • Tarayıcı Kaynağı API'si: yalnızca şu durumda kullanılabilir: actions.html OBS Tarayıcı Kaynağı içinde şu seçenekle çalışıyorsa: Gelişmiş Erişim Düzeyi. Sahne değiştirme burada çalışır; kayıt / yayın / tekrar arabelleği eylemleri de alternatif olarak bunu kullanabilir.
  • OBS WebSocket: tutarlı kontrol için önerilir. Social Stream Ninja Akış Eylemleri, OBS 28+ içindeki OBS WebSocket v5 API'sini kullanır ve şu bağlantı noktasında güncel istek kümesini bekler: 4455.
  • Parola: isteğe bağlıdır. Yalnızca şunu ekleyin: &obspw=... OBS sunucunuz kimlik doğrulama gerektirecek şekilde ayarlanmışsa Akış Eylemleri URL'sine.
  • Katman tanılaması: ekleyin: &obsdebug=1 şu sayfanın URL'sine: actions.html sorun giderirken katmanda küçük, canlı OBS bağlantı rozeti istiyorsanız.
  • Metin Kaynağını Ayarla: OBS Metin (GDI+) ve Metin (FreeType 2) girişlerini doğrudan günceller ve şu gibi Etkinlik Akışı şablon değişkenlerini destekler: {counterValue} ve {counterTarget}.
  • Eski 4.x kurulumları: hâlâ obs-websocket 4.x / şu bağlantı noktasını kullanıyorsanız: 4444, kaynak / filtre / sessize alma / metin eylemleri OBS / obs-websocket yükseltilene kadar çalışmaz.

Özel rehbere bakın: OBS Kontrol Rehberi her tetikleyici, eylem, kurulum adımı ve test edilmiş tarif için.

Önerilen tanılama yolu:
  1. Açın: obs-websocket-test.html.
  2. Doğrulayın: GetVersion, GetCurrentProgramScene, ve GetSceneList başarılı olur.
  3. Tam Etkinlik Akışı otomasyonunu test etmeden önce orada ilgili eylem kontrolünü çalıştırın.
Katmanı açık tutun. Akış Eylemleri sayfasını kapatmak Etkinlik Akışı'ndaki tüm katman/ses/OBS eylemlerini duraklatır. Tamamen kapatmak yerine gizleyin veya başka monitöre taşıyın.

1. Düğümden Ne Geçer?

Etkinlik Akışı çalışma zamanı her bağlantıdan iki şey geçirir:

  1. Veri – etkinlik veya mesaj verisi nesnesi.
  2. Geçit sinyali – bir true/false sonraki düğüme çalışıp çalışmayacağını söyleyen bit.
Düğüm yanlış çıktısı verirse: ayrı daldan girdi almadıkları sürece sonraki düğümler çalışmayı durdurur (örneğin false Koşul düğümündeki bağlantı noktası). Böylece tüm akışları çoğaltmadan alternatif mantık oluşturabilirsiniz.

Girdi Beklentileri

  • Etkinlik Kaynakları (Twitch Mesajı, Zamanlayıcılar, Elle Tetikleyici vb.) önceki girdiyi yok sayar — kendi verilerini üretir ve her zaman şu değeri çıkarır: true düğümün kendisi hata vermedikçe.
  • Dönüştürme ve Mantık Düğümleri veriyi okur ve alanları yeniden yazabilir, durum ayarlayabilir veya geçit sinyalini şu değere çevirebilir: false.
  • Eylem Düğümleri yalnızca geçit şu değerde kaldığında çalışır: true. Eylemleri zincirlemeyi sürdürmek isterseniz güncellenmiş veri de çıkarabilirler.

Çıkış Örüntüleri

Tek Çıkış

Çoğu düğüm tek çıkış sunar. Giren veri ve geçit, düğüm değiştirmedikçe aynı çıkar.

Doğru/Yanlış Çıkışları

Koşul, Karşılaştırma, Regex ve Mantık düğümleri iki çıkış sunar. Doğru yeşil bağlantı noktasından devam eder; false gri/kırmızı bağlantı noktasında kullanılabilir olur.

Olduğu Gibi Aktarma ve Geçersiz Kılma

Bazı düğümler (Değişken Ayarla, Matematik, Metin Değiştir) veriyi değiştirir ancak şu değeri yine aktarır: true/false durumunu girdilerinden alır. Diğerleri (NOT, AND, OR) mantıksal değeri kendileri yeniden hesaplar.

2. Mantık Düğümü Özeti

Bu bloklar en yaygın "doğru/yanlış ne anlama gelir?" sorularını yanıtlar.

DEĞİL

  • Girdiler: önceki düğümden gelen 1 mantıksal değer (doğru/yanlış).
  • Çıktılar: tersine çevrilmiş mantıksal değer ve değiştirilmemiş veri.
  • Varsayılan davranış: NOT girişine hiçbir şey bağlı değilse şu sonucu verir: false, dolayısıyla çıktı true.
Örnek: NOT'u “Anahtar Kelime İçerir” düğümünden sonra yerleştirin; uyarı şu durumda tetiklensin: izleyici anahtar kelimeyi kullanmadığında.

VE

  • Girdiler: iki veya daha fazla mantıksal sinyal (A, B, ...). Ek bağlantı noktalarını boş bırakabilirsiniz.
  • Çıktılar: true yalnızca bağlı tüm girdiler şu değere eşitse: true.
  • Birden fazla koşul aynı anda sağlanmalıysa AND kullanın ("abone" ve "sohbet mesajı !raffle içeriyor").

OR

  • Şunu üretir: true eğer herhangi bir bağlı girdi doğruysa.
  • Çok platformlu tetikleyiciler için idealdir: Twitch + YouTube mesaj düğümlerini tek OR'a bağlayıp sonraki eylemi birleştirin.
Her zaman AND düğümü gerekir mi?
Hayır. Birçok düğüm zaten birleşik filtreler sağlar (örneğin "Kullanıcı Düzeyini Filtrele" + "Metin İçerir"). AND'i yalnızca yerleşik seçenekler birleşiminizi karşılamadığında veya diğer dalların paylaşabileceği yeniden kullanılabilir mantık birleşimi istediğinizde kullanın.
NOT ve boş girdiler: Bağlantısız NOT düğümü yine şu çıktıyı verir: true. Yanlışlıkla akışı açmaması için anlamlı bir yere bağlı tutun veya düğümü devre dışı bırakın.

3. Örnek Küçük Akışlar

A. Mesaj Komut Değilse Otomatik Yanıtla

Twitch Message ──▶ Regex Match "^!" ─┐ │ ├─false──▶ Auto Reply ("Thanks for chatting!") │ └─true──▶ Do nothing

Burada Regex düğümü şu çıktıyı verir: true mesaj bir komut olduğunda. Şu bağlantı noktasını yanıtımıza yönlendiririz: false . Böylece normal sohbet katılımcıları yanıt alırken komutlar yalnızca geçer.

B. AND ile Birden Fazla Kontrol Gerektirin

YouTube Message ──▶ Contains "!queue" ─▶ AND ─▶ Relay to Discord Gifted Membership ─▶ User Role = Member ──▲

AND düğümü yalnızca doğru anahtar kelimeyi kullanan üyelerin Discord'a aktarılmasını sağlar. İki dal da mantıksal sonucunu AND düğümüne gönderir; veri ilk daldan sonraki aşamaya aktarılır.

C. Tekrarlanan Uyarıları Engellemek için NOT Düğümü

Event Payload ─▶ State Check (isAlertMuted) └─false─▶ NOT ─▶ Play Celebration

State Check şu değeri verir: true uyarı sessize alındığında. NOT düğümü bu sonucu tersine çevirerek kutlamanın yalnızca bayrak şu değerdeyken çalmasını sağlar: false.

D. İki Sesten Birini Rastgele Çalın

İki ses klibinden birini rastgele çalmak için RANDOM, NOT ve AND kapıları kullanan akış
İki ses klibi arasında yüzde 50 olasılıklı seçim. RANDOM kapısı eşleşen her mesaj için bir kez seçim yapar: geçerse A sesi çalar; geçmezse NOT kapısı sonucu tersine çevirir ve AND kapısı B sesinin çalmasını sağlar.
Trigger ──▶ RANDOM (50%) ──▶ Play Sound A │ └──▶ NOT ──▶ AND ──▶ Play Sound B Trigger ──────────────────▲

AND kapısı isteğe bağlı değildir. Tek başına NOT şu çıktıyı verir: true RANDOM kapısı boşta kaldığında; bu yüzden B sesinin çalacağı sohbet mesajları şunlar olurdu: tetikleyicinizle eşleşmeyen tüm mesajlar. Tetikleyiciyi AND'e ikinci girdi olarak bağlamak B sesini yalnızca eşleşen mesajlarla sınırlar. Aynı örüntü yalnızca seste değil, iki seçenekli her eylem çiftinde çalışır.

4. Yankı, Döngü ve Aktarma Geri Beslemesini Önleme

Sohbeti arayüzler arasında aktarmak güçlüdür ancak kendi çıkışınızı dinlerseniz sonsuz yankı oluşabilir. Şu önlemleri izleyin:

YouTube Shorts hedef notu:
Gelen tetikleyiciler ve giden Sohbeti Aktar hedefleri şu iki türü ayrı tutar: youtube ve youtubeshorts. Mesaj iki çeşide de ulaşacaksa iki aktarma eylemi kullanın. Bkz. YouTube Shorts ve Etkinlik Akışı.
Sohbeti Aktar tanınan yansımaları otomatik atlar.
Yansıma, giden mesajın hedef sohbetten yeniden yakalanmasıdır. Mevcut Sohbeti Aktar eylemleri tanınan yansımaları atlar; ayrı Yansıma Yok kutusu bulunmaz. Panel ve katmanlarda gösterimini gizlemek veya sınırlamak için şunu kullanın: Yansıma filtresi eylemi, şu seçenekle: Tümünü engelle, İlkine izin ver, veya Tümüne izin ver. Bu, gönderimi değil yeniden alındığında gösterimi kontrol eder. Şunu izleyin: Twitch ve YouTube aktarma anlatımı tam kurulum için.
  • Yinelenen aktarma sistemlerinden kaçının. Eşdeğer Etkinlik Akışı yollarını kullanırken genel Tümünü Aktar'ı kapatın ve aynı sohbetleri bağlayan diğer hizmetleri kontrol edin. Özel üst verilerin platform sohbetinden geçerken korunacağı garanti edilmez.
  • Debounce veya Bekleme Süresi düğümlerini kullanın yalnızca her X saniyede bir tetiklenmesi gereken uyarılar için.
  • Döngüleri bilinçli kırın. İki dal birbirini besliyorsa bir durum değişkenini ("currentlyRelaying") kontrol eden mantık düğümü ekleyin; böylece bayrak ayarlandığında akış erken çıkar.

5. Girdiler, Çıktılar ve Pratik Sorular

Bir düğüme ne girer?

  • Tam mesaj verisi.
  • Geçit biti (true/false).
  • Düğümün açıkça istediği isteğe bağlı bağlam (durum değişkenleri, zamanlayıcılar).

Düğümden ne çıkar?

  • Düğüm değiştirmedikçe aynı veri.
  • Yeniden hesaplanan geçit biti (mantık düğümleri) veya aktarılan bit (eylemler).
  • Çoğu yan etki (sohbet gönderme gibi) veriyi değiştirmez ancak puan eylemleri şu gibi durum alanları ekleyebilir: pointsTotal veya pointsSpendError sonraki mantık için.

Ne zaman dallanmalı?

Farklı tepki vermek istediğinizde: true ile false. Gereken renkli çıkıştan (yeşil = doğru, gri/kırmızı = yanlış) sonraki düğüme bağlantı sürükleyin.

Unutmayın: Şu çıktıyla hiçbir şey yapmazsanız: false , akış orada biter. Bu filtreler için idealdir ("kontrolden geçmeyen her şeyi engelle") ancak şu yolu bağlamayı unutmayın: false yolu, alternatifler gerekiyorsa.

Yaygın Sorular ve Yanıtlar

  • Her filtre çifti için AND kullanmalı mıyım? Hayır. Birçok düğüm birden fazla kontrol içerir (örneğin temel Mesaj Filtresi anahtar kelime + rol destekler). AND'i yalnızca gelişmiş birleşimlerde veya farklı düğümlerden gelen sinyalleri birleştirirken kullanın.
  • Doğru/yanlış değerleri NOT düğümüne nasıl ulaşır? Yeşil çıkışlı her düğüm şu değeri çıkarır: true varsayılan olarak. Koşul sağlanmazsa şu çıktıyı verir: false. Sonucu tersine çevirmek için bu bağlantıyı NOT'a bağlayın.
  • Düğüm yanlış döndürse bile veri çıkarabilir mi? Evet. Veri yanlış çıkışından geçmeye devam eder; o dalın nereye gideceğine siz karar verirsiniz.
  • TikTok Takım üyelerini nasıl eşleştiririm? Seçin: TikTok Takım Üyesi Kullanıcı Rolü düğümünde. Gelen mesajdaki TikTok Hayran Kulübü/takım seviyelerini ve rozetlerini tanır; Ana Sohbet Katmanı ayarlarına bağlı değildir.
  • Her Metni Seslendir düğümü farklı ses kullanabilir mi? Evet. Şu alana sağlayıcının desteklediği ses adı veya kimliğini girin: Ses Geçersiz Kılması, veya Akış Eylemleri TTS varsayılanını kullanmak için boş bırakın.

6. Şablon Değişkenleri Referansı

Birçok eylem düğümü (Metin Göster, Metin Kaynağını Ayarla, Mesaj Gönder, Sohbeti Aktar, TTS Seslendir, Webhook Çağır, Termal Etiket Yazdır) şunu destekler: şablon değişkenleri çalışma zamanında etkinlik verileriyle değiştirilir. Değişken adlarını şu şekilde süslü paranteze alın: {username}.

Temel Değişkenler (geriye uyumlu)

DeğişkenTakma adAçıklamaÖrnek
{username}{chatname}Kullanıcının görünen adıCoolViewer123
{message}{chatmessage}Sohbet mesajı metniHerkese merhaba!
{source}-Platform adı (baş harfi büyük)Twitch, YouTube
{type}-Platform adı (ham)twitch, youtube
{donation}{hasDonation}Bağış/bahşiş görünüm etiketi$5.00, 500 bits

Genişletilmiş Değişkenler

DeğişkenAçıklamaÖrnek
{displayname}Görünen ad (alternatif alan)CoolViewer123
{donoValue}Sağlanan veya tahmin edilen USD bağış karşılığı; Etkinlik Akışı eşik değerlerini normalleştirilmiş şu alandan türetir: hasDonation değer gibi etiketler, $değer, değer + birim veya kısa birim/değer. Bilinmeyen adlandırılmış sanal birimler için 100 birim = 0,01 USD kullanılır; fiyatı bilinmeyen TikTok hediyeleri hediye başına bir coin (her biri 0,01 USD) kullanır. {donationAmount} eski bir takma addır5.00
{event}Etkinlik türü tanımlayıcısıcheer, raid, new_follower
{membership}Üyelik durumuMEMBERSHIP, new_sponsor
{subtitle}Ek bağlam3 aydır üye
{userid}Kullanıcının platform kimliği12345678
{chatimg}Kullanıcı avatar URL'sihttps://...
{contentimg}Eklenen resmin URL'sihttps://...
{rewardTitle}Kaynak üst düzey ödül başlığı alanı sunuyorsa ödül adıMesajımı Vurgula
{meta}Yapılandırılmış etkinlik verisi (JSON){"viewers":100}
{counterValue}Sayaç veya Sayacı Kontrol Et adımından sonraki mevcut sayaç değeri12
{counterTarget}Sayaç hedef değeri30
{counterRemaining}Sayaç hedefi eksi mevcut değer; en az 018
Değişken eşleştirmesi büyük/küçük harfe duyarsızdır. {USERNAME}, {Username}, ve {username} aynı şekilde çalışır.
Akışın eklediği alanlar da çalışır. Önceki eylem mesaja üst düzey değer eklerse sonraki şablonlar bunu doğrudan okuyabilir. Şu şekilde çalışır: Check Counter sunar: {counterValue}, {counterTarget}, ve {counterRemaining}.
Webhook Çağır JSON: Şablon değişkenleri her iç içe nesne veya dizi derinliğindeki JSON metin değerlerinde çalışır. Nesne anahtarları şablon olarak işlenmez; yer tutucu içermeyen özel gövde değiştirilmeden gönderilir.

Örnek Şablonlar

  • Metin Göster: {username} just cheered {hasDonation}!
  • OBS Metin Kaynağını Ayarla: {username}: now {counterValue}, need {counterTarget}
  • Sohbeti Aktar: [{source}] {username}: {message}
  • TTS: {username} says {message}
  • Bağış Uyarısı: {username} donated {donation} - {subtitle}
  • Termal Etiket: {username}, yeni bir satır, ardından {donation}. Bkz. Termal Yazıcı Rehberi yazıcı kurulumu, sabit boyutlu etiketler ve tam akış için.
  • Discord Webhook Çağır: {"content":"{message}","username":"{username}","avatar_url":"{chatimg}"}
Eksik değişkenler boş metne dönüşür. Etkinlik belirli alanı içermiyorsa (örneğin {donation} normal sohbet mesajında), yer tutucunun kendisini göstermek yerine boş metin konur: {donation} metni.

7. İyi Uygulamalar Kontrol Listesi

  • Adlandırın ve renklendirin düğümlerinizi; böylece gelecekte hangi dalın ne olduğunu bilirsiniz.
  • Yerleşik simülatörle test edin (Test Etkinliği Gönder), akışı canlı kullanıma almadan önce.
  • Mantığı kaynağın yakınında gruplayın. Sonraki aşamalardaki ek işlemleri önlemek için mümkün olduğunca erken filtreleyin.
  • Tekrarları Durum düğümlerinde saklayın. Çift uyarıları önlemek için sayaç, anahtar ve zaman damgaları kullanın.
  • meta alanlarını belgeleyin. Özel şu alanları eklediğinizde: meta anahtarlarını belgeleyin; böylece katmanlar ve uzak istemciler tutarlı kalır.
Sürümleri kaydedin. Önemli bir aşamaya ulaştığınızda akışı dışa aktarın. Deneme ters giderse içe aktarma, önceki duruma dönmenin en kolay yoludur.

8. Daha Fazla Keşif

Stream Deck veya API'den özel iş akışları çalıştırın: adlandırılmış tetikleyiciler, başlangıç şablonu, iş akışı keşfi, ek veriler, HTTP/WebSocket/P2P örnekleri ve kadran hareketleri.

Daha derine inmeye hazır mısınız?

  • Kullanın: Durum Düğümleri (sayaçlar, anahtarlar, zamanlayıcılar), etkinlikler arasında bağlamı takip etmek için.
  • Birleştirin: Değişkenler + Mantık kuyruk sistemleri, çekilişler veya puanlama motorları oluşturmak için.
  • Şu sisteme bağlanın: Puanlar ve Ödüller ; böylece izleyiciler akışları bilinçli tetikleyebilir.
  • Kullandığınız yazılım SSApp masaüstü uygulaması mı? Şu düğümlerin kilidini açın: Özel JavaScript düğümleri yerleşik düğümlerin kapsamadığı özel mantık için.
  • Şunu kontrol edin: Etkinlik başvuru kaynağı tüm platformlarda ayrıntılı veri belgeleri için.

Bu rehber bilinçli olarak bağımsız hazırlanmıştır — yerel olarak kopyalayın, ekibinize uyarlayın ve düzenleyicide denemeyi sürdürün.

9. Özel JavaScript Yalnızca SSApp / Masaüstü

Etkinlik Akışı düzenleyicisindeki iki düğüm, akış işlem hattında çalışan istediğiniz JavaScript kodunu yazmanızı sağlar: Özel Kod (tetikleyici) ve Özel Kod Çalıştır (eylem). Yerleşik düğümlerin ifade edemediği her şey için çıkış yoludur.

Masaüstü uygulaması gerekir. Chrome Manifest V3 İçerik Güvenliği Politikası şu öğeyi engellediği için tarayıcı uzantısında özel JavaScript düğümleri devre dışıdır: new Function() / eval(). Düzenleyiciyi şu yoldan açın: SSApp masaüstü uygulaması bunları etkinleştirmek için. Uzantı modunda düğümler şu etiketle gri görünür: "Yalnızca masaüstü".
Kodu düzenleme: Özel Kod düğümünü seçip şuna tıklayın: Kod Düzenleyicisini Aç büyük düzenleme penceresi için. Kaydet ve Kapat JavaScript sözdizimini kontrol eder ve tüm akışı kaydeder; Ctrl+S veya Cmd+S aynısını yapar. İptal, düğümü değiştirmez.
Etkinlik Akışı Düzenleyicisi — boş durum
Etkinlik Akışı Düzenleyicisi. Sol panel tüm düğümleri listeler; noktalı tuvalde akışları oluşturursunuz; sağ panel seçili düğümün özelliklerini gösterir.

Özel Kod — Tetikleyici düğümü

Sürükleyin: Özel Kod şu kaynaktan: Gelişmiş grubu, şu panelde: Tetikleyiciler panelinden tuvale. Geçit görevi görür: akış yalnızca kodunuz şu değeri döndürdüğünde sürer: true.

Gelişmiş grubunda Özel Kod düğümünü gösteren Tetikleyiciler paneli
Özel Kod şu bölümde bulunur: Gelişmiş Tetikleyiciler panelindeki grup.
JavaScript kod düzenleyicisini gösteren Özel Kod tetikleyici özellikleri paneli
Tetikleyici yerleştirildikten sonraki özellikler paneli. Şu değeri döndüren herhangi bir ifade yazın: true veya false.
İmza: kodunuz şu şekilde çalışır: function(message) { ... }
Şunu döndürmelidir: mantıksal değer — true akışın devam etmesini sağlamak için, false durdurmak için.
Kullanılabilir: nesne: message (bkz. mesaj API'si aşağıda), ayrıca convertCurrency(value, targetCurrency, source) ve convertToUSD(value, source).

Özel Kod Çalıştır — Eylem düğümü

Sürükleyin: Özel Kod Çalıştır şu kaynaktan: Entegrasyonlar grubu, şu panelde: Eylemler paneli. Mesajı değiştirebilir, engelleyebilir veya sonraki düğümlerin okuyabileceği üst veriler ekleyebilir.

Entegrasyonlar grubunda Özel Kod Çalıştır'ı gösteren Eylemler paneli
Özel Kod Çalıştır şu bölümde: Entegrasyonlar Eylemler panelindeki grup.
Kod düzenleyicisini gösteren Özel Kod Çalıştır eylem özellikleri paneli
Eylem özellikleri. Değişiklikleri akış sonucuyla birleştirmek için nesne döndürün.
İmza: kodunuz şu şekilde çalışır: function(message, result) { ... }
Şunu döndürmesi gerekir: şuna birleştirilen nesne veya Promise: result— bkz. sonuç API'si.
Kullanılabilir: message (etkinlik verisi), result (mevcut akış sonucu durumu), printThermal(html, options), ayrıca convertCurrency(value, targetCurrency, source) ve convertToUSD(value, source).
SSApp'te termal yazdırma: yazıcıyı seçin, kağıt genişliğini ve güvenli kenar boşluklarını şu bölümden ayarlayın: Yazıcı Kontrolü, ardından şunu döndürün: printThermal('<strong>' + message.chatname + '</strong>'). SSApp işi yerel Windows yazıcı API'si üzerinden sessizce kuyruğa alır ve kayıtlı ayarları kullanır. Akış bunları şu gibi seçeneklerle geçersiz kılabilir: { width: '58mm', marginLeft: '3mm', marginRight: '3mm', marginTop: '2mm', marginBottom: '2mm', feed: '3mm', marginType: 'printableArea' }. Promise döndürmek Etkinlik Akışı'nın gönderimi beklemesini ve hataları bildirmesini sağlar.
Yan yana Özel Kod tetikleyicisi ve Özel Kod Çalıştır eylemi gösteren tuval
Tuvale yerleştirilmiş Özel Kod tetikleyicisi (mavi) ve Özel Kod Çalıştır eylemi (yeşil). Bağlamak için tetikleyicinin çıkışını eylemin girişine bağlayın.

Nesne: message

Her iki düğüm de tüm etkinlik verisini şu değişkenle alır: message. Aşağıdaki alanlar her zaman kullanılabilir; platforma özel etkinlikler ek alanlar içerebilir.

AlanVeri türüAçıklamaÖrnek
message.chatmessagemetinSohbet mesajı metni (HTML içerebilir)"Hello stream!"
message.chatnamemetinGönderenin görünen adı"CoolViewer"
message.useridmetinPlatform kullanıcı kimliği"12345678"
message.typemetinKaynak platform (küçük harf)"twitch", "youtube", "kick"
message.hasDonationmetinVarsa biçimlendirilmiş bağış metni"$5.00", "500 bits"
message.donoValuenumber / stringKaynak sağlıyorsa bağışın USD karşılığı; geçerli sıfır değerleri dikkate alınır. Etkinlik Akışı alternatif olarak şunu kullanır: currency.js . Normalleştirilmiş hasDonation etiketlerini eşik karşılaştırmaları için dönüştürür; 100 bilinmeyen adlandırılmış birim = 0,01 USD dahildir. Bağış değerlerini şu alandaki serbest metinden ayrıştırmaz: chatmessage .5
message.eventmetinEtkinlik türü tanımlayıcısı"new_follower", "cheer", "raid"
message.membershipmetinGeçerliyse üyelik durumu"MEMBERSHIP"
message.subtitlemetinİkincil bağlam satırı"Member for 3 months"
message.modbooleanGönderen moderatörtrue
message.subscriberbooleanGönderen abonetrue
message.vipbooleanGönderen VIP durumundatrue
message.chatimgmetinKullanıcı avatar URL'si"https://..."
message.metaobjectEtkinliğe eklenen herhangi bir yapılandırılmış veri{ viewers: 120 }
Para birimi dönüştürme: kullanın: convertCurrency(message.hasDonation, 'EUR', message.type) biçimlendirilmiş bağış etiketini EUR'ya çevirmek için. Sayı döndürür veya null istenen hedef para birimi desteklenmediğinde. Dönüştürücü Social Stream Ninja'nın yaklaşık dahili kurlarını kullanır; harici kur hizmetine bağlanmaz.

Eylemin döndürdüğü

Eylem kodunuzdan düz nesne döndürün. Eklediğiniz tüm alanlar akışın şu nesnesiyle birleştirilir: result ; belirtmediğiniz alanlar mevcut değerlerini korur.

Dönüş alanıVeri türüEtki
modifiedbooleanŞunu ayarlayın: true şunu değiştirdiyseniz: message alanları. Sonraki düğümlere verinin düzenlendiğini bildirir.
messageobjectSonraki düğümlerin değişikliklerinizi alması için (değiştirilmiş olabilecek) mesajı geri verin.
blockedbooleanŞunu ayarlayın: true mesajın görüntülenmesini veya aktarılmasını önlemek için.
Güvenli en küçük dönüş değeri: return { modified: false, message };
Hiçbir şeyi değiştirmeseniz bile şu değeri döndürmek: message sonraki düğüme akmayı sürdürür.

Kod parçası örnekleri

Bunlardan herhangi birini ilgili düğüm türünün JavaScript Kodu metin alanına kopyalayın.

Tetikleyici kod parçaları — şunu döndürün: true akışı sürdürmek için

Anahtar kelime eşleşmesi (büyük/küçük harfe duyarsız)
Akışı yalnızca mesaj belirli bir kelime veya ifade içerdiğinde sürdürün.
// Matches "!hello" anywhere in the message return (message.chatmessage || '').toLowerCase().includes('!hello');
Regex ile komut algılama
Belirlenmiş listedeki komutla başlayan mesajları eşleştirin (örneğin !queue, !raffle, !enter).
return /^!(queue|raffle|enter)\b/i.test(message.chatmessage || '');
Eşik üstündeki bağış
Yalnızca bağış minimum tutarı karşıladığında veya aştığında tetikleyin.
const amount = message.donoValue !== undefined && message.donoValue !== null && message.donoValue !== '' ? Number(message.donoValue) : (typeof convertToUSD === 'function' ? convertToUSD(message.hasDonation || '', message.type || '') : Number(String(message.hasDonation || '').replace(/[^0-9.]/g, '') || 0)); return amount >= 5;
EUR aralığında YouTube Super Chat veya Super Sticker
Standart YouTube bağış etiketini EUR'ya çevirin, Jewels/Hediyeler'i hariç tutun ve tek ses veya görsel aralığı seçin.
var eventName = String(message.event || '').toLowerCase(); if (eventName !== 'superchat' && eventName !== 'supersticker') return false; var eurValue = convertCurrency(message.hasDonation || '', 'EUR', message.type || ''); if (typeof eurValue !== 'number' || !isFinite(eurValue)) return false; message.eurValue = eurValue; return eurValue >= 10 && eurValue < 25;
Platform filtresi
Yalnızca belirli platformlardan gelen etkinlikleri işleyin.
return ['twitch', 'youtube'].includes(message.type);
Abone / VIP / moderatör geçidi
Akışın yalnızca ayrıcalıklı kullanıcılar için sürmesini sağlayın.
return !!(message.subscriber || message.vip || message.mod);
Çoklu koşul — VIP + anahtar kelime
Yerleşik tetikleyicilerin kapsamadığı tek bir ifadede rol kontrolü ve mesaj içeriğini birleştirin.
const isPrivileged = !!(message.subscriber || message.vip || message.mod); const isCommand = /^!feature\b/i.test(message.chatmessage || ''); return isPrivileged && isCommand;
Mesaj uzunluğu geçidi
Yalnızca yeterli içerikli mesajları işleyin (tek emoji spamini önlemek için TTS veya aktarmada kullanışlıdır).
return (message.chatmessage || '').replace(/<[^>]+>/g, '').trim().length >= 20;

Eylem kod parçaları — şunu döndürün: { modified, message }

Mesaja rozet veya etiket ekleyin
Bu eylemden geçen her mesajın sonuna görsel gösterge ekleyin.
message.chatmessage = (message.chatmessage || '').trimEnd() + ' ✅'; return { modified: true, message };
Mesajı koşula bağlı engelleyin
İçeriği inceleyin ve kural eşleşirse mesajı sessizce atın — anahtar kelime filtresinin ifade edemediği spam örüntüleri için kullanışlıdır.
const text = (message.chatmessage || '').toLowerCase(); const spamPatterns = ['buy followers', 'free nitro', 'click here']; if (spamPatterns.some(p => text.includes(p))) { return { blocked: true, message }; } return { modified: false, message };
@etiketleri kaldır
Başka platforma aktarmadan önce mesajdaki tüm @kullanıcıadı etiketlerini kaldırın.
message.chatmessage = (message.chatmessage || '').replace(/@\w+/g, '').trim(); return { modified: true, message };
Bağış duyurusu biçimlendirin
Bağış varsa chatmessage alanını tutarlı duyuru metnine dönüştürün.
const amount = parseFloat(message.donoValue || 0); if (amount > 0) { const note = (message.chatmessage || '').trim(); message.chatmessage = `💰 ${message.chatname} donated $${amount.toFixed(2)}!` + (note ? ` "${note}"` : ''); return { modified: true, message }; } return { modified: false, message };
Sonraki düğümler için yönlendirme üst verileri ekleyin
Mesajı, sonraki bir eylemin okuyabileceği özel alanla etiketleyin: Sohbeti aktar veya Mesaj Gönder eylemi şablon değişkeninden okuyabilir ({meta}).
message.meta = message.meta || {}; // Assign a donation tier so the next node can use {meta} to decide overlay colour const amount = parseFloat(message.donoValue || 0); message.meta.donationTier = amount >= 20 ? 'gold' : amount >= 5 ? 'silver' : 'bronze'; return { modified: true, message };
Platforma göre mesaj öneki
Platformlar arası aktarırken izleyicilerin kaynağı bilmesi için başa platform etiketi ekleyin.
const labels = { twitch: '[Twitch]', youtube: '[YouTube]', kick: '[Kick]', tiktok: '[TikTok]', }; const label = labels[message.type] || `[${message.type || 'Chat'}]`; message.chatmessage = `${label} ${message.chatname}: ${message.chatmessage || ''}`; return { modified: true, message };

Tam örnek — VIP özellik talebi botu

Bu akış şunu dinler: !feature <text> abonelerden, VIP'lerden veya moderatörlerden; bunu yeni özellik talebi olarak yeniden biçimlendirip ikinci hedefe (ör. Discord) aktarır.

┌──────────────────────┐ ┌──────────────────────────┐ ┌──────────────────┐ │ Custom Code Trigger │────▶│ Execute Custom Code Action│────▶│ Relay Chat │ │ │ │ │ │ (to Discord) │ │ Gate: VIP/sub/mod │ │ Reformat message text │ │ │ │ + starts with │ │ → "📋 Feature Request │ │ │ │ !feature │ │ from {name}: {text}" │ │ │ └──────────────────────┘ └──────────────────────────┘ └──────────────────┘

1. Adım — Özel Kod tetikleyicisi (tetikleyicinin JavaScript Kodu alanına yapıştırın):

// Only let VIPs, subscribers, and mods through, and only for !feature commands const isPrivileged = !!(message.subscriber || message.vip || message.mod); const isCommand = /^!feature\b/i.test((message.chatmessage || '').trim()); return isPrivileged && isCommand;

2. Adım — Özel Kod Çalıştır eylemi (eylemin JavaScript Kodu alanına yapıştırın):

// Strip the "!feature" command word and format a clean announcement const featureText = (message.chatmessage || '') .replace(/^!feature\s*/i, '') .trim(); if (!featureText) { // No text after the command: block rather than relay an empty request return { blocked: true, message }; } message.chatmessage = `📋 Feature request from ${message.chatname}: ${featureText}`; return { modified: true, message };

3. Adım — Sohbeti Aktar eylemi: eylemden sonra standart Sohbeti Aktar düğümü ekleyip Discord (veya başka) hedefinize yönlendirin. Burada özel kod gerekmez — yeniden biçimlendirilen message.chatmessage otomatik olarak aktarılır.

Akışı test etme. Şu düğmeye tıklayın: Akışı Test Et (düzenleyicinin sağ üstünde); böylece canlı yayın gerekmeden işlem hattından yapay mesaj gönderebilirsiniz. chatname'i bir aboneye ayarlayın ve şu tür mesaj ekleyin: !feature dark mode support, ve Sohbeti Aktar hedefinin yeniden biçimlendirilmiş metni aldığını doğrulayın.
Yapay test etkinlikleri göndermek için Akışı Test Et paneli
Akışı Test Et paneli. Tetikleyici koşullarınıza uyan alanları doldurup şuna tıklayın: Testi Çalıştır tüm işlem hattını doğrulamak için.

Güvenlikle ilgili hususlar

Özel kod, görüntüleyici işlem yetkileriyle çalışır. SSApp içinde Özel JS düğümlerindeki kod şu nesneye tam erişir: window ve preload betiğinin sunduğu tüm API'lere (ör. window.ninjafy). İçe aktarılan akış dosyalarını çalıştırılabilir kod gibi değerlendirin — yalnızca güvendiğiniz kaynaklardan akış içe aktarın.
  • Ağ korumalı alanı yoktur. Eylem kodu şunu çağırabilir: fetch(). Başkalarından paylaşılan akışlar alıyorsanız etkinleştirmeden önce JS kodunu inceleyin.
  • Hatalar yakalanır. Kodunuzdaki çalışma zamanı hatası şu değeri döndürür: false (tetikleyici) veya işlem yapmadan döner (eylem) ve DevTools konsoluna kaydeder — akış çökmez.
  • Sözdizimi hataları da yakalanır. Şu tür bir hata: SyntaxError derleme sırasında aynı şekilde yakalanır. Düğüm hiçbir şey yapmıyor görünüyorsa DevTools'u (F12) kontrol edin.