Adaptive Cards in Outlook – ultimate guide
Table of contents:
It has been a while since I first thought about writing this post. Recently I had more questions around this topic and somehow realized, that indeed this is something about Adaptive Cards that I haven’t yet written about. So let me fix it with this ultimate guide.
See it in action!
Actionable Messages using Adaptive Cards
First you need to understand, that although this is still Adaptive Cards that are sent to Outlook they are called Actionable Messages sometimes too. They are fairly similar, but have some differences:
Adaptive Cards | Actionable Messages | |
---|---|---|
Version | 1.3 | 1.0 (source) |
Actions |
|
|
Target for submit | Not supported, must be handled by host | Supported. You can define target URL, headers and body. |
ActionSet | Yes | Yes |
Refreshing | Yes, but via host request | Yes, as a response from target URL |
Authentication | Security handled by the host, that sends card and receives response. | Service that sends cards must be registered and approved by Microsoft. Responses must be validated by client to confirm submitter's validity. |
Other differences | All goodies coming from versions 1.0+ |
|
Source: https://docs.microsoft.com/en-us/outlook/actionable-messages/adaptive-card#outlook-specific-adaptive-card-properties-and-features |
Note! As you can see from the comparison above, Actionable Messages are some kind of a hybrid between Adaptive Cards and old, legacy Message Cards. Still, you can send Actionable Message following Message Card JSON schema, but that’s not the goal for this post.
Requirements
The technology wouldn’t be itself if there weren’t any limitations to when and how it can be used. Basically there are certain versions of Outlook and Office 365 that supports Actionable Messages using either Message Cards or Adaptive Cards schema. Find out more here: https://docs.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages.
Important! Actionable Messages as a technology, works only inside Office 365 Outlook clients.
Send Actionable Message
Step 1, create Adaptive Card
To send Adaptive Card as an Actionable Message first go to https://adaptivecards.io/designer/ and switch “host app” to “Outlook Actionable Messages”:
This will automatically set version to 1.0 and change schema validation to allow you to insert all those exceptions I mentioned above. Now design your card.
Important! You need to define Id properties to each input fields in your card. They will be used to grab inserted values and send them to the target URL:
You can alternatively design card using Actionable Messages Designer: https://amdesigner.azurewebsites.net/ – using that tool you can not only preview the card to see how it looks, but you can as well send it to your inbox. And there is a set of ready-to-use templates. Awesome!
Step 2, define actions
Remember, there are couple more actions available for Actionable Messages. Lets focus on Http action. Take this one for an example:
{ "type": "Action.Http", "title": "Approve", "url": "https://[URL-OF-TARGET-APP]", "id": "ac_approve", "style": "positive", "method": "POST", "body": "{\"comments\":\"{{ac_comments.value}}\",\"outcome\":\"approve\"}", "headers": [ { "name": "Authorization", "value": "" }, { "name": "Content-type", "value": "application/json" } ] }
You need to define the following attributes:
- url – where contents from the form will be sent. In my case this will be another Power Automate flow triggered by Web Request action.
- method – POST or GET? In case of form, naturally POST.
- body – this has to be a serialized JSON. Note, you can refer to fields in your card by using
{{field_id.value}}
placeholder. - headers – define content type AND put empty “Authorization” header, since this will assure your request won’t interfere with target system authorization mechanism (source).
Step 3, build flow to handle response
Now you need to build flow triggered by “When a HTTP request is received” trigger. Define value of the request Body JSON Schema to the one, that you will be sending from Adaptive Card. In my case its simple:
{ "type": "object", "properties": { "comments": { "type": "string" }, "outcome": { "type": "string" } } }
Now you can define any logic inside the flow, what is important though is to add action “Response” that will send confirmation to the Actionable Message.
Replace existing Adaptive Card with confirmation Adaptive Card
If you’d like to simply replace existing in user’s inbox Adaptive Card with a confirmation one, design it and then configure “Response” action as following:
- Add header: content-type – application/json,
- Add header:
CARD-UPDATE-IN-BODY
– true
This header will tell Actionable Message, to rep[lace existing card with the one sent in Response body. - In Body copy-paste your confirmation Adaptive Card JSON.
Source: https://docs.microsoft.com/en-us/outlook/actionable-messages/adaptive-card#refresh-cards
Send notification back to user
If you’d like to send notification back to user, but without actually closing the card, use Status Code 4xx (as per your scenario) and:
- Add header: content-type – application/json,
- Add header:
CARD-ACTION-STATUS
– information to be displayed to user.
Step 4, publish flow handling response
And grab its URL, then paste in the “url” attribute of your post actions in the Adaptive Card.
Step 5, compose and send Actionable Message
Now put action Compose inside the flow that will be used to send Actionable Message. Inside the compose action, put Adaptive Card’s JSON between the <script> tags (source):
<script type="application/adaptivecard+json"> { YOUR ADAPTIVE CARD'S JSON } </script>
Finally add “Send an email (V2)” action, switch it into code mode and put outcomes of the “Compose” action:
Send message to yourself and test how it works! Voilla, easy scenario done.
Actionable Messages Debugger
To check and validate Actionable Message what you could find useful is the add-in to Microsoft Outlook called “Actionable Messages Debugger”. It will help you to identify issues with your message. To get it, click the “Get Add-ins” button, then search for debugger and finally hit “Add”:
Now once you open it for a message containing Actionable Message it will show you all the issues with it. For Like in the below example, where I sent Actionable Message without originator ID, so not from a registered provider:
Send Actionable Message to others
There are basically four scenarios how you can send the e-mail with Actionable Message (source):
- Send it from your inbox to the same inbox – no provider registration needed, generally described above.
- Defined test users within the same tenant – self-service provider registration and approval.
- Organization Exchange admins – approval sent to your tenant’s Exchange admins. Allows you to send Actionable Messages to any user within your tenant.
- Global – allow Actionable Message to be sent to any user in Office 365. Requires Microsoft approval.
To be able to send Actionable Message to other users inside Office 365 tenants, first thing you have to do is to open “Actionable Email Developer Dashboard” (https://outlook.office.com/connectors/oam/publish) and then register new provider.
Note! Registration of provider for the “Global” scope requires Microsoft approval and may take couple of days.
Once your provider is approved (it will be done automatically for test users and admins), copy “Provider Id” value:
And add it as an additional attribute to your Adaptive Card JSON code:
{ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "hideOriginalBody": true, "originator": "f6f1d226-abcd-asdaa-asdasd-123123123123", "body": [
Now depending on a chosen scope, you will be able to distribute your messages to a wider audience.
Message response verification
To verify that the sender of the Actionable Message response is the one who we expect, see the techniques in the second part of this post: https://poszytek.eu/en/microsoft-en/office-365-en/powerautomate-en/securing-responses-from-actionable-messages/.
And that’s all! If you have any questions, feel free to leave them in the comments below. Thank you 🙂
Nandha kumar
Thanks for the great explanation.
I have a created a flow to trigger mail. I can see adaptive card is getting rendered properly in Outlook office 365(App) and in browser(Outlook).
But not in Windows mail client(Office 365 Configured).
Is it something like windows mail client does not support adaptive card or am i missing something?
Can you help on this?
Tomasz Poszytek
I suggest you add Actionable Messages Debugger to your desktop client and check if there are any issues in such mail: https://appsource.microsoft.com/product/office/WA104381686
Marcos Gatti
Hi Tomasz, Thanks for the great explanation!
I’m facing the same issue than NANDHA KUMAR
I have a created a flow to trigger mail. I can see actionable message is getting rendered properly in Outlook office 365(App) and in browser(Outlook) but in Windows mail client(Office 365 Configured) some accounts (not all) got a blank email, in outlook web renders fine. I tried to install the add-in debugger but it’s not possible.
Any ideas what could be going on?
Tomasz Poszytek
Hey, be sure those clients are meeting the requirements: https://docs.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages 🙂
Anatolii
Awesome tutorial!
One thing I struggle to understand – are guest account emails within Organization scope or Global scope?
Tomasz Poszytek
Well, you’re sending mails to their “home” inboxes, aren’t you? So guests do have access to your data via local-guest accounts, however they don’t use the local inboxes. So in such case you need to use the Global scope, since these users are actually not form your tenant.
oliver
hi Tomasz, what could possibly trigger this error The remote endpoint returned an error (HTTP 401)?
Tomasz Poszytek
Well, definitely some kind of missing permissions. What’s your case?
Steve
Awesome blog here!
I am getting confused on versioning and how it applies to Actionable Messages / Adaptive Cards. I have a card that I send out through Outlook that works just great. I’m trying to add an iconURL to an Action button which was introduced in v1.1. If I change the version in the card to 1.1 it still doesn’t show up. It seems like Cards sent via Outlook can only use elements that existed in v1.0 of Adaptive Cards. Is that a correct assumption?
Tomasz Poszytek
Exactly. See here: https://docs.microsoft.com/en-us/adaptive-cards/resources/partners what are the Adaptive Cards versions you can use with each partner.
Steve
Thanks, any idea if they will update that in the near future to allow a more recent version for Outlook Actionable Messages?
Purvi Parmar
Hi Tomasz Poszytek,
Awesome blog. Thank you.
Even I get The remote endpoint returned an error (HTTP 401). I am using logic app http POST request.
Tomasz Poszytek
Have you registered the provider and used it’s id in card? Also, does the provider has the right scope? Please use Actionable Messages Debugger addin in Outlook to check potential issues.
Priya
Hi Tomasz, Great blog.. I have created an adaptive card that is sent to multiple users. Is there any way to get user info like user email ID on click of submit action, to check which user actioned on response!!
Tomasz Poszytek
Thanks! No, unfortunately in Outlook it’s not directly possible. You can secure Actionable Message with certificate or try other methods to discover who clicked the button: https://poszytek.eu/en/microsoft-en/office-365-en/powerautomate-en/securing-responses-from-actionable-messages/.
Brandon Langford
Tomasz,
Thank you for the great video. I would like to use adaptive cards in an e-mail with approve or reject feature similar to your example, but with my application, there is a lot of logic that has to be processed which may require further approval based on an approver’s signature authority etc.. Is there a way for outlook to notify your application of the response and allow me to process the response and then send a response back to outlook with a new confirmation adaptive card?
Tomasz Poszytek
Thank you. Sure it is. If you use Power Automate to handle the response, you can then program whatever logic you need together with sending new Actionable Messages.
Christos A.
Hi! My case is based on a youtube video and info from your site. I want to understand adaptive cards and to be able to apply a similar process inside my organization. My main problem is “The remote endpoint returned an error (HTTP 400). Please try again later.” when I choose the Action.Http from the adaptive card. I cannot find a solution nowhere. “When a HTTP request is received” action , is not triggered. Thank you in advance.
Tomasz Poszytek
Just check if the JSON body you are sending is valid. If you are using long text field, where user can type breaks, check if without new lines you are also getting 400. Also, be sure to escape quotes.
Vijay
I have a naive question here. We use offline excel to collect feedback from partners / oems /customer / vendors who are not on our o365 tenant. But if we adopt to using actionable emails we can reduce the excel overhead. Will this still work? We are not sure of customer mail provider. The may or not be on Microsoft based products.
But assuming most of them are on outlook client from a decision perspective do you suggest we adapt actionable emails? Any thoughts
Tomasz Poszytek
Hi, this technology indeed works only in Outlook mail clients. So if partner is using other client, like gmail, Adaptive Cards won’t display. Also, you need to register a global provider and get approval for it from Microsoft: https://outlook.office.com/connectors/oam/publish, so that you will be able to send cards outside of your tenant.
Yuri Lima
Good afternoon,
Thanks for the awesome tutorial.
In my case, I want to create a confirmation via Outlook for creating items in Microsoft Lists, for example: User receives email with Adaptive Card, when he clicks Approve, it will automatically generate an item in Microsoft Lists. To do this I am using Logic Apps and Microsoft Forms. Can you give me a light?
Tomasz Poszytek
You need to seal in logic that creates item in MS Lists inside that Logic App, that will be called after user hits approve button. The Logic App must be triggered using HTTP Request trigger.
Kyle
Hi Tomasz, great tutorial. I’m still confused about how to correlate the Approval Request in Approval to the actual Adaptive Card so that when they click on submit in outlook email, it approves it automatically through the email. So the users will rely on outlook email to approve instead of using approvals format.
Thanks,
Kyle
Tomasz Poszytek
The key point is the “Actions” section of Adaptive Card. It contains elements, with definitions telling AC where to send data if user clicks specific button. And that destination then can reply with a new AC code.
Adam Pospíšil
Hi, I cannot open the https://outlook.office.com/connectors/oam/publish
It always says an error. Is there some new way to do it, or it’s just broken?
Thanks,
Adam
Tomasz Poszytek
Nope, everything work like a charm. Try again 🙂
James Bruford
Hi, If I want to send the actionable card to Teams (using the wait for approval connector) as well as Outlook, and I approve the card in Outlook, how can i ensure the Teams card is updated to read only and the flow ends?
thanks
James
Tomasz Poszytek
Hi, this is not possible yet using Power Automate only. But the feature is coming and if you are able to build your own bot, you can already start benefit from it: https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/universal-actions-for-adaptive-cards/overview?tabs=mobile
Varun Kumar Kammakolu
In my scenario I have Email field which is a user input in adaptive card, so I want to send error message on adaptive card if user doesn’t enter an email address from Http response. How should I use the output of Email field in IF condition
Tomasz Poszytek
Basically validate if it contains contents. Just try to implement something like
empty(body('Contents_from_Adaptive_Card')['data']?['evaluated_field']) eq true
.Tomas
Hello,
how can I take input.toggle selection title as result in email. This expression is returning only true or false: body(‘test’)[‘data’]?[‘idtoggle’]
Tomasz Poszytek
Yes, toggle results in either true or false. But since you know the field ID, you can hardcode it in your flow, right? If not, you can as well add it’s label as one of the elements returned in response body.
vandana roy
Hello,
If in mail I put two user mail id in “To”, only one receives the adaptive card. Is this what is expected or I am doing something wrong”
Regards
Tomasz Poszytek
Is this mail sent from Cloud flow? What is your scenario?
Jose David
Thanks really thanks, you save my life
Tomasz Poszytek
You’re welcome! 🙂
Pavol Kiss
Hi Tomasz,
is there any way how to record user profile who responded to Outlook adaptive card?
Tomasz Poszytek
Well… Basically you know to whom you are sending the card. So in the end you can put their email as one of the values that are being sent back from the card.
Kyle
Tomas, it appears that it’s not working with Outlook web or mobile devices. Any recommendations on how to get it to work with these devices and browser versions?
Thanks,
Ashutosh Pandey
Hi Tomasz,
I have tried the steps you mentioned above still in my case card is not visible on outlook and browser . My outlook version is correct .
Because of org policy I can’t install debugging tool , is there any other way to check it.
Thanks
Ashutosh
Tomasz Poszytek
Unfortunately not. Debugging adaptive cards in Outlook is difficult. I don’t have an idea why it doesn’t work in your Outlook. Maybe check the same message in Outlook for the web and/ or mobile? Just to confirm that the card itself works. If not, maybe there is an error in JSON code of your card? Copy final code and paste into any tool for JSON validation.
Srilatha
Hi Tomasz, Great blog. Actionable message is getting rendered properly in Outlook office 365 and in browser outlook.
But in Outlook Office 365, I see a vertical scrollbar is coming.
Any ideas to remove the scrollbar.
Thanks.
Tomasz Poszytek
There is no property to handle scrollbars… This is out of your control I’m afraid.
Travis
Hi Tomasz,
Great article, thanks to your guidance, I’ve been able to write a few Power Automate Flows to send and receive Outlook Actionable Messages. I have a requirement to escalate if NO response was received. I’m not sure how to do that, any ideas?
Tomasz Poszytek
This is difficult when speaking about Actionable Messages, as there’s actually no service waiting for it. What you could do is at the moment when you send the message, save its details into a SPO list or Dataverse. Then build a scheduled cloud flow around that list, that is triggered every day, that checks if time elapsed for a specific message does not exceeds the defined timeout and if yes – execute some logic.
Martin Mostögl
Thanks for this great article! Will it be possible to get the sender of a response, if the adaptive card was sent to more than one recipient?
Tomasz Poszytek
If you distribute it with one action this is not possible afaik. So better is to send cards one-by-one in a loop, and then putting email of recipient as one of the values returned by submit action.
Martin Mostögl
Thanks, that’s exactly how I have implemented. I also added AutoInvoke – but here it seems that Outlook Client has a Problem handling this. Have you ever experienced such a solution, sending multiple actionable messages to many users with AutoInvoke, to check if somenone else has already clicket a button to commit? In my case, it works for one receipient, but all other, never get the updated adaptive card.
Willem Gouws
Hi Tomasz, in the JSON POST Body. How do I get the {{field_id.value}} placeholder for a FactSet { “type”: “FactSet”, “id”: “transactionDetails”, “facts”: [ { “title”: “Date:”, “value”: “2022-05-11” },….. I have tried {{transactionDetails.value}} and {{transactionDetails.facts}}
Tomasz Poszytek
You don’t do it for a factset. Each field inside the factset must have its unique ID, and then you can get their values by their IDs.
XBB
I have implemented signed adaptive cards and getting “The remote endpoint returned an error ( HTTP 403). Please try again later” error message. For this I have confirmed the registered provider id is included in the json as originator id, included the “Authorization”:”” in the headers and validated the json in an online validator. The outlook debugger has the following
Diagnostics details. Any insight into the error is much appreciated. Thanks!
{
“CardEnabledForMessage”: true,
“ClientName”: “Outlook”,
“ClientVersion”: “16.0.14326.20962”,
“InternetMessageId”: “”,
“EntityExtractionSuccess”: true,
“SignedAdaptiveCard”: true,
-“MessageCardPayload”: {
“found”: false,
“type”: null
},
-“AuthHeader”: {
“results”: “spf=softfail (sender IP is xxx.xx.xxx.xxx) smtp.mailfrom=service-now.com; dkim=fail (signature did not verify) header.d=service-now.com;dmarc=fail action=oreject header.from=service-now.com;”,
“authAs”: “Anonymous”
}
}
Tomasz Poszytek
Are you sure the Originator Id you are using allows you to send requests from Actionable Message to the endpoint you have specified in the card? Can you confirm, that the request is received by the endpoint and that it is the endpoint returning 403?
XBB
The Originator is from registering the Provider/ServiceNow instance in Actionable Email Developer Dashboard.
I’m not sure how to check about the request or the endpoint. Can you suggest how I can check/confirm this, please?
I’m receiving the email from ServiceNow with the card in Outlook. But in the error message “The remote endpoint returned an error ( HTTP 403). Please try again later” what is the remote endpoint ? Outlook or Office 365 or ServiceNow instance?
Thank you!
Jerry Wibberley
Hello Tomasz, I have built an order approval process using adaptive cards and appears to be all working the flow gets the green ticks but the SP list is not updating. How can I get help to look into this?
Tomasz Poszytek
Hey, first of all I would go through those successful flow run instances and double check if the requests were really sent to those target lists, where they should be. So – just do debugging 🙂
Adnan Amjad
brother i have an issue with adaptive card and outlook actionable message when ever i click to take any action approve or reject message is remote endpoint returned an error badrequest , how to deal with it what i need to do how to debug and resolve this issue. i already installed outlook debugger how to debug where i can find the logs. Thanks,
Diagnostics
{
• –
“ActionableMessageStamping”: {
o “Errors”: [ ],
o –
“Infos”: [
“Found Message card payload”,
“Card allowed for the sender”
]
},
• “CardEnabledForMessage”: true,
• “ClientName”: “Outlook”,
• “ClientVersion”: “16.0.15225.20288”,
• “InternetMessageId”: “.eurprd05.prod.outlook.com”,
• “EntityExtractionSuccess”: true,
• “MessageCardPayloadParsed”: true,
• “Originator”: “”,
• –
“AdaptiveCardPayload”: {
o “found”: false,
o “type”: null
},
• –
“AuthHeader”: {
o “results”: “dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=muhaidib.com;”,
o “authAs”: “Internal”
}
}
Tomasz Poszytek
Hey, check what you are sending as a response from the card – if it has a correct body. Actionable Messages debugger checks only the card itself, it doesn’t debug what is being sent from it. I suspect you have error in response JSON, e.g. not escaped quote or sth.
Nickolas Barbosa
Hey Tomas, GREAT BLOG, man
Im having trouble identifying my cards after they get answered because I just cant get to pass static info from my card to my “receive request” flux in power automate. Is there a way to access the static info (like the text in a textBlock) and pass it to my flux through a JSON object response like you do with inputs using {{inputName.value}}?
Thank you so much, man, your tutorials are being really helpful so far!
Nickolas Barbosa
A correction: of course you access the Inputs through its id (not its name) like {{inputID.value}}, my bad.
Tomasz Poszytek
You can simply add text block value to the response body defined in your Actionable Message – simply write its text as a static value returned from the card.
Henry
Hi,
1. Has the Active Card for Team and Outlook actions been merged now to have universal actions, like Action. Execute? https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/universal-actions-for-adaptive-cards/overview?tabs=mobile
2. If so, have you ever tried retrieving the response of which button the user selects by using the expression @{body(‘Send_an_email_(v2)’)[‘submitActionId’]}? I wonder if the universal action is used can we get the response and take actions within the same flow that sends the email just like what Team action does it would remove a need to call another http request triggered flow.
Thanks!
Tomasz Poszytek
Hi, the Universal Action, so Action.Execute requires a bot, that receives the requests from such cards and processes it. The already-in-place Flow Bot is not yet capable of doing so, therefore Action.Execute is not supported using OOB actions in Power Automate. You should continue to use Action.Submit.
Rick Putnam
Hi Tomasz,
Really great demo.
I was wondering how I can use action.Http in version 1.4 of adaptive card in an email. When I try to use that combination, the button does not show in the email. I need to use version 1.4 schema to support regex validation.
Tomasz Poszytek
Hi, I am afraid Outlook is still using version 1.0: https://learn.microsoft.com/en-us/adaptive-cards/resources/partners.
Ryan
Hello Tomasz,
Good job for this post this one working well.
But since I am back holiday something wrong happened.
I try to connect to
https://outlook.office.com/connectors/oam/publish
Error :
Either your session is expired or third party cookies disabled in browser.
I try to connect by different way Chrome, Safari, Edge nothing to do.
Any change done by Microsoft ?
Thanks
Tomasz Poszytek
Nope, all works fine. Try using incognito mode maybe.
Cole Burdette
This and your youtube video were a life saver, thanks! quick question though about implementation, have you see the out of the box power automate approvals? Somehow they are able to switch the context and view based on if the email client can accept actionable messages. For example on my ios device it’s simple buttons that take me to the approval website but if I’m in outlook it’s an adaptive card. Any knowledge how that is written or done?
Tomasz Poszytek
Yes, you can accomplish that using the “hideOriginalBody” attribute: https://youtu.be/rLo40whPvu8
Igor Umansky
Hi Tomas, thank you so much, great blog!!!
Do you know how to authenticate the user to my own service?
I used “identity linking” (preview mode) but it was found out that it works only if the sender is the receiver!
Is this a bug or maybe I am missing something?
My scope of submission set to Organization and approved,
My AM message comes with correct originator ID,
I returned Unauthorized status with ACTION-AUTHENTICATE header and it works only if the user is the sender of the email
Can you please help, maybe there are some alternatives?
Tomasz Poszytek
Have you added the headers to the request being sent from card once user clicks a button? Like here: https://poszytek.eu/en/microsoft-en/office-365-en/powerautomate-en/adaptive-cards-in-outlook-ultimate-guide/#Step_2_define_actions
H
Hi, both video and article are excellent. I am using Logic Apps to setup a document approval process, unfortunately the Refresh or Error Message response don’t work. On refresh nothing happens (shows the original approval form) and on 409 error only a generic message is displayed. Any help would be appreciated.
Tomasz Poszytek
Are you sending headers in both requests? https://poszytek.eu/en/microsoft-en/office-365-en/powerautomate-en/adaptive-cards-in-outlook-ultimate-guide/#Step_2_define_actions
Paul Targett
Hi Tomasz, thanks for the really useful guide.
We’re using Microsoft Outlook 365 Version 2209 Build 16.0.15629.20200
We’re finding that if you open an actionable message as the first email when opening outlook, it renders the HTML rather than the actionable message. If you switch emails, it is rendered correctly when opening again.
Have you seen this type of behaviour before?
Tomasz Poszytek
Yes, I sometimes face it with mails sent from SharePoint too. First AM is not rendered, but after I switch to another mail and go back it shows up. Or eventually when I open the mail later. I have no solution for that.
Derek S
I’ve tried samples from https://amdesigner.azurewebsites.net/ and they render correctly in Outlook client but fail to render in Outlook on Web. I’ve tried both Chrome and Edge. Any ideas ?
Tomasz Poszytek
I haven’t figured out why AM sometimes don’t render correctly. And then after a while it opens correctly.
Adnan Amjad
Brother , now the outlook adapitve card is working as expected , i have some concerns ,
First how i configure the multiline textbox, in desktop version it is perfect but in mobile it shows as single line which is not elegent and clear how we can format the look and feel of adaptive card
Tomasz Poszytek
You do not have much control over the UI of Adaptive Cards. It is controlled by the host. So there’s nothing you can actually do.
Doug Owen
Hi Tomasz,
I have built a pretty simple card which allows uses to order supplies internally within our organization. Currently this is from a Power App in a MS Team Chanel which calls a flow. How do I manage the senders in the Outlook Developer Dashboard registration? Do I have to maintain a group and make sure they all have send as permission on the group? I feel I’m missing something.
It works fine with the specified test users.
great videos.
Regards
Doug
Tomasz Poszytek
Hi, for such purpose you should use the “Organization” scope of submission in the Outlook Developer Dashboard.
Katarina Yi
Hi Tomasz thank you for this detailed guide.
I have followed your steps but I can’t seem to make it work. The adaptive card is always displayed blank whatever client I use.
I check in Outlook on Windows, Outlook on Web, Outlook on Android and even Windows Mail. But the email just show blank.
I even make the adaptive cards very simple just having a single textblock. Still, it shows blank.
Tomasz Poszytek
That’s weird indeed. Please check if your clients meet the requirements: https://learn.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages.
Jorge
Hello, the same thing happens to me as you. I have done everything, seen videos, manuals. but I keep getting emails without the adaptive card. could you already solve it?
Tomasz Poszytek
Be sure your client meets the requirements: https://learn.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages and also that you marked the email from which the card is sent as trusted.
Cyr8s w
Really nice video explained how to better use adaptive card.
A question, I may miss in this video. How could avoid if the user forward the adaptive card email to other people?
Tomasz Poszytek
When the response from a card comes to the host, you can evaluate from what sender it was sent and then check if it was sent to the same person who clicked the button.
Paras
Great videos and explanations. I am building something similar in logic app and using the adaptive cards for sending actionable message to outlook, but it doesn’t seem to render in Mobile client. Do you happen to see any such issue?
Tomasz Poszytek
Please check previous comments where I added link to list of requirements the client must meet for the card to be displayed 🙂
Sathish
Thank you Tomasz. I have created a card and sent it to couple of people in my Org, while i can see the card, but other are not able to see anything. Can you please help, if i need to do some settings
Tomasz Poszytek
What scope have you chosen when registering the provider? It should be organisation scope.
Michael Perry
Hi Tomasz, thank you for putting this together and helping us with our Adaptive Card questions. We are currently using 1.0 version to send adaptive cards through Power Automate, but these cards are not rendering in iOS. Are you aware of something special needed to get this to render in mobile? I’ve been searching around and see some suggestions from 2020 but nothing is working for us.
Tomasz Poszytek
Actionable Messages should work in Outlook on iOS too. Please check if you’re using the mentioned Outlook client: https://learn.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages.
Andre
Thank you Tomasz, great explanation!
One Question though:
Does Adaptive Card Templating not work in Power Automate or am I just too stupid to make it work?
According to this article: https://learn.microsoft.com/en-us/adaptive-cards/templating/
I should be able to build an adaptive card template with placeholder values matching this pattern ${…}
And then provide an additional $data attribute to the card JSON to fill these placeholders:
https://learn.microsoft.com/en-us/adaptive-cards/templating/language#option-a-inline-data
Doing this in PowerAutomate with Actionable messages to display in Outlook does not seem to work however.
Ill Im seeing in the email are the original placeholder values, e.g. Hello ${firstName}
Do you have any ideas / experience with this issue? Do you know of a more efficient workaround to populate the placeholders than replacing them manually with Power Automate expressions?
Tomasz Poszytek
Data biding is nothing that will work with Actionable Messages. It may work in Teams, but honestly having Power Automate to generate the card, why don’t you simply generate the JSON dynamically, with all the data in place?
Mah Hoq
Hi Tomasz, Do you know if organization Scope will work for a guest user? For example will it work for use david.jones_cba.com#EXT#@anz.onmicrosoft.com whom we have invited as guest user?
Tomasz Poszytek
I have a feeling it will not work. I haven’t tested it myself though.
Ashok
Hi Tomas, I tried the way wat u did, it is working fine for outlook users. My doubt is, any other way to send the adaptive cards other than microsoft account like protonmail etc..
Tomasz Poszytek
Then this will not work. Adaptive Cards are working only for MS mail clients.
Ashok
Thanks for your reply, Tomasz. Is there any other way to achieve non office email account to send actionable button?
Tomasz Poszytek
Well, you would need to create a custom HTML and then an app somewhere, that is launched when buttons are clicked. Other than that – no. Unless you’re able to deploy Adaptive Cards SDK to those clients, so that they are able to interpret Adaptive Cards JSON code correctly 🙂
Dominik
Hi Thomasz, are you by chance planning a new blog post about V1.4 adaptive cards with the new universal actions? They do not support action.HTTP anymore and instead offer action.Execute which seems to require an Azure Bot everytime. Maybe there are any other possibilities to just send simple HTTP-requests?
Tomasz Poszytek
Hi, thanks for asking. Unfortunately not. I am not a developer myself and I don’t have enough free time to learn how to build a bot myself. I am sorry.
Vicktor
Greetings- Thanks for your great article. The user who receives the email is not able to forward it on to anyone else (the email body is just blank when clicking forward/reply). Is it possible with adaptive card/actionable messages?
Tomasz Poszytek
No, as only the recipient is allowed to take action. You would need to implement a “forward” functionality as a fields in a card and process that handles it.
Yang
Hello Tomasz,
One question, is it possible send Actionable message from AWS to outlook? Any reference?
Tomasz Poszytek
I don’t know really. And I have no idea even who to ask about it!
Pradeep
Thanks Tomasz for the great explanations. How to get the user’s email address who performed the action like approve when the card is sent to multiple users to take action?
Tomasz Poszytek
Well, it’s always sent to someone’s inbox, right? So you know from which inbox the response is coming. You should be able to read that information from JWS: https://poszytek.eu/en/microsoft-en/office-365-en/powerautomate-en/securing-responses-from-actionable-messages/
Gregory MacGregor
For some reason, when sending an Outlook Actionable Message using the “Send an Email (v2)” action in Power Automate as described here, the message is not encoded in UTF-8, so any emojis, umlauts or any non-English characters get incorrectly displayed. I was trying to use emojis in my OAM to improve form legibility and appearance and noticed all emojis were being replaced with “?”. When I later created a German version of the same OAM, the German characters were having the same issue.
Pro tip if this happens to you: simply add an emoji to the email’s SUBJECT, and that will force the Office 365 Email connector to encode your email in UTF-8 and then everything will display correctly in your OAM. Both on desktop and on mobile, I now have emojis and special characters in my inline forms.
Tomasz Poszytek
Thanks for sharing! 🙂