spee
In this Use Case, we're building a Copilot Agent which classifies Customer input into dimensions of data you define. This could be intent or sentiment, or categories. It is up to you!
This generic capability of classifying messages can be used in different scenarios. One of such scenarios is to replace traditional, multi-step IVR by a single, natural language-driven interaction. A traditional IVR could have many steps and could look like:
- “Welcome, choose your language.”
→ (Customer selects English) - “Press 1 if you are a customer, press 2 if you are not yet a customer of BEST Insurance.”
→ (Customer presses 2)
⮑ Nimbus recognizes the Caller as an existing client “Sylvia”, retrieves information about the client. - “Welcome, Sylvia! Press 1... press 2.”
→ (Silvia presses 2) - “An agent will be available shortly to handle your accident report.”
→ (Silvia waits for the Agent to connect.) - Sylvia is connected to the Agent
- Sylvia finally can express her intent.
By replacing this (rather long) IVR interaction with Copilot, it can look like this:
- “Welcome, what can I do for you?”
→ (Customer says:) “Hello, I was in a car accident involved and would like to know if the damage is covered by my insurance.”
⮑Use Case - The Copilot Agent processes the input and extracts:- Language: English (EN)
- Customer Type: Existing
- Topic: Insurance
- Subtopic: Coverage
- Sentiment: Neutral
- Based on this understanding, the Copilot routes the Customer directly to the appropriate service or provides an immediate, context-aware response – eliminating the need for multiple IVR steps.
- Sylvia is connected to the Agent.
- The Agent is already aware of the topic Sylvia wants to speak about.
As you can see, the Copilot approach is much more time-efficient and Customer-friendly while minimizing errors during the Interaction.
Before you start / Preconditions / Prerequisites / etc.
You require tenant administrator, service owner rights to to create, update, etc...
- Nimbus: Contact Center and Virtual Users license.
-
Microsoft:
- A “Copilot Studio” Licence → Also see Azure Billing notes below.
- Power Automate and Nimbus Power Automate Connector Prerequirements are met.
- A deployed AI model or Power Automate Premium license to use AI Builder.
Overview of the Nimbus Workflow and Copilot Activities

