Adaptive Cards
Beachte dazu auch die Seite Teams eingehend WebHooks
WebHooks, Bots und andere Dienste kommunizieren mit Anwendern. Wie bei Mails kann ein Prozess einfach Text oder formatierten Text senden aber dann muss der Ersteller sich noch Gedanken um das Layout auf den verschiedenen Geräten machen. Da bietet es sich an, wenn der Client von Microsoft auch ein neues Format versteht, welches sogar Interaktionen über definierte Wege erlaubt. Das freut auch die IT-Sicherheit, wenn 3rd-Party Tools keine HTML-Seiten mit JavaScript u.a. auf einem Client starten.
Adaptive Cards habe ich aktuell beim Einsatz mit Teams Webhooks und Bots kennen gelernt. Das Prinzip ist aber offen und ich denke es wird noch weitere Anwendungsfälle geben.
Quellen
Die MSXFAQ ist sicher nicht die "Programmierer-Referenz" und wer mit Adaptive Cards starten will, findet viele Quellen, von denen ich einige hier aufführe.
Skype for Business is not on our roadmap at this time as
Microsoft's investments on collaboration software is
targeted at Microsoft Teams, which now fully supports
adaptive cards.
Quelle: Kommentare auf
https://docs.microsoft.com/en-us/adaptive-cards/
Adaptive Cards in Bots, Windows, Outlook and your own
applications : Build 2018
https://www.youtube.com/watch?time_continue=48&v=GJkep8wToVA
- Adaptive Cards Designer
https://adaptivecards.io/designer/
Damit habe ich mein Sample erstellt - Designer-SDK für adaptive Karten
https://docs.microsoft.com/de-de/adaptive-cards/sdk/designer - Vorlagen für adaptive Karten
https://docs.microsoft.com/de-de/adaptive-cards/templating/ - Office 365: Using Incoming Webhooks in
Microsoft Teams
http://itcloudpro.net/2017/09/29/office-365-using-incoming-webhooks-in-microsoft-teams/ - Microsoft Teams Incoming Webhook -
Message Formatting
https://techcommunity.microsoft.com/t5/Microsoft-Teams/Microsoft-Teams-Incoming-Webhook-Message-Formatting/m-p/31984 - Outlook: Legacy actionable message card reference
https://go.microsoft.com/fwlink/?linkid=837668
https://docs.microsoft.com/en-us/outlook/actionable-messages/message-card-reference - Get started with Office 365 Connector Cards
http://aka.ms/o365connectors
https://GitHub.com/OfficeDev/Office-365-Connectors - Demo - Create a Card payload and submit it via an
Incoming Webhook
https://GitHub.com/OfficeDev/TrainingContent/tree/master/ConnectorActionableMsgs/01%20Build%20a%20basic%20Connector/Demos/01-card-webhook
Für die Erstellung von Adaptive Cards gibt es verschiedene Editoren im Internet
- Introducing Adaptive Cards
https://adaptivecards.io - Adaptive Cards Overview
https://docs.microsoft.com/en-us/adaptive-cards/ - Adaptive Cards for Outlook Actionable Message Developers
https://docs.microsoft.com/de-de/adaptive-cards/getting-started/outlook - Sample für Adaptive Cards
https://messagecardplayground.azurewebsites.net/ - Designer for Actionable Messages
https://amdesigner.azurewebsites.net/
Beispiel
Für meine Beispielanwendung habe ich mir das Leben einfach gemacht und einfach mal nur eine Zeile und einen Button mit Link generiert. Beachten Sie dabei eine Besonderheit, dass Teams ein Feld "Summary" erfordert, die von den meisten Generatoren nicht angelegt wird. Das Feld können Sie aber einfach manuell zwischen "Version" und "Body" einfügen
- adaptive cards example gives an error
https://GitHub.com/OfficeDev/outlook-dev-docs/issues/423
Hier steht aber auch, dass Adaptive Cards nicht unterstützt würden aber dafür "Message Cards", was vermutlich ein Vorläufer ist. - Post an actionable message card to an
Office 365 group
https://docs.microsoft.com/en-us/outlook/actionable-messages/send-via-connectors
Ich habe dennoch mit "Action Cards" weiter gemacht und per PowerShell mal schnell einen HTTP-Request erstellt.
Die "webhookuri" bekommen Sie im Teams Client, wenn Sie dort einen WebHook erstellen. Siehe Teams WebHooks
param ( $webhookuri = 'https://msxfaq.webhook.office.com/webhook/<id1>/IncomingWebhook/<id2>' ) $body = @" { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "summary": "Update der MSXFAQ", "body": [ { "type": "ColumnSet", "columns": [ { "width": "32px", "items": [ { "type": "Image", "width": "32px", "horizontalAlignment": "Center", "url": "https://www.msxfaq.de/images/kachel/msxfaq70x70.png", "altText": "MSXFAQ Logo" } ], "type": "Column" }, { "width": "stretch", "items": [ { "type": "TextBlock", "text": "MSXFAQ-Update" } ], "type": "Column" } ] }, { "type": "ColumnSet", "spacing": "Large", "separator": true, "columns": [ { "width": "32px", "items": [ { "type": "Image", "width": "32px", "style": "Person", "horizontalAlignment": "Center", "url": "https://www.msxfaq.de/images/logbuchn.gif", "altText": "Neue Seite: Samplecode" } ], "type": "Column" }, { "width": "stretch", "items": [ { "type": "TextBlock", "text": "Es gibt was neues auf der MSXFAQ" } ], "type": "Column" } ] } ], "actions": [ { "type": "Action.OpenUrl", "title": "Webseite öffnen", "url": "https://www.msxfaq.de/sonst/logbuch.htm", "iconUrl": "https://www.msxfaq.de/images/kachel/msxfaq70x70.png" } ] } "@ $result = invoke-webrequest ` -method POST ` -uri $webhookuri ` -contenttype 'application/json' ` -body $body
Die Rückgabe ist unspektakulär und im Body steht einfach nur eine "1" drin, was Sie als "Wahr" oder Erfolg interpretieren können:
PS C:\> $result.RawContent HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache request-id: 54f99598-9fc5-4924-b12f-7af4fbf4be69 X-CalculatedBETarget: DB8PR04MB5641.eurprd04.prod.outlook.com X-BackEndHttpStatus: 200 X-AspNet-Version: 4.0.30319 X-CafeServer: DB6P191CA0016.EURP191.PROD.OUTLOOK.COM X-BEServer: DB8PR04MB5641 X-Proxy-BackendServerStatus: 200 X-Powered-By: ASP.NET X-FEServer: DB6P191CA0016 X-MSEdge-Ref: Ref A: 280814FC49894AB39360465BA0349FE7 Ref B: FRAEDGE0616 Ref C: 2019-09-07T11:38:31Z Date: Sat, 07 Sep 2019 11:38:31 GMT Content-Length: 1 Content-Type: text/plain; charset=utf-8 Expires: -1 1
Ausgabe in Teams
Allerdings entsprach die Anzeige im Team dann immer noch nicht genau meinen Vorstellungen:
- Ansicht in Teams
- Ansicht in (https://messagecardplayground.azurewebsites.net/)
Ansicht in https://adaptivecards.io/designer/
Da ist auf jeden Fall noch Feintuning erforderlich.
Weitere Links
- Teams WebHooks
- Graph API
- Use Webhook Connector to send data from
PowerShell to Microsoft Teams
https://blogs.technet.microsoft.com/stefan_stranger/2016/11/03/use-webhook-connector-to-send-data-from-powershell-to-microsoft-teams/ - Microsoft Teams Incoming Webhook -
Message Formatting
https://techcommunity.microsoft.com/t5/Microsoft-Teams/Microsoft-Teams-Incoming-Webhook-Message-Formatting/m-p/31984 - Splunk: Posting to Microsoft Teams via
Webhooks
https://www.rushworth.us/lisa/?p=3929 - Setting up Microsoft Teams webhook
notifications
https://kb.itglue.com/hc/en-us/articles/115001798191-Setting-up-Microsoft-Teams-webhook-notifications - Sending Messages to Microsoft Teams from
PowerShell just got easier and better
https://evotec.xyz/sending-to-microsoft-teams-from-powershell-just-got-easier-and-better/