コンテンツにスキップ

catchノード

catchノード

概要

catchノードは、フロー内で発生したエラーを検知し、後続ノードへ渡すためのノードです。

ロボシュタインのフローでは、functionノード、http requestノード、各種連携ノードなどでエラーが発生する場合があります。catchノードを使用すると、エラー発生時に通知を送信したり、エラー内容をdebugノードで確認したり、別の処理へつなげたりできます。

例えば、外部API連携に失敗した場合に管理者へメール通知する、functionノード内のJavaScriptエラーを確認する、処理失敗時にログを残す、といった用途で使用します。

catchノード設定画面

具体的な活用例(エラー発生時に通知する)

フロー内でエラーが発生した場合に、catchノードで検知して通知する例です。

フローのイメージ図

catchノードのフローイメージ(メール通知)

エラー内容を確認するだけであれば、以下のように構成します。

catchノードのフローイメージ(エラー確認)

① catchノードでエラーを検知する

catchノードは、「エラー取得元」で指定した範囲のノードでエラーが発生したときに動作します。 例えば「全てのノード」を指定した場合、同じフロー(タブ)内のどのノードでエラーが発生しても、catchノードがそのエラー情報を受け取り、後続ノードへ渡します。

② エラー内容を後続ノードで利用する

catchノードからは、エラーが発生したノードが受け取っていたメッセージに、エラー情報(msg.error)を追加したものが出力されます。 後続のtemplateノードでエラー通知文を作成したり、debugノードでエラー内容を確認したりできます。

例(templateノード):

エラー内容:{{error.message}}

③ 通知や後続処理につなげる

エラーを検知した後、メール送信ノードやチャット通知ノードへつなげることで、エラー発生時の通知フローを作成できます。

設定項目一覧

必須 項目名 説明
◯ エラー取得元 どの範囲のノードで発生したエラーを検知するかを「全てのノード」「同一グループ内」「選択したノード」から選択します。詳細は以下をご確認ください。
Catchノードで処理済みのエラーを無視 他のcatchノードですでに検知されたエラーを対象外にします。エラー取得元が「全てのノード」の場合のみ表示されます。
名前 フローエディター上で表示されるノード名を任意で指定できます。

「エラー取得元」について

エラー取得元 内容
全てのノード catchノードと同じフロー(タブ)内にある、すべてのノードのエラーを検知します。
同一グループ内 catchノードと同じグループ内にあるノードのエラーを検知します。
選択したノード 一覧から選択したノードで発生したエラーのみを検知します。

通常は、まず「全てのノード」で設定してエラー通知や調査用に利用できます。特定の処理だけを監視したい場合は、「選択したノード」を指定すると、対象を絞り込めます。

検知できるのは同じフロー(タブ)内のエラーのみです

catchノードは、別のフロー(タブ)で発生したエラーは検知しません。エラーを検知したいフロー(タブ)ごとにcatchノードを配置してください。

「Catchノードで処理済みのエラーを無視」について

チェックを入れると、他のcatchノードで検知されなかったエラーのみを対象にできます。 複数のcatchノードを配置している場合に、同じエラーを複数箇所で処理したくないときに利用します。

例えば、特定ノード用のcatchノードと、全体用のcatchノードを分ける場合に使用します。

  • 特定ノードのエラー → 個別のcatchノード(エラー取得元:選択したノード)で処理
  • その他のエラー → 全体用のcatchノード(エラー取得元:全てのノード、Catchノードで処理済みのエラーを無視 にチェック)で処理

このチェックを入れない場合、特定ノードのエラーは個別のcatchノードと全体用のcatchノードの両方で検知され、通知が重複します。

catchノードで取得できる主な情報

プロパティ 内容
msg.error.message エラーメッセージが格納されます。
msg.error.source.name エラーが発生したノードの名前が格納されます。
msg.error.source.type エラーが発生したノードの種類(function、http request など)が格納されます。
msg.error.source.id エラーが発生したノードのIDが格納されます。
msg.payload など エラーが発生したノードが受け取っていたメッセージの内容が、そのまま引き継がれます。

エラー調査を行う場合は、debugノードの対象を msg.error または「msgオブジェクト全体」に設定して確認すると、エラー内容や発生元を把握しやすくなります。

例えば、functionノードでエラーが発生した場合、debugノードには以下のような内容が表示されます。

{
  "payload": "元のデータ",
  "error": {
    "message": "テスト用のエラーです",
    "source": {
      "id": "(ノードのID)",
      "type": "function",
      "name": "エラーを発生させる",
      "count": 1
    }
  }
}

利用例

例1:エラー内容をdebugノードで確認する

エラー発生時の内容を確認するための基本的な構成です。

例1:エラー内容をdebugノードで確認する

debugノードの対象を msg.error または「msgオブジェクト全体」に設定すると、エラー内容を確認しやすくなります。

