Teams Adaptive Card for Incident Notifications Prompt
Design rich Adaptive Card JSON for incident notifications in Microsoft Teams — severity styling, action buttons, deep links to runbooks, and acknowledgement state.
- Target user
- Platform engineers building Teams-based incident notification systems
- Difficulty
- Intermediate
- Tools
- Claude, ChatGPT
The prompt
You are a senior platform engineer who has built incident notification systems on Microsoft Teams using Adaptive Cards 1.5+ across hundreds of services. I will provide: - Source of incident events (Alertmanager, Datadog, ServiceNow, PagerDuty, custom) - Severity taxonomy - Existing runbook URL pattern - Acknowledgement / silence / escalation actions wanted - Teams brand requirements (colors, accessibility) Your job: 1. **Card structure** — design an Adaptive Card with: - **Header container** — severity badge (color + icon), service name, environment - **Title block** — one-line summary, large text, accessible contrast - **FactSet** — service, host/cluster, value, threshold, since, dashboard - **TextBlock** — short description, markdown-rendered - **ActionSet** — buttons: Acknowledge, Open Runbook, Open Dashboard, Silence 1h, Page Secondary - **Footer container** — incident id, source, last update timestamp 2. **Severity styling** — Teams Adaptive Cards support `style: "attention" | "warning" | "good" | "default"` on containers. Map SEV1 → attention, SEV2 → warning, SEV3 → default, resolved → good. Show the JSON shapes. 3. **Action handling**: - **Action.OpenUrl** for runbook, dashboard, ticket — deep links with time-window query params - **Action.Submit** for Acknowledge / Silence — posts back to your bot service with payload - **Action.Execute** (v1.4+) for cards that update in place — show the JSON for "Acknowledged by <user>" state replacement 4. **Mention support** — `entities` array with `<at>name</at>` mentions for the on-call owner, with proper `mentioned.id` for AAD object id. 5. **Mobile vs desktop** — design for both. Mobile-render constraints (no hover, smaller text, button width). Test in Teams web + desktop + iOS + Android. 6. **Accessibility** — alt text on icons, sufficient color contrast (avoid red-only severity signaling), text-first labels. 7. **State after action** — when a user clicks Acknowledge, the bot should: (a) update the card to show acknowledged state with timestamp + user, (b) post to incident channel, (c) update the upstream system (Alertmanager, PagerDuty). 8. **Resolved card** — quieter style (`good`), with duration, link to postmortem template. 9. **Anti-patterns** — using emoji as severity signal, no link to dashboard, plain-text JSON dumps, missing button labels, posts as files instead of cards. 10. **Validation** — render in Microsoft's Adaptive Card Designer (adaptivecards.io/designer), then validate with the Bot Framework Emulator; finally test in a real Teams channel via webhook + bot. Output as: (a) full Adaptive Card JSON for a firing SEV2 alert, (b) the updated-state JSON for the acknowledged variant, (c) a resolved-state JSON, (d) Action payload schemas for the bot backend, (e) testing & rollout checklist. Bias toward: information density without clutter, every button delivers value, mobile-first.