At the end of a call, you want to send the summary and some suggested follow-up tasks to the Agent. The Agent can then complete the summary and choose to create the task in the CRM.

In this Use Case, you're going to address the following scenarios:
- When the call terminates …
- … a Transcription is saved in high German into a CRM (Salesforce).
- … the summary is sent to the Agent as an Adaptive Card with some follow-up tasks.
- The Agent can validate the summary and tasks. On validation, the summary and tasks are created in a CRM.
- The transcript is attached to the summary activity in a printable format.
Before you start / Preconditions / Prerequisites / etc.
You require Tenant Admin rights to enable the following:
- A Contact Center license is required for the features in this Use Case. Also see Nimbus Features for a comparison.
- Transcription preconditions are met and configured on the user/service - including an Azure Speech Recognizer.
- An AI Bot service for processing is required. 💡You reuse the one deployed on Azure and test our prompt in Azure AI Foundry.
- A CRM to store Customer data in.
- Nimbus Power Automate Connector licensing and setup preconditions are met. 💡The connector is needed to retrieve the Transcription data, alongside all necessary parsing and storage actions.
🔍 Related Note - Virtual Users: Nothing needs to be done in Nimbus, unless you do not have a Contact Center Service with Virtual Users enabled yet. Also see Use Case - Setting up a Nimbus Virtual User using Copilot for a first-time introduction.
In the Use Case below you will need to build one Power Automate flow which catches the Voice Transcription Ready Trigger Event “When the virtual user assistant has an update”. You want to call the AI service to do a summary and suggest follow-up tasks for the conversation.
INC Icon Legend Accordion
Show Icon Legend 💡 = A hint to signal learnings, improvements or useful informati...
Show Icon Legend
💡 = A hint to signal learnings, improvements or useful information in context. | 🔍 = Info points out essential notes or related page in context. |
☝ = Notifies you about fallacies and tricky parts that help avoid problems. | 🤔 = Asks and answers common questions and troubleshooting points. |
❌ = Warns you of actions with irreversible / data-destructive consequence. | ✅ = Intructs you to perform a certain (prerequired) action to complete a related step. |
Overview of the Flow
Overview - Part 1

Overview - Part 2

Power Automate Flow
The flow has two parts: sending the Adaptive Card and second reacting to the interaction with the card.
Part 1 - Sending the Adaptive Card
You need to consider the following cases:
- No participants in the data, transcription is empty → in this case you will terminate the flow.
- The AI response was filtered and returns an error 400 → in this case you still want to save the complete transcript in Salesforce and also send an Adaptive Card informing the Agent about it.
- The AI response is 200 → then send the Adaptive Card.
Part 2 - Handling card interaction
Once the card has been sent, the Agent needs to interact with to create the summary and the tasks in Salesforce. Within the card, the Agent can edit the suggested summary.
- Save summary only → this will then create a new Call log entry in Salesforce and attach the summary (edited) and the transcription object (created in the first part) to it.
- Save summary with tasks → this will create the call log entry + iterate through the selected tasks to create tasks for the contact in Salesforce with the Agent as owner.
- Cancel: cancel the flow.
Step-by-step: Part 1
Step | Screenshot |
---|---|
Start with Trigger Event When the Virtual user assistant has an update from the Nimbus connector. | ![]() |
AnothCatch the data using Flow Action Get virtual user assistant data. | ![]() |
Filter Array Customer
|
![]() |
Filter Array Agent
|
![]() |
Check if the Agents or Customer filter returns an empty list.
Use the following expressions on a condition element:
|
![]() |
You need to query Office 365 with Get user profile using the
|
![]() |
You also need to query Salesforce to get the Customer information using the
|
![]() |
You save the first value of the list in a compose element
☝Attention: you might want to expect and handle an empty list in case no contact was found! |
![]() |
You also need to save the Customer's full name into another compose element.
|
![]()
|
💡We will cover the child flow further down. It basically converts the transcription data structure from …
to …
|
![]()
![]()
|
Now, add a variable to the flow which will hold the system message. 💡 Play around with your system message of your model.
💡 In this system message, we are using the |
![]() |
Next you create the call log record in Salesforce which holds the transcription data parsed and returned ddf by our pretty print child flow.
You created a custom data object in Salesforce for our transcription data. |
![]()
|
Initialize a variable which will be used to hold the Adaptive Card description. | ![]() |
Now you call the AI service using the HTTP element.
The body contains the following:
|
![]()
|
Switch on the http code and go to the settings to enable run after HTTP
In both cases you want to create the correct Adaptive Card. |
![]() |
Case = 400
|
![]()
|
Case = 200 You parse the message from the AI using
Then you add the Adaptive Card content:
|
![]()
|
Now you can post the Adaptive Card to the Agent and wait for a response. | ![]() |
This flow part will send and display the Adaptive Card to the last connected user with summary and follow-up tasks or, if the summary failed, then display the error message without any follow-up tasks. | ![]() |
Step-by-step: Part 2
Step | Screenshot |
---|---|
Switch on the SubmitActionId
|
![]() |
There are 3 switch cases:
|
![]() |
Case: cancel Case: default
|
![]() |
Case: log Create the record in Salesforce and map the fields to it. Here a code view output:
Then Post message in a chat or channel to the Agent. with the message (code view):
|
![]() ![]() |
Case: save
You follow up with post a message to the Agent with the following message (code view):
|
![]() ![]() ![]() |
Now you need to check if the Agent checked the tasks (choices) in the Adaptive Card to create tasks. Condition =
is not equal to
|
![]() |
If TRUE then you Apply to each on
|
![]() |
Filter array From = Filter Query =
is equal to
|
![]() |
For each (task) … Text = |
![]() |
…. you create a the task subject using a Compose element. Inputs = |
![]() |
Now you create the record in Salesforce. Here is the code view for the inputs:
|
![]()
|
On success you send a message with the link to the task in Salesforce to the Agent. Message (code view) =
|
![]() |
Terminate with Success. ☝Attention: You also want to terminate with succeeded if no one interacted with the cards so the flow does not fail. |
![]() Also set run after to
![]() |