例2:エラー発生時にメール通知する

フロー内でエラーが発生した場合に、メールで通知する構成です。

例2:エラー発生時にメール通知する

templateノードでは、以下のような通知文を作成できます。

ロボシュタインのフローでエラーが発生しました。

発生したノード:{{error.source.name}}
エラー内容:
{{error.message}}

例3:特定ノードのエラーだけを検知する

外部API連携など、特定のノードで発生したエラーだけを検知したい場合は、エラー取得元を「選択したノード」に設定し、対象のhttp requestノードを選択します。

例3:特定ノードのエラーだけを検知する

対象を絞ることで、不要なエラー通知を減らし、確認すべきエラーを明確にできます。

例4:エラー時に専用レスポンスを返す

http inノードを使ったAPI受付フローでエラーが発生した場合に、エラー用レスポンスを返す例です。

例4:エラー時に専用レスポンスを返す

functionノードで、以下のようにレスポンスを設定します。

msg.statusCode = 500;
msg.payload = {
    result: "error",
    message: "処理中にエラーが発生しました"
};
return msg;

http responseノードでレスポンスを返すには、http inノードから引き継がれた msg.res が必要です。エラーが発生したノードまで msg.res が引き継がれていない場合はレスポンスを返せないため、動作確認を行ってください。

注意点

すべての異常がcatchノードで検知されるわけではない

catchノードは、ノードがエラーとして通知した内容を検知するためのノードです。

例えば、http requestノードでHTTPステータスコード 404 や 500 が返った場合でも、通信自体が成立している場合はエラーにはならず、通常のレスポンスとして後続ノードへ渡されます。 APIの処理結果を判定したい場合は、catchノードだけでなく、msg.statusCode をswitchノードで判定してください。

http requestノードは、通信エラー時も後続ノードへメッセージを渡す(初期設定の場合)

接続先が見つからない場合など、通信自体に失敗した場合、http requestノードはエラーとしてcatchノードに検知されると同時に、後続ノードにもメッセージを渡します。 このとき msg.statusCode には "ENOTFOUND" のようなエラーコード(文字列)が、msg.payload にはエラーメッセージが格納されます。 後続ノードの処理が想定外に動かないよう、必要に応じてswitchノードで msg.statusCode を判定してください。 なお、http requestノードの「2xx以外の応答をcatchノードへ送信」にチェックを入れると、通信エラー時は後続ノードへメッセージを渡さず、catchノードにのみエラーが送られます。

catchノード自体には入力ポートがない

catchノードは、他のノードから線で入力を受けるノードではありません。 フロー内で発生したエラーを検知して動作するため、入力ポートはありません。後続の通知ノードやdebugノードへ接続して使用します。

エラー通知の重複に注意する

catchノードを複数配置している場合、設定によっては同じエラーを複数のcatchノードで検知します。 例えば「全てのノード」のcatchノードと「選択したノード」のcatchノードを両方配置すると、選択したノードのエラーは両方のcatchノードで検知されます。 重複させたくない場合は、全体用のcatchノードで「Catchノードで処理済みのエラーを無視」にチェックを入れてください。

エラー発生元を確認する

エラー通知を行う場合は、エラー内容だけでなく、どのノードで発生したエラーかも確認できるようにしておくと、調査しやすくなります。 通知文には、msg.error.source.name などの発生元の情報も含めると便利です。

エラー後の処理を設計しておく

catchノードでエラーを検知した後、通知だけ行うのか、リトライするのか、処理を中断するのか、別フローへ連携するのかを事前に決めておくと、運用しやすくなります。 エラーを検知するだけでなく、エラー発生時にどう対応するかまで含めて設計してください。

関連ノード

  • debugノード:catchノードで取得したエラー内容を確認する場合に使用します。
  • templateノード:エラー通知文を作成する場合に使用します。
  • メール送信ノード:エラー発生時にメール通知する場合に使用します。
  • switchノード:エラー内容やステータスコードに応じて処理を分岐する場合に使用します。
  • changeノード:エラー通知用の件名や本文を設定する場合に使用します。
  • functionノード:エラー内容を整形したり、通知用データを作成する場合に使用します。
  • http responseノード:http inノードで受けたリクエストに対し、エラー時のレスポンスを返す場合に使用します。

まとめ

catchノードは、フロー内で発生したエラーを検知し、後続ノードへ渡すためのノードです。

エラー内容は msg.error に格納され、debugノードで確認したり、templateノードやメール送信ノードと組み合わせて通知したりできます。

また、エラー取得元を「全てのノード」「同一グループ内」「選択したノード」から選択できるため、フロー全体のエラーをまとめて検知したり、特定ノードのエラーだけを検知したりできます。

ただし、すべての異常がcatchノードで検知されるわけではありません。HTTPステータスコードや業務上のエラー判定は、switchノードなどで別途判定してください。