PullNotifier Logo

PullNotifier

Free Templates

Microsoft Teams adaptive card templates for GitHub events

12 ready-to-copy Microsoft Teams adaptive card JSON templates for the most common GitHub events. Use them with Power Automate Workflows, GitHub Actions, or any webhook tool. Or skip the JSON entirely with PullNotifier.

Targeting: microsoft teams adaptive card template · Last updated 2026-05-02

Contents

GitHub PR opened adaptive cardPR review request Microsoft Teams cardPR approved adaptive card TeamsPR changes requested Microsoft TeamsPR merged Microsoft Teams adaptive cardPR closed adaptive cardGitHub Actions failed Microsoft Teams cardCI passed Microsoft Teams adaptive cardDeployment notification Microsoft TeamsRollback notification Microsoft TeamsGitHub issue alert Microsoft TeamsSecurity alert Microsoft Teams card

Skip the manual setup

PullNotifier installs from Microsoft AppSource in 5 minutes — no YAML, no Power Automate flows.

The 12 templates

Click Copy JSON on any template to paste it into your Power Automate flow, GitHub Actions workflow, or webhook handler. Each template ships with a small visual preview so you know what it looks like in Microsoft Teams before you wire it up.

Each card below uses Adaptive Card schema v1.5 — the format Microsoft Teams renders natively in channels, chats, and the Workflows app. Replace the {{...}} placeholders with your live GitHub event payload (e.g. {{pull_request.html_url}}) before posting.

GitHub PR opened adaptive card

Notify a Microsoft Teams channel the moment a new pull request is opened. Includes author avatar, repo metadata, and quick-jump action buttons.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Accent",
      "text": "Pull request opened"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "{{user.avatar_url}}",
              "size": "Small",
              "style": "Person"
            }
          ]
        },
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            { "type": "TextBlock", "weight": "Bolder", "text": "{{user.login}}" },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · #{{number}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "weight": "Bolder",
      "text": "{{title}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "color": "Good",
      "text": "OPEN",
      "size": "Small"
    },
    {
      "type": "TextBlock",
      "text": "{{body}}",
      "wrap": true,
      "maxLines": 4
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "View PR", "url": "{{html_url}}" },
    { "type": "Action.OpenUrl", "title": "Files changed", "url": "{{html_url}}/files" }
  ]
}

Preview in Teams

Pull request opened

OPEN

octocat · acme/api · #482

Add retry logic to webhook delivery worker

View PRFiles changed

When to use

  • Default channel announcement when any PR is opened in a watched repo
  • Pair with Power Automate "When a pull request is opened" GitHub trigger
  • Drop into a custom GitHub Actions workflow that posts to a Teams webhook

PR review request Microsoft Teams card

Sent when a draft PR transitions to "ready for review" or when reviewers are explicitly requested. Includes an @-mention example for the requested reviewer.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Accent",
      "text": "Review requested"
    },
    {
      "type": "TextBlock",
      "text": "<at>{{requested_reviewer.login}}</at>, please review this PR.",
      "wrap": true
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "{{user.avatar_url}}",
              "size": "Small",
              "style": "Person"
            }
          ]
        },
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            { "type": "TextBlock", "weight": "Bolder", "text": "{{user.login}}" },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · #{{number}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "weight": "Bolder",
      "text": "{{title}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "color": "Warning",
      "text": "READY FOR REVIEW",
      "size": "Small"
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "Review PR", "url": "{{html_url}}/files" },
    { "type": "Action.OpenUrl", "title": "Open conversation", "url": "{{html_url}}" }
  ],
  "msteams": {
    "entities": [
      {
        "type": "mention",
        "text": "<at>{{requested_reviewer.login}}</at>",
        "mentioned": {
          "id": "{{requested_reviewer.teams_id}}",
          "name": "{{requested_reviewer.display_name}}"
        }
      }
    ]
  }
}

Preview in Teams

Review requested

READY FOR REVIEW

alice · acme/api · #482

@bob, please review: Add retry logic to webhook delivery worker

Review PROpen conversation

When to use

  • Ping a specific reviewer the moment they are requested
  • Use msteams.entities to resolve GitHub login to Microsoft Teams ID
  • Pair with the GitHub "review_requested" event in Power Automate

PR approved adaptive card Teams

