ボットの処理を、ステップごとに
Flowはステップの並びです。「今日の質問」のFlowは5ステップ。カタログを読み込み、次の質問を選び、投稿し、スレッドを開き、カウントする。ステップを追加して、値をつなぎ、テストして、オンにするだけです。
今日の質問
有効保存トリガー
変更スケジュール、毎日9:00
ストレージの値を取得(get-storage-value)
質問リストの読み込み元{questions}
次の項目を選択(array-at)
昨日の次の質問
メッセージを送信(send-message)
入力パラメーター
チャンネル:#general
メッセージ:今日の質問
スレッドを作成(start-thread-from-message)
そのメッセージにスレッドを作成
ストレージの値を増やす(increment-storage-value)
出題済みとしてカウントする先{asked}
イメージです。実際の画面とは異なる場合があります
この5ステップで9:00に投稿される内容
5つのステップで1つのメッセージが生まれます。その下のスレッドに回答が集まり、カウンターが明日も次の質問を確実に出してくれます。
イメージです。実際の画面や動作とは異なる場合があります
スクリプトではなく、ステップ
各ステップはカタログから選んだ1つのアクションで、それぞれ入力があり、ステップが出力した値は、あとのどのステップにもつなげられます。エディターには、合う値だけが表示されます。この選択画面の裏には、691のアクションと181のパラメータタイプがあります。
固定値、つないだ変数、テンプレート
どの入力も、この3つのどれかを受け付けます。テンプレートは、自分で書いた文章に変数を差し込めます。
変数ピッカーは型を判別
合わない値は非表示にし、オブジェクトのプロパティまで掘り下げ、空になり得る値を警告し、必要なら変換ステップを自動で追加します。
つないだ値はチップで表示
この行のチップは質問カタログとチャンネルで、値がどこから来たかをひと目で確認できます。
どのステップにもコストがかかる
無料から非常に重いまであり、有効にする前に、Flowの最悪ケースが表示されます。
空のFlowから始める必要はありません。ダッシュボードには、開いて変更できるテンプレートが用意されています。あいさつ返信、新メンバーのウェルカム、/warn コマンド、/remind コマンド、XPシステム、提案、イベント参加受付などです。
今日の質問
有効保存トリガー
変更スケジュール、毎日9:00
ストレージの値を取得(get-storage-value)
質問リストの読み込み元{questions}
次の項目を選択(array-at)
昨日の次の質問
メッセージを送信(send-message)
入力パラメーター
チャンネル:#general
メッセージ:今日の質問
スレッドを作成(start-thread-from-message)
そのメッセージにスレッドを作成
ストレージの値を増やす(increment-storage-value)
出題済みとしてカウントする先{asked}
イメージです。実際の画面とは異なる場合があります
分岐とループ
自動化には判断が必要です。If、Switch、ランダム分岐、サブコマンド分岐でFlowを分け、各項目の繰り返し、各マップエントリの繰り返し、Repeatでリストやマップを巡回し、BreakとContinueで制御し、Discordに拒否されたときの復旧処理はTryブロックに書けます。
分岐ごとに独自の変数を持つ
分岐の中で設定した値は、その分岐だけのものです。
Try と On error 分岐
エラーコードで分岐できます。権限不足、見つからない、無効な入力、ストレージエラー、タイムアウト、インタラクションの期限切れ。
止めるのが正解なら、そこで止める
このFlowのIfは、空の質問を投稿する代わりに、スタッフチャンネルにリマインダーを投稿して止まります。
暴走したループは自動で止まるので、ミスがあっても朝じゅう動き続けることはなく、止まります。
今日の質問
有効保存トリガー
変更スケジュール、毎日9:00
ストレージの値を取得(get-storage-value)
質問リストの読み込み元{questions}
If(if-condition)
カタログが空: #staff にリマインダーを投稿して停止
各項目を繰り返し(for-each)
未使用の質問が見つかるまでカタログを順に確認
メッセージを送信(send-message)
質問を埋め込みで投稿する先#general
スレッドを作成(start-thread-from-message)
そのメッセージにスレッドを作成
イメージです。実際の画面とは異なる場合があります
Flowは別のFlowを呼び出せて、待機もステップのひとつ
動作を一度書けば、必要な場所から呼び出せます。Flowが続きに進む前に返答が必要な場合、その待機はメモリではなく記録として保存されるので、ボットを再起動しても失われません。
別のFlowを呼び出す
値を渡して、結果を受け取れます。互いに循環して呼び出し合うことになるFlowは拒否されます。
呼び出されたFlowは呼び出し元の実行に属する
実行履歴にそう表示され、呼び出し元へのリンクも付きます。カスタムイベントはもっと緩い方法で、あるFlowが送信し、別のFlowが待ち受けます。
待機は再起動後も維持
確認を求める、選択肢を求める、メッセージを待つ、フォームを表示して送信を待つ。途中で再起動しても、待機は失われません。
スケジュール実行
「Flow実行をスケジュール」でFlowの中から後の実行を予約でき、待機中の実行をキャンセル・一覧表示するアクションもあります。
誰かの返答を待っているFlowを編集すると、待機中のその実行は停止し、ログにもそう記録されます。何か月も使えるようにしたいものには、Flowを開始するボタンのほうが向いています。誰もクリックしない間はコストがかからず、期限切れにもなりません。
提案をレビュー
有効保存トリガー
変更フォーム送信、質問を提案
メッセージを送信(send-message)
承認ボタン付きで提案を投稿する先#staff
ボタンを待つ(wait-for-interaction)
モデレーターがクリックするまで一時停止
ストレージの値を設定(set-storage-value)
質問を追加する先{questions}
別のFlowを呼び出す(call-flow)
今日の質問を、新しい質問を引数にして呼び出す
イメージです。実際の画面とは異なる場合があります
公開前にまず確認
テスト実行は、自分のサーバーデータを使ってFlowをシミュレーションします。送信も変更も削除も一切行われません。実行するユーザー、実行するチャンネル、トリガーが渡す内容を自分で選べて、結果にはすべてのステップと、実行されていた内容が表示されます。テストにサーバーの費用はかかりません。
Flowは有効にする前にもチェックされるので、問題は朝9時ではなくエディターで見つかります。暴走したループがボットを落とすこともありません。自分で停止します。
下書きか有効か
下書きは保存されてチェックされますが、実行されることはありません。
有効なFlowの保存はすぐに反映
保存すると、ボットはすぐに新しいバージョンを取り込みます。うまくいかなかった場合は、それまで動いていたバージョンがそのままFlowを処理し続けるので、もう一度試せます。
うっかり失うことはありません
開いている間にほかの人がFlowを保存した場合は、相手の作業を上書きせず、警告が表示されます。削除したFlowやモジュールは30日間復元できます。
ひとつだけ注意点があります。すべてのステップが表示されるのはテスト実行だけです。本番の実行では、ステータス、所要時間、失敗したステップは記録されますが、通ったすべてのステップは記録されません。
テスト実行
シミュレーション実行です。何も送信されていませんストレージの値を取得
カタログを読み込み、120件
次のエントリを選択
質問42
メッセージを送信
#general に投稿していたはずです
スレッドを作成
そのメッセージにスレッドを作成していたはずです
ストレージの値を増やす
出題済みカウンターが41から42になります
イメージです。実際の画面とは異なる場合があります
Flowに関するQ&A
誰かの返答を待っているFlowは動き続けます。「確認を求める」や「メッセージを待つ」などの待機は、メモリではなく記録として保存されるので、再起動しても残ります。ひとつ知っておきたい例外があります。待機中の実行があるFlowを編集すると、その実行は停止し、ログにもそう記録されます。