# フローコントロールの設定

[フローコントロール](https://docs.nexthink.com/platform/ja/user-guide/workflows/creating-workflows/configuring-flow-controls)を設定して、ワークフロー内で収集された値やNexthinkデータに基づいて、ワークフローの進行と判断ロジックを駆動します。 これらは利用可能なフローコントロールです。

* **条件**
* **繰り返し**
* **待つ**
* **ブロック終了**

## 条件フロー制御

**条件**ブロックは、ワークフローやNexthinkデータによって収集された値に基づいてワークフローを分岐させます。 システムは、ワークフローの実行がそれに到達した時点でのみ、条件を評価します。

* **条件**は1つの出口ポイントしか受け入れません。並列処理はワークフローでサポートされていません。
* 新しい条件を作成する際にデフォルトで追加される**Else**ブランチはオプションです。 定義された条件が満たされない場合は、**Else**パスが実行され、ワークフローがエラーなしで続行します。
* 条件に**Else**ブランチがなく、定義された条件が満たされない場合、条件は「デフォルト条件」エラーで終了し、ワークフローは停止します。
* 条件が評価する値は以下の通りです。
  * Thinklet出力
    * リモートアクションの出力
    * キャンペーンの応答
    * サービス/API出力
    * ワークフローパラメータ
  * データベースオブジェクトのプロパティとその手動カスタム値：`device`、`user`
  * 条件は次の演算子を使用して値を比較します：Is、Is not、Greater than、Less than、Greater than or equal to、Less than or equal to、Contains、Does not contain、Is empty、Is not empty。

{% hint style="warning" %}
システムは、データ型ごとに許可されているオプションに基づいて、利用可能な演算子のリストをフィルターしません。
{% endhint %}

* **名前**: 条件フローコントロールの一意の名前を入力してください。
* **ID**: システムは名前に基づいてIDを自動的に生成します。
* **説明（オプション）**: 条件の目的とその機能を説明してください。 この情報は、ワークフローに詳しくない他のユーザーにとって有益です。
* **条件を追加**: 条件フロー制御に条件を追加します。 フローの判断ロジックをユーザーやデバイス固有の属性に基づいて決定するために、条件値には[手動カスタムフィールド](https://docs.nexthink.com/platform/ja/administration/content-management/custom-fields-management#customfieldsmanagement-choosingmanualcustomfieldtypemanual)を使用できます。
  * 評価したい動的データのソースと値を選択します。
  * オペレーターを選択してください。
  * 比較する値を選択します。 固定参照値を入力するには、カスタム値を選択します。
  * 必要なだけ多くの条件を追加してください。
* **Else:** デフォルトでは、Elseブランチは条件に追加されます。 定義された条件が全て満たされない場合にワークフローをエラーで終了させたい場合、これを選択解除します。
* **完了**をクリックして変更を確定します。

分岐がキャンバスに表示されると、下にThinkletや他のフロー制御ブロックを追加できます。

## 繰り返しフロー制御 <a href="#designer-delay" id="designer-delay"></a>

**繰り返し** フロー制御を使用すると、アクションのグループをループし、再試行、遅延、条件付き終了を可能にすることができます。 役立つ場面：

* ネットワークの問題や一時的なエラーにより失敗する可能性のあるステップの再試行。
* ユーザーの確認やシステムアップデートなどの非同期イベントの待機。
* 制御されたタイミングでのユーザーインタラクションやアクションの繰り返し。

繰り返しブロックを使用すると、定義された終了条件が満たされるまで、ブロック内のすべてのアクションが複数回実行されます。

{% hint style="info" %}
ワークフローごとに許可される**繰り返し**制御は1つだけです。
{% endhint %}

### 退出条件の設定

繰り返しブロックはいくつかのタイプの退出をサポートしています。 各退出は、意図された通りに機能するために、ワークフローの中で正しく接続されている必要があります：

* **デフォルト退出**: 正常または完了した状態を示します。 これは繰り返しブロック内の条件と接続され、ループ後に続くアクションを伴う退出ブランチに続く必要があります。
* **X回後の退出**: ループが定義された最大繰り返し回数に達すると自動的にトリガーされます。 この退出は、繰り返しブロック後のブランチのみを必要とし、ループ内の条件には依存しません。
* **X分/時間後に繰り返す**: ループの反復間の遅延を設定します。 この条件は、繰り返しブロック内のブランチにリンクされる必要があり、ループを一時停止し、指定された時間が経過した後に繰り返させます。
* **カスタム退出**: 特定の基準に基づいてループを早期に終了する1つまたは2つのオプションの退出条件。 これらは、繰り返しブロック内の分岐と接続する必要があります。

以下の例を参照して、すべての出口ブランチを正しくリンクする方法を学びましょう。

<figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-733b2cb9431d31c0fc067dd1e8e4243786b40a88%2Fimage%20(510).png?alt=media" alt=""><figcaption></figcaption></figure>

* **名前**: 繰り返しフロー制御のためのユニークな名前を入力してください。
* **ID:** システムは名前に基づいてIDを自動的に生成します。
* **説明（任意）**: 繰り返しループの目的やその機能を記述します。 この情報は、ワークフローに詳しくない他のユーザーにとって有益です。
* **終了タイミング**: 繰り返しの最大回数を設定します。 この数に達するとループは停止します。 最大は 10 です。
* **繰り返し後**: ループの繰り返し間の遅延を設定します。 ワークフローは、この時間だけ一時停止し、その後にブロックを再試行します。 値を分または時間単位で入力できます。
* **カスタム終了を追加**: 1 または 2 つのカスタム終了を定義します。 ループ内の条件が満たされたときにトリガーされます。

## 待機フローコントロール <a href="#designer-delay" id="designer-delay"></a>

**待機**フロー制御により、次のステップに進む前にワークフローを一時停止できます。 使用方法:

* 定義された期間に動作を遅らせる。
* ユーザー入力や条件に基づいて待機する。
* APIの制限を避けるために負荷を分配する。
* APIを介して外部システムと連携する。

<div align="left"><figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-359cd8ab93c95a63a78c4e9fc586b552a07ed747%2Fimage%20(898).png?alt=media" alt="" width="489"><figcaption></figcaption></figure></div>

* **名前**: 待機フローコントロールの一意の名前を入力してください。
* **ID:** システムは名前に基づいてIDを自動的に生成します。
* **説明（オプション）**: 待機の目的とその機能を説明してください。 この情報は、ワークフローに詳しくない他のユーザーにとって有益です。
* **種類:** 待機Thinkletは2つのタイプをサポートします。

<details>

<summary>時間遅延</summary>

**時間遅延**を選択した場合、ワークフローは指定された期間だけ一時停止し、その後自動的に再開します。 3つの時間オプションから選択できます:

* **固定:** 静的な期間を定義する一定の待機を設定します。 最大サポートされる待機期間は**14日間**です。
* **動的:** 前のThinkletやワークフローパラメータの出力を使用して待機時間を動的に定義します。 設定時に:
  * 遅延値を提供する**Thinklet**またはワークフローパラメータを選択します。
  * ケースに応じて、次のいずれかを選択します。
    * リモートアクション用の**ステータス**を選択します。
    * ユーザー入力の場合：例えば、キャンペーンやメッセージThinkletからの応答などに使用する**選択されたアクションID**を指定します。
    * 特定のワークフローパラメータ値を選択します。
  * 前のThinkletまたはワークフローパラメータの予想される出力と整合する時間単位を定義してください。
* **ランダム**: ランダムの遅延範囲を設定します。

{% hint style="info" %}
**ランダム**な時間遅延は、すべてのワークフローインスタンスが同時に実行されることを防ぐことにより、APIなどの外部システムへの負荷を回避するのに役立ちます。

**動的**な時間遅延によって、動的な入力情報に基づいてワークフローポーズの挙動を適応させます。 動的な時間遅延を使用するケースとして、[ワークフローの作成](https://docs.nexthink.com/platform/ja/user-guide/workflows/creating-workflows/..#building-adaptive-wait-behavior-in-workflows)のドキュメントを参照してください。
{% endhint %}

<div align="left"><figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-dbbfe51cebc1b4ca69612b32ed9c95075265b836%2Fimage%20(899).png?alt=media" alt="" width="491"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>API リスナー</summary>

API リスナーを選択すると、ワークフローは一時停止し、Trigger WaitFor EventワークフローエンドポイントへのAPI呼び出しを待機します。 詳細については、[Workflow API](https://nexthink.stoplight.io/docs/api/workflows-api)ドキュメントを参照してください。

Nexthinkへの呼び出しを行う外部システムからデータをキャプチャするために、最大5つの出力を設定します。 これらの出力を使用して、ワークフロー内で条件を持つ分岐の判断を行ったり、後続のThinkletへの入力情報を提供することができます。

<div align="left"><figure><img src="https://3549141153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeLm8O7QKZDn6z806e7Sv%2Fuploads%2Fgit-blob-41cbaadaa34b0dda559510f6107e129dbe56e9f4%2Fimage%20(23).png?alt=media" alt="" width="476"><figcaption></figcaption></figure></div>

* **名前**: Waitフローコントロールのユニークな名前を入力してください。
* **ID:** 名前に基づいてシステムが自動的にIDを生成します。
* **説明（任意）**: Waitの目的とその内容を説明してください。 この情報は、ワークフローに馴染みのない他のユーザーにとって有用です。
* **タイプ**: 必要なWaitのタイプを選択してください。
* **タイムアウト**: 分または時間でタイムアウトを設定してください。 これは、ワークフローが所定のAPIコールを待つ時間を決定します。 タイムアウト制限に達した場合、ワークフローは失敗状態になり、処理を停止します。
* **出力**: リッスンしているAPIコールから収集される出力を最大5つまで設定できます。 出力のIDは、Trigger WaitFor Eventワークフローエンドポイントに行われた呼び出しの本体内のパラメーターに使用されます。

{% hint style="info" %}
Wait - API リスナーを使用するには、外部システムが実行および連携するワークフローを認識していることを確認してください。

これらの情報は、`{{sys.workflow.executionId}}` と `{{sys.workflow.workflowId}}` 変数を使用してService/API Thinkletで送信します。 その後、サードパーティシステムはこの情報を記録してワークフローと連携します。 これらの値の使用方法は、[システム値の書式](#format-system-values)の例をご覧ください。
{% endhint %}

</details>

## 終了ブロック <a href="#designer-endblock" id="designer-endblock"></a>

**終了**ブロックを使用すると、最終的なワークフローの成果を定義および報告できます。

ワークフローが**終了**ブロックに達すると、システムは選択した**結果**および**結果の詳細**を記録します。 これらの実行結果は以下で利用可能になります。

* クエリ用のNQLデータ。
* 対応する **ワークフロー概要** ダッシュボードには、KPI が含まれています。

{% hint style="info" %}
同じ最終結果を報告する必要がある場合は、いくつかのブランチを同じ **終了** ブロックに収束させます。
{% endhint %}

* **名前**: エンドブロックに固有の名前を入力します。
* **ID**: システムは名前に基づいてIDを自動生成します。
* **説明（オプション）**: このポイントにおけるワークフローの期待される結果を説明します。 この情報は、ワークフローに慣れていない他のユーザーに役立ちます。
* **結果**: このポイントで何が起こるかを最もよく表す結果を、固定リストから選択してください。
  * 行動を取った
  * 行動を取らなかった
  * 失敗
  * その他
* **結果の詳細（オプション）**：ワークフロー実行中に発生した内容の説明で、実行中に収集された`{dynamic values}` と自由記述テキストを組み合わせます。 ダッシュボードで使用される場合は、簡潔にしてください。 NQL および [ワークフロー概要ダッシュボード](https://docs.nexthink.com/platform/ja/user-guide/workflows/monitoring-workflows-dashboard) で利用可能です。
