MENU

【覚書】アダプティブカード

PowerAutomateで自由にデザインして投稿し、ユーザーのアクションも取れるアダプティブカード。
デザイナーがあるから簡単だよ、と人には言われますけど全然簡単じゃありませんよ(笑)

ちょびちょび勉強していますが追いつきません。

使えそうなアダプティブカードのひな型を備忘録で置いておきます。

アダプティブ カードを投稿して応答を待機する
{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "text": "承認のご確認",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "text": "以下の内容について、承認可否を選択し、必要に応じてコメントを入力してください。",
      "wrap": true
    },
    {
      "type": "Input.Text",
      "id": "comments",
      "label": "コメント(任意)",
      "isMultiline": true,
      "placeholder": "理由や補足があれば入力してください。"
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "承認する",
      "data": {
        "submitAction": "ApprovalResponse",
        "approvalResult": "Approve"
      },
      "style": "positive"
    },
    {
      "type": "Action.Submit",
      "title": "承認しない",
      "data": {
        "submitAction": "ApprovalResponse",
        "approvalResult": "Reject"
      },
      "style": "destructive"
    }
  ]
}

一覧表

FactSet を使うと一覧表のように表示可能です
タイトルと値を横に並べて、あとは行数に応じて縦並べ。

    {
      "type": "FactSet",
      "facts": [
        {"title":"依頼内容","value": "{依頼内容}"},
        {"title":"依頼者","value": "{依頼者}"},
        {"title":"コード","value": "{コード}"}
      ]
    },

増減させる場合は } の後の , の増減を忘れずに!(一番最後の } には , は不要)

なお、value部分はマークダウンが利用可能なので、以下のようにすることも。

{
  "title": "詳細",
  "value": "**重要**: [リンクはこちら](https://example.com)"
}

結果取得

「作成」アクションに以下の式を入れると動的コンテンツになり、「承認する」「承認しない」のどちらを押下したのか結果を取得できます。

@{outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/approvalResult']}

アダプティブカードの body の中の data にある approvalResult を拾ってきて、という意味ですね。

承認する:Approve
承認しない:Reject

条件分岐する場合

「アダプティブカードを投稿して応答を待機する」の直後に条件分岐を入れて扱いたい場合は以下の通り。

  • 承認された場合をtrueにしたい場合

左側

outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/approvalResult']

中央

等しい

右側

Approve

※解説:承認する、のapprovalResultに入っている値が Approve だから
 逆に「承認しない」をtrueにする場合は値を Reject と設定しているので、こちらを使う

コメントを取得する場合

下記を「作成」とかに入れて、動的コンテンツとして扱う

@{outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/comments']}

同じアクション内にある「メッセージの更新」は、応答結果を表示させるときのカスタマイズではなく、単純なテキスト表示のみ。同一アクション内の動的コンテンツは取得できません。

しかも横幅が見切れる可能性が高いため、長いメッセージを書くこともできません。

結果表示が欲しいのであれば、次以降のアクションで実施しましょう。
チャネル内のメッセージで応答する、が一番使い勝手が良いかも。

承認/否認②

Teams投稿時の見え方は以下の通り

[承認依頼]  (太字・大きめ)
以下の内容について承認/却下を選び、コメントを記入してください。

案件名: ○○プロジェクト備品購入
申請者: 山田太郎
金額  : 180,000円
期限  : 2026-03-05

補足資料
ノートPC×3台。在庫逼迫のため至急。

[コメント(必須) __________________________]

[承認]   [却下]

コピペ用のコードは以下

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "msteams": { "width": "Full" },
  "body": [
    {
      "type": "TextBlock",
      "text": "承認依頼",
      "wrap": true,
      "size": "Large",
      "weight": "Bolder"
    },
    {
      "type": "TextBlock",
      "text": "以下の内容について承認/却下を選び、コメントを記入してください。",
      "wrap": true,
      "spacing": "None"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "案件名", "value": "${案件名}" },
        { "title": "申請者", "value": "${申請者}" },
        { "title": "金額", "value": "${金額}" },
        { "title": "期限", "value": "${期限}" }
      ]
    },
    {
      "type": "TextBlock",
      "text": "補足資料",
      "wrap": true,
      "weight": "Bolder",
      "spacing": "Medium"
    },
    {
      "type": "TextBlock",
      "text": "${説明}",
      "wrap": true
    },
    {
      "type": "Input.Text",
      "id": "comment",
      "label": "コメント(必須)",
      "isMultiline": true,
      "placeholder": "理由や注意点を記入してください",
      "maxLength": 2000
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "承認",
      "data": { "action": "approve" }
    },
    {
      "type": "Action.Submit",
      "title": "却下",
      "style": "destructive",
      "data": { "action": "reject" }
    }
  ]
}