Celebrate a successful code review. Sent when a reviewer approves a pull request. Pairs nicely with the merge-ready signal.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Good",
      "text": "PR approved"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "{{review.user.avatar_url}}",
              "size": "Small",
              "style": "Person"
            }
          ]
        },
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{review.user.login}} approved"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · #{{number}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "weight": "Bolder",
      "text": "{{pull_request.title}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "color": "Good",
      "text": "APPROVED ✓",
      "size": "Small"
    },
    {
      "type": "TextBlock",
      "text": "{{review.body}}",
      "wrap": true,
      "maxLines": 4
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "View review", "url": "{{review.html_url}}" },
    { "type": "Action.OpenUrl", "title": "Merge PR", "url": "{{pull_request.html_url}}" }
  ]
}

Preview in Teams

PR approved

APPROVED

bob approved · acme/api · #482

LGTM. Nice cleanup of the retry helper.

View reviewMerge PR

When to use

  • Notify the PR author the moment their work is approved
  • Trigger downstream automation (auto-merge bots) once approval count crosses threshold
  • Public visibility into review velocity for engineering managers

PR changes requested Microsoft Teams

Inform the PR author that a reviewer requested changes. Includes the reviewer comment so the author can act without context-switching.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Attention",
      "text": "Changes requested"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "{{review.user.avatar_url}}",
              "size": "Small",
              "style": "Person"
            }
          ]
        },
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{review.user.login}} requested changes"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · #{{number}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "weight": "Bolder",
      "text": "{{pull_request.title}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "color": "Attention",
      "text": "CHANGES REQUESTED",
      "size": "Small"
    },
    {
      "type": "TextBlock",
      "text": "{{review.body}}",
      "wrap": true,
      "maxLines": 6
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "Read review", "url": "{{review.html_url}}" },
    { "type": "Action.OpenUrl", "title": "Open files", "url": "{{pull_request.html_url}}/files" }
  ]
}

Preview in Teams

Changes requested

CHANGES REQUESTED

bob requested changes · acme/api · #482

Could you add a unit test for the retry backoff cap?

Read reviewOpen files

When to use

  • Reduce review-cycle latency by alerting authors instantly
  • Combine with personal notifications for the PR author only
  • Display the inline review comment in the card body

PR merged Microsoft Teams adaptive card

Announce a successful merge to the channel. Includes the merge commit SHA, author, and a quick link to the deployment dashboard.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Good",
      "text": "Pull request merged"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "{{merged_by.avatar_url}}",
              "size": "Small",
              "style": "Person"
            }
          ]
        },
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{merged_by.login}} merged into {{base.ref}}"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · #{{number}} · {{merge_commit_sha}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "weight": "Bolder",
      "text": "{{title}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "color": "Good",
      "text": "MERGED",
      "size": "Small"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "Commits", "value": "{{commits}}" },
        { "title": "Files changed", "value": "{{changed_files}}" },
        { "title": "+/-", "value": "+{{additions}} / -{{deletions}}" }
      ]
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "View merge", "url": "{{html_url}}" },
    { "type": "Action.OpenUrl", "title": "Deploy status", "url": "https://deploys.example.com/{{merge_commit_sha}}" }
  ]
}

Preview in Teams

Pull request merged

MERGED

alice merged into main · acme/api · #482

Add retry logic to webhook delivery worker · +124/-32

View mergeDeploy status

When to use

  • Channel-wide visibility on what just shipped to main
  • Connect to your deploy pipeline for inline tracking
  • Audit trail of merges for engineering retrospectives

PR closed adaptive card

Notify the channel when a pull request is closed without being merged. Useful for detecting abandoned work or scope changes.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Attention",
      "text": "Pull request closed (not merged)"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "{{sender.avatar_url}}",
              "size": "Small",
              "style": "Person"
            }
          ]
        },
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            { "type": "TextBlock", "weight": "Bolder", "text": "{{sender.login}} closed" },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · #{{number}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "weight": "Bolder",
      "text": "{{title}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "color": "Attention",
      "text": "CLOSED",
      "size": "Small"
    },
    {
      "type": "TextBlock",
      "text": "Closed without merge after {{days_open}} days. Reason: {{close_reason}}",
      "wrap": true,
      "isSubtle": true
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "View PR", "url": "{{html_url}}" },
    { "type": "Action.OpenUrl", "title": "Reopen", "url": "{{html_url}}" }
  ]
}

