01 · 基本の仕組み
状態を扱う機能は、値を保持するオブジェクトと、値を読み取り・変更する操作で構成されます:
状態ノード
- キャンバス上に配置します。
- 値(ON/OFF、カウント、タイムスタンプ、ユーザー)を保持します。
- Gate、Counter、Rate Limiterは、通常のイベント経路内で動作できます。
- User Memoryは、ほかのノードが参照する共有の保存場所です。
状態アクション
- 後続に配置します。
- 保存された値を読み取り、または変更します(ONにする、1を加算、記録、抽選、リセットなど)。
- フロー内のどこにでも配置できます。対応するノード名を選ぶだけです。
覚えておくこと: 最初に状態ノードを追加して一意の名前を付け、その名前を各操作で選択します。基となるノードがなければ、状態アクションには更新する対象がありません。
02 · オン/オフスイッチ(ゲート)
スイッチはブール値で通過を制御します。ONではメッセージを通し、OFFではこのノードでフローを止めます。
適した用途
- チャットコマンドのクールダウン。
- 手動の切り替え(オーバーレイの有効/無効)。
- メンテナンス時間(離席シーン中に機能を一時停止するなど)。
主なアクション
Set Gate State— ONまたはOFFに切り替えます。Reset State Node— 既定値(通常はON)に戻します。
例:15秒のクールダウン
!hello ──▶ Switch(ON?) ─▶ 返信を送信 ─▶ Set Gate:OFF ─▶ 15秒待機 ─▶ Set Gate:ON
作成手順
- スイッチノードを配置し、「helloCooldown」と名付け、既定値をONにします。
- トリガー → スイッチ → アクションの順に接続します。
- アクションの後に追加します: ゲート状態を設定(Set Gate State) (OFF)を追加し、「helloCooldown」を指定します。
- 追加する項目: 遅延(Delay) ノード(15秒)。
- さらに追加します: ゲート状態を設定(Set Gate State) (ON)を追加し、「helloCooldown」を指定します。
03 · カウンター
カウンターはメッセージをまたいで数値を保持します。メッセージが通過すると自動的に増え、アクションで値を手動調整することもできます。
自動加算: ペイロードがCounterノードを通るたびに1を加算します(「Only count when gate is true」で停止させている場合を除きます)。
使用例
- チャット参加者がN人増えるごとに賞品を出す。
- コミュニティ目標への進捗を記録する。
- コマンドで交換されたポイントを記録する。
アクション
Increment Counter— 指定した量を加算または減算します。Set Counter Value— 指定した数値に設定します。Reset State Node— 既定の開始値に戻します。
例:5メッセージごとにお祝いする
任意のメッセージ ─▶ Counter(名前:hype5) ─▶ Condition(value % 5 === 0?) ─▶ お祝い演出を再生
Conditionノード内で次を比較します: state.hype5.value を比較するか、Counterノードのプロパティにある「Trigger when value matches Target」を使います。
04 · レート制限(スロットル)
スロットルはタイムスタンプを記憶し、指定した頻度に収まるまで新しいイベントを受け付けません。
こんな用途に便利
- 「抽選への応募は1分あたり5件まで。」
- 「API呼び出しは10秒に1回。」
- 「オーバーレイが使用中ならアラートを破棄する。」
設定
- 許可するイベントの最大数を設定します。
- 時間枠を秒単位で指定します。
- 上限を超えたイベントを待機させるか、破棄するかを決めます。
注意: フローを編集してもスロットルは自動リセットされません。次を使用します:
Reset State Node を使うと、テスト中に初期状態に戻せます。
05 · ユーザーメモリー
User Memoryは、名前付きの重複のないユーザーリストを1つ保持します。参加したユーザーの記録、後のメッセージでのリスト照合、ユーザーの削除、ランダムな当選者の選択、そのリストだけの消去ができます。
適した用途
- ギフトやバッジに基づく参加資格。
- いいね、応募、参加をした視聴者を記録する。
- 重複応募のない抽選。
- キャンペーンごとに別のリストを使う。
操作
Remember UserおよびForget User.User Is Remembered.Pick Random User.Clear All UsersまたはReset State Node.
参加トリガー ──▶ Remember User ······▶ User Memory:参加者 抽選コマンド ───────────▶ Pick Random User ···▶ User Memory:参加者 リセットコマンド ──────────▶ Clear All Users ·····▶ User Memory:参加者
青緑色の実線はイベントを運びます。紫色の破線は、操作がどの共有メモリーを使用するかを示します。各User Memoryは独自の件数、永続化モード、リセット方針を持つため、1つのリストを消去してもほかのリストには影響しません。
専用のガイドを参照してください: User Memoryガイド で、確認済みのスクリーンショット、ダウンロードできる抽選フロー、TikTokの参加資格、参加例、リセットの詳細を確認できます。
06 · 用途別の作例
用途を選び、手順に従ってください。
コマンドのクールダウン
- 「commandCooldown」という名前のスイッチノード。
- トリガー → スイッチ → 返信。
- Set Gate OFF → Delay → Set Gate ON。
- 必要に応じて、false出力に「クールダウン中です」というチャットメッセージを追加します。
数量限定の無料配布
- カウンターの初期値は0、目標値は3。
- 交換のたびに加算します。
- 値が3以上になったら、「申し訳ありません、すべて配布済みです」に分岐します。
- 配信終了時にResetアクションを使用します。
視聴者による切り替え
- 「overlayToggle」という名前のスイッチ。
!overlay onコマンド → Set Gate ON。!overlay offコマンド → Set Gate OFF。- すべてのオーバーレイトリガーをスイッチに通します。
フロー図の例
トリガー ─▶ Switch(overlayToggle) ─▶ ONの場合 → オーバーレイを表示 └─false─▶ モデレーターに「オーバーレイは無効です」と通知
報酬交換 ─▶ Counter ticketsSold ├─value < 50 ─▶ 交換を承認 └─value ≥ 50 ─▶ 拒否+ポイントを返す
07 · トラブルシューティングとよくある質問
| 症状 | 考えられる原因 | 解決方法 |
|---|---|---|
| Set Gate Stateアクションを保存できない。 | 対応するスイッチノードが存在しない、または名前が異なります。 | 先にスイッチノードを追加し、ドロップダウンでそのノードが指定されていることを確認します。 |
| カウンターが増えない。 | フローがカウンターノードを通っていないか、ゲートがfalseになっています。 | トリガーの接続線がカウンターを通り、ゲート出力がtrueであることを確認します。 |
| スロットルがすべてをブロックし続ける。 | 時間枠が厳しすぎるか、テスト時の状態が残っています。 | 制限を緩め、再テストの前にReset State Nodeアクションを配置します。 |
| User Memoryの操作に破線のリンクがない。 | 対象のメモリーが選択されていません。 | 操作のプロパティで名前付きメモリーを選ぶか、紫色のサイドコネクターをメモリーにドラッグします。 |
| ガイドボタンが開かない。 | web_accessibleリソースが更新されていない状態で拡張機能を実行しています。 | 次を確認します: actions/state-nodes-guide.html がmanifestを通じて含まれていることを確認し、拡張機能を再読み込みします。 |
テスト項目
- Event Flowの「Send Test Event」ツールでコマンドを模擬実行します。
- 検証中は一時的にクールダウンを短くしたり(2秒)、カウンターの目標値を下げたりします。
- テストの合間に状態ノードをリセットし、古いデータを参照しないようにします。
- 分岐にラベル(例:「false → クールダウン中」)を付けると、経路を目で追いやすくなります。
08 · 次のステップ
状態ノードをEvent Flowのほかの機能と組み合わせましょう:
- スイッチの前にロジックゲート(AND/OR/NOT)を置き、誰が切り替えられるかを決めます。
- 状態に応じたメタデータは次の下に保存します:
metaことで、オーバーレイがその分岐の発火理由を判断できます。 - 動作を確認したパターンはテンプレートとしてエクスポートし、チームで後から再インポートできるようにします。
いろいろ試してみてください。新しい Event Flowガイド とこのガイドを組み合わせて、ロジックと状態の両方を使いこなせます。