In a continuation of my earlier article, Adaptive Cards with Microsoft Teams with Examples, we continue with the details of how to create these Adaptive Cards authored with JSON templates. The templates can be used as-is, edited to suit your organization’s needs, or used as a launching point to customize your templates.
Samples and Templates of Adaptive Cards for Microsoft Teams
This is exciting as these select samples and templates are created and offered for Microsoft Teams to show what you can create. These can be copied, edited, and tweaked to create limitless scenarios.
Expense Report with Labels
Data JSON: { "code": "ER-13052", "message": "success", "created_by_name" : "Matt Hidinger", "created_date" : "2019-07-15T18:33:12+0800", "submitted_date": "2019-04-14T18:33:12+0800", "creater_email" : "[email protected]", "status" : "Pending", "status_url" : "https://adaptivecards.io/content/pending.png", "approver": "Thomas", "purpose" : "Trip to UAE", "approval_date" : "2019-07-15T22:33:12+0800", "approver" : "Thomas", "approver_email" : "[email protected]", "other_submitter" : "David", "other_submitter_email" : "[email protected]", "expenses": [ { "expense_id": "16367000000083065", "approver" : "Thomas", "date": "2017-02-21", "description": "Air Travel Expense", "created_by": "636965431200000000", "created_by_name": "PATRICIA", "employee_number": "E001", "currency_id": "16367000000000097", "currency_code": "USD", "paid_through_account_id": "16367000000036003", "paid_through_account_name": "Employee Reimbursements", "bcy_total": 13900.79, "bcy_subtotal": 13900.79, "total": 300, "total_without_tax": 300, "is_billable": true, "is_reimbursable": true, "reference_number": "DD145", "due_days": "Due in 15 days", "merchant_id": "16367000000074027", "merchant_name": "ABS Solutions", "status": "approved", "created_time": "2019-06-19T18:33:12+0800", "last_modified_time": "2017-02-21T18:42:46+0530", "receipt_name": "receipt1.jpg", "report_id": "16367000000083075", "mileage_type": "non_mileage", "report_name": "Purchase", "is_receipt_only": false, "distance": 0, "per_diem_rate": 0, "per_diem_days": 0, "per_diem_id": "", "per_diem_name": "", "expense_type": "non_mileage", "location": "Washington", "receipt_type": "jpg", "policy_violated": false, "comments_count": 0, "report_status": "submitted", "price_precision": 2, "mileage_rate": 0, "mileage_unit": "km", "receipt_status": "processed", "is_uncategorized": false, "is_expired": false, "gl_code": "LG001", "exchange_rate": 66.943366, "start_reading": "", "end_reading": "", "payment_mode": "Check", "customer_id": "27927000000075081", "customer_name": "ACME Corp.", "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Leg 1 on Tue, Jun 19th, 2019 at 6:00 AM." }, { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Leg 2 on Tue, Jun 19th, 2019 at 7:15 PM." } ], "project_id": "27927000001243001", "project_name": "Coffee Research", "transaction_description": "", "tax_id": "16367000000086001", "tax_name": "Sales Tax", "tax_percentage": 2, "amount": 207.65, "is_inclusive_tax": false, "vehicle_type": "Bike", "vehicle_id": "17456000000078029", "fuel_type": "lpg", "engine_capacity_range": "between_1401cc_and_1600cc", "is_personal": false, "policy_id": "16367000000092011", "policy_name": "LIC", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "71.8 KB", "attachment_order": 1, "document_id": "16367000000083071" } ], "reimbursement_reference": "", "reimbursement_date": "", "reimbursement_paid_through_account_id": "", "reimbursement_paid_through_account_name": "", "reimbursement_currency_id": "", "reimbursement_currency_code": "" }, { "expense_id": "16367000000083065", "date": "2019-06-19", "description": "Auto Mobile Expense", "created_by": "636965431200000000", "created_by_name": "PATRICIA", "employee_number": "E001", "currency_id": "16367000000000097", "currency_code": "USD", "paid_through_account_id": "16367000000036003", "paid_through_account_name": "Employee Reimbursements", "bcy_total": 13900.79, "bcy_subtotal": 13900.79, "total": 100, "total_without_tax": 100, "is_billable": true, "is_reimbursable": true, "reference_number": "DD145", "due_days": "Due in 15 days", "merchant_id": "16367000000074027", "merchant_name": "ABS Solutions", "status": "submitted", "created_time": "2019-06-19T18:33:12+0800", "last_modified_time": "2017-02-21T18:42:46+0530", "receipt_name": "receipt1.jpg", "report_id": "16367000000083075", "mileage_type": "non_mileage", "report_name": "Purchase", "is_receipt_only": false, "distance": 0, "per_diem_rate": 0, "per_diem_days": 0, "per_diem_id": "", "per_diem_name": "", "expense_type": "non_mileage", "location": "Washington", "receipt_type": "jpg", "policy_violated": false, "comments_count": 0, "report_status": "submitted", "price_precision": 2, "mileage_rate": 0, "mileage_unit": "km", "receipt_status": "processed", "is_uncategorized": false, "is_expired": false, "gl_code": "LG001", "exchange_rate": 66.943366, "start_reading": "", "end_reading": "", "payment_mode": "Check", "customer_id": "27927000000075081", "customer_name": "ACME Corp.", "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": " Contoso Car Rentrals, Tues 6/19 at 7:00 AM" } ], "project_id": "27927000001243001", "project_name": "Coffee Research", "transaction_description": "", "tax_id": "16367000000086001", "tax_name": "Sales Tax", "tax_percentage": 2, "amount": 207.65, "is_inclusive_tax": false, "vehicle_type": "Bike", "vehicle_id": "17456000000078029", "fuel_type": "lpg", "engine_capacity_range": "between_1401cc_and_1600cc", "is_personal": false, "policy_id": "16367000000092011", "policy_name": "LIC", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "71.8 KB", "attachment_order": 1, "document_id": "16367000000083071" } ], "reimbursement_reference": "", "reimbursement_date": "", "reimbursement_paid_through_account_id": "", "reimbursement_paid_through_account_name": "", "reimbursement_currency_id": "", "reimbursement_currency_code": "" }, { "expense_id": "16367000000083065", "date": "2019-06-21", "description": "Excess Baggage Cost", "created_by": "636967159200000000", "created_by_name": "PATRICIA", "employee_number": "E001", "currency_id": "16367000000000097", "currency_code": "USD", "paid_through_account_id": "16367000000036003", "paid_through_account_name": "Employee Reimbursements", "bcy_total": 13900.79, "bcy_subtotal": 13900.79, "total": 50.38, "total_without_tax": 4.3, "is_billable": true, "is_reimbursable": false, "reference_number": "DD145", "due_days": "Due in 15 days", "merchant_id": "16367000000074027", "merchant_name": "ABS Solutions", "status": "submitted", "created_time": "2019-06-21T18:33:12+0800", "last_modified_time": "2017-02-21T18:42:46+0530", "receipt_name": "receipt1.jpg", "report_id": "16367000000083075", "mileage_type": "non_mileage", "report_name": "Purchase", "is_receipt_only": false, "distance": 0, "per_diem_rate": 0, "per_diem_days": 0, "per_diem_id": "", "per_diem_name": "", "expense_type": "non_mileage", "location": "Washington", "receipt_type": "jpg", "policy_violated": false, "comments_count": 0, "report_status": "submitted", "price_precision": 2, "mileage_rate": 0, "mileage_unit": "km", "receipt_status": "processed", "is_uncategorized": false, "is_expired": false, "gl_code": "LG001", "exchange_rate": 66.943366, "start_reading": "", "end_reading": "", "payment_mode": "Check", "customer_id": "27927000000075081", "customer_name": "ACME Corp.", "custom_fields": [ ], "project_id": "27927000001243001", "project_name": "Coffee Research", "transaction_description": "", "tax_id": "16367000000086001", "tax_name": "Sales Tax", "tax_percentage": 2, "amount": 207.65, "is_inclusive_tax": false, "vehicle_type": "Bike", "vehicle_id": "17456000000078029", "fuel_type": "lpg", "engine_capacity_range": "between_1401cc_and_1600cc", "is_personal": false, "policy_id": "16367000000092011", "policy_name": "LIC", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "71.8 KB", "attachment_order": 1, "document_id": "16367000000083071" } ], "reimbursement_reference": "", "reimbursement_date": "", "reimbursement_paid_through_account_id": "", "reimbursement_paid_through_account_name": "", "reimbursement_currency_id": "", "reimbursement_currency_code": "" } ] } Template JSON: { "type": "AdaptiveCard", "body": [ { "type": "Container", "style": "emphasis", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "size": "large", "weight": "bolder", "text": "**EXPENSE APPROVAL**", "style": "heading" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "Image", "url": "${status_url}", "altText": "${status}", "height": "30px" } ], "width": "auto" } ] } ], "bleed": true }, { "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "size": "ExtraLarge", "text": "${purpose}", "wrap": true, "style": "heading" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "ActionSet", "actions": [ { "type": "Action.OpenUrl", "title": "EXPORT AS PDF", "url": "https://adaptivecards.io" } ] } ], "width": "auto" } ] }, { "type": "TextBlock", "spacing": "small", "size": "small", "weight": "bolder", "text": "[${code}](https://adaptivecards.io)" }, { "type": "FactSet", "spacing": "large", "facts": [ { "title": "Submitted By", "value": "**${created_by_name}** ${creater_email}" }, { "title": "Duration", "value": "${formatTicks(min(select(expenses, x, int(x.created_by))), 'yyyy-MM-dd')} - ${formatTicks(max(select(expenses, x, int(x.created_by))), 'yyyy-MM-dd')}" }, { "title": "Submitted On", "value": "${formatDateTime(submitted_date, 'yyyy-MM-dd')}" }, { "title": "Reimbursable Amount", "value": "$${formatNumber(sum(select(expenses, x, if(x.is_reimbursable, x.total, 0))), 2)}" }, { "title": "Awaiting approval from", "value": "**${approver}** ${approver_email}" }, { "title": "Submitted to", "value": "**${other_submitter}** ${other_submitter_email}" } ] } ] }, { "type": "Container", "spacing": "large", "style": "emphasis", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "weight": "bolder", "text": "DATE" } ], "width": "auto" }, { "type": "Column", "spacing": "large", "items": [ { "type": "TextBlock", "weight": "bolder", "text": "CATEGORY" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "bolder", "text": "AMOUNT" } ], "width": "auto" } ] } ], "bleed": true }, { "$data": "${expenses}", "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "text": "${formatDateTime(created_time, 'MM-dd')}", "wrap": true } ], "width": "auto" }, { "type": "Column", "spacing": "medium", "items": [ { "type": "TextBlock", "text": "${description}", "wrap": true } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "$${formatNumber(total, 2)}", "wrap": true } ], "width": "auto" }, { "type": "Column", "spacing": "small", "selectAction": { "type": "Action.ToggleVisibility", "title": "expand", "targetElements": [ "cardContent${$index}", "chevronDown${$index}", "chevronUp${$index}" ] }, "verticalContentAlignment": "center", "items": [ { "type": "Image", "id": "chevronDown${$index}", "url": "https://adaptivecards.io/content/down.png", "width": "20px", "altText": "Details collapsed" }, { "type": "Image", "id": "chevronUp${$index}", "url": "https://adaptivecards.io/content/up.png", "width": "20px", "altText": "Details expanded", "isVisible": false } ], "width": "auto" } ] }, { "type": "Container", "id": "cardContent${$index}", "isVisible": false, "items": [ { "type": "Container", "items": [ { "$data": "${custom_fields}", "type": "TextBlock", "text": "* ${value}", "isSubtle": true, "wrap": true }, { "type": "Container", "items": [ { "type": "Input.Text", "id": "comment${$index}", "label": "Add your comment here" } ] } ] }, { "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "ActionSet", "actions": [ { "type": "Action.Submit", "title": "Send", "data": { "id": "_qkQW8dJlUeLVi7ZMEzYVw", "action": "comment", "lineItem": 1 } } ] } ], "width": "auto" } ] } ] } ] } ] }, { "type": "ColumnSet", "spacing": "large", "separator": true, "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "horizontalAlignment": "right", "text": "Total Expense Amount \t", "wrap": true }, { "type": "TextBlock", "horizontalAlignment": "right", "text": "Non-reimbursable Amount", "wrap": true }, { "type": "TextBlock", "horizontalAlignment": "right", "text": "Advance Amount", "wrap": true } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "$${formatNumber(sum(select(expenses, x, x.total)), 2)}" }, { "type": "TextBlock", "text": "(-) $${formatNumber(sum(select(expenses, x, if(x.is_reimbursable, 0, x.total))), 2)} \t" }, { "type": "TextBlock", "text": "(-) 0.00 \t" } ], "width": "auto" }, { "type": "Column", "width": "auto" } ] }, { "type": "Container", "style": "emphasis", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "horizontalAlignment": "right", "text": "Amount to be Reimbursed", "wrap": true } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "bolder", "text": "$${formatNumber(sum(select(expenses, x, if(x.is_reimbursable, x.total, 0))), 2)}" } ], "width": "auto" }, { "type": "Column", "width": "auto" } ] } ], "bleed": true }, { "type": "ColumnSet", "columns": [ { "type": "Column", "selectAction": { "type": "Action.ToggleVisibility", "targetElements": [ "cardContent4", "showHistory", "hideHistory" ] }, "verticalContentAlignment": "Center", "items": [ { "type": "TextBlock", "id": "showHistory", "horizontalAlignment": "right", "color": "accent", "text": "Show history", "wrap": true }, { "type": "TextBlock", "id": "hideHistory", "horizontalAlignment": "right", "color": "accent", "text": "Hide history", "wrap": true, "isVisible": false } ], "width": 1 } ] }, { "type": "Container", "id": "cardContent4", "isVisible": false, "items": [ { "type": "Container", "items": [ { "type": "TextBlock", "text": "* Expense submitted by **${created_by_name}** on {{DATE(${formatDateTime(created_date, 'yyyy-MM-ddTHH:mm:ssZ')}, SHORT)}}", "isSubtle": true, "wrap": true }, { "type": "TextBlock", "text": "* Expense ${expenses[0].status} by **${expenses[0].approver}** on {{DATE(${formatDateTime(approval_date, 'yyyy-MM-ddTHH:mm:ssZ')}, SHORT)}}", "isSubtle": true, "wrap": true } ] } ] }, { "type": "Container", "items": [ { "type": "ActionSet", "actions": [ { "type": "Action.Submit", "title": "Approve", "style": "positive", "data": { "id": "_qkQW8dJlUeLVi7ZMEzYVw", "action": "approve" } }, { "type": "Action.ShowCard", "title": "Reject", "style": "destructive", "card": { "type": "AdaptiveCard", "body": [ { "type": "Input.Text", "id": "RejectCommentID", "label": "Please specify an appropriate reason for rejection", "isMultiline": true, "isRequired": true, "errorMessage": "A reason for rejection is necessary" } ], "actions": [ { "type": "Action.Submit", "title": "Send", "data": { "id": "_qkQW8dJlUeLVi7ZMEzYVw", "action": "reject" } } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json" } } ] } ] } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.2", "fallbackText": "This card requires Adaptive Cards v1.2 support to be rendered properly." }
Show Card Wizard
Data JSON: { "formTitle": "Please provide the following information:", "nameCard": { "title": "Name", "idPrefix": "name", "fields": [ { "label": "First Name", "id": "FirstName", "required": true }, { "label": "Middle Name", "id": "MiddleName", "required": false }, { "label": "Last Name", "id": "LastName", "required": true } ] }, "addressCard": { "title": "Address", "idPrefix": "address", "textInputFields": [ { "label": "Address line 1", "id": "addressLine1", "required": true }, { "label": "Address line 2", "id": "addressLine2", "required": false } ], "columnFields": [ { "label": "City", "id": "city", "required": false }, { "label": "State", "id": "state", "required": false }, { "label": "Zip Code", "id": "zip", "required": true } ] }, "contactCard": { "title": "Phone/Email", "idPrefix": "contact", "fields": [ { "label": "Mobile number", "id": "mobileNumber", "required": false }, { "label": "Home number", "id": "homeNumber", "required": false }, { "label": "Email address", "id": "emailAddress", "required": true } ] } } Template JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "${formTitle}", "wrap": true } ], "actions": [ { "type": "Action.ShowCard", "title": "${nameCard.title}", "card": { "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "body": [ { "type": "Container", "id": "${nameCard.idPrefix}Properties", "items": [ { "$data": "${nameCard.fields}", "type": "Input.Text", "label": "${label}", "id": "${id}", "isRequired": "${required}", "errorMessage": "'${label}' is required" } ] } ], "actions": [ { "type": "Action.ShowCard", "title": "${addressCard.title}", "card": { "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "body": [ { "type": "Container", "id": "${addressCard.idPrefix}Properties", "items": [ { "$data": "${addressCard.textInputFields}", "type": "Input.Text", "label": "${label}", "id": "${id}", "isRequired": "${required}", "errorMessage": "'${label} is required" }, { "type": "ColumnSet", "columns": [ { "$data": "${addressCard.columnFields}", "type": "Column", "width": "stretch", "items": [ { "type": "Input.Text", "label": "${label}", "id": "${id}", "isRequired": "${required}", "errorMessage": "'${label}' is required" } ] } ] } ] } ], "actions": [ { "type": "Action.ShowCard", "title": "${contactCard.title}", "card": { "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "body": [ { "$data": "${contactCard.fields}", "type": "Input.Text", "label": "${label}", "id": "${id}", "isRequired": "${required}", "errorMessage": "'${label}' is required" } ], "actions": [ { "type": "Action.Submit", "title": "Submit" } ] } } ] } } ] } } ] }
JSON Scripts and Templates: Microsoft.com
In a continuation of my earlier article, Adaptive Cards with Microsoft Teams with Examples, we continue with the details of how to create these Adaptive Cards authored with JSON templates. The templates can be used as-is, edited to suit your organization’s needs, or used as a launching point to customize your templates.
Samples and Templates of Adaptive Cards for Microsoft Teams
This is exciting as these select samples and templates are created and offered for Microsoft Teams to show what you can create. These can be copied, edited, and tweaked to create any possible scenario. There are limitless scenarios to design and create.
Product Video
Data JSON: { "odata.metadata": "https://a830edad9050849nda1.sharepoint.com/portals/hub/_api/$metadata#SP.ApiData.VideoItems/@Element", "odata.type": "SP.Publishing.VideoItem", "odata.id": "https://a830edad9050849nda1.sharepoint.com/portals/hub/_api/VideoService/Channels(guid'1833f204-bb2a-4e93-b8dd-b236daeccae8')/Videos(guid'6b518eae-b0d9-4951-b6da-1e5f58a43daa')", "odata.editLink": "VideoService/Channels(guid'1833f204-bb2a-4e93-b8dd-b236daeccae8')/Videos(guid'6b518eae-b0d9-4951-b6da-1e5f58a43daa')", "ChannelID": "1833f204-bb2a-4e93-b8dd-b236daeccae8", "CreatedDate": "2015-07-08T05:05:06Z", "Description": "", "DisplayFormUrl": "https://a830edad9050849nda1.sharepoint.com/portals/Red-Channel/pVid/Forms/DispForm.aspx?ID=5", "FileName": "Divers - Future of Productivity.mp4", "OwnerName": "TEST_TEST_SPOProvHeartbeat_E3_15_4911090814_22,#i:0#.f|membership|[email protected],#[email protected],#[email protected],#TEST_TEST_SPOProvHeartbeat_E3_15_4911090814_22,#https://a830edad9050849nda1-my.sharepoint.com:443/User%20Photos/Profile%20Pictures/admin_a830edad9050849nda1_onmicrosoft_com_MThumb.jpg,#,#", "ServerRelativeUrl": "/portals/Red-Channel/pVid/Divers - Future of Productivity.mp4", "ThumbnailUrl": "https://adaptivecards.io/content/poster-video.png", "Title": "Divers - Future of Productivity", "ID": "6b518eae-b0d9-4951-b6da-1e5f58a43daa", "Url": "https://adaptivecardsblob.blob.core.windows.net/assets/AdaptiveCardsOverviewVideo.mp4", "VideoDurationInSeconds": 388, "VideoProcessingStatus": 2, "ViewCount": -1, "YammerObjectUrl": "https://a830edad9050849nda1.sharepoint.com/portals/hub/_layouts/15/videoplayer.aspx?v=https%3A%2F%2Fa830edad9050849nda1%2Esharepoint%2Ecom%2Fportals%2FRed%2DChannel%2FpVid%2FDivers%20%2D%20Future%20of%20Productivity%2Emp4" } Template JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.1", "fallbackText": "This card requires Media to be viewed. Ask your platform to update to Adaptive Cards v1.1 for this and more!", "body": [ { "type": "Media", "poster": "${ThumbnailUrl}", "sources": [ { "mimeType": "video/mp4", "url": "${Url}" } ] } ], "actions": [ { "type": "Action.OpenUrl", "title": "Learn more", "url": "https://adaptivecards.io" } ] }
Expense Report
Data JSON: { "code": "ER-13052", "message": "success", "created_by_name" : "Matt Hidinger", "created_date" : "2019-07-15T18:33:12+0800", "submitted_date": "2019-04-14T18:33:12+0800", "creater_email" : "[email protected]", "status" : "Pending", "status_url" : "https://adaptivecards.io/content/pending.png", "approver": "Thomas", "purpose" : "Trip to UAE", "approval_date" : "2019-07-15T22:33:12+0800", "approver" : "Thomas", "approver_email" : "[email protected]", "other_submitter" : "David", "other_submitter_email" : "[email protected]", "expenses": [ { "expense_id": "16367000000083065", "approver" : "Thomas", "date": "2017-02-21", "description": "Air Travel Expense", "created_by": "636965431200000000", "created_by_name": "PATRICIA", "employee_number": "E001", "currency_id": "16367000000000097", "currency_code": "USD", "paid_through_account_id": "16367000000036003", "paid_through_account_name": "Employee Reimbursements", "bcy_total": 13900.79, "bcy_subtotal": 13900.79, "total": 300, "total_without_tax": 300, "is_billable": true, "is_reimbursable": true, "reference_number": "DD145", "due_days": "Due in 15 days", "merchant_id": "16367000000074027", "merchant_name": "ABS Solutions", "status": "approved", "created_time": "2019-06-19T18:33:12+0800", "last_modified_time": "2017-02-21T18:42:46+0530", "receipt_name": "receipt1.jpg", "report_id": "16367000000083075", "mileage_type": "non_mileage", "report_name": "Purchase", "is_receipt_only": false, "distance": 0, "per_diem_rate": 0, "per_diem_days": 0, "per_diem_id": "", "per_diem_name": "", "expense_type": "non_mileage", "location": "Washington", "receipt_type": "jpg", "policy_violated": false, "comments_count": 0, "report_status": "submitted", "price_precision": 2, "mileage_rate": 0, "mileage_unit": "km", "receipt_status": "processed", "is_uncategorized": false, "is_expired": false, "gl_code": "LG001", "exchange_rate": 66.943366, "start_reading": "", "end_reading": "", "payment_mode": "Check", "customer_id": "27927000000075081", "customer_name": "ACME Corp.", "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Leg 1 on Tue, Jun 19th, 2019 at 6:00 AM." }, { "customfield_id": "16367000000277001", "label": "Other Name", "value": "Leg 2 on Tue, Jun 19th, 2019 at 7:15 PM." } ], "project_id": "27927000001243001", "project_name": "Coffee Research", "transaction_description": "", "tax_id": "16367000000086001", "tax_name": "Sales Tax", "tax_percentage": 2, "amount": 207.65, "is_inclusive_tax": false, "vehicle_type": "Bike", "vehicle_id": "17456000000078029", "fuel_type": "lpg", "engine_capacity_range": "between_1401cc_and_1600cc", "is_personal": false, "policy_id": "16367000000092011", "policy_name": "LIC", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "71.8 KB", "attachment_order": 1, "document_id": "16367000000083071" } ], "reimbursement_reference": "", "reimbursement_date": "", "reimbursement_paid_through_account_id": "", "reimbursement_paid_through_account_name": "", "reimbursement_currency_id": "", "reimbursement_currency_code": "" }, { "expense_id": "16367000000083065", "date": "2019-06-19", "description": "Auto Mobile Expense", "created_by": "636965431200000000", "created_by_name": "PATRICIA", "employee_number": "E001", "currency_id": "16367000000000097", "currency_code": "USD", "paid_through_account_id": "16367000000036003", "paid_through_account_name": "Employee Reimbursements", "bcy_total": 13900.79, "bcy_subtotal": 13900.79, "total": 100, "total_without_tax": 100, "is_billable": true, "is_reimbursable": true, "reference_number": "DD145", "due_days": "Due in 15 days", "merchant_id": "16367000000074027", "merchant_name": "ABS Solutions", "status": "submitted", "created_time": "2019-06-19T18:33:12+0800", "last_modified_time": "2017-02-21T18:42:46+0530", "receipt_name": "receipt1.jpg", "report_id": "16367000000083075", "mileage_type": "non_mileage", "report_name": "Purchase", "is_receipt_only": false, "distance": 0, "per_diem_rate": 0, "per_diem_days": 0, "per_diem_id": "", "per_diem_name": "", "expense_type": "non_mileage", "location": "Washington", "receipt_type": "jpg", "policy_violated": false, "comments_count": 0, "report_status": "submitted", "price_precision": 2, "mileage_rate": 0, "mileage_unit": "km", "receipt_status": "processed", "is_uncategorized": false, "is_expired": false, "gl_code": "LG001", "exchange_rate": 66.943366, "start_reading": "", "end_reading": "", "payment_mode": "Check", "customer_id": "27927000000075081", "customer_name": "ACME Corp.", "custom_fields": [ { "customfield_id": "16367000000277001", "label": "Other Name", "value": " Contoso Car Rentrals, Tues 6/19 at 7:00 AM" } ], "project_id": "27927000001243001", "project_name": "Coffee Research", "transaction_description": "", "tax_id": "16367000000086001", "tax_name": "Sales Tax", "tax_percentage": 2, "amount": 207.65, "is_inclusive_tax": false, "vehicle_type": "Bike", "vehicle_id": "17456000000078029", "fuel_type": "lpg", "engine_capacity_range": "between_1401cc_and_1600cc", "is_personal": false, "policy_id": "16367000000092011", "policy_name": "LIC", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "71.8 KB", "attachment_order": 1, "document_id": "16367000000083071" } ], "reimbursement_reference": "", "reimbursement_date": "", "reimbursement_paid_through_account_id": "", "reimbursement_paid_through_account_name": "", "reimbursement_currency_id": "", "reimbursement_currency_code": "" }, { "expense_id": "16367000000083065", "date": "2019-06-21", "description": "Excess Baggage Cost", "created_by": "636967159200000000", "created_by_name": "PATRICIA", "employee_number": "E001", "currency_id": "16367000000000097", "currency_code": "USD", "paid_through_account_id": "16367000000036003", "paid_through_account_name": "Employee Reimbursements", "bcy_total": 13900.79, "bcy_subtotal": 13900.79, "total": 50.38, "total_without_tax": 4.3, "is_billable": true, "is_reimbursable": false, "reference_number": "DD145", "due_days": "Due in 15 days", "merchant_id": "16367000000074027", "merchant_name": "ABS Solutions", "status": "submitted", "created_time": "2019-06-21T18:33:12+0800", "last_modified_time": "2017-02-21T18:42:46+0530", "receipt_name": "receipt1.jpg", "report_id": "16367000000083075", "mileage_type": "non_mileage", "report_name": "Purchase", "is_receipt_only": false, "distance": 0, "per_diem_rate": 0, "per_diem_days": 0, "per_diem_id": "", "per_diem_name": "", "expense_type": "non_mileage", "location": "Washington", "receipt_type": "jpg", "policy_violated": false, "comments_count": 0, "report_status": "submitted", "price_precision": 2, "mileage_rate": 0, "mileage_unit": "km", "receipt_status": "processed", "is_uncategorized": false, "is_expired": false, "gl_code": "LG001", "exchange_rate": 66.943366, "start_reading": "", "end_reading": "", "payment_mode": "Check", "customer_id": "27927000000075081", "customer_name": "ACME Corp.", "custom_fields": [ ], "project_id": "27927000001243001", "project_name": "Coffee Research", "transaction_description": "", "tax_id": "16367000000086001", "tax_name": "Sales Tax", "tax_percentage": 2, "amount": 207.65, "is_inclusive_tax": false, "vehicle_type": "Bike", "vehicle_id": "17456000000078029", "fuel_type": "lpg", "engine_capacity_range": "between_1401cc_and_1600cc", "is_personal": false, "policy_id": "16367000000092011", "policy_name": "LIC", "documents": [ { "file_name": "receipt1.jpg", "file_size_formatted": "71.8 KB", "attachment_order": 1, "document_id": "16367000000083071" } ], "reimbursement_reference": "", "reimbursement_date": "", "reimbursement_paid_through_account_id": "", "reimbursement_paid_through_account_name": "", "reimbursement_currency_id": "", "reimbursement_currency_code": "" } ] } Template JSON: { "type": "AdaptiveCard", "body": [ { "type": "Container", "style": "emphasis", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "size": "Large", "weight": "Bolder", "text": "**EXPENSE APPROVAL**", "wrap": true, "style": "heading" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "Image", "url": "${status_url}", "altText": "${status}", "height": "30px" } ], "width": "auto" } ] } ], "bleed": true }, { "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "size": "ExtraLarge", "text": "${purpose}", "wrap": true, "style": "heading" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "ActionSet", "actions": [ { "type": "Action.OpenUrl", "title": "EXPORT AS PDF", "url": "https://adaptivecards.io" } ] } ], "width": "auto" } ] }, { "type": "TextBlock", "spacing": "Small", "size": "Small", "weight": "Bolder", "text": "[${code}](https://adaptivecards.io)", "wrap": true }, { "type": "FactSet", "spacing": "Large", "facts": [ { "title": "Submitted By", "value": "**${created_by_name}** ${creater_email}" }, { "title": "Duration", "value": "${formatTicks(min(select(expenses, x, int(x.created_by))), 'yyyy-MM-dd')} - ${formatTicks(max(select(expenses, x, int(x.created_by))), 'yyyy-MM-dd')}" }, { "title": "Submitted On", "value": "${formatDateTime(submitted_date, 'yyyy-MM-dd')}" }, { "title": "Reimbursable Amount", "value": "$${formatNumber(sum(select(expenses, x, if(x.is_reimbursable, x.total, 0))), 2)}" }, { "title": "Awaiting approval from", "value": "**${approver}** ${approver_email}" }, { "title": "Submitted to", "value": "**${other_submitter}** ${other_submitter_email}" } ] } ] }, { "type": "Container", "spacing": "Large", "style": "emphasis", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "DATE", "wrap": true } ], "width": "auto" }, { "type": "Column", "spacing": "Large", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "CATEGORY", "wrap": true } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "AMOUNT", "wrap": true } ], "width": "auto" } ] } ], "bleed": true }, { "$data": "${expenses}", "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "text": "${formatDateTime(created_time, 'MM-dd')}", "wrap": true } ], "width": "auto" }, { "type": "Column", "spacing": "Medium", "items": [ { "type": "TextBlock", "text": "${description}", "wrap": true } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "$${formatNumber(total, 2)}", "wrap": true } ], "width": "auto" }, { "type": "Column", "spacing": "Small", "selectAction": { "type": "Action.ToggleVisibility", "targetElements": [ "cardContent${$index}", "chevronDown${$index}", "chevronUp${$index}" ] }, "verticalContentAlignment": "Center", "items": [ { "type": "Image", "id": "chevronDown${$index}", "url": "https://adaptivecards.io/content/down.png", "width": "20px", "altText": "${description} $${total} collapsed" }, { "type": "Image", "id": "chevronUp${$index}", "url": "https://adaptivecards.io/content/up.png", "width": "20px", "altText": "${description} $${total} expanded", "isVisible": false } ], "width": "auto" } ] }, { "type": "Container", "id": "cardContent${$index}", "isVisible": false, "items": [ { "type": "Container", "items": [ { "$data": "${custom_fields}", "type": "TextBlock", "text": "* ${value}", "isSubtle": true, "wrap": true }, { "type": "Container", "items": [ { "type": "Input.Text", "id": "comment${$index}", "placeholder": "Add your comment here." } ] } ] }, { "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "ActionSet", "actions": [ { "type": "Action.Submit", "title": "Send", "data": { "id": "_qkQW8dJlUeLVi7ZMEzYVw", "action": "comment", "lineItem": 1 } } ] } ], "width": "auto" } ] } ] } ] } ] }, { "type": "ColumnSet", "spacing": "Large", "separator": true, "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "horizontalAlignment": "Right", "text": "Total Expense Amount \t", "wrap": true }, { "type": "TextBlock", "horizontalAlignment": "Right", "text": "Non-reimbursable Amount", "wrap": true }, { "type": "TextBlock", "horizontalAlignment": "Right", "text": "Advance Amount", "wrap": true } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "$${formatNumber(sum(select(expenses, x, x.total)), 2)}", "wrap": true }, { "type": "TextBlock", "text": "(-) $${formatNumber(sum(select(expenses, x, if(x.is_reimbursable, 0, x.total))), 2)} \t", "wrap": true }, { "type": "TextBlock", "text": "(-) 0.00 \t", "wrap": true } ], "width": "auto" }, { "type": "Column", "width": "auto" } ] }, { "type": "Container", "style": "emphasis", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "horizontalAlignment": "Right", "text": "Amount to be Reimbursed", "wrap": true } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "$${formatNumber(sum(select(expenses, x, if(x.is_reimbursable, x.total, 0))), 2)}", "wrap": true } ], "width": "auto" }, { "type": "Column", "width": "auto" } ] } ], "bleed": true }, { "type": "ColumnSet", "columns": [ { "type": "Column", "selectAction": { "type": "Action.ToggleVisibility", "targetElements": [ "cardContent4", "showHistory", "hideHistory" ] }, "verticalContentAlignment": "Center", "items": [ { "type": "TextBlock", "id": "showHistory", "horizontalAlignment": "Right", "color": "Accent", "text": "Show history", "wrap": true }, { "type": "TextBlock", "id": "hideHistory", "horizontalAlignment": "Right", "color": "Accent", "text": "Hide history", "wrap": true, "isVisible": false } ], "width": 1 } ] }, { "type": "Container", "id": "cardContent4", "isVisible": false, "items": [ { "type": "Container", "items": [ { "type": "TextBlock", "text": "* Expense submitted by **${created_by_name}** on {{DATE(${formatDateTime(created_date, 'yyyy-MM-ddTHH:mm:ssZ')}, SHORT)}}", "isSubtle": true, "wrap": true }, { "type": "TextBlock", "text": "* Expense ${expenses[0].status} by **${expenses[0].approver}** on {{DATE(${formatDateTime(approval_date, 'yyyy-MM-ddTHH:mm:ssZ')}, SHORT)}}", "isSubtle": true, "wrap": true } ] } ] }, { "type": "Container", "items": [ { "type": "ActionSet", "actions": [ { "type": "Action.Submit", "title": "Approve", "style": "positive", "data": { "id": "_qkQW8dJlUeLVi7ZMEzYVw", "action": "approve" } }, { "type": "Action.ShowCard", "title": "Reject", "style": "destructive", "card": { "type": "AdaptiveCard", "body": [ { "type": "Input.Text", "id": "RejectCommentID", "placeholder": "Please specify an appropriate reason for rejection.", "isMultiline": true } ], "actions": [ { "type": "Action.Submit", "title": "Send", "data": { "id": "_qkQW8dJlUeLVi7ZMEzYVw", "action": "reject" } } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json" } } ] } ] } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.2", "fallbackText": "This card requires Adaptive Cards v1.2 support to be rendered properly." }
JSON Scripts and Templates: Microsoft.com
At Microsoft Ignite 2021, Microsoft Teams has been a focal point with many new upgrades and added features, abilities, and versatility. Another game-changing announcement, in addition to Microsoft Connect, but in the same vein, is Microsoft Mesh. Like Microsoft Connect, Microsoft Mesh brings the level of connectivity up a few notches.
Microsoft is taking the steps to claim a stake while shaping the future of the metaverse. Mesh for Teams will bring interactive, 3D experiences to your Teams by providing immersive spaces, personalized avatars, and holoportation that is accessible from a Mesh-enabled app on any device, including mobile phones, desktops, tablets, VR headsets, and the HoloLens 2. Without a doubt, a Virtual Reality (VR) or Augmented Reality (AR) headset will provide the maximum effects of immersive collaboration. With mixed reality applications, meeting experiences will transcend 2D meeting platforms that businesses are currently utilizing for their hybrid models of work.
But wait! What is the difference between VR and AR? These terms are not new, but there is a difference between these two types of realities. AR utilizes technology that senses the physical world with specific lenses or devices, like HoloLens 2 or any device that is AR compatible. It projects additional information onto the existing environment. AR allows the user to see the real environment plus the projected information whereas VR shuts out the real environment. It shuts out everything and provides an entire simulation where none of what you see is from the real environment. Though the terms AR and VR are commonly used interchangeably, they are in fact, not the same thing, and should not be used interchangeably.
How many times have you sighed before logging into a video meeting, wishing that you could just stay in your comfy clothes or not worry about your bedhead? With customizable options, you can choose how you want to appear and how you want to attend in your meetings. With Microsoft Mesh, you can choose to roll the video in real-time, or you can choose an animated 3D version of yourself. Even though your avatar is animated and in 3D, a VR or AR headset is not required, and it will be functional in a 2D meeting.
Whether you choose to roll the video in real-time or send your avatar, your Teams members will see and feel your presence as if you are there in real life. How? Microsoft leverages AI and by listening to your voice and taking vocal cues, Mesh will be able to animate your avatar as if it was really you. For 3D meetings, a more immersive experience will include your avatar raising its hand as you choose the raise hand during the meeting, or you can animate emojis around it.
Unlike the social media metaverse, Microsoft’s metaverse is building upon the belief that personal experiences are the key to building an interactive space that feels, sounds, and looks like the “real” person you are used to. Even though the animated avatar is a rendering of the user, the animated avatar will speak, react, and even provide eye contact and facial expressions like the person it is representing. The inclusion of these fine details will provide Teams members the feeling of presence. A sense that the animated avatar is you.
Microsoft Teams will have virtual spaces within itself which will allow Team members to meet and socialize by playing games or network and collaborate through the use of any Microsoft app. With built-in translation and transcription support, the language barriers are reduced when Team members from around the globe meet in the virtual space.
Microsoft Mesh for Teams brings members together from around the globe in a virtual, immersive, and creative space. Whether you are a holoportation (a projection of your photorealistic and lifelike self in mixed reality) or an animated avatar, the collaborative world that you will share with your Team members will be an immersive and fluid experience. Gone are the times of waiting for answers as members log in from different time zones. Instead, with immersive, virtual, and digital spaces, Teams can come together, review, discuss, brainstorm, create, train, learn, share, and make informative decisions in a shorter time frame. A powerful tool, Microsoft Mesh ensures mutual and clear understanding for all Team members by allowing members to see each others’ perspectives and with the ability to provide overlaying contextual data, explanations are easily explained with visuals. Creative and collaborative problem solving has no boundaries with augmented reality, animated avatars, and immersive spaces.
Microsoft Mesh has been developed for Teams and its impact will touch those from the business world to the daily lives of people as global supply chain management to virtual conferences and events, especially sporting events, leverage Mesh to conduct business. Efficient, cost-effective, and accessible, Microsoft Mesh is an innovative step towards shaping and forming the future of the metaverse for businesses and people.
As with all Microsoft Ignite announcements, there is always a buzz of excitement and wonderment in the community. One of the latest announcements is Microsoft Teams Connect which provides greater ease to collaborate with team members within your organization, but not necessarily in the standard or private Teams channel, and members who are with external organizations. The emphasis is on external organizations.
Microsoft Teams Connect, or Shared Channels, provides collaborative spaces around a collective purpose, project, or topic. A shared team channel helps to organize communication and conversations between members through chatting, co-authoring files, calling, meeting, sharing, and collaborating on apps. This is where work gets done.
Currently, there are two types of channels:
These two types of channels do not lend themselves to being accessible for external contributors. As we know, collaborative teams include individuals and teams outside of the organization. Shared Channels addresses the need in providing flexible collaboration within and across organizations, internally and externally. Members of a Shared Channel consist of a managed set of individuals who can be within or outside the Team or tenant. Shared Channels offers seamless collaboration in a boundaryless digital scape:
The membership with Shared Channels is highly automated, rendering minimal maintenance. The owner of the Shared Channel can promote a direct member from their organization within the channel as a new owner. If an owner leaves the shared channel without promoting a new owner, the system will automatically promote and assign a new owner.
As members leave or join, they will gain or lose access to the channel without manual administration. The membership of the Shared Channels leverages the collective member management across these teams. With Shared Channels, individual members or an entire team can be onboarded, and they can come from within the organization or from external organizations. Shared Channels allows Teams to collaborate with people inside or outside of a Team or tenant:
Invite Individuals to a Shared Channel
Invite Teams to a Shared Channel
Meeting in a Shared Channel
Finer Details, What Invitees Have and Do not Have Access To
Security and containment of sensitive data are always a top priority. Shared Channels was designed with this in mind and is secure. As Share Channels was designed for collaboration for Teams within an organization and individuals or teams that are external, there will be cross-tenant shared channels. Administrators will need to configure the cross-tenant access policy tenant posting on both sides (inbound and outbound). Administrators will also need to specify who is allowed to participate through the inbound access in the Shared Channel. Mirroring this will be the setup for the outbound access which will specify who from the administrator’s tenant can participate in the external shared channel.
Microsoft has given organizations granular control over Shared Channels. The host’s policies will apply when a shared channel is shared with another tenant and the sensitivity labels of the host Team will apply when the Shared Channel is shared with another Team. Shared channels will adopt existing settings rather than inheriting a Team’s membership.
An invited user to the Shared Channel will have access to only that Shared Channel. This holds for any invited user whether they are internal or external invitees. Shared channels cannot be converted to a public or private channel.
Microsoft Teams Connect provides the ability for team members to connect across internal teams and external organizations, creating a digital collaborative data scape that has no boundaries while maintaining data security and integrity. In addition to the 30 private channels and 200 standard channels, Microsoft Teams Connects provides an additional 200 shared channels. Each shared channel can be shared with 50 Teams and each Shared Channel can have 5,000 direct members. There is, however, one limitation and that is only the first 25,000 members can add the Shared Channel to their channel list.
For external organizations, the Azure AD cross-tenant policy will determine the number of times a Shared Channel can be shared with them. The number of external organizations is limitless and is only bound by this policy.
Microsoft Teams Connect seamlessly provides creative, expansive, and collaborative digital space that is inclusive for internal team members and external team members through one app, Microsoft Teams.
In a continuation of my earlier article, Adaptive Cards with Microsoft Teams with Examples, we continue with the details of how to create these Adaptive Cards authored with JSON templates. The templates can be used as-is, edited to suit your organization’s needs, or used as a launching point to customize your templates.
Samples and Templates of Adaptive Cards for Microsoft Teams
This is exciting as these select samples and templates are created and offered for Microsoft Teams to show what you can create. These can be copied, edited, and tweaked to create any possible scenario. There are limitless scenarios to design and create.
Adaptive Cards with Microsoft Teams – JSON Templates Part 1 of this series includes the templates for Activity Update Sample, Activity Update with Labels, Calendar Reminder, and Calendar Reminder with Labels. This installment of this series will include templates for Image Gallery, Weather Compact, and Weather Large.
Image Gallery
Data JSON: { "_type": "Images", "instrumentation": { "pingUrlBase": "https://www.bingapis.com/api/ping?IG=08FFB177A90A4DF585A703215CEC19AA&CID=070910FF0C0362112C11188E0DD06323&ID=", "pageLoadPingUrl": "https://www.bingapis.com/api/ping/pageload" }, "readLink": "https://www.bing.com/api/V7/images/search?q=cats", "webSearchUrl": "https://www.bing.com/images/search?q=cats&FORM=OIIARP", "webSearchUrlPingSuffix": "DevEx,5042.1", "totalEstimatedMatches": 1000, "value": [ { "name": "Proxecto Gato: cats wallpapers by bighdwallpapers", "webSearchUrl": "https://www.bing.com/images/search?view=detailv2&FORM=OIIRPO&q=cats&id=DF010D14AC241C0AC39B5EAFD85F8B117825C79B&simid=608001210598098509", "webSearchUrlPingSuffix": "DevEx,5043.1", "thumbnailUrl": "https://tse2.mm.bing.net/th?id=OIP.M42428010d527fc1225757ada9d9a8bccH0&pid=Api", "datePublished": "2012-08-23T12:00:00", "contentUrl": "https://4.bp.blogspot.com/-XkviAtJ1s6Q/T3YFb2RUhDI/AAAAAAAAAVQ/EHomLZlFMKo/s1600/small+cat.jpg", "hostPageUrl": "https://proxectogato.blogspot.com/2012/08/cats-wallpapers-by-bighdwallpapers.html", "hostPageUrlPingSuffix": "DevEx,5006.1", "contentSize": "241661 B", "encodingFormat": "jpeg", "hostPageDisplayUrl": "proxectogato.blogspot.com/2012/08/cats-wallpapers-by...", "width": 1600, "height": 1200, "thumbnail": { "width": 480, "height": 360 }, "imageInsightsToken": "ccid_QkKAENUn*mid_DF010D14AC241C0AC39B5EAFD85F8B117825C79B*simid_608001210598098509", "insightsSourcesSummary": { "shoppingSourcesCount": 1, "recipeSourcesCount": 0 }, "imageId": "DF010D14AC241C0AC39B5EAFD85F8B117825C79B", "accentColor": "5A4E46" }, { "name": "Kitten - Cats Wallpaper (18565791) - Fanpop", "webSearchUrl": "https://www.bing.com/images/search?view=detailv2&FORM=OIIRPO&q=cats&id=6119DF9238F0C40EC3C326F41919BAFBF88F5CA4&simid=608041523156487908", "webSearchUrlPingSuffix": "DevEx,5044.1", "thumbnailUrl": "https://tse3.mm.bing.net/th?id=OIP.M7dfb8973bca22c4939102df3ae3de66do0&pid=Api", "datePublished": "2012-06-29T23:55:00", "contentUrl": "https://images4.fanpop.com/image/photos/18500000/Kitten-cats-18565791-1024-768.jpg", "hostPageUrl": "https://www.fanpop.com/clubs/cats/images/18565791/title/kitten-wallpaper", "hostPageUrlPingSuffix": "DevEx,5011.1", "contentSize": "207480 B", "encodingFormat": "jpeg", "hostPageDisplayUrl": "www.fanpop.com/clubs/cats/images/18565791/title/kitten-wallpaper", "width": 1024, "height": 768, "thumbnail": { "width": 300, "height": 225 }, "imageInsightsToken": "ccid_ffuJc7yi*mid_6119DF9238F0C40EC3C326F41919BAFBF88F5CA4*simid_608041523156487908", "insightsSourcesSummary": { "shoppingSourcesCount": 1, "recipeSourcesCount": 0 }, "imageId": "6119DF9238F0C40EC3C326F41919BAFBF88F5CA4", "accentColor": "7D694E" }, { "name": "Wonderous Cats Admiration of the docile feline", "webSearchUrl": "https://www.bing.com/images/search?view=detailv2&FORM=OIIRPO&q=cats&id=EDF89351A0ECA99617C859D06F71450FCB5EF2E3&simid=608032623984250213", "webSearchUrlPingSuffix": "DevEx,5045.1", "thumbnailUrl": "https://tse1.mm.bing.net/th?id=OIP.M38d3aa9aa6cc8c444492212efdb3a91dH0&pid=Api", "datePublished": "2014-04-27T22:53:00", "contentUrl": "https://www.andrew.cmu.edu/user/cfperron/cats/images/cat8.jpg", "hostPageUrl": "https://www.andrew.cmu.edu/user/cfperron/cats/", "hostPageUrlPingSuffix": "DevEx,5016.1", "contentSize": "484631 B", "encodingFormat": "jpeg", "hostPageDisplayUrl": "www.andrew.cmu.edu/user/cfperron/cats", "width": 2015, "height": 1511, "thumbnail": { "width": 480, "height": 359 }, "imageInsightsToken": "ccid_ONOqmqbM*mid_EDF89351A0ECA99617C859D06F71450FCB5EF2E3*simid_608032623984250213", "insightsSourcesSummary": { "shoppingSourcesCount": 1, "recipeSourcesCount": 0 }, "imageId": "EDF89351A0ECA99617C859D06F71450FCB5EF2E3", "accentColor": "5F4937" } ], "queryExpansions": [ { "text": "Grumpy Cat", "displayText": "Grumpy", "webSearchUrl": "https://www.bing.com/images/search?q=Grumpy+Cat&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22Grumpy%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d&FORM=IRPATC", "webSearchUrlPingSuffix": "DevEx,5049.1", "searchLink": "https://www.bing.com/api/V7/images/search?q=Grumpy+Cat&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22Grumpy%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d", "thumbnail": { "thumbnailUrl": "https://tse3.mm.bing.net/th?q=Grumpy+Cat&pid=Api&mkt=en-US&adlt=moderate&t=1" } }, { "text": "Funny Cats", "displayText": "Funny", "webSearchUrl": "https://www.bing.com/images/search?q=Funny+Cats&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22Funny%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d&FORM=IRPATC", "webSearchUrlPingSuffix": "DevEx,5051.1", "searchLink": "https://www.bing.com/api/V7/images/search?q=Funny+Cats&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22Funny%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d", "thumbnail": { "thumbnailUrl": "https://tse2.mm.bing.net/th?q=Funny+Cats&pid=Api&mkt=en-US&adlt=moderate&t=1" } } ], "nextOffsetAddCount": 0, "pivotSuggestions": [ { "pivot": "cats", "suggestions": [ { "text": "Felidae", "displayText": "Felidae", "webSearchUrl": "https://www.bing.com/images/search?q=Felidae&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22Felidae%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d&FORM=IRQBPS", "webSearchUrlPingSuffix": "DevEx,5134.1", "searchLink": "https://www.bing.com/api/V7/images/search?q=Felidae&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22Felidae%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d", "thumbnail": { "thumbnailUrl": "https://tse3.mm.bing.net/th?q=Felidae&pid=Api&mkt=en-US&adlt=moderate&t=1" } }, { "text": "African Wildcat", "displayText": "African Wildcat", "webSearchUrl": "https://www.bing.com/images/search?q=African+Wildcat&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22African+Wildcat%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d&FORM=IRQBPS", "webSearchUrlPingSuffix": "DevEx,5136.1", "searchLink": "https://www.bing.com/api/V7/images/search?q=African+Wildcat&tq=%7b%22pq%22%3a%22cats%22%2c%22qs%22%3a%5b%7b%22cv%22%3a%22cats%22%2c%22pv%22%3a%22cats%22%2c%22hps%22%3atrue%2c%22iqp%22%3afalse%7d%2c%7b%22cv%22%3a%22African+Wildcat%22%2c%22pv%22%3a%22%22%2c%22hps%22%3afalse%2c%22iqp%22%3atrue%7d%5d%7d", "thumbnail": { "thumbnailUrl": "https://tse3.mm.bing.net/th?q=African+Wildcat&pid=Api&mkt=en-US&adlt=moderate&t=1" } } ] } ], "displayShoppingSourcesBadges": false, "displayRecipeSourcesBadges": true } Template JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "Here are some cool photos", "size": "Large", "wrap": true }, { "type": "TextBlock", "text": "Sorry some of them are repeats", "size": "Medium", "weight": "Lighter", "wrap": true }, { "type": "ImageSet", "imageSize": "medium", "images": [ { "type": "Image", "url": "${value[0].contentUrl}" }, { "type": "Image", "url": "${value[1].contentUrl}" }, { "type": "Image", "url": "${queryExpansions[0].thumbnail.thumbnailUrl}" }, { "type": "Image", "url": "${queryExpansions[1].thumbnail.thumbnailUrl}" }, { "type": "Image", "url": "${pivotSuggestions[0].suggestions[0].thumbnail.thumbnailUrl}" }, { "type": "Image", "url": "${pivotSuggestions[0].suggestions[1].thumbnail.thumbnailUrl}" }, { "type": "Image", "url": "${value[2].thumbnailUrl}" } ] } ] }
Weather Compact
Data JSON { "coord":{ "lon":-122.12, "lat":47.67 }, "weather":[ { "id":802, "main":"Clouds", "description":"scattered clouds", "icon":"03n" } ], "base":"stations", "main": { "temp":281.05, "pressure":1022, "humidity":81, "temp_min":278.15, "temp_max":283.15 }, "visibility":16093, "wind": { "speed":4.1, "deg":360 }, "rain":{}, "clouds": { "all":40 }, "dt":1572920478, "sys":{ "type":1, "id":5798, "country":"US", "sunrise":1572879421, "sunset":1572914822 }, "timezone":-28800, "id":5808079, "name":"Redmond", "cod":200 } Template JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "speak": "The forecast for Seattle ${formatEpoch(dt, 'MMMM d')} is mostly clear with a High of ${formatNumber((main.temp_max - 273) * 9 / 5 + 32, 0)} degrees and Low of ${formatNumber((main.temp_min - 273) * 9 / 5 + 32, 0)} degrees", "body": [ { "type": "TextBlock", "text": "${name}, WA", "size": "Large", "isSubtle": true, "wrap": true }, { "type": "TextBlock", "text": "{{DATE(${formatEpoch(dt, 'yyyy-MM-ddTHH:mm:ssZ')}, SHORT)}} {{TIME(${formatEpoch(dt, 'yyyy-MM-ddTHH:mm:ssZ')})}}", "spacing": "None", "wrap": true }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "auto", "items": [ { "type": "Image", "url": "https://messagecardplayground.azurewebsites.net/assets/Mostly%20Cloudy-Square.png", "size": "Small" } ] }, { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "${formatNumber((main.temp - 273) * 9 / 5 + 32, 0)}", "size": "ExtraLarge", "spacing": "None", "wrap": true } ] }, { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "°F", "weight": "Bolder", "spacing": "Small", "wrap": true } ] }, { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "Hi ${formatNumber((main.temp_max - 273) * 9 / 5 + 32, 0)}", "horizontalAlignment": "Left", "wrap": true }, { "type": "TextBlock", "text": "Lo ${formatNumber((main.temp_min - 273) * 9 / 5 + 32, 0)}", "horizontalAlignment": "Left", "spacing": "None", "wrap": true } ] } ] } ] }
Weather Large
Data JSON: { "data": [ { "moonrise_ts": 1572993161, "wind_cdir": "SSE", "rh": 90, "pres": 1012.95, "high_temp": 8.6, "sunset_ts": 1573001147, "ozone": 252.181, "moon_phase": 0.768526, "wind_gust_spd": 4.4, "snow_depth": 0, "clouds": 70, "ts": 1572940860, "sunrise_ts": 1572966051, "app_min_temp": 3.7, "wind_spd": 1.33298, "pop": 25, "wind_cdir_full": "south-southeast", "slp": 1021.94, "valid_date": "2019-11-05", "app_max_temp": 10.2, "vis": 22.5692, "dewpt": 6.8, "snow": 0, "uv": 1.74992, "weather": { "icon": "https://messagecardplayground.azurewebsites.net/assets/Mostly%20Cloudy-Square.png", "code": 803, "description": "Broken clouds" }, "wind_dir": 162, "max_dhi": null, "clouds_hi": 0, "precip": 0.3125, "low_temp": 7.7, "max_temp": 10.4, "moonset_ts": 1572946958, "datetime": "2019-11-05", "temp": 8.5, "min_temp": 5.7, "clouds_mid": 0, "clouds_low": 70 }, { "moonrise_ts": 1573081007, "wind_cdir": "NNE", "rh": 88, "pres": 1015.48, "high_temp": 12.3, "sunset_ts": 1573087463, "ozone": 263.048, "moon_phase": 0.845631, "wind_gust_spd": 5, "snow_depth": 0, "clouds": 60, "ts": 1573027260, "sunrise_ts": 1573052542, "app_min_temp": 3.3, "wind_spd": 1.50821, "pop": 35, "wind_cdir_full": "north-northeast", "slp": 1024.5, "valid_date": "2019-11-06", "app_max_temp": 12.3, "vis": 23.125, "dewpt": 6.6, "snow": 0, "uv": 2.93193, "weather": { "icon": "https://messagecardplayground.azurewebsites.net/assets/Drizzle-Square.png", "code": 803, "description": "Broken clouds" }, "wind_dir": 18, "max_dhi": null, "clouds_hi": 17, "precip": 0.5, "low_temp": 5, "max_temp": 12.3, "moonset_ts": 1573037127, "datetime": "2019-11-06", "temp": 8.5, "min_temp": 6.6, "clouds_mid": 9, "clouds_low": 46 }, { "moonrise_ts": 1573168702, "wind_cdir": "SE", "rh": 71, "pres": 1006.39, "high_temp": 13.1, "sunset_ts": 1573173781, "ozone": 257.617, "moon_phase": 0.909923, "wind_gust_spd": 1.80495, "snow_depth": 0, "clouds": 94, "ts": 1573113660, "sunrise_ts": 1573139032, "app_min_temp": 0.5, "wind_spd": 0.77653, "pop": 0, "wind_cdir_full": "southeast", "slp": 1022.86, "valid_date": "2019-11-07", "app_max_temp": 13.1, "vis": 24.135, "dewpt": 2.6, "snow": 0, "uv": 1.10983, "weather": { "icon": "https://messagecardplayground.azurewebsites.net/assets/Mostly%20Cloudy-Square.png", "code": 804, "description": "Overcast clouds" }, "wind_dir": 136, "max_dhi": null, "clouds_hi": 94, "precip": 0, "low_temp": 4.4, "max_temp": 13.4, "moonset_ts": 1573127315, "datetime": "2019-11-07", "temp": 7.7, "min_temp": 4.2, "clouds_mid": 0, "clouds_low": 0 }, { "moonrise_ts": 1573256318, "wind_cdir": "SSE", "rh": 71, "pres": 1006.02, "high_temp": 15.8, "sunset_ts": 1573260100, "ozone": 258.722, "moon_phase": 0.958606, "wind_gust_spd": 2.11071, "snow_depth": 0, "clouds": 93, "ts": 1573200060, "sunrise_ts": 1573225523, "app_min_temp": 2.7, "wind_spd": 0.802894, "pop": 0, "wind_cdir_full": "south-southeast", "slp": 1022.2, "valid_date": "2019-11-08", "app_max_temp": 15.8, "vis": 24.1349, "dewpt": 4.5, "snow": 0, "uv": 0.989995, "weather": { "icon": "https://messagecardplayground.azurewebsites.net/assets/Mostly%20Cloudy-Square.png", "code": 804, "description": "Overcast clouds" }, "wind_dir": 167, "max_dhi": null, "clouds_hi": 93, "precip": 0, "low_temp": 6.1, "max_temp": 15.9, "moonset_ts": 1573217557, "datetime": "2019-11-08", "temp": 9.6, "min_temp": 6, "clouds_mid": 6, "clouds_low": 0 }, { "moonrise_ts": 1573343920, "wind_cdir": "SW", "rh": 78, "pres": 1008.56, "high_temp": 14, "sunset_ts": 1573346422, "ozone": 257.936, "moon_phase": 0.988998, "wind_gust_spd": 3.61965, "snow_depth": 0, "clouds": 88, "ts": 1573286460, "sunrise_ts": 1573312013, "app_min_temp": 2.5, "wind_spd": 1.00688, "pop": 0, "wind_cdir_full": "southwest", "slp": 1024.28, "valid_date": "2019-11-09", "app_max_temp": 14, "vis": 24.135, "dewpt": 5.2, "snow": 0, "uv": 1.06772, "weather": { "icon": "https://messagecardplayground.azurewebsites.net/assets/Mostly%20Cloudy-Square.png", "code": 804, "description": "Overcast clouds" }, "wind_dir": 228, "max_dhi": null, "clouds_hi": 88, "precip": 0, "low_temp": 5, "max_temp": 14.1, "moonset_ts": 1573307883, "datetime": "2019-11-09", "temp": 9, "min_temp": 5.9, "clouds_mid": 13, "clouds_low": 0 } ], "city_name": "King", "lon": "-122.1232", "timezone": "America/Los_Angeles", "lat": "47.6718", "country_code": "US", "state_code": "WA" } Template JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "speak": "Weather forecast for ${formatEpoch(data[0].sunrise_ts, 'dddd')} is high of ${formatNumber(data[0].app_max_temp / 5 * 9 + 32, 0)} and low of ${formatNumber(data[0].app_min_temp / 5 * 9 + 32, 0)} degrees with a ${formatNumber(data[0].precip * 100, 0)}% chance of rainWinds will be ${formatNumber(data[0].wind_gust_spd, 0)} mph from the ${data[0].wind_cdir}", "backgroundImage": "https://messagecardplayground.azurewebsites.net/assets/Mostly%20Cloudy-Background.jpg", "body": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "width": 35, "items": [ { "type": "Image", "url": "https://messagecardplayground.azurewebsites.net/assets/Mostly%20Cloudy-Square.png", "size": "Stretch" } ] }, { "type": "Column", "width": 65, "items": [ { "type": "TextBlock", "text": "{{DATE(${formatEpoch(data[0].sunrise_ts, 'yyyy-MM-ddTHH:mm:ssZ')}, SHORT)}}", "weight": "Bolder", "size": "Large", "wrap": true }, { "type": "TextBlock", "text": "${formatNumber(data[0].app_min_temp / 5 * 9 + 32, 0)} / ${formatNumber(data[0].app_max_temp / 5 * 9 + 32, 0)}", "size": "Medium", "spacing": "None", "wrap": true }, { "type": "TextBlock", "text": "${formatNumber(data[0].precip * 100, 0)}% chance of rain", "spacing": "None", "wrap": true }, { "type": "TextBlock", "text": "Winds ${data[0].wind_gust_spd} mph ${data[0].wind_cdir}", "spacing": "None", "wrap": true } ] } ] }, { "type": "ColumnSet", "columns": [ { "$data": "${data}", "$when": "${$index != 0}", "type": "Column", "width": 20, "items": [ { "type": "TextBlock", "horizontalAlignment": "Center", "text": "${formatEpoch(sunrise_ts, 'dddd')}", "wrap": true }, { "type": "Image", "size": "auto", "url": "${weather.icon}" }, { "type": "FactSet", "horizontalAlignment": "Right", "facts": [ { "title": "High", "value": "${formatNumber(app_max_temp / 5 * 9 + 32, 0)}" }, { "title": "Low", "value": "${formatNumber(app_min_temp / 5 * 9 + 32, 0)}" } ] } ], "selectAction": { "type": "Action.OpenUrl", "title": "View ${formatEpoch(sunrise_ts, 'dddd')}", "url": "https://www.microsoft.com" } } ] } ] }
JSON Scripts and Templates: Microsoft.com
In a continuation of my previous article, Adaptive Cards with Microsoft Teams with Examples, we continue with the details of how to create these Adaptive Cards with authored JSON templates. The templates can be used as-is, edited to suit your organization’s needs, or used as a launching point to customize your templates.
Samples and Templates of Adaptive Cards for Microsoft Teams
This is exciting as these select samples and templates are created and offered for Microsoft Teams to show what you can create. These can be copied, edited, and tweaked to create any possible scenario. There are limitless scenarios to design and create.
Part 1 of this series includes templates for Activity Update Sample, Activity Update with Labels, Calendar Reminder, and Calendar Reminder with Labels.
Activity Update Sample
Data JSON: { "title": "Publish Adaptive Card Schema", "description": "Now that we have defined the main rules and features of the format, we need to produce a schema and publish it to GitHub. The schema will be the starting point of our reference documentation.", "creator": { "name": "Matt Hidinger", "profileImage": "https://pbs.twimg.com/profile_images/3647943215/d7f12830b3c17a5a9e4afcc370e3a37e_400x400.jpeg" }, "createdUtc": "2017-02-14T06:08:39Z", "viewUrl": "https://adaptivecards.io", "properties": [ { "key": "Board", "value": "Adaptive Cards" }, { "key": "List", "value": "Backlog" }, { "key": "Assigned to", "value": "Matt Hidinger" }, { "key": "Due date", "value": "Not set" } ] } Template JSON: { "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "size": "Medium", "weight": "Bolder", "text": "${title}", "wrap": true, "style": "heading" }, { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "Image", "style": "Person", "url": "${creator.profileImage}", "size": "Small" } ], "width": "auto" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "${creator.name}", "wrap": true }, { "type": "TextBlock", "spacing": "None", "text": "Created {{DATE(${string(createdUtc)}, SHORT)}}", "isSubtle": true, "wrap": true } ], "width": "stretch" } ] }, { "type": "TextBlock", "text": "${description}", "wrap": true }, { "type": "FactSet", "facts": [ { "$data": "${properties}", "title": "${key}:", "value": "${value}" } ] } ], "actions": [ { "type": "Action.ShowCard", "title": "Set due date", "card": { "type": "AdaptiveCard", "body": [ { "type": "Input.Date", "id": "dueDate" }, { "type": "Input.Text", "id": "comment", "placeholder": "Add a comment", "isMultiline": true } ], "actions": [ { "type": "Action.Submit", "title": "OK" } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json" } }, { "type": "Action.OpenUrl", "title": "View", "url": "${viewUrl}" } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.0" }
Activity Update with Labels
Data JSON: { "title": "Publish Adaptive Card Schema", "description": "Now that we have defined the main rules and features of the format, we need to produce a schema and publish it to GitHub. The schema will be the starting point of our reference documentation.", "creator": { "name": "Matt Hidinger", "profileImage": "https://pbs.twimg.com/profile_images/3647943215/d7f12830b3c17a5a9e4afcc370e3a37e_400x400.jpeg" }, "createdUtc": "2017-02-14T06:08:39Z", "viewUrl": "https://adaptivecards.io", "properties": [ { "key": "Board", "value": "Adaptive Cards" }, { "key": "List", "value": "Backlog" }, { "key": "Assigned to", "value": "Matt Hidinger" }, { "key": "Due date", "value": "Not set" } ] } Template JSON: { "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "size": "medium", "weight": "bolder", "text": "${title}", "style": "heading" }, { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "Image", "style": "person", "url": "${creator.profileImage}", "size": "small" } ], "width": "auto" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "bolder", "text": "${creator.name}", "wrap": true }, { "type": "TextBlock", "spacing": "none", "text": "Created {{DATE(${string(createdUtc)}, SHORT)}}", "isSubtle": true, "wrap": true } ], "width": "stretch" } ] }, { "type": "TextBlock", "text": "${description}", "wrap": true }, { "type": "FactSet", "facts": [ { "$data": "${properties}", "title": "${key}:", "value": "${value}" } ] } ], "actions": [ { "type": "Action.ShowCard", "title": "Set due date", "card": { "type": "AdaptiveCard", "body": [ { "type": "Input.Date", "label": "Enter the due date", "id": "dueDate" }, { "type": "Input.Text", "id": "comment", "isMultiline": true, "label": "Add a comment" } ], "actions": [ { "type": "Action.Submit", "title": "OK" } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json" } }, { "type": "Action.OpenUrl", "title": "View", "url": "${viewUrl}" } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.0" }
Calendar Reminder
Data JSON: { "kind": "calendar#event", "etag": "\"3007572097704000\"", "id": "_6sp3gdjcksmab9kc4rgq1aldjelm8chhcgp66phocg_20191105T150000Z", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=XzZzcDNnZGoxNjBxamdiYjRja3NtYWI5a2M0cmplYjlwNjhyM2diOXA2Z3FtOGNoaGNncDY2cGhvY2dfMjA2xO1UwMDAuZ0Bt", "created": "2016-12-29T06:35:05.000Z", "updated": "2018-04-24T14:04:50.184Z", "summary": "Adaptive Card design session", "location": "Conf Room 112/3377 (10)", "creator": { "email": "[email protected]", "displayName": "John Doe", "self": true }, "organizer": { "email": "[email protected]", "displayName": "John Doe", "self": true }, "start": { "dateTime": "2019-11-05T12:30:00-08:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2019-11-05T13:30:00-08:00", "timeZone": "America/Los_Angeles" }, "recurringEventId": "_6sp3gdj160qjgbb4cksmab9kc4rjeb9p68r3gb9p6gqm8chhcgp66phocg", "originalStartTime": { "dateTime": "12:30", "timeZone": "America/Los_Angeles" }, "visibility": "private", "iCalUID": "7286a058-de9e-4a77-9268-945d21d2cf8d", "sequence": 4, "reminders": { "useDefault": false, "overrides": [ { "method": "popup", "minutes": "5" }, { "method": "popup", "minutes": "15" }, { "method": "popup", "minutes": "30" } ] } } Template JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "speak": "Your meeting about \"Adaptive Card design session\" is starting at ${formatDateTime(start.dateTime, 'HH:mm')}pmDo you want to snooze or do you want to send a late notification to the attendees?", "body": [ { "type": "TextBlock", "text": "${summary}", "size": "Large", "weight": "Bolder", "wrap": true, "style": "heading" }, { "type": "TextBlock", "text": " ${location} ", "isSubtle": true, "wrap": true }, { "type": "TextBlock", "text": "${formatDateTime(start.dateTime, 'HH:mm')} - ${formatDateTime(end.dateTime, 'hh:mm')}", "isSubtle": true, "spacing": "None", "wrap": true }, { "type": "TextBlock", "text": "Snooze for", "wrap": true }, { "type": "Input.ChoiceSet", "id": "snooze", "value": "${reminders.overrides[0].minutes}", "choices": [ { "$data": "${reminders.overrides}", "title": "${minutes} minutes", "value": "${minutes}" } ] } ], "actions": [ { "type": "Action.Submit", "title": "Snooze", "data": { "x": "snooze" } }, { "type": "Action.Submit", "title": "I'll be late", "data": { "x": "late" } } ] }
Calendar Reminder with Labels
Data JSON: { "kind": "calendar#event", "etag": "\"3007572097704000\"", "id": "_6sp3gdjcksmab9kc4rgq1aldjelm8chhcgp66phocg_20191105T150000Z", "status": "confirmed", "htmlLink": "https://www.google.com/calendar/event?eid=XzZzcDNnZGoxNjBxamdiYjRja3NtYWI5a2M0cmplYjlwNjhyM2diOXA2Z3FtOGNoaGNncDY2cGhvY2dfMjA2xO1UwMDAuZ0Bt", "created": "2016-12-29T06:35:05.000Z", "updated": "2018-04-24T14:04:50.184Z", "summary": "Adaptive Card design session", "location": "Conf Room 112/3377 (10)", "creator": { "email": "[email protected]", "displayName": "John Doe", "self": true }, "organizer": { "email": "[email protected]", "displayName": "John Doe", "self": true }, "start": { "dateTime": "2019-11-05T12:30:00-08:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2019-11-05T13:30:00-08:00", "timeZone": "America/Los_Angeles" }, "recurringEventId": "_6sp3gdj160qjgbb4cksmab9kc4rjeb9p68r3gb9p6gqm8chhcgp66phocg", "originalStartTime": { "dateTime": "12:30", "timeZone": "America/Los_Angeles" }, "visibility": "private", "iCalUID": "7286a058-de9e-4a77-9268-945d21d2cf8d", "sequence": 4, "reminders": { "useDefault": false, "overrides": [ { "method": "popup", "minutes": "5" }, { "method": "popup", "minutes": "15" }, { "method": "popup", "minutes": "30" } ] } } Template JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "speak": "Your meeting about \"Adaptive Card design session\" is starting at ${formatDateTime(start.dateTime, 'HH:mm')}pmDo you want to snooze or do you want to send a late notification to the attendees?", "body": [ { "type": "TextBlock", "text": "${summary}", "size": "Large", "weight": "Bolder", "style": "heading" }, { "type": "TextBlock", "text": " ${location} ", "isSubtle": true }, { "type": "TextBlock", "text": "${formatDateTime(start.dateTime, 'HH:mm')} - ${formatDateTime(end.dateTime, 'hh:mm')}", "isSubtle": true, "spacing": "None" }, { "type": "Input.ChoiceSet", "id": "snooze", "label": "Snooze for", "value": "${reminders.overrides[0].minutes}", "choices": [ { "$data": "${reminders.overrides}", "title": "${minutes} minutes", "value": "${minutes}" } ] } ], "actions": [ { "type": "Action.Submit", "title": "Snooze", "data": { "x": "snooze" } }, { "type": "Action.Submit", "title": "I'll be late", "data": { "x": "late" } } ] }
JSON Scripts and Templates: Microsoft.com
In a continuation of my earlier article, Adaptive Cards with Microsoft Teams with Examples, we continue with the details of how to create these Adaptive Cards authored with JSON templates while leveraging the power of Flow. The templates can be used as-is, edited to suit your organization’s needs, or used as a launching point to customize your templates.
Samples and Templates of Adaptive Cards and Flow for Microsoft Teams
Bringing Flow and Adaptive Cards together for Microsoft Teams these select templates are created and offered to show what you can create. These can be copied, edited, and tweaked to create any possible scenario. There are limitless scenarios to design and create.
In addition to the previous Adaptive Cards with Microsoft Teams – JSON Templates Parts 1 – 8, we are adding JSON templates that work seamlessly with Flow for full engagement with users.
In the previous installment, Adaptive Cards and Flow with Microsoft Teams – JSON Templates Part 1, templates included Candidate Feedback, Image Share, Lead Collection, and Poll Generator.
Metadata Update
JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "Metadata Update Card", "weight": "bolder", "size": "large", "id": "acTitle" }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "Sub Header Tag Line", "weight": "Bolder", "wrap": true, "id": "acSubHeader" } ] } ] }, { "type": "TextBlock", "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In condimentum leo lorem, at facilisis augue hendrerit eget. Praesent ut malesuada ipsum. Vivamus semper faucibus felis quis sagittis. Nunc pellentesque metus at nunc gravida, vitae volutpat sapien vehicula. Nulla lorem nibh, porttitor vel semper ut, ornare nec erat.", "wrap": true, "id": "acDescriptionArea" }, { "type": "FactSet", "facts": [ { "title": "Fact 1:", "value": "{acFact1}" }, { "title": "Fact 2:", "value": "{acFact2}" }, { "title": "Fact 3:", "value": "{acFact3}" } ], "id": "acFactSet" }, { "type": "Container", "spacing": "Large", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "HEADER 1" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "HEADER 2" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "weight": "Bolder", "text": "HEADER 3" } ], "width": "stretch" } ] } ], "bleed": true }, { "type": "ColumnSet", "columns": [ { "type": "Column", "items": [ { "type": "TextBlock", "text": "Column 1", "wrap": true, "id": "acCol1" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "Column 2", "wrap": true, "id": "acCol2" } ], "width": "stretch" }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "Column 3", "wrap": true, "id": "acCol4" } ], "width": "stretch" } ], "$data": "acDataContext" } ], "bleed": true }
Daily Weather
JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "{acCity}, {acState}", "size": "Large", "isSubtle": true }, { "type": "TextBlock", "text": "{acCurrentDateTime}", "spacing": "None" }, { "type": "TextBlock", "text": "{acDailySummary}", "spacing": "None" }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "auto", "items": [ { "type": "Image", "url": "{acUrlConditionsImage}", "size": "Large" } ] }, { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "{acCurrentTemperature}", "size": "ExtraLarge", "spacing": "None" } ] }, { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "°F", "weight": "Bolder", "spacing": "Small" } ] }, { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "Hi {actempHi}", "horizontalAlignment": "Left" }, { "type": "TextBlock", "text": "Lo {actempLow}", "horizontalAlignment": "Left", "spacing": "None" } ] } ] } ] }
Acronym Form
Data JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "Acronym Logger", "id": "Title", "spacing": "Medium", "horizontalAlignment": "Center", "size": "ExtraLarge", "weight": "Bolder", "color": "Accent" }, { "type": "Container", "items": [ { "type": "TextBlock", "text": "Acronym", "wrap": true, "spacing": "Medium" }, { "type": "Input.Text", "id": "acAcronym", "placeholder": "Enter the abbreviation for the acronym" }, { "type": "TextBlock", "text": "Definition", "wrap": true }, { "type": "Input.Text", "placeholder": "Enter a definition of the acronym above", "id": "acDefinition", "isMultiline": true } ] } ], "actions": [ { "type": "Action.Submit", "title": "Submit", "id": "btnSubmit" } ] }
JSON scripts and templates: Microsoft.com
With these templates, it is easy to create, share, and reuse existing templates to meet your organization’s needs by engaging your users with Adaptive Cards with Microsoft Teams.
In a continuation of my earlier article, Adaptive Cards with Microsoft Teams with Examples , we continue with the details of how to create these Adaptive Cards authored with JSON templates while leveraging the power of Flow. The templates can be used as-is, edited to suit your organization’s needs, or used as a launching point to customize your templates.
Samples and Templates of Adaptive Cards and Flow for Microsoft Teams
Bringing Flow and Adaptive Cards together for Microsoft Teams these select templates are created and offered to show what you can create. These can be copied, edited, and tweaked to create any possible scenario. There are limitless scenarios to design and create.
To the previous Adaptive Cards with Microsoft Teams – JSON Templates Parts 1 – 8, we are adding JSON templates that work seamlessly with Flow for full engagement with users.
Candidate Feedback
JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "size": "Medium", "weight": "Bolder", "id": "Title", "text": "CANDIDATE FEEDBACK FORM", "horizontalAlignment": "Left" }, { "type": "Input.Text", "placeholder": "{acFullName}", "style": "text", "isMultiline": false, "maxLength": 75, "id": "acFullName" }, { "type": "Input.Text", "placeholder": "{acComments}", "style": "text", "isMultiline": true, "maxLength": 200, "id": "acComments" }, { "type": "TextBlock", "size": "Medium", "weight": "Bolder", "text": "Decision", "horizontalAlignment": "Left", "separator": true }, { "type": "Input.ChoiceSet", "id": "acDecision", "value": "1", "choices": [ { "title": "Hire", "value": "Hire" }, { "title": "No Hire", "value": "No Hire" } ], "style": "expanded" }, { "type": "TextBlock", "text": "Suggest follow-up discussion regarding:", "weight": "Bolder" }, { "type": "Input.ChoiceSet", "id": "acFollowUp", "isMultiSelect": true, "value": "", "choices": [ { "title": "Past experience in the topic area", "value": "Experience" }, { "title": "Inclusive behaviors and work ethics", "value": "Inclusivity" }, { "title": "Ability to work without supervision", "value": "Independent" } ] } ], "actions": [ { "type": "Action.Submit", "title": "Submit" } ] }
Image Share
JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "{acphotoTitle}", "id": "Title", "size": "Large" }, { "type": "TextBlock", "text": "{acTimestamp}", "size": "Medium", "weight": "Lighter" }, { "type": "Image", "altText": "{acAltText}", "url": "{acImageThumbnail}" } ], "spacing": "None" }
Lead Collection
JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "width": 2, "items": [ { "type": "TextBlock", "text": "Lead Notification", "weight": "Bolder", "id": "Title", "size": "ExtraLarge" }, { "type": "TextBlock", "text": "Please fill out a single form for each individual expressing interest in our products. ", "isSubtle": true, "wrap": true, "id": "acInstructions", "size": "Large" } ] } ] }, { "type": "Container", "items": [ { "type": "TextBlock", "text": "Potential Customer FIRST NAME", "wrap": true, "size": "Medium" } ] }, { "type": "Input.Text", "id": "acLeadFName", "placeholder": "{firstName}" }, { "type": "TextBlock", "text": "Potential Customer LAST NAME", "wrap": true }, { "type": "Input.Text", "id": "acLeadLName", "placeholder": "{lastName}" }, { "type": "TextBlock", "text": "Corporate email", "wrap": true }, { "type": "Input.Text", "id": "acLeadEmail", "placeholder": "{emailAddress}", "style": "Email" }, { "type": "TextBlock", "text": "Business Phone Number" }, { "type": "Input.Text", "id": "acLeadPrimaryPhone", "placeholder": "{primaryPhone10digits}", "style": "Tel" }, { "type": "RichTextBlock", "inlines": [ { "type": "TextRun", "text": "{productInterests}" } ] }, { "type": "Input.ChoiceSet", "placeholder": "Placeholder text", "choices": [ { "title": "Office 365", "value": "Office 365" }, { "title": "Dynamics 365", "value": "Dynamics 365" }, { "title": "Azure Services", "value": "Azure Services" }, { "title": "Power Platform", "value": "Power Platform" } ], "style": "expanded", "id": "acLeadProductInterest", "isMultiSelect": true } ], "actions": [ { "type": "Action.Submit", "title": "Submit" } ] }
Poll Generator
JSON: { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "Poll Request", "id": "Title", "spacing": "Medium", "horizontalAlignment": "Center", "size": "ExtraLarge", "weight": "Bolder", "color": "Accent" }, { "type": "TextBlock", "text": "Header Tagline Text", "id": "acHeaderTagLine", "separator": true }, { "type": "TextBlock", "text": "Poll Header", "weight": "Bolder", "size": "ExtraLarge", "spacing": "None", "id": "acHeader" }, { "type": "TextBlock", "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer vestibulum lorem eget neque sollicitudin, quis malesuada felis ultrices. ", "id": "acInstructions", "wrap": true }, { "type": "TextBlock", "text": "Poll Question", "id": "acPollQuestion" }, { "type": "Input.ChoiceSet", "placeholder": "Select from these choices", "choices": [ { "title": "Choice 1", "value": "Choice 1" }, { "title": "Choice 2", "value": "Choice 2" }, { "title": "Choice 3", "value": "Choice 3" } ], "id": "acPollChoices", "style": "expanded" } ], "actions": [ { "type": "Action.Submit", "title": "Submit", "id": "btnSubmit" } ] }
JSON Scripts and Templates: Microsoft.com
What are Adaptive Cards? Adaptive Cards allows you to focus on the layout and content of what you want to share and how it is to be organized, such as using images, columns, tables, etc. It does not focus on how it is displayed on a device and is unconcerned about the browser that is being used. Adaptive Cards are platform-agnostic and can be exchanged openly between apps and services as they are authored in JSON format. The display of the content is the responsibility of the host application where it controls color, buttons, backgrounds, fonts, and specific parts of the layout. When the Adaptive Card is delivered to a specific app, such as Microsoft Teams, the JSON converts to the native UI and automatically adapts to its hosts. Once the card is displayed, it appears as another user interface.
What can Adaptive Cards be used for?
There are several scenarios where Adaptive Cards can be leveraged to increase user engagement. You can:
Samples of Adaptive Cards for Microsoft Teams
This is exciting as these select samples and templates have been created and are offered in Microsoft Teams to show what you can create. These can be copied, edited, and tweaked to create any possible scenario. There are limitless scenarios to design and create.
Activity Update and Activity Update with Labels
Calendar Reminder and Calendar Reminder with Labels: displays a message reminding the user of a calendar appointment.
Image Gallery
Weather Compact
Weather Large
Product Video: imbed multi-media assets in Adaptive Cards.
Expense Report and Expense Report with Labels
Show Card Wizard: using Adaptive Cards, create a wizard-like user interface.
Food Order and Food Order with Validation: a sample of how a menu selection can be created with an Adaptive Card
Input Form and Input Form with Labels
Inputs and Inputs with Validation
Restaurant
Sporting Event
Stock Update
Agenda
Flight Itinerary: used in a booking application and will list information related to booking flights including a list of flights, cost, and passengers.
Flight Update: displays a list of flights, flight status, and passengers.
Flight Details
Simple Fallback
Adaptive Cards and Flow for Microsoft Teams
When an instant flow button is integrated with an Adaptive Card, collaboration and engagement in Microsoft Teams are instantaneous. There are several instances where Flow can be leveraged with an Adaptive Card, and the following examples explore these possibilities.
Candidate Feedback
Image Share: designed for sharing photos in a display-only mode. Photos are shared from posted images on SharePoint and are undergoing completion processes related to compliance, audits, and inspection.
Lead Collection: this is an input form created to collect information of potential clients that is completed by the user and submitted.
Poll Generator: this is an input form for polling and it will provide different decision paths to the recipient that are based on voting counts or poll values.
Metadata Update: This is a display Adaptive Card, but input fields can be added if one of the Wait for response actions is used to create it. This Adaptive Card enables flow makers to update and notify Teams members or channels with metadata related to files, records, or topics. This card consists of three sections: the topic header (contains the header, sub-header, and a description), fact list area (shows relevant row metadata), and column set (supports a table array of data).
Daily Weather: designed to post daily weather updates to a Teams channel in conjunction with MSN weather.
Acronym Form: this is an Adaptive Card leveraging an input form to collect data on acronym usage and is stored in the Dataverse and can be queried from anywhere as this is an ongoing project of data collection.
Images and Media: Microsoft.com
Adaptive Cards are a vehicle to design and integrate lightweight UI for all major frameworks and systems including Android, iOS, Windows, ReactNative, JavaScript, ASP.NET, and .NET WPF. Adaptive Cards provide process designers the ability to achieve consistent UI patterns whenever there is a need to display information as a part of the business automation or process.