Preview in Teams

Pull request closed (not merged)

CLOSED

alice closed · acme/api · #482

Closed without merge after 14 days. Replaced by #491.

View PRReopen

When to use

  • Track abandoned PRs that need cleanup or follow-up
  • Surface scope-change conversations to the team lead
  • Record close reasons in your engineering analytics tool

GitHub Actions failed Microsoft Teams card

Alert the channel when a GitHub Actions workflow fails. Includes the failed job, branch, commit, and a re-run shortcut.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Attention",
      "text": "❌ Workflow failed"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{workflow.name}}"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · {{head_branch}} · {{head_sha_short}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "color": "Attention",
      "text": "FAILED",
      "size": "Small"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "Triggered by", "value": "{{actor.login}}" },
        { "title": "Failed job", "value": "{{failed_job_name}}" },
        { "title": "Duration", "value": "{{duration}}" }
      ]
    },
    {
      "type": "TextBlock",
      "text": "First failing step: {{failed_step_name}}",
      "wrap": true,
      "isSubtle": true
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "View logs", "url": "{{html_url}}" },
    { "type": "Action.OpenUrl", "title": "Re-run failed jobs", "url": "{{html_url}}/rerun" },
    { "type": "Action.OpenUrl", "title": "View commit", "url": "{{commit_url}}" }
  ]
}

Preview in Teams

Workflow failed

FAILED

CI · acme/api · main · a1b2c3d

First failing step: Run integration tests · 3m 42s

View logsRe-run failed jobsView commit

When to use

  • Catch broken main-branch builds before they block the team
  • Page on-call when overnight workflows fail
  • Connect with the workflow_run.failure GitHub event

CI passed Microsoft Teams adaptive card

Quick confirmation that a workflow succeeded. Useful for release branches, nightly runs, and main-branch protection signalling.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Good",
      "text": "✅ Workflow succeeded"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{workflow.name}}"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · {{head_branch}} · {{head_sha_short}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "color": "Good",
      "text": "PASSED",
      "size": "Small"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "Triggered by", "value": "{{actor.login}}" },
        { "title": "Jobs", "value": "{{jobs_count}} passed" },
        { "title": "Duration", "value": "{{duration}}" }
      ]
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "View run", "url": "{{html_url}}" },
    { "type": "Action.OpenUrl", "title": "View commit", "url": "{{commit_url}}" }
  ]
}

Preview in Teams

Workflow succeeded

PASSED

CI · acme/api · main · a1b2c3d

12 jobs passed in 4m 18s

View runView commit

When to use

  • Confirm green main after a known-flaky test was fixed
  • Acknowledge release-branch builds before publishing
  • Pair with workflow_run.success or check_suite.completed events

Deployment notification Microsoft Teams

Confirm a successful deployment to a target environment. Includes environment, commit, and a link to the live URL or deployment dashboard.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Good",
      "text": "🚀 Deployment succeeded"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{deployment.environment}}"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · {{deployment.ref}} · {{deployment.sha_short}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "color": "Good",
      "text": "DEPLOYED",
      "size": "Small"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "Deployed by", "value": "{{deployment.creator.login}}" },
        { "title": "Version", "value": "{{deployment.payload.version}}" },
        { "title": "Duration", "value": "{{duration}}" }
      ]
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "Open environment", "url": "{{deployment_status.environment_url}}" },
    { "type": "Action.OpenUrl", "title": "Deployment logs", "url": "{{deployment_status.log_url}}" },
    { "type": "Action.OpenUrl", "title": "View release", "url": "{{release_url}}" }
  ]
}

Preview in Teams

Deployment succeeded

DEPLOYED

production · acme/api · v2.14.0

Deployed by alice in 2m 47s

Open environmentDeployment logsView release

When to use

  • Announce production releases to the engineering org
  • Track staging deploys ahead of QA hand-off
  • Pair with deployment_status.success GitHub events

Rollback notification Microsoft Teams

