Ship reliable Microsoft Teams invoice alerts with Adaptive Cards that include totals, due dates, and quick actions. Start with a proven JSON template and avoid notification drift.
Why adaptive cards beat plain text
- Structured fields (vendor, amount, currency, due date, status) prevent ambiguity.
- Buttons enable one-click approvals, escalations, or opening the invoice record.
- A consistent template reduces hallucination when AI agents fill notifications.
Starter adaptive card (v1.5)
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.5",
"body": [
{ "type": "TextBlock", "text": "Invoice Alert", "weight": "Bolder", "size": "Medium" },
{ "type": "FactSet", "facts": [
{ "title": "Vendor", "value": "${vendor}" },
{ "title": "Amount", "value": "${amount} ${currency}" },
{ "title": "Due date", "value": "${due_date}" },
{ "title": "Status", "value": "${status}" }
]},
{ "type": "TextBlock", "text": "Notes: ${notes}", "wrap": true }
],
"actions": [
{ "type": "Action.OpenUrl", "title": "Open Invoice", "url": "${invoice_url}" },
{ "type": "Action.Submit", "title": "Mark Paid", "data": { "action": "mark_paid", "id": "${invoice_id}" } }
]
}
Use ${...} placeholders to keep schema stable while AI agents or workflows inject live values.
Best practices for finance notifications
- Always include currency and tax-inclusive/exclusive hints.
- Add status color coding via card themes or host styling.
- Keep buttons idempotent; route submissions through an API that validates state.
- Log the JSON payload you send to Teams for auditability.
- Localize date formats if finance teams span regions.
Quick integration paths
- Copilot Studio / Power Automate: call the Teams postcard tool and pass this JSON.
- Incoming webhook: POST the card JSON directly.
- Bot Framework: send the card via proactive messages when payments post or invoices become overdue.