日程の確認

Teams投稿での見え方は以下の通り

[日程確認のお願い]
候補日時を入力し、参加可否を選択してください。

件名         : クラウド移行キックオフ
場所/会議URL : https://teams.microsoft.com/l/meetup-join/...
所要時間     : 60分

日付(必須): [ 2026-03-04 ▼ ]
開始時刻     : [ 10:00 ▼ ]

参加可否(必須)
 (•) 参加
 ( ) 別候補希望
 ( ) 不参加

備考(任意)
[_______________________________]

[回答を送信]

コピペ用は以下

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "msteams": { "width": "Full" },
  "body": [
    {
      "type": "TextBlock",
      "text": "日程確認のお願い",
      "size": "Large",
      "weight": "Bolder",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "text": "候補日時を入力し、参加可否を選択してください。",
      "wrap": true,
      "spacing": "None"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "件名", "value": "${件名}" },
        { "title": "場所/会議URL", "value": "${場所またはURL}" },
        { "title": "所要時間", "value": "${所要時間}" }
      ]
    },
    {
      "type": "Input.Date",
      "id": "date",
      "label": "日付(必須)"
    },
    {
      "type": "Input.Time",
      "id": "time",
      "label": "開始時刻(必須)"
    },
    {
      "type": "Input.ChoiceSet",
      "id": "attendance",
      "label": "参加可否(必須)",
      "style": "expanded",
      "isMultiSelect": false,
      "choices": [
        { "title": "参加", "value": "yes" },
        { "title": "別候補希望", "value": "alt" },
        { "title": "不参加", "value": "no" }
      ]
    },
    {
      "type": "Input.Text",
      "id": "note",
      "label": "備考(任意)",
      "isMultiline": true,
      "placeholder": "別候補を希望の場合は都合の良い時間帯を記入"
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "回答を送信",
      "data": { "action": "schedule_response" }
    }
  ]
}
通知

Teamsでの見え方

[【重要】本日の締切リマインド]  (赤系背景のコンテナ)
本日17:00までに月次報告の提出をお願いします。

対象      : 全営業部
提出形式  : SharePointのテンプレート
担当      : 営業企画グループ

詳細手順・テンプレートはこちら:
提出手順とテンプレートを開く(リンク)

[提出ポータルを開く]   [提出済みとマーク]

コピペ用は以下

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "msteams": { "width": "Full" },
  "body": [
    {
      "type": "Container",
      "style": "attention",
      "items": [
        {
          "type": "TextBlock",
          "text": "【重要】本日の締切リマインド",
          "weight": "Bolder",
          "size": "Large",
          "wrap": true
        },
        {
          "type": "TextBlock",
          "text": "本日17:00までに月次報告の提出をお願いします。",
          "wrap": true,
          "spacing": "Small"
        },
        {
          "type": "FactSet",
          "facts": [
            { "title": "対象", "value": "全営業部" },
            { "title": "提出形式", "value": "SharePointのテンプレート" },
            { "title": "担当", "value": "営業企画グループ" }
          ]
        },
        {
          "type": "TextBlock",
          "text": "詳細手順・テンプレートはこちら:",
          "wrap": true,
          "spacing": "Small"
        },
        {
          "type": "TextBlock",
          "text": "[提出手順とテンプレートを開く](${リンクURL})",
          "wrap": true,
          "color": "Accent"
        }
      ]
    }
  ],
  "actions": [
    {
      "type": "Action.OpenUrl",
      "title": "提出ポータルを開く",
      "url": "${リンクURL}"
    },
    {
      "type": "Action.Submit",
      "title": "提出済みとマーク",
      "data": { "action": "mark_submitted" }
    }
  ]
}

広告

目次