Critical alert sent when a deployment fails or auto-rollback is triggered. Highlights the failure reason and bridges straight into incident response.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Large",
      "weight": "Bolder",
      "color": "Attention",
      "text": "🛑 Deployment failed — rollback initiated"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{deployment.environment}}"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · {{deployment.ref}} · {{deployment.sha_short}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "color": "Attention",
      "text": "ROLLED BACK",
      "size": "Small"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "Triggered by", "value": "{{deployment.creator.login}}" },
        { "title": "Failure stage", "value": "{{deployment_status.state}}" },
        { "title": "Reverted to", "value": "{{previous_release.tag_name}}" }
      ]
    },
    {
      "type": "TextBlock",
      "text": "{{deployment_status.description}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "text": "<at>{{oncall.login}}</at> please investigate.",
      "wrap": true
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "Open incident channel", "url": "{{incident_url}}" },
    { "type": "Action.OpenUrl", "title": "Deployment logs", "url": "{{deployment_status.log_url}}" },
    { "type": "Action.OpenUrl", "title": "Runbook", "url": "{{runbook_url}}" }
  ],
  "msteams": {
    "entities": [
      {
        "type": "mention",
        "text": "<at>{{oncall.login}}</at>",
        "mentioned": {
          "id": "{{oncall.teams_id}}",
          "name": "{{oncall.display_name}}"
        }
      }
    ]
  }
}

Preview in Teams

Deployment failed — rollback initiated

ROLLED BACK

production · acme/api · v2.14.1

Health check failed after 90s. Reverted to v2.14.0. @oncall please investigate.

Open incident channelDeployment logsRunbook

When to use

  • Page on-call when production rollback fires
  • Trigger an incident channel auto-creation flow
  • Pair with deployment_status.failure or deployment_status.error events

GitHub issue alert Microsoft Teams

Surface high-priority issues the moment they are opened. Filter on the priority:high label to keep noise down.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Attention",
      "text": "🚨 High-priority issue opened"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "auto",
          "items": [
            {
              "type": "Image",
              "url": "{{user.avatar_url}}",
              "size": "Small",
              "style": "Person"
            }
          ]
        },
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            { "type": "TextBlock", "weight": "Bolder", "text": "{{user.login}}" },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · #{{number}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "weight": "Bolder",
      "text": "{{title}}",
      "wrap": true
    },
    {
      "type": "TextBlock",
      "color": "Attention",
      "text": "PRIORITY: HIGH",
      "size": "Small"
    },
    {
      "type": "TextBlock",
      "text": "{{body}}",
      "wrap": true,
      "maxLines": 5
    },
    {
      "type": "TextBlock",
      "text": "Labels: {{labels}}",
      "wrap": true,
      "isSubtle": true
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "Triage issue", "url": "{{html_url}}" },
    { "type": "Action.OpenUrl", "title": "Assign to me", "url": "{{html_url}}" }
  ]
}

Preview in Teams

High-priority issue opened

PRIORITY: HIGH

jenny · acme/api · #1421

Checkout flow returns 500 for ~2% of mobile users on iOS 18.

Triage issueAssign to me

When to use

  • Triage critical customer-reported bugs in a #support-escalation channel
  • Page the on-call engineer for SEV-2 severity issues
  • Pair with issues.opened or issues.labeled GitHub events filtered on label

Security alert Microsoft Teams card

Notify the security or engineering channel when Dependabot or GitHub Advanced Security flags a vulnerability. Includes severity, package, and remediation link.

adaptive-card.json

