This post is in response to a comment in one of the most viewed article from my blogsite to post an Adaptive card to an user in Teams using PowerAutomate. Assume we have a use case for using Adaptive card for collecting response from n number of users based on the data from an Excel, SQL database etc. The response must be unique for users so there has to be separate instance of Adaptive card flow to each user since the flow has to wait till it gets response from the user.
To handle this scenario, we are going to create two flows
- Flow 1 – Send Adaptive card to collect response: This flow creates an adaptive card to collect response from each user
- Flow 2 – Microsoft Teams User Details: The main flow which has the user details
For this example, I will be storing the user details on an Array variable but you can dynamically generate user details or based on the data from various datasources like Excel, Database etc. Let us go ahead and create the flows
Flow 1 – Send Adaptive card to collect response
This flow will be called from flow 2 to create the Adaptive card for the team user to collect response.
Step 1: Create an Instant flow with trigger type “When a HTTP request is received” and select the method type to Post by clicking Show advanced options. Now click Use sample payload to generate schema under the section Request Body JSON Schema and the enter the following data for the team user email address and click Done to generate the schema
The email address of the Teams user will be passed from Flow 2 on the request body.
Step 2: Add the action Post an Adaptive card to a Teams user and wait for a response. The only change is for the field Recipient which should be Email (request body json schema) from the dynamic content of the trigger When a HTTP request is received.
Step 3: Add Create item for collecting the Team user response to the SharePoint list. Refer to the blogpost Adaptive card to an user in Teams using PowerAutomate for detailed explanation.
Step 4: Saving the flow automatically generates the HTTP POST URL, the URL will be used in the Flow 2. The complete flow should be looking like the below
We are now good to create the second flow from where the Adaptive card collect response flow will be triggered from.
Flow 2 – Microsoft Teams User Details:
This flow is the primary flow which triggers the Flow 1 for the posting the adaptive card to multiple team users.
Step 1: Create an Instant flow with the trigger type “Manually trigger a flow” and add a Array variable to store the user email address for sending the Adaptive card to collect response from multiple users.
Step 2: Add the Parse JSON action to parse the email address from the array variable and then click Generate from sample
Paste the array data as given below and click Done to automatically generate the schema for us. Then for the Content parameter in the action, select Teams Users (array variable) from the dynamic content.
Step 3: Add a compose action and the select the email attribute from the Parse JSON output to automatically generate a Apply to each loop as below
Step 4: Add the HTTP action to make a Post request to the HTTP url created from the first flow to post an Adaptive Card to the teams user. Find the parameters below
URI: HTTP Request flow URL (when a HTTP request is received) copied from the Flow 1
Headers: Key: Content-Type Value: application/json
“Email”: Output of JSON Parse action (Email)-to be replaced
This should now create Adaptive card to collect responses from multiple users irrespective of the users response to the Adaptive card.
Summary: On this post we have seen how to send adaptive card to multiple teams users using Power automate. There should be a question? Why cannot we use a Child flow concept to call the Adaptive card from the parent flow using the action Run a Child Flow available in Power platform solutions. Since we are using a For Each loop in Flow 2 Step 3 it will go to the next loop only if the first user responds to the adaptive card since there will be an action Respond to a PowerApp or flow at the end of a child flow (must have in child flow). We will have to keep in mind about the action (HTTP) and triggers (When a HTTP request is received) used in this flow are Premium. Let me know any feedback or comments on the comment section below