Miro更新botを作ってみた

# はじめに
社内活動でMiroを使用しており、隔週で特定の場所のお天気マークを更新しているので、更新忘れ防止とスマホからでも簡単に更新できたらいいなと思いbotを作ってみることにしました。

# bot概要
PowerAutomateからスケジュール実行でTeamsに[アダプティブカード](https://learn.microsoft.com/ja-jp/power-automate/overview-adaptive-cards)を投稿し、選択したお天気マークをMiroに付箋で貼り付けるbotを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/b3dd36d4-8472-8491-fde9-ab510b959bad.png)

# アダプティブカード作成
[アダプティブカードデザイナー](https://adaptivecards.io/designer/)でお天気マークがボタンになっているカードを作成します。
作成できたら[Copy Card Payload]をクリックしてJSONをコピーしておきます。
（詳しい手順は[こちら](https://www.teijitaisya.com/adaptivecard-mention/)がとてもわかりやすかったので割愛します）

- 作成したカード
    - 右上のTargetVersionは1.5だとTeams非対応なので1.4以下に変更
    - １つ目のTextBlockのtextはあとでメンションを編集するためブランクのまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/28bb5984-1cda-ac74-147c-17f3cfd2ed18.png)

- JSON
```json-doc
{
    "type": "AdaptiveCard",
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.4",
    "body": [
        {
            "type": "TextBlock",
            "text": "",
            "wrap": true
        },
        {
            "type": "TextBlock",
            "text": "お天気マーク更新してください",
            "wrap": true
        },
        {
            "type": "ColumnSet",
            "columns": [
                {
                    "type": "Column",
                    "width": "stretch",
                    "items": [
                        {
                            "type": "ActionSet",
                            "actions": [
                                {
                                    "type": "Action.Submit",
                                    "title": "🌤",
                                    "id": "🌤"
                                }
                            ]
                        }
                    ]
                },
                {
                    "type": "Column",
                    "width": "stretch",
                    "items": [
                        {
                            "type": "ActionSet",
                            "actions": [
                                {
                                    "type": "Action.Submit",
                                    "title": "🌥",
                                    "id": "🌥"
                                }
                            ]
                        }
                    ]
                },
                {
                    "type": "Column",
                    "width": "stretch",
                    "items": [
                        {
                            "type": "ActionSet",
                            "actions": [
                                {
                                    "type": "Action.Submit",
                                    "title": "🌧",
                                    "id": "🌧"
                                }
                            ]
                        }
                    ]
                },
                {
                    "type": "Column",
                    "width": "stretch",
                    "items": [
                        {
                            "type": "ActionSet",
                            "actions": [
                                {
                                    "type": "Action.Submit",
                                    "title": "⛈",
                                    "id": "⛈"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}
```

# MiroAPIのAccessToken発行
下記手順でAccessTokenを発行し、発行したAccessTokenを退避しておきます。

1. [Miro Developer Platform](https://developers.miro.com/)にアクセスし、[Start Building now →]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/dd8d4b88-cd92-fb54-29f6-ca25fb5bd1d8.png)

2. チェックを入れて[Create a team]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/c78e0321-941a-1e21-9942-df85b364a1cf.png)

3. [＋]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/23ed4896-cecd-3b0d-22be-334033405387.png)

4. 適当なアプリ名を入力し[アプリを作成する]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/5eed7289-4adb-3d4a-a79b-e3f76dec2277.png)

5. boards:read、boards:writeにチェックがついていることを確認し、[アプリをインストールしてOAuthトークンを取得する]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/6d8d5070-e434-95b6-819e-b66cff25d7dc.png)

6. Dev teamを選択し、[Add]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/0e37a4cf-468d-9a37-ddd3-230014719faa.png)

7. AccessTokenが取得できた
![スクリーンショット 2023-07-10 22.03.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/a446af21-113b-db1f-0aa3-703e02308243.png)

# MiroAPIリクエスト作成
絵文字を作成するAPIはないようなので、付箋にお天気マークを書いて投稿することにしました。
[付箋作成のAPIリファレンス](https://developers.miro.com/reference/create-sticky-note-item)でリクエストを作成します。
下記入力できたら[Try It!]をクリックするとリクエストが発行されるので、更新先のMiroボードにいい感じに付箋が作成されたら、リクエストを退避しておきます。

- Bearer：取得したAccessToken
- board_id：更新先のMiroボードID（`https://miro.com/app/board/[ここがboard_id]/`）
- BODY PARAMS：指定したいところを入力（positionはparent指定しない場合は絶対位置を指定）

![スクリーンショット 2023-07-11 0.40.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/396592e9-c643-6511-48be-a0a6a3755946.png)

# PowerAutomate作成
下記手順でPowerAutomateを作成します。

1. 作成からスケジュール済みクラウドフローをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/fdad1bb8-92f7-9094-e333-c3060bd8d53f.png)