{
  "type": "AdaptiveCard",
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "version": "1.5",
  "body": [
    {
      "type": "TextBlock",
      "size": "Medium",
      "weight": "Bolder",
      "color": "Attention",
      "text": "🔒 Security alert"
    },
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "width": "stretch",
          "items": [
            {
              "type": "TextBlock",
              "weight": "Bolder",
              "text": "{{alert.security_advisory.summary}}"
            },
            {
              "type": "TextBlock",
              "spacing": "None",
              "isSubtle": true,
              "text": "{{repository.full_name}} · {{alert.dependency.package.ecosystem}}/{{alert.dependency.package.name}}"
            }
          ]
        }
      ]
    },
    {
      "type": "TextBlock",
      "color": "Attention",
      "text": "SEVERITY: {{alert.security_vulnerability.severity}}",
      "size": "Small"
    },
    {
      "type": "FactSet",
      "facts": [
        { "title": "CVE", "value": "{{alert.security_advisory.cve_id}}" },
        { "title": "Vulnerable range", "value": "{{alert.security_vulnerability.vulnerable_version_range}}" },
        { "title": "Patched version", "value": "{{alert.security_vulnerability.first_patched_version.identifier}}" },
        { "title": "Manifest", "value": "{{alert.dependency.manifest_path}}" }
      ]
    },
    {
      "type": "TextBlock",
      "text": "{{alert.security_advisory.description}}",
      "wrap": true,
      "maxLines": 4
    },
    {
      "type": "TextBlock",
      "text": "<at>{{security_team.login}}</at> please review and dispatch.",
      "wrap": true
    }
  ],
  "actions": [
    { "type": "Action.OpenUrl", "title": "View advisory", "url": "{{alert.html_url}}" },
    { "type": "Action.OpenUrl", "title": "Open Dependabot PR", "url": "{{auto_dependabot_pr_url}}" },
    { "type": "Action.OpenUrl", "title": "Dismiss", "url": "{{alert.html_url}}" }
  ],
  "msteams": {
    "entities": [
      {
        "type": "mention",
        "text": "<at>{{security_team.login}}</at>",
        "mentioned": {
          "id": "{{security_team.teams_id}}",
          "name": "{{security_team.display_name}}"
        }
      }
    ]
  }
}

Preview in Teams

Security alert

SEVERITY: CRITICAL

acme/api · npm/lodash

CVE-2025-19999 — Prototype pollution in lodash <4.17.22. Patched in 4.17.22.

View advisoryOpen Dependabot PRDismiss

When to use

  • Route critical CVEs to your #security channel
  • Pair with the dependabot_alert.created or secret_scanning_alert.created events
  • Drive SLA timers from the moment the alert fires

How to use these templates

These templates are payload-ready Adaptive Card v1.5 JSON. There are three common ways to ship them:

  • Power Automate Workflows. Use the Workflows app in Microsoft Teams. Trigger on a GitHub event (or a generic HTTP request), then add the "Post adaptive card in a chat or channel" action. Paste the JSON and bind {{...}} placeholders to the dynamic content.
  • GitHub Actions. POST the JSON to a Microsoft Teams Workflow webhook URL using curl or a community action. The body of the request must wrap the card in an attachments array with contentType: application/vnd.microsoft.card.adaptive.
  • Custom webhook handler. If you already process GitHub webhooks server-side, render the template with your favourite templating library (Mustache, Handlebars, JS template literals) and POST it to the channel webhook URL.

Placeholder reference

Each template uses Mustache-style {{...}} placeholders. They map directly to the GitHub webhook payload. Common ones:

  • {{pull_request.html_url}} — full PR URL on github.com
  • {{repository.full_name}} — owner/repo, e.g. acme/api
  • {{user.login}}, {{user.avatar_url}} — author identity
  • {{workflow.name}}, {{head_sha_short}} — for CI cards
  • {{deployment.environment}} — for deployment cards
  • {{alert.security_advisory.cve_id}} — for Dependabot cards

For the full GitHub webhook payload reference, see GitHub's docs at docs.github.com/en/webhooks/webhook-events-and-payloads.

@-mentions: the gotcha

Microsoft Teams adaptive cards do not support GitHub-style @username mentions out of the box. To trigger a real notification, you need two things:

  • An <at>name</at> tag inside any TextBlock body where the mention should appear.
  • An msteams.entities array on the card root that maps each tag to a Microsoft Teams / Azure AD user ID. The id field must be the Teams ID — not the GitHub login.

That GitHub-login-to-Teams-ID mapping is the painful part. The PR review request, rollback, and security alert templates above show the structure. PullNotifier handles the mapping automatically.

Want to skip the templates entirely?

