Top

Adaptive Cards in Outlook – ultimate guide


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 CardsActionable Messages
Version1.31.0 (source)
Actions
  • Http,
  • Submit,
  • ShowCard,
  • ToggleVisibility
  • Http (for get and post),
  • OpenUrl.
  • InvokeAddInCommand to open an Outlook add-in task pane.
  • DisplayMessageForm to open the read form of a message
  • DisplayAppointmentForm to open the read form of a calendar item
  • ToggleVisibility
Target for submitNot supported, must be handled by hostSupported. You can define target URL, headers and body.
ActionSetYesYes
RefreshingYes, but via host requestYes, as a response from target URL
AuthenticationSecurity 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 differencesAll goodies coming from versions 1.0+
  • Input.Time not working,
  • hideOriginalBody parameter to hide contents of the mail others than card,
  • originator to pass GUID of the authenticated provider.
  • correlationId to set own unique ID to track card
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:

  1. Add header: content-type – application/json,
  2. 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.
  3. 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:

  1. Add header: content-type – application/json,
  2. Add header: CARD-ACTION-STATUS – information to be displayed to user.

Source: https://docs.microsoft.com/en-us/outlook/actionable-messages/adaptive-card#reporting-actionhttp-execution-success-or-failure

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):

  1. Send it from your inbox to the same inbox – no provider registration needed, generally described above.
  2. Defined test users within the same tenant – self-service provider registration and approval.
  3. Organization Exchange admins – approval sent to your tenant’s Exchange admins. Allows you to send Actionable Messages to any user within your tenant.
  4. 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 🙂


Tomasz Poszytek

Hi, I am Tomasz. I am expert in the field of process automation and business solutions' building using Power Platform. I am Microsoft MVP and Nintex vTE.