2. フロー名、開始日時、繰り返し間隔、設定曜日を指定して[作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/5af12d36-ed22-9174-b882-26e8afc6d7b4.png)

3. タイムゾーン、設定時刻を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/fbbf98aa-89fa-90c1-21f9-58c3b1d5b5d3.png)

4. `ユーザーの@mentionトークンを取得する`ステップを追加し、ユーザーにメンションしたい人のメールアドレスを入力
![スクリーンショット 2023-07-11 9.58.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/a8d2e2f6-ee2d-77f9-9e1a-3115587b3e84.png)

5. `アダプティブ カードを投稿して応答を待機する`ステップを追加し、下記を入力
    - 投稿者：フローボットを選択
    - 投稿先：Channelを選択
    - メッセージ：アダプティブカード作成でコピーしたJSONを貼り付け、一つ目のTextBlockのtextに動的なコンテンツの追加から`@mention`を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/999d57f1-2192-3415-36b4-6fe3dba4cac3.png)

6. 更新メッセージにアダプティブカードのお天気マークボタンクリック後のメッセージを入力し、Team、Channelは投稿先を指定
![スクリーンショット 2023-07-11 10.39.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/ff24eb37-c4b3-32ed-a821-75d27d79e10b.png)

7. `HTTP`ステップを追加し、下記を入力
    - 方法：POST
    - URI、ヘッダー：退避しておいたMiroAPIリクエストから入力
    - 本文：退避しておいたMiroAPIリクエストから入力し、contentにはアダプティブカードで選択したお天気マークを入れるため、動的なコンテンツの追加から式で`outputs('アダプティブ_カードを投稿して応答を待機する')?['body/submitActionId']`を追加
    - 認証：未加工
    - 値：退避しておいたMiroAPIリクエストから入力
![スクリーンショット 2023-07-11 10.43.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/ac73861c-0647-76d8-6e73-7ea6a499f4c4.png)

# PowerAutomateテスト実行
下記手順でテスト実行します。

1. 保存し、右上の[テスト]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/9e8657d6-9cbd-f6ca-7684-346e1efc0f02.png)

2. 手動を選択し[テスト]をクリック
![スクリーンショット 2023-07-10 22.48.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/797cf62c-eb12-f4c8-7f45-4ca9dfea6c99.png)

3. [フローの実行]をクリック
![スクリーンショット 2023-07-10 22.50.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/f0fe049c-70c5-9e4c-17e8-8ad68b88a374.png)

4. Teamsにアダプティブカードが投稿されたら、任意のお天気マークをクリック
![スクリーンショット 2023-07-10 22.50.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/a832b58a-55ab-9c38-4837-2871330116ff.png)

5. アダプティブカードが「Miroを更新しました！」に変わる
![スクリーンショット 2023-07-11 11.02.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/f47ee2a7-0ec1-1538-593d-fb1c21b88180.png)

6. Miroにアダプティブカードで選択したお天気マークの付箋が作成される！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3073867/01b78fb0-5044-47ef-90d0-a4b3cd1fa1a6.png)

# さいごに
Miroは使っているけどMiroAPIは知らなかったという方もいると思うので、ぜひ参考にして頂けたらと思います！

# 参考
- [Microsoft Teams 向けアダプティブ カードの概要](https://learn.microsoft.com/ja-jp/power-automate/overview-adaptive-cards)
- [【Power Automate】アダプティブカードでメンションする方法！！！](https://www.teijitaisya.com/adaptivecard-mention/)
- [アダプティブカードデザイナー](https://adaptivecards.io/designer/)
- [Miro API入門](https://qiita.com/Horie1024/items/e2d541dd5f58655337c5)
- [MiroAPIreference（付箋作成）](https://developers.miro.com/reference/create-sticky-note-item)
- [Power Automate から Teams に投稿したアダプティブカードを更新する](https://qiita.com/MiyakeMito/items/9a50a38ddba37e8b4f65)