【UiPath】Teams に画像付きメッセージを送る その２ - Incoming Webhook で投稿編

# はじめに
前回の記事では、Teams チャネルにメールを送ることで画像付きメッセージを投稿する方法を説明しました。今回は、Incoming Webhook とアダプティブカード形式のメッセージの組み合わせで実現する方法を説明します。

https://qiita.com/MasahiroHarada1105/items/bc87dabc7e09b19c6442

この記事は、[UiPath (produced with UiPath Friends) Advent Calendar 2023](https://qiita.com/advent-calendar/2023/uipath) の 12日目です。

https://qiita.com/advent-calendar/2023/uipath

# Teams の Incoming Webhook とは？
* 外部のアプリケーションやサービスから Teams チャネルにメッセージを投稿するための仕組みです。
* Incoming Webhook を使用すると、外部から Teams チャネルに対して自動化された通知や情報を送信できます。

https://learn.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/what-are-webhooks-and-connectors

# Teams のアダプティブカードとは？
* 異なるプラットフォームやアプリケーションで一貫して表示される対話的でカスタマイズ可能なメッセージフォーマットです。
* アダプティブ カードは、Teams内でのコミュニケーションや作業フローの一環として使用されます。

https://learn.microsoft.com/ja-jp/power-automate/overview-adaptive-cards

# Incoming Webhook 経由でアダプティブカード形式のメッセージを送信する
* UiPath.WebAPI.Activities アクティビティパックに含まれる `HTTP 要求` アクティビティを使って Incoming Webhook にメッセージを送信します。
* `パッケージを管理` から UiPath.WebAPI.Activities をプロジェクトに追加してください。

## Incoming Webhook を登録する
* チャネルの上でマウスの右ボタンをクリックしてコンテキストメニューを表示します。メニューから`チャネルを管理`を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/b268f59a-7e7e-0ad5-54c8-154671e2389e.png" width="50%" />

* コネクタの `編集` ボタンをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/dbaf5ea1-4481-b946-1c32-28b6336e39b2.png" width="80%" />

* `Incoming Webhook` の `追加` ボタンをクリックします。表示されるコネクタの数が多くて見つけられない場合は、検索ボックスに `Incoming` と入力すると候補が絞られます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/892ae3f4-220b-4da5-72d8-ff77b5ae2359.png" width="80%" />

* もう一度 `追加` ボタンをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/08b7e6a8-89c9-278a-e2c3-6750acd8b6bc.png" width="70%" />

* Incoming Webhook の名前を入力してください。必要に応じてイメージを差し替えることも出来ます。
* 入力が完了したら `作成` ボタンをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/2622046f-c387-a3d3-e493-1a75f69c8963.png" width="80%" />

* 後ほど使うので URL をメモ帳等に控えておいてください。
* `完了` ボタンをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/5135bc08-d309-057f-b4dd-03b8d1e16d36.png" width="80%" />

以上で Incoming Webhook の登録は完了です。

## アダプティブカード形式のテキストファイルの準備
* 下記内容のテキストファイルを``body.json``としてプロジェクトファイル内に保存します。
```json:body.json
{
    "type": "message",
    "attachments": [
        {
            "content": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "body": [
                    {
                        "text": "画像見えてますか？",
                        "type": "TextBlock",
                        "wrap": true
                    },
                    {
                        "type": "Image",
                        "url": "data:image/jpeg;base64,{{IMAGE}}"
                    }
                ],
                "type": "AdaptiveCard",
                "version": "1.6"
            },
            "contentType": "application/vnd.microsoft.card.adaptive"
        }
    ]
}
```

## メッセージを送る
* 完成したワークフローはこちらになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/4a11dda2-64be-7055-6fef-39f1e2573abd.png)

1. ``画像を読み込み``アクティビティ
    * メッセージに添付したい画像ファイルを読み込みます
    * Image 型の変数 ``画像ファイル``に出力結果を保持します
1. ``テキスト ファイルを読み込み``アクティビティ
    * ``body.json`` ファイルを読み込みます
    * String 型の変数 ``アダプティブカード``に出力結果を保持します
1. ``代入``アクティビティ
    * ``body.json``に 1 で読み込んだ画像ファイルを Base64 形式で設定します
    ```
    アダプティブカード.Replace("{{IMAGE}}", 画像ファイル.Base64)
    ```
1. ``HTTP 要求``アクティビティ
    * 以下の設定をします
        * 要求 URL : Incoming Webhook の URL
        * 要求メソッド : POST
        * 本文 : ``アダプティブカード``変数
        * 本文形式 : application/json

* ワークフロー実行すると、Teams に画像付きのメッセージが投稿されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322296/356ddcbc-5fc0-421a-55f9-7cfebf0478ea.png)

# おわりに
* メールでのメッセージ投稿と同様に画像付きでメッセージを投稿することができました。
* 本記事では触れていませんが、Incoming Webhook + アダプティブカードを組み合わせると、メンション付きのメッセージも投稿できたりしますので色々お試しください。