Tomasz, thank you very very much! very well instructed and helped me put my first flow using cards together. can't wait to do more with them! thank you!
Tomasz amazing!!! I was struggling trying to put to work adaptive cards on outlook, this video helped me a lot. Great content, from now on I'm following you.
@@mgatti09 where are you trying to display it? For Outlook still only version 1.0 is supported, see it here: docs.microsoft.com/en-us/adaptive-cards/resources/partners#live
This is truly great. Tried it just now and noted the validation has now become much easier. You can simply do it by adding "isRequired" as true or false in JSON like below. { "type": "Input.ChoiceSet", "id": "technicianQuery", "isRequired": true, "placeholder": "Select a rating", "choices": [ { "title": "Excellent", "value": "1" }, { "title": "Very Good", "value": "2" } ] }
Thanks Tomasz finally a real step by step. I tried creating one today following another video but they didn’t need to register and I’m assuming that’s why my emails show blank without the card? But they were still able to send it through power automate.
I suppose it is the reason. Without the originator ID you should be able to send the card only to yourself, by yourself (that the cloud flow connection is also authenticated using the same account as the recipient).
Tomasz, I assume that the only way to get dynamics data in the adaptive card (e.g. a user adapted intro text, an drop down based on options from a CDS table, etc.) is to manipulate the JSON data of the adaptive card? Or are there other possibilities?
Hi, when speaking about Outlook/ Teams unfortunately not. When you build your custom app using Adaptive Cards SDK you can use functionality called Templating. But it's not supported in Outlook.
Quality video Tomasz! Just wondering, apart from wanting to give this a go as I love an excuse to play with adaptive cards, is there any reason or preference of using Teams vs Email for Adaptive Cards?
I'd say - it's all about the scenario you have. I would prefer Teams. But sometimes you need to send info to email. This works especially for all "on the go" cases, when you use mobile.
@@TomaszPoszytek is there any video for Adaptive cards using with Teams in the same scenario as on this video? ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-_mqg9eSHtUA.html I found this one but it is not the same scenario.
Nice video. Learned a lot from this . This will also reflect on my outlook app right? Upon checking it doesnt show any features that ive constructed in my outlook app. But it shows up in the outlook browser tho
Thanks! About the Outlook issue, please check if you meet the requirements: docs.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages
Hi Thomasz. Thenks for this awesome video. My question: do I have to register a new provider for every adaptive card I want to use? I want to be able to send adaptive cards to anyone so I need to register a global provider. It looks like from the information needed that I have to do so each time i create a new adpative card but cannot find any information about the global provider option in detail. Thanks in advance
Hi, my understanding is that no. You get the provider id and can use it to sign any card sent from specific email. Despite that you need to provide schema when applying.
Hi, if you are asking about how can you know who is responding to the Actionable Message then the answer is easy - your service is sending mail to a specific recipient, so you can insert in the response being sent from AC either user's email or other value that later you can use to identify who is responding. Or do you mean something else?
It's very helpful, thank you Tomasz. Can I ask question here: If I set multiple users as riceipint, can i restrict only one of them to perform action and others cannot and can I get the user who perform the action in the flow.
Yes, with the solution that receives the response from a card. You can check from what recipient is the response and either perform an action or return specific error message for example.
Very good video Tomasz. Yes I know it's a boring question, but have you had any thought on the licensing for the flow receiving the input from the users. To my understanding this will be the outlook user that triggers the flow, and thereby the outlook user will need a license to avoid Multiplexing. And since that connector is a premium connector... the outlook user will also need the premium license (or we need to license the flow separately). Or is there any exception you know about in this setup
Unfortunately for this case there's no exception. However, due to fact the flow is triggered via HTTP request, you either need to grant author a license and then depending on the "scope" of the flow, to as well purchase the "per flow license", so that other employees can use it. In the end you can take a look as well on Logic Apps for this usecase.
@@TomaszPoszytek Thanks. Yes logic apps will be better choice. I personally don’t understand why Microsoft doesn’t merge this products and offer both resources based and user based license models but within the same product, kind of the same as with Power BI (PRO and resource based Premium)
@@paradeen2730 they serve different purpose. Logic Apps is more considered as integration platform, PA as business/ personal productivity. To PA anyone in organization has access, without special configuration. To access LA you need to have subscription in Azure etc... In the end, PA is built on LA :)
great share . thanks a bunch.. Everything works except ios outlook is not rendering the adaptive card. Message: "This Message Has No Content". OWA and Desktop Outlook all work fine. Any suggestions for IOS Outlook App?
Thanks very helpful but my problem is different how can I achieve this if my sender email is not from O365 group like email server is not present in same domain and it is third party server/domain, how we can achieve to send adaptive card to outlook.
Hey Tomasz, I followed the instruction above. register the provider to organization. used my originator id. its works fine when i test it to my self but when other user click the submit button.. its says "Target url not allowed" is there something i need to set? do you happen to have this error encounter?
Hey, check if your desktop client is meeting the requirements: docs.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages
@@TomaszPoszytek I was able to get it working. The IT department had to give me the access for actionable messages. Now the problem is no one i send it to can see the form. Only I can if I send it to my own email :( .
Are you sure you have registered new AM provider for the whole organization (not for you only)? And copied it's guid and updated it inside the Actionable Message? It looks like the case.
I've got a card that works in mobile and desktop outlook but won't display in OWA. Have you seen that before by chance? It's running only version 1.0 schema as 1.4 seems to display everything except the action http button.
Personally not, but I heard about such issues. What I noticed is that sometimes in OWA to display a card you must navigate for a moment to a different message and then open Actionable Message again. Also, check the below: docs.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages.
@@TomaszPoszytek Thanks for the info! Not having any luck there. I even removed any unsupported features like required and visibility (which despite not being supported in 1.0 do work in Outlook and Mobile) but no dice. I've got a note in with the help over at Microsoft so we'll see what they say. There's got to be something small preventing rendering! Your video is great btw. Really shows the WHOLE process and doesn't skip a crucial piece like creating the collaborator value.
Hello Very helpful Video. I was doing a PoC in Logic App where I found I didn't had access to the Send Actionable Message but still I was able to see the Developer Dashboard. I am unable to send email through click of button. Through Test Users and Workflow I am able to send the mail but the Action Message is not getting displayed on web and desktop clients. Do you know how to send email with SignedCardPayload?? I am unable to follow the documentation and couldn't find any such tutorial. Thanks!!
Great video Tomasz. I managed to get it working with my mailbox but if I was to send the email to a mailbox which I have delegate permissions to, I get an Error message. Failed to validate the signature of the actionable message card. I have the Authorization sent to "" in the header and my scope is set for the Organisation. Is there a way around this? Thank you for any guidance you can provide.
This a great tutorial and it helps me a lot. Though, I have one question, is there a way to, get the user details(atleast the email) of the person who click the button? I need to know who the one clicked it because I gonna use that information further with my power automate, thank you.
@@TomaszPoszytek The scenario would be, The E-mail will be sent to a different persons(more than one), there is an approve/reject button and I want to tally who approves and who rejects
@@xDmeEzZ you can put information about the user to whom the card is sent as one of the key-value pairs of the body, that is submitted from the card. But to accomplish this, you should send one mail at the time. So not one mail with multiple recipients, but in a loop, separate per each recipient.
I recreated the steps in your video. however it only works when the the sender is oals the receiver of the actionable message. which is strang because I am using the originator ID from a global scoped provider created in the outlook dev dashboard. which got approved. I just don't understand why is doe not work. I changed the JSON slightly after the global scoped provider was approved. is this a possible show stopper?
Global - you mean you got approved as a provider to send Actionable Messages as well to other tenants? You may want to test another provider, this time with exactly correct information. To check if it works. If yes, it is most probably that changing JSON schema caused the problem.
@@TomaszPoszytekthank you verry much for your reply. Yes I created a provider with a global scope and it got approved. Also I tried to send the message with the original JSON. which only lacks a http action button compared to the changed JSON. any way this does not work eighter. I think I got only two options now; 1). lower the version number from the current 1.2 to 1.0 2). I notice the message I got in the outlook debugger. it said "Card allowed for the sender". therefore I think it lacked some kind of signing. I am trying to solve this with the enablement of DKIMv2
No doubt, amazing and fantastic. Still I got stuck with "Remote endpoint return an error (HTTP 401). Please try again later". Any clue would be highly appreciated please.
Just to add up here, provided steps works perfectly fine with if you use outlook.office.com/mail (web mail), but if you use outlook client on Windows 10 PC or outlook for mobile client, this process will not work and leads to same error as mentioned above.
I don't know your precise configuration, but I guess you need to check the endpoint you're calling if it doesn't require any authentication. Or maybe you are missing provider id? Have you checked the message using "Actionable Messages Debugger"?
@@TomaszPoszytek Thanks for your response, I used PowerAutomate only as described in your video. I am in a corporate environment with O365, Probably the reason may be Outlook version compatibility as I can see a list of supported versions at docs.microsoft.com/en-us/outlook/actionable-messages/#outlook-version-requirements-for-actionable-messages I am using MSO (16.0.13127.21668) 64-Bit of Outlook. Any idea to make it universal would be great.
Whenever I try to access the actionable email developer dashboard, I'm immediately redirected to my OWA Inbox and not presented with the dashboard. I've tried with edge and chrome, and incognito and in private. I've also tried logging in as a regular work user account and as a global admin, same issue. The same thing also occurs on my phone, Any idea why this may be happening?
Frankly speaking that depends on the number of users. According to the rules - yes. Technically only account that authors the flow must have. But to be on a safe side, you could have one per flow license. As for the other solutions - you can use Azure Functions or Logic Apps. Still not for free as might require paid plans, but should be significantly cheaper.
This is a great tool and I was easily able to create a flow and working JSON. However, if i have followed these steps, and gained approval from my outlook admin over 24 hours ago, would there be a reason why I am able to view the card, but no one else in my organization can? I have added the script tags as specified, headers, hideoriginalbody as specified, and the originator id.
Check who was on the recipients list. The card will not be changed, unless the host that receives response from the card sends card to update the original one in return: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-sxoVeqLXUTY.html.
@@TomaszPoszytek hmm... Not trying to have a card update, just trying to have the original card that requires input be able to be viewed within my organization. I am able to view it, but no one else in my organization is able to. I'll keep troubeshooting! Thanks for the response!
@@TomaszPoszytek Update: It had to do with what email the provider was linked to for the sender. I was logged into another account while working on my flow. Once I edited the connection via the "send an email (v2)" step to the email I listed in the provider, the email was able to be viewed by the organization. The Actionable Messages Debugger for Outlook helped to solve the issue.
Hello, I am sending an actionable message to email. The button then triggers an HTTP Request which is responded to with HTTP response and another button. How can I use this button to trigger another HTTP Request to update the card again? I am receiving an error when that second button is pressed "Target URL is not allowed"
I haven't tried that myself, but maybe try to trigger always the same http endpoint? But depending on the sent parameter either respond with one or the other card?
@@TomaszPoszytek I have a weird issue with Desktop Outlook where the input substituion only works on the first field in the body. Something like this: {"Approve Comments":"This was substitued correctly","File Comments":"{{FileComments.value}}"} Any Ideas?
Hi @Tomasz, Great video and great explanation, we went through the steps, but for some reason, the approval email was not delivered to our Exchange Admins or Global Admins. Do you have any idea why this could happen? Is there any other way to generate a valid provider to use in our Adaptive Cards? Thanks in advance.
Hard to say why the mail was not delivered. I'd ask them to check message trace in Exchange auditing or contact Microsoft support. There is no other way that I know.
You can’t. But, you can use the „hideMessageBody” property to hide it in clients which do support actionable messages and show it in those which not. And then in this body put html version of the card.
Yes, in adaptive card. Dynamic content from SP lists or even plain text. Do you have anything specific in mind or a little more to help me, because I searched a lot and nothing worked for me? Thank you very much!!
@@user-yp8kn6yj6l maybe try to send just only text to email, to test if regular mail sent from Power Automate is also malformed. Maybe this is a matter of encoding that is set in Outlook.
@@user-yp8kn6yj6l i also found something that could help you. Let me know if the fix described here works for you: powerusers.microsoft.com/t5/General-Power-Automate/Special-characters-in-actionable-messages-in-Outlook-using/td-p/631547
@@TomaszPoszytek Hi! I've read it but unfortunatelly Power Automate has two actions for sending an email (Send an email & Send an email notification). The 1st is thw one with encoding problem and for the 2nd, in order to be functional I have to enable SPF, DKIM (not recommended...I think).
You video only briefly shows the condition branch you put in to check for the AutoInvokeAction being the reason the flow is being called (19:03). It is checking for your outcome=autoInvoke and replaces the emails Adaptive Card - CARD-UPDATE-IN-BODY. But, all that really can be done is to have the replacement card indicate a message that someone else already did an approve/reject. It cannot indicate who or what was selected. A query to something that was keeping the results of a previous execution of the flow would have to be done as part of that Condition branch. You correctly indicate there is a quick 4-second timeout for the condition branch executing when the AutoInvoiceAction is detected to complete and do Response. What is the fastest place to query for the data that was stored from a previous flow execution that was a Approve/Reject? SharePoint list?
Well, SharePoint list would be the cheapest for sure. I would say that depends on the number of such requests. If it's just a couple, SPO is fine. When more, watch out for throttling. Then maybe use Dataverse. Or SQL.
Awesome video, very very helpful.... I have one question, if it's possible to save the responses into SharePoint List or Excel file? thanks again 👋👋👋👋👋
Sure it is. In the cloud flow that you create to handle response from user simply create logic that saves that response in a SharePoint list or Excel file.
@@TomaszPoszytek finally I can saved the questions into Excel file, but I would like to know, how to get the user name after the user completes the survey? thanks in advance.
Great video, but somehow I got stuck. When I don't choose an option the output is "Option": "{{Options.value}}". I think this should be "Option": "". So the empty condition doesn't work. Where did I go wrong? When I choose an option it works perfect.
This is how it works unfortunately. You need to handle it in the receiver flow, so that if such a content is returned from card it means nothing was returned.
Hi, I had exact the same issue and your comment helped: In condition i have: triggerBody()?['Option'] is equal to "{{Options.value}}" and it's working correctly. Thanks!