Designing the Copilot
Let's start by applying the best practices to our creation process by defining a scenario:
Imagine visitors of a nature reserve. At the entrance a welcome guide listens to each one of them, understanding multiple languages, why they are here and what they want to see. The guide will then call a ranger to come to the entrance and pick up the visitor for a tour. Once the ranger arrives, the guide hands out a datasheet of the visitors conversation and interests so that the ranger can personalize the tour.
Defining the Bot's role
Acting as the Guide, the Copilot bot will gather all the necessary information and perform a classification of all the relevant information.
Defining the Tasks
-
Greet
- Explain well to arriving visitors why you are here and what you need to know to do your job.
-
Listen & Understand
- Classify the visitor's messages into urgency, topic, sentiment, language.
-
Handover …
- …when language and topic has been detected (it's sufficient, urgency and sentiment are a plus)
- …when the visitor requests for anything else (do not call the ranger, but point to the park's administration office ==> Agent handover)
- …as a fallback, in case of too many retries (instruct the ranger to do the default tour ==> fallback language and topic)
Access, checkpoints and thinking
The guide doesn't need access to the park, but he needs to know how to call the rangers and handover the information. The guide does not need to recognize the visitors and doesn't need a long-term memory. There is no need for supervisor approval for giving instructions to the rangers.
The message classification task requires analytical thinking, we'll be using non-generative AI.
Building the Copilot
| Description | Screenshot |
|
![]() |
|
![]() |
|
![]() |
| Create a custom topic “On message received”. Here is an overview of the topic flow. We will get into the details in the following steps. | ![]() |
|
Start with the trigger “Message is received”. 💡This topic runs for every Customer message. |
![]() |
|
💡The first Customer message will contain the Nimbus Within Copilot Studio:
|
![]() |
|
If yes,
|
![]() ![]() |
|
💡In the “other” branch, we know that we receive the second Customer message. It will be the reaction to the welcome message. In our case “Hi, how can I help you?”
For that add a new step and select Add a tool > New Agent flow. After clicking that it will directly take you to the designer.
Please go to the Power Automate Flow part below, where we explain how to create the flow. After that is done you can come back here.
The picture here shows the finished state! The AI model returns a structured JSON output which we need to parse and map to our variables, then respond to Copilot.
|
![]() |
|
Now that we classified the message and collected the values in our variables, we can use the Nimbus Connector to Update the Nimbus task.
|
![]() |
|
![]() |
|
![]() |
|
![]() |
Power Automate Flow
Flow overview

|
Trigger Event for the PA flow will be the “When a agent calls the flow” When you come from the topic this will be added automatically. Here you add an input and select text. |
![]() |
|
Next we initialize a variable and name it “System Message” Below you will find the value of the message. In short we will tell the AI what to do and what output we want and in what format. |
![]() |
Show System Message…. | |
|
Subsequently, both the caller's input and the system message are sent to the AI through an HTTP request. 💡This process requires a designated endpoint capable of receiving such data. For our GPT model implementation, we utilise Azure Foundry. Below is the use case outlining the procedure for creating a model: Luware Nimbus - Use Case - Creating an AI Model over Azure AI Foundry with Open AI Once your model is deployed, you will receive a URL for sending requests. Body:
|
![]() |
|
We will then add an Parse JSON step, taking the body output from our HTTP request and put it in the right format.
Schema:
|
![]() |
|
The last step will be to map the JSON outputs to the outputs needed to send as response back to Nimbus.
|
![]() |
Adding the Copilot to Nimbus Configuration
Add the Speech Recognizer
- Setup your speech services in Azure:
- 💡You can follow Use Case - Setting Up a Speech Recognizer in Azure Portal and Nimbus instructions.
- 🧠In the overview of your speech services configuration you find the secret keys, copy one of them.
- 🧠Also note the region of your speech service, as it determines where the API call will be made.
- In Nimbus, go to Admin > Configuration > Speech Recognizers
- Create a new Speech Recognizer entry.
- Define the Name, Organization Unit as needed
- If not already selected, choose Type “Azure AI Services”
-
🧠Paste the API Key and specify the region same as defined previously.
Add the Bot
- In Copilot Studio, go to Settings > Security > Web channel security
-
🧠 Copy the Secret 1 key for later.
- In Nimbus, go to Admin > Configuration > Bots. Add a new bot with the following configuration:
-
Endpoint:
https://directline.botframework.com/v3/directline/conversations - API key: 🧠 Your copied secret key
-
Endpoint:

Disable Authentication
- In Copilot Studio, go to Settings > Security > Authentication
- Set the Authentication to “No authentication”
☝Attention: If this authentication is not deactivated the Virtual User will not work!

Create a Response Template
- In Nimbus, go to Admin > Configuration > Bot Response Templates
- Add a new default response template for Copilot.
Create the Virtual User
- In Nimbus, go to Admin > Configuration > Virtual Users.
- Add a new Virtual User with a Description and choose your bot accordingly.
- On the Initial Message to Bot the most important part is the System Parameter
CallId. It corresponds to the NimbusTaskID.
💡TheCallIdis used to start the Copilot “On message received” Trigger mentioned above, which will engage the Bot with a Customer. The next reply by the Customer is then handled exclusively Copilot itself.

Using the Copilot in Nimbus
The final step is to add your newly defined Virtual User to a workflow.
Use the Virtual User in your Workflow
- Within Nimbus go to Configuration > Workflows.
- Create a new Audio/Video Workflow or add your new “Add Virtual User” activity to an existing workflow.
- Within the activity, you need to configure the Exit with the Regular Expression
^Understoodto ensure that the Virtual User stops after processing the second input.
💡The wording “Understood” is adjusted in Copilot.
- Within the activity, you need to configure the Exit with the Regular Expression
- You can then add an “Announcement” Custom Context Parameters to listen to their values and work with them according to your needs.
- Example Custom Parameters:
$(CustomContextParameters.<Language/Topic/Urgency/Sentiment)
- Example Custom Parameters:

















