【UiPath】OrchestratorのWebhookを利用してジョブの停止をTeamsに投稿しよう（PowerAutomate クラウドフロー編）

# １．はじめに
　OrchestratorのWebhookを利用してジョブの停止をトリガーに、Teamsにメッセージ投稿してみたいと思います。OrchestratorのWebhookとは、Orchestrator側のジョブのイベント（作成や開始、停止など）が発生したときに外部通知する仕組みとなります。特にジョブが停止した場合は状況把握のためにも逃さず通知を受け取りたいため、同仕組みを利用してTeamsに投稿してみたいと思います。なお、Webhookの詳細は[公式Doc](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/about-webhooks)を参照ください。
　今回の実装では以下のような形式でTeamsにメッセージ投稿できるようにしたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/75264e3b-8e02-8772-7b4c-725b410b4e62.png)


# ２．Webhook受信からTeams投稿の方法
　Webhook受信からTeams投稿の方法には、多くの方法があります。
| # | 方法 | 概要 |
| :--- | :--- | :--- |
| 1 | PowerAutomate（クラウドフロー） | PowerAutomateにてWebhookを受信後、Teamsに投稿する |
| 2 | [UiPath Integration Service（Webhook+Teams）](https://qiita.com/tomohiroArai/items/3869f81fa19444e59542) | Integration Service（Webhook）トリガーにてWebhookを受信後、Integration Service（Teams）を利用してTeamsに投稿する |
| 3 | Amazon API Gateway+AWS Lambda | Amazon API GatewayにてWebhookを受信後、AWS Lambdaを利用してTeamsに投稿する |

他にもAzure側のサービスを組み合わせることで上記を実現することは可能となりますが、**今回は#1のPowerAutomate（クラウドフロー）による方法**を紹介したいと思います。

# ３．PowerAutomate（クラウドフロー）による方法
　PowerAutomateのクラウドフローにて、自動化したクラウドフローを選択し、「HTTP 要求の受信時」をトリガーとして利用します。ここから探すのが難しいので、「スキップ」をクリックします。

#### (1) フロー名を変更
　左上が「無題」となっているので、フローに任意の名前を付けます。

#### (2) トリガーの追加
　画面中央にある「トリガーの追加」をクリックします。
　検索画面にて、「HTTP要求」と入力後、検索結果にある「要求」カテゴリ内の「HTTP 要求の受信時」を選択します。

#### (3) トリガーの詳細設定（実行ユーザー設定）
　「フローをトリガーできるユーザー」を「誰でも」に変更します。
 
#### (4) トリガーの詳細設定（要求本文のJSONスキーマ設定）
　「サンプルのペイロードを使用してスキーマを生成する」をクリック後、[公式Doc](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/types-of-events#jobstopped)にあるサンプルペイロードをコピーし、貼り付け後「完了」をクリックします。

#### (5) タイムゾーンの変換
　ジョブの停止時間をTeamsに投稿していますが、Webhook内の時刻がUTCとなっているため、JSTに変換を行います。
　⊕マークをクリックし、「アクションの追加」をクリックします。
　検索画面にて、「datetime」と入力後、ランタイムを「組み込み」に変更し検索結果にある「タイムゾーンの変換」をクリックします。

#### (6) タイムゾーンの変換（パラメーター設定）
　「Base Time」の入力欄をクリックし、右上の稲妻マークをクリック後、「HTTP要求の受信時」のパラメーターが利用できるように「See more」をクリックします。そして、「`EndTime`」を選択します。
　「Destination Time Zone」を「`(UTC+9:00) Osaka, Sapporo, Tokyo`」に変更します。
　「Time Unit」で「カスタム値の入力」を選択後、「`yyyy/MM/dd HH:mm:ss`」を入力します。
 
#### (7) Teamsへのメッセージ投稿
　For each内の「タイムゾーンの変換」直後の⊕マークをクリックし、「アクションの追加」をクリックします。
　検索画面にて、「Teams」と入力後、検索結果にある「Microsoft Teams」カテゴリ内の右上「さらに表示」をクリックします。
　「チャットまたはチャンネルでメッセージを投稿する」を選択します。

#### (8) Teamsへのメッセージ投稿（パラメーター設定）
　「投稿先」で「チャンネル」を選択します。
　「チーム」で投稿したい任意のチームを選択します。
　「チャンネル」で投稿したい任意のチャンネルを選択します。
　「メッセージ」に文字列「時刻：」と入力後、右上の稲妻マークをクリックし、「タイムゾーンの変換」カテゴリ内の「`Converted time`」を選択します。さらに、文字列「に」を入力後「HTTP 要求の受信時」カテゴリの「See more」をクリック後「`ProcessKey`」を選択します。最後に文字列「のジョブが停止しました。」を入力し完成となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/4f783d8e-01f2-4eb3-15e1-52281a068b2a.png)

最終的にクラウドフローは以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/25420f1f-98b7-4b0c-2f85-63be74ff99fb.png)

#### (9) 保存
　「保存」ボタンをクリックすると、受信用のURLが作成されます。
　「HTTP要求の受信時」トリガーをクリックし、「HTTP URL」をコピーマークより取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/93e70fa0-5cbb-1f23-26ba-c128f70073e7.png)


:::note warn
「保存」ボタンをクリックすると、なぜか「HTTP要求の受信時」トリガーの名前が自動的に「manual」に変わります。
:::

# ４．Orchestrator側のWebhookの設定
　Automation CloudのOrchestratorに接続後、「テナント」内の「Webhook」をクリックします。「Webhookを追加」をクリック後、任意の名前を付け、URLには(9)の手順で取得したURLを貼り付けます。さらに、「個別のイベントを選択」後、「ジョブ」内の「job.stopped」にチェックを入れ、保存します。

# ５．Postmanなどによる事前確認
　詳細は割愛しますが、以下画像のようにPOSTメソッドによりBodyにJSONデータを定義してテストを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301393/03d7397d-3861-0636-ee48-f5d8bd70cb11.png)

# ６．さいごに
　今回はWebhookの通知をTeamsに投稿する方法として、クラウドフローによる方法を紹介しました。皆様の運用が少しでも便利になればと思っています。
　PowerAutomateに必要なライセンスに関してはご利用環境に応じて確認してください。
　本記事はあくまでも個人の見解を述べているものとなりますので、参考情報として頂ければと存じます。