PullNotifier installs from Microsoft AppSource and sends polished adaptive cards out of the box — with live in-place updates, smart filtering, GitHub-to-Microsoft-Teams user mapping, code review reminders, and per-channel routing rules. No JSON to author, no Power Automate Flow to maintain, no broken{{placeholder}} bugs at 2am.

  1. GitHub PR opened adaptive card

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#pr-opened)

    Notify a Microsoft Teams channel the moment a new pull request is opened. Includes author avatar, repo metadata, and quick-jump action buttons.

  2. PR review request Microsoft Teams card

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#pr-ready-for-review)

    Sent when a draft PR transitions to "ready for review" or when reviewers are explicitly requested. Includes an @-mention example for the requested reviewer.

  3. PR approved adaptive card Teams

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#pr-approved)

    Celebrate a successful code review. Sent when a reviewer approves a pull request. Pairs nicely with the merge-ready signal.

  4. PR changes requested Microsoft Teams

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#pr-changes-requested)

    Inform the PR author that a reviewer requested changes. Includes the reviewer comment so the author can act without context-switching.

  5. PR merged Microsoft Teams adaptive card

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#pr-merged)

    Announce a successful merge to the channel. Includes the merge commit SHA, author, and a quick link to the deployment dashboard.

  6. PR closed adaptive card

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#pr-closed)

    Notify the channel when a pull request is closed without being merged. Useful for detecting abandoned work or scope changes.

  7. GitHub Actions failed Microsoft Teams card

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#ci-workflow-failed)

    Alert the channel when a GitHub Actions workflow fails. Includes the failed job, branch, commit, and a re-run shortcut.

  8. CI passed Microsoft Teams adaptive card

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#ci-workflow-succeeded)

    Quick confirmation that a workflow succeeded. Useful for release branches, nightly runs, and main-branch protection signalling.

  9. Deployment notification Microsoft Teams

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#deployment-succeeded)

    Confirm a successful deployment to a target environment. Includes environment, commit, and a link to the live URL or deployment dashboard.

  10. Rollback notification Microsoft Teams

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#deployment-failed)

    Critical alert sent when a deployment fails or auto-rollback is triggered. Highlights the failure reason and bridges straight into incident response.

  11. GitHub issue alert Microsoft Teams

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#issue-priority-high)

    Surface high-priority issues the moment they are opened. Filter on the priority:high label to keep noise down.

  12. Security alert Microsoft Teams card

    (https://pullnotifier.com/tools/microsoft-teams-adaptive-card-templates#security-alert)

    Notify the security or engineering channel when Dependabot or GitHub Advanced Security flags a vulnerability. Includes severity, package, and remediation link.


Frequently asked

What Adaptive Card version does Microsoft Teams support?

Microsoft Teams renders Adaptive Card schema v1.5 in channels, group chats, and 1:1 chats as of 2026. All templates on this page target v1.5. Older v1.4 elements still work, but v1.5 unlocks new layout primitives such as carousel and refined column behaviour.

Can I use these templates with the retired Office 365 Connectors?

No. Office 365 Connectors used the legacy MessageCard format and were retired by Microsoft on December 31, 2025. These templates use modern Adaptive Card v1.5, which is compatible with Microsoft Teams Workflows (Power Automate), Incoming Webhook 2.0, and the Microsoft Bot Framework. See our Office 365 Connector migration guide for the full deprecation timeline.

How do I add @-mentions to a card?

Add an <at>name</at> tag inside a TextBlock and a matching entry in the msteams.entities array on the card root. The mentioned.id field must be the Microsoft Teams (Azure AD) user ID — not the GitHub login. The PR review request, rollback, and security alert templates on this page show the exact structure.

Where do I paste these templates?

Three common destinations: (1) Power Automate Workflows — paste into the "Post adaptive card in a chat or channel" action. (2) GitHub Actions — POST the JSON to a Microsoft Teams Workflow webhook URL via curl. (3) A custom webhook handler — render the template server-side and POST to the channel webhook URL.

Are these templates free?

Yes. Every template on this page is free to copy, modify, and use commercially. No attribution required. We built them as a useful resource for engineering teams that prefer hand-rolling their integrations.

Do they work with GitHub Enterprise Server?

Yes. The Adaptive Card JSON is identical regardless of where the GitHub webhook originates. Just point your GitHub Enterprise Server webhook at the Microsoft Teams Workflow URL or your custom handler. The placeholders are the same fields GHES sends in its webhook payloads.

Keep reading

Adaptive Card Designer GuideIncoming Webhook for GitHubOffice 365 Connector Migration Guide

Skip the JSON — let PullNotifier ship the cards for you

Polished adaptive cards, smart filters, and GitHub-Teams user mapping out of the box. Free for small teams.

PullNotifier Logo

PullNotifier

© 2026 PullNotifier. All rights reserved

Microsoft Teams

Overview

Integration

Setup Guide

Pricing

Code Review Reminders

vs Official @github

O365 Connector Replacement

Read our Blog

Privacy Policy

Terms of Service

Changelog