105 Comments
  • 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?

    September 30, 2020 at 2:30 pm Reply
  • Anatolii

    Awesome tutorial!
    One thing I struggle to understand – are guest account emails within Organization scope or Global scope?

    December 3, 2020 at 5:04 pm Reply
    • 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.

      December 8, 2020 at 4:24 pm Reply
  • oliver

    hi Tomasz, what could possibly trigger this error The remote endpoint returned an error (HTTP 401)?

    December 9, 2020 at 10:29 am Reply
    • Tomasz Poszytek

      Well, definitely some kind of missing permissions. What’s your case?

      December 9, 2020 at 11:54 pm Reply
  • 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?

    December 9, 2020 at 3:32 pm Reply
    • 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.

      December 9, 2020 at 11:55 pm Reply
      • Steve

        Thanks, any idea if they will update that in the near future to allow a more recent version for Outlook Actionable Messages?

        December 10, 2020 at 4:11 pm Reply
        • 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.

          March 18, 2021 at 10:46 pm Reply
          • 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.

            March 25, 2021 at 10:03 pm
  • 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!!

    February 21, 2021 at 10:22 am Reply
  • 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?

    March 29, 2021 at 9:25 pm Reply
    • 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.

      April 3, 2021 at 7:14 am Reply
  • 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.

    April 7, 2021 at 3:05 pm Reply
    • 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.

      April 28, 2021 at 11:21 am Reply
  • 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

    April 23, 2021 at 5:00 am Reply
    • 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.

      April 28, 2021 at 11:30 am Reply
  • 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?

    April 30, 2021 at 9:27 pm Reply
    • 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.

      May 12, 2021 at 8:17 am Reply
  • 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

    May 14, 2021 at 6:09 pm Reply
    • 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.

      June 2, 2021 at 1:15 pm Reply
  • 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

    May 15, 2021 at 7:06 pm Reply
  • 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

    July 29, 2021 at 5:39 pm Reply
  • 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

    August 10, 2021 at 2:40 am Reply
    • 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.

      August 30, 2021 at 10:40 am Reply
  • 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’]

    August 26, 2021 at 12:06 pm Reply
    • 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.

      August 30, 2021 at 10:38 am Reply
  • 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

    October 7, 2021 at 6:54 pm Reply
    • Tomasz Poszytek

      Is this mail sent from Cloud flow? What is your scenario?

      October 26, 2021 at 11:05 pm Reply
  • Jose David

    Thanks really thanks, you save my life

    December 7, 2021 at 6:25 pm Reply
  • Pavol Kiss

    Hi Tomasz,

    is there any way how to record user profile who responded to Outlook adaptive card?

    December 17, 2021 at 3:59 pm Reply
    • 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.

      December 30, 2021 at 2:50 pm Reply
  • 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,

    December 29, 2021 at 1:44 am Reply
  • 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

    March 3, 2022 at 4:46 am Reply
    • 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.

      March 4, 2022 at 4:19 pm Reply
  • 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.

    March 3, 2022 at 3:38 pm Reply
    • Tomasz Poszytek

      There is no property to handle scrollbars… This is out of your control I’m afraid.

      March 4, 2022 at 4:19 pm Reply
  • 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?

    March 18, 2022 at 3:21 pm Reply
    • 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.

      March 24, 2022 at 9:59 am Reply
  • 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?

    May 11, 2022 at 3:50 pm Reply
    • 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.

      May 19, 2022 at 8:40 am Reply
      • 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.

        May 19, 2022 at 3:25 pm Reply
  • 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}}

    May 20, 2022 at 8:07 am Reply
    • 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.

      June 4, 2022 at 7:04 pm Reply
  • 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”
    }
    }

    June 4, 2022 at 6:15 pm Reply
    • 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?

      June 4, 2022 at 7:06 pm Reply
  • 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!

    June 5, 2022 at 1:54 am Reply
  • 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?

    June 16, 2022 at 8:18 am Reply
    • 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 🙂

      June 17, 2022 at 9:05 am Reply
  • 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”
    }
    }

    June 27, 2022 at 10:09 am Reply
    • 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.

      July 15, 2022 at 11:57 am Reply
  • 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!

    July 3, 2022 at 11:20 pm Reply
    • Nickolas Barbosa

      A correction: of course you access the Inputs through its id (not its name) like {{inputID.value}}, my bad.

      July 3, 2022 at 11:22 pm Reply
      • 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.

        July 15, 2022 at 11:34 am Reply
  • 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!

    July 30, 2022 at 12:06 am Reply
    • 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.

      October 3, 2022 at 1:14 pm Reply
  • 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.

    August 1, 2022 at 11:28 pm Reply
  • 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

    August 9, 2022 at 7:21 am Reply
    • Tomasz Poszytek

      Nope, all works fine. Try using incognito mode maybe.

      October 3, 2022 at 1:43 pm Reply
  • 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?

    August 17, 2022 at 2:32 pm Reply
  • 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?

    August 28, 2022 at 2:37 pm Reply
  • 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.

    September 3, 2022 at 4:08 am Reply
  • 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?

    October 18, 2022 at 10:28 am Reply
    • 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.

      December 14, 2022 at 10:09 am Reply
  • 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 ?

    October 21, 2022 at 2:22 pm Reply
    • Tomasz Poszytek

      I haven’t figured out why AM sometimes don’t render correctly. And then after a while it opens correctly.

      December 14, 2022 at 10:10 am Reply
  • 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

    October 31, 2022 at 3:07 pm Reply
    • 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.

      December 14, 2022 at 10:14 am Reply
  • 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

    January 26, 2023 at 11:05 pm Reply
    • Tomasz Poszytek

      Hi, for such purpose you should use the “Organization” scope of submission in the Outlook Developer Dashboard.

      March 9, 2023 at 2:22 pm Reply
  • 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.

    March 10, 2023 at 4:36 am Reply
  • 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?

    March 30, 2023 at 3:41 pm Reply
    • 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.

      April 4, 2023 at 9:37 pm Reply
  • 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?

    April 12, 2023 at 7:43 pm Reply
    • Tomasz Poszytek

      Please check previous comments where I added link to list of requirements the client must meet for the card to be displayed 🙂

      April 18, 2023 at 9:25 pm Reply
  • 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

    June 5, 2023 at 2:07 pm Reply
    • Tomasz Poszytek

      What scope have you chosen when registering the provider? It should be organisation scope.

      June 29, 2023 at 10:40 am Reply
  • 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.

    June 26, 2023 at 7:45 pm Reply
  • 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?

    August 19, 2023 at 11:33 am Reply
    • 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?

      September 28, 2023 at 7:21 pm Reply
  • 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?

    October 7, 2023 at 8:50 am Reply
    • Tomasz Poszytek

      I have a feeling it will not work. I haven’t tested it myself though.

      October 17, 2023 at 9:17 pm Reply
  • 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..

    February 2, 2024 at 8:33 am Reply
    • Tomasz Poszytek

      Then this will not work. Adaptive Cards are working only for MS mail clients.

      February 24, 2024 at 10:43 pm Reply
      • Ashok

        Thanks for your reply, Tomasz. Is there any other way to achieve non office email account to send actionable button?

        March 13, 2024 at 7:11 am Reply
        • 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 🙂

          March 17, 2024 at 11:04 pm Reply
  • 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?

    February 9, 2024 at 6:47 pm Reply
    • 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.

      February 24, 2024 at 10:46 pm Reply
  • 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?

    February 21, 2024 at 9:49 pm Reply
    • 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.

      February 24, 2024 at 10:50 pm Reply

Post a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.