エラー処理
この説では、ワークフロー実行中に発生したエラーの処理の方法について説明しています。
捕捉が可能なエラーの種類
ワークフローの実行時にエラーが発生することがあります。エラーは、自動化の対象システムで発生しているエラーや、APIの認証エラー、システムの変更によるエラーなどがあります。各アクションの実行時に発生するエラーについては、エラーが発生したことを通知したり、ロボットがエラーを捕捉しエラー処理用のワークフローを起動したり、Tryタスクを使用してワークフロー内でハンドリングしたりすることができます。
エラーの通知
エラーが捕捉されると、プロジェクトに登録されているコラボレーター宛にエラー通知を送信することができます。エラー通知の内容は、統一されており、現在のところ Eメールでの通知にのみ対応しています。
エラーの通知先の設定手順は以下のようになっています。
- ワークフロー画面より編集ボタンをクリックしてワークフロー編集ダイアログを表示する
- 通知先のインプットフィールドをクリックして、通知可能なコラボレーター一覧を表示する
- 通知先に設定するコラボレーターをクリックしてチェック状態にする
エラーの通知先は、複数設定可能です。通知先から省く場合も同様の手順でチェックを外してください。
エラー時に実行するワークフロー
エラーが捕捉された際に、エラー処理をリカバリしたり、または、より柔軟な方法で通知を送信したりするにはどうすれば良いでしょうか。
エラー時に実行するワークフローを選択することでこの問題にある程度対応することができるようになります。
エラー時に実行するワークフローを選択する手順は次の通りです。
- ワークフロー画面より編集ボタンをクリックしてワークフロー編集ダイアログを表示する
- 「エラー時に実行するワークフロー」というインプットフィールドをクリックします
- 選択肢に出てきたワークフローを選択します *選択肢が多い場合は、ワークフロー名で絞り込みができるのでインプットフィールドに文字を入力してみてください
エラー時に実行するワークフローは、一つのみ選択可能です。
エラー時に実行するワークフローに渡されるパラメーター
エラー時に実行するワークフローは、特殊なパラメーターを受け取ることができます。
例えば、次のワークフローをエラー時に実行してみましょう。
# テキストを作成
+text_1:
action>: Text
text: |
*エラーが発生しました*
Message: ${error.message}
Workflow: ${error.workflow.name}
Time: ${error.session_time}
Session ID: ${error.session_queue_id}
Session URL: ${error.session_url}"
# Slackでメッセージを送信する
+send_slack_message_1:
action>: SendSlackMessage
provider: slack_slackproviderid
channel: '#chanellname'
text: +text_1
このワークフローは、このまま実行すると、 error
が未定義のためエラー終了してしまいますが、エラー時に実行されるワークフローとして呼び出されると error
が自動的に定義され実行可能になります。
このワークフローは、エラー時に実行されるとSlackにエラーを通知します。
${error}
という記述でエラーの中身が表示されるようになっています。この error の中身は次のようになっています。
{
"workflow": {
"name": "some workflow", // エラーが発生したワークフローの名前
"id": 123, // エラーが発生したワークフローのID
},
"message": "Error: something went wrong.", // エラーメッセージ
"task_name": "+open_browser_1", // エラーが発生したタスクの名前
"session_time": "2020-01-14T12:09:00+09:00", // エラーが発生したセッションの開始時刻
"session_queue_id": 111, // エラーが発生したセッションのID
"session_url": "https://console.autoro.io/projects/1/workflows/23/attempts/365", // セッション詳細(ログ)画面のURL
}
エラー時に実行するワークフローのテスト
エラー時に実行されるワークフローをテストするには、AUTORO APIを使ってパラメーターを渡すか、よりシンプルには、KillAttemptというアクションのみのワークフローを作って、エラー時に実行するワークフローを設定しておく方法があります。
例えば、次のようなワークフローを実行すればすぐにエラー終了し、任意のエラーメッセージをエラー時に実行するワークフローに渡すことができます。
# 強制終了
+kill_attempt_1:
action>: KillAttempt
message: エラーが発生しました。これは任意に設定可能です。
エラー時に実行するワークフローの最大実行回数
エラー時に実行するワークフローに最大実行回数を設定することができます。ワークフローの編集画面でエラー時に実行するワークフローを設定すると入力フォームが表示されます。 実行回数は0以上の整数のみ入力することができます。 0を入力した場合、エラーが発生したとしても設定したエラー時に実行するワークフローは実行されません。 何も入力しない場合、回数制限なしとなります。
具体的に2つのパターンで処理の流れを記載します。
パターン1 ワークフローAのエラー時に実行するワークフローをワークフローA(同じワークフロー)とします。最大実行回数は2回とします。 下記フローチャートのとおり、処理が実行されます。ワークフローAを実行(2回目)においては、エラーが発生したかどうかに関わらず処理終了となります。
パターン2 ワークフローAのエラー時に実行するワークフローをワークフローBとします。最大実行回数は2回とします。 ワークフローBのエラー時に実行するワークフローをワークフローCとします。 下記フローチャートのとおり、処理が実行されます。ワークフローCを実行(2回目)においては、エラーが発生したかどうかに関わらず処理終了となります。
Tryタスク
エラー発生時に、セッションのステータスをエラーにせずに、ワークフロー内でエラーをハンドリングしたい場合は、Tryタスクを使用します。Ifタスクと組み合わせることにより、エラーの種類によって異なるエラーハンドリングを実装することができます。詳しくは、Tryタスクのドキュメントをご覧ください。