In this Use Case we're setting up a Virtual User that reaches out to your external systems mid-conversation. It uses re-usable Authentication to look up customer or order data, querying ticket systems, or using any other APIs the bot needs to do its job. The Virtual User uses Nimbus' AI Workflow profile together with Extension Tools: Web Requests for any HTTP API, and MCP Servers for tool collections that speak the Model Context Protocol.
The Virtual user also defines Intent-driven exits (Outcomes) for handling user-specific requests, optionally storing any intent responses (e.g. a retrieved account number or the customer name) in Parameters. Instead of a single fixed Success exit, the Virtual User now returns conversation result Outcomes you define on the Virtual User configuration, then map to Workflow exits.
💡Note: the terms “Intent” and “Outcome” are used interchangeably in the Virtual User configuration; the naming will be unified in a future release.
To achieve this, we're going to cover the following topics in this Use Case:
- How to configure the Bot and Virtual User on the AI Workflow profile.
- How to prepare a reusable Authentication (API Key or OAuth 2.0 Client Credentials) so the bot can reach an authenticated external system.
- How to write a Flow Description — the playbook that tells the model when to call a tool, which one to pick, and what to do with the result.
- How to attach Web Requests and MCP Servers as Extension Tools, and how to describe them to the model.
- How to wire the Virtual User into a Nimbus Workflow, mapping its exits and the default exits (Fallback, Failed, Idle Timeout).
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. |
Preconditions
INC AI and Virtual User Preconditions
PRECONDITIONS: AI Features, Bots and Virtual Users
Admin Consent: AI Features
✅ Nimbus Tenant Admin consent is required to enable the use of AI features. This is done in the Data Privacy Tenant Settings. AI use will require your Tenant data (e.g. caller information) to be processed by external services
💡Good to know - shared setup effort: Once consent is granted, both Admin Roles “Tenant Admins” and “OU Admins” are able to create various AI Configuration items in the Nimbus Admin Portal. This also includes:
- Access to Service Distribution Settings, e.g. to test workflows with your configured Virtual Users.
- Steer feature visibility via Companion Service Settings (e.g. when activities are supposed to happen unobtrusive in the background).
Virtual User Licensing
✅Nimbus License Management:
-
Contact Center Enterprise Routing service licenses are required to use AI-driven Virtual User functionality.
⮑With the license applied, corresponding Service Features (e.g. workflow activities, configuration tabs) are enabled. -
Individual Virtual User license requirement: Same as regular Nimbus users, each Virtual User requires a separate license. This license can be applied individually in the Virtual User configuration - or in bulk - via Admin > Licensing view.
⮑The license enables usage of the “Add Virtual User” Workflow Activity, without it the activity will be skipped over. For additional Virtual User licenses on your service, get in touch with your Customer Success representative.
Virtual User Bot Configuration
Virtual Users rely on Nimbus Configuration items:
✅ ALL: Virtual Users require Bots to be configured. Your bot choice also determines the underlying AI LLM into which the Nimbus Virtual User integrates. Your bot typ and profile should therefore be chosen with the intended use case in mind.
INC Language model comparison matrix
| Defined in Bots | Defined in Virtual Users | |
|
Type Nimbus managed or BYO |
Agent Type Underlying LLM |
Virtual User Profile Pre-built configurations to fulfill a certain use case |
| Nimbus AI Services | Azure OpenAI – (GPT Realtime)1 |
|
|
Custom AI Services
|
|
|
| M365 Copilot Direct Line 3.0 |
|
|
Notes
1 Due to Microsoft Azure AI foundry availability in limited regions, data processed by a Nimbus Virtual User “GPT”-Realtime" integration might temporality leave due to failover scenarios:
- Nimbus Cluster DE01, DE02, CH01, CH02, UK01, EU01, AU01 computation will be primarily performed in Sweden Central region.
- Nimbus Cluster US01 computation will be primarily performed in the US East region.
✅SPECIFIC AI services / Agent technologies (e.g. Microsoft Copilot) may require additional configuration items such as:
- Bot Response Templates, to map bot answers back into Nimbus workflow parameters.
- Speech Recognizers (Transcribers) to convert the Customer voice into text for the bot to process.
🔎For more details and specific configuration steps, refer to our AI Use Cases category and the specific Use Cases and pages linked above.
Use Case Overview
Details will be covered below in this Use Case. As a quick tl;dr, here is an overview of items you will need:
| What will you need? | Where? | Why? |
|---|---|---|
| ✅ Bot Configuration | Nimbus Admin > Configuration | To pick the bot's hosting service and agent technology that hosts the AI conversation. |
| ✅ Virtual Users | Nimbus Admin > Configuration | To select the AI Workflow profile, write the Flow Description, attach Extension Tools, define the Outcomes the bot can detect, and apply the license that enables the bot to perform tasks. |
|
|
Nimbus Admin > Configuration | To store reusable credentials — an API Key or OAuth 2.0 Client Credentials — that your Web Requests and MCP Server (defined in the Virtual User) use to reach an authenticated external system. |
| ✅ Web Requests | Nimbus Admin > Configuration | To define connections with external HTTP APIs that the Virtual User can call on demand. |
| ✅ MCP Servers | Nimbus Admin > Configuration > Virtual User | To attach a Model Context Protocol endpoint that exposes a whole toolset to the Virtual User (e.g. an internal Jira or ticketing helper), secured with one of the reusable Authentications above. |
| ✅ Parameters | Nimbus Admin > Configuration | To store the Fallback topic the AI returns when it cannot resolve the caller's request, and to capture data the bot collects per Outcome (up to 10 Parameters each). |
| ✅ “Add Virtual User Activity” (in Workflow) | Workflows > Conversation Handling Activities | To invite the Bot to the conversation, map its exit Outcome and route the default exits accordingly. |
Step 1 - Nimbus AI Bot Setup
✅ This step consists of setting up a: …
- … Bot configuration, which specifies either Azure OpenAI or Copilot as Agent Type, and a …
- Virtual User with the corresponding behavioral settings for the bot, as well as Extensions Tools such as Web Requests and MCP Servers.
Virtual User and Bot Overview
Below is a comparison matrix of how Virtual Users and Bots are configured in Nimbus, and for which type of Use Case. For this example we are going with the "AI Workflow” profile to make the configuration a bit easier.
INC Language Model Comparison Matrix
| Defined in Bots | Defined in Virtual Users | |
|
Type Nimbus managed or BYO |
Agent Type Underlying LLM |
Virtual User Profile Pre-built configurations to fulfill a certain use case |
| Nimbus AI Services | Azure OpenAI – (GPT Realtime)1 |
|
|
Custom AI Services
|
|
|
| M365 Copilot Direct Line 3.0 |
|
|
Notes
1 Due to Microsoft Azure AI foundry availability in limited regions, data processed by a Nimbus Virtual User “GPT”-Realtime" integration might temporality leave due to failover scenarios:
- Nimbus Cluster DE01, DE02, CH01, CH02, UK01, EU01, AU01 computation will be primarily performed in Sweden Central region.
- Nimbus Cluster US01 computation will be primarily performed in the US East region.
Configuring the Bot
✅ The Bot is your “mapping” to the AI service that hosts the conversation.
- Head to Nimbus Administration > Configuration > Bots and create a new Bot.
- Give your Bot a descriptive name.
💡This name is just for Nimbus UI purposes. - Define the Organization Unit under which this Bot will be selectable.
- Type: pick Nimbus AI Service for the Luware-managed option (no endpoint or API key required), or Custom AI Service if you bring your own Azure OpenAI deployment.
-
Agent Type is Azure OpenAI (shown as “Azure OpenAI – GPT Realtime”) — the only agent technology that supports Web Requests and MCP Servers.
💡If you picked Custom AI Service, fill in the Endpoint, Authentication Type and API Key fields. For Nimbus AI Service those fields are hidden — Nimbus provides them. - Save and Close.
Preparing the Authentication (for authenticated external systems)
✅ Most external systems (a CRM, a ticketing API, an internal MCP server) require credentials. Define them once as a reusable Authentication so both Web Requests and the MCP Server can reference the same item.
- Head to Nimbus Administration > Configuration > Authentication and create a new item.
- Give it a Name and Description, and set the Organization Unit in the same place (or higher) as your Virtual User.
💡Set the OU to the same unit as your Virtual User (or a parent) — the MCP Server dropdown only lists Authentications from the Virtual User's OU and its parents. - Pick a Type:
- API Key — provide the API Key Name, How Sent (Request Header or Query String) and Key Value.
- OAuth 2.0 Client Credentials — provide the Access Token URL, Client ID, Client Secret and optional Scope. Nimbus then requests and refreshes the bearer token automatically.
- Basic Authentication — on which you provide username and password.
- Save and Close. You can reuse this Authentication on any Web Request and on the Virtual User's MCP Server.
☝️ Take note: Secrets are stored encrypted and never shown again in clear text. An Authentication cannot be deleted while it is still used by a Web Request or an MCP Server.
Configuring the Virtual User
✅ Virtual Users. Here you give your AI bot instructions on how to interact with the Customer, which Outcomes it can detect, and which Extension Tools it may use.
💡 Tabbed configuration. The Virtual User configuration page is organized into tabs.
- General — Name, Organization Unit, Description, and the Bot Configuration (Bot + Profile).
- Behavior — System Instruction and the Timeouts (Max Session Duration, Inactivity Timeout).
- Conversations — Messages (Initial Message to Customer, Final Message to Customer), Voice & Language, and (on Open Profile) Verbosity, Tone and Role (Deprecated).
- Tools & Outcomes — Extension Tools (Web Requests, MCP Servers) and the conversation Outcomes. Covered in Step 2 below.
Which tabs and fields appear depends on the selected Bot and Profile.
General tab
- Head to Nimbus Administration > Configuration > Virtual Users and create a new Virtual User.
- Give your Virtual User a descriptive name, e.g. Order Status Concierge.
💡This name is just for Nimbus UI purposes, e.g. for later selection in your Workflows. -
Define the Organization Unit under which this Virtual User is selectable.
💡Should ideally match the Services and Workflows accessing this Virtual User, and the OU where your Web Requests and Authentications live. - Optionally add a Description for internal identification (max. 256 characters). It has no impact on bot behavior.
- Under Bot Configuration, Select the Bot you configured above.
-
Set Profile to AI Workflow.
💡The Profile decides how the bot behaves in the conversation. For example:- Selecting AI Workflow unlocks the “Extension Tools” section on the Tools & Outcomes tab (Web Requests, MCP Servers, Flow Description).
- The Open Profile profile does the same, but adds controls over Role, Verbosity and Tone.
- The Intent Analyzer profile is intentionally blocked from using Extension Tools — pick it only for pure intent classification (see Use Case - Setting up a Nimbus Virtual User for Intent Analysis).
Behavior tab
- The “System Instruction” field is your behavioral guideline (persona, hard rules, flow order). Keep it about who the bot is, not about which tool to call — the latter goes into the Flow Description below.
-
Define the Timeout behavior for your bot (in seconds). You have the following values to specify:
- Max Session Duration (seconds): Maximum total duration the Virtual User stays in the call.
- Inactivity Timeout (seconds): How long the bot waits for caller input before taking the Idle Timeout exit.
Conversations tab
- Optionally define the Initial Message to Customer:
💡Note that the underlying AI will engage with the Customer automatically. You can use these instructions to lead directly into the first conversation topic / intent. By adding Custom Parameters or System Fields and Parameters (retrieved via CRM using Flow Actions) you can also lead directly into a more personal conversation. - Optionally set a Final Message to Customer — a short line the Virtual User will say before handing off or disconnecting (e.g. “Thank you, I'll transfer you to a colleague now.”).
- Define the Language and Virtual User Voice of your Virtual User.
- On the Open Profile, you can additionally tune Verbosity, Tone (max. 200 characters) and Role (Deprecated). The Role field is being phased out and will be merged into the System Instruction in a future release — prefer putting persona guidance there.
Finalizing
- Ensure your Virtual User has a license applied, If you want to use your Virtual User productively. This license can be applied directly in the Virtual User configuration or — in bulk — via Admin > Licensing view.
⮑ Applying the license enables usage of the “Add Virtual User” Workflow Activity. When unlicensed, the activity will be skipped over.
Step 2 - Configuring Tools and Outcomes
By deciding to identify customer intent, and which external systems (tools) the Virtual User may reach into to retrieve data during the customer interaction. By describing both intents and tools well enough in your Flow Description, the bot knows which how to orchestrate the whole conversation effectively.
Outcomes
💡Outcomes (found on the Tools & Outcomes tab) let you list all the different results the bot can detect. You can also think of these as “Customer” intents, but also potential error or escalations, such as “I want to speak to a person”.
💡Note: the terms “Intent” and “Outcome” are used interchangeably in the Virtual User configuration; the naming will be unified in a future release.
✅For each intent you need to provide:
- A mandatory, unique Name (keep it to one word, e.g. order_found, so the model detects it reliably) — this is the label you map to a Workflow exit later.
- A mandatory Description telling the bot when to assign the intent (e.g. “The order was located and the status read back to the caller”).
- The type — an exit intent (ends the session and can be mapped to a Workflow exit) or a non-exit intent (in-conversation only, e.g. parameter capture).
- Optionally up to 10 Parameters the AI can fill with data collected during the conversation.
💡Good to know: MCP Server and Web Requests are independent checkboxes and both optional — your Virtual User can run with neither, either, or both. In either case, if you use them, make sure that you reference the used extensions in your flow description.
Flow Description
The Flow Description is a single free-text field on the Virtual User that tells the model how to drive the conversation when Extension Tools are involved. The model reads it alongside the System Instruction every turn and uses it to decide when to call a tool, which tool to pick, and what to do with the result. Note that the same Flow Description applies to both Web Requests and MCP Servers.
💡 Keep it concrete and step-driven. The model performs best when it can read the description as a numbered playbook rather than as prose:
- Spell out the conversation phases (greet → identify → look up → confirm → close).
- Don't duplicate the System Instructions (role, tone, language) in the tools. The Flow Description is about data and interaction flow, not personality.
-
Avoid ambiguity by naming each tool by its exact label as defined in your Virtual User — “call the
OrderLookupWeb Request”, not “call the order system”. - State when the bot should call a tool, and what to do if the tool fails or returns nothing.
- Keep the field length cap of 5,000 characters in mind.
Example for an order-status bot:
1. Greet the caller and ask for their order number.
2. Call the OrderLookup Web Request with the order number the caller provided.
3. If OrderLookup returns a result, read back the order status and the expected delivery date.
4. If OrderLookup returns no result or an error, apologise, offer to transfer to a human agent,
and end the conversation.
5. After confirming the status, ask whether there is anything else. If not, say goodbye and close.
Never invent an order status. Only state what OrderLookup returns.Attaching Web Requests
✅A Web Request attaches a (previously configured) Web Request definition item to the Virtual User so the model can call it mid-conversation.
- Enable “Web Requests” on the Virtual User. This unlocks the Web Requests sub-section.
- Click Create and pick a Web Request from the Virtual User's Organization Unit (or a parent OU). The Web Request's Name is what the model sees as the tool's identifier — use the same name in your Flow Description.
💡The external HTTP API behind the Web Request can be secured with a reusable Authentication (API Key or OAuth 2.0 Client Credentials). This is configured on the Web Request itself, not on this binding. - Fill in the AI Description for this binding. This is a per-Virtual-User field — the same Web Request can have a different AI Description on every Virtual User it is bound to.
💡 TIPS — AI Description template
💡A vague AI Description is the single most common reason for a bot to ignore a tool it is allowed to use. Three sentences is usually enough. A reliable template says:
- What it does — “Looks up an order by order number in the e-commerce backend.”
- When to call it — “Call this whenever the caller asks about the status, delivery date, or contents of a specific order.”
- What you'll get back — “Returns the order status, expected delivery date, and a list of line items, or an empty result if the order number is unknown.”
Attaching MCP Servers
An MCP Server attaches a Model Context Protocol endpoint to the Virtual User. The server's tools are exposed to the model in real time during the call.
- Enable “MCP Servers” on the Virtual User. At least one MCP Server is required when the toggle is on.
- Click “Create” and fill in:
- Name of the MCP Server (must be unique on the Virtual User — use the same label in the Flow Description)
-
URL (the server's SSE endpoint, e.g.
https://jira.example.com/mcp/sse) - Description
- Authentication — select a reusable Authentication instead of typing a header name and key inline.
💡 TIPS — MCP configuration
- The MCP Description is a Free-text summary of what the MCP server is for and when the model should reach for it (e.g. "Internal Jira instance. Use for any ticket lookup, comment, or transition.").
- In the Virtual User → Flow Description, you can clearly define how the MCP tools are to be used.
☝️Note: The model will follow the order and logic you specify in the flow description, not the order in which the MCP servers were added.
Step 3 - Configuring your Nimbus Workflow
✅Last but not least you need to configure a new Workflows to handle the Audio/Video interaction between Customers and your new Virtual User.
- Head to Nimbus Administration > Configuration > Workflows.
- Design or adjust any existing workflows you want to repurpose.
💡We recommend creating a copy of an existing Workflow so you can switch and test it with ease and return back should something not work as intended. -
In your Workflow, Accept a call as normally.
💡Important: Do NOT add a “Queue” activity unless you want to involve human interaction in your workflow as well (e.g. after the Virtual User interaction). - Connect your Caller to the AI by using the “Add Virtual User” activity. You can find it in the Conversation Handling Activities.
-
Configure the “Add Virtual User” activity as follows:
-
Virtual User: Select the Virtual User you configured above.
💡Note that the AI will automatically greet the Customer with the “Initial Message to Customer” field instructions provided in the Virtual Users > Conversations tab. If any Parameters have been retrieved earlier in the workflow, they will be part of that message as well.
💡When using the Workflow for Outbound Call: The Initial Message to Customer is spoken once the call connects. - Map your exit Intents (Outcomes) to Workflow exits. Each exit intent you defined on the Virtual User appears here and can be wired to its own downstream path. At least one exit intent must be mapped before the activity can be saved; duplicate mappings are blocked, and an exit intent that is in use cannot be deleted on the Virtual User.
-
Define a Fallback Parameter which receives the AI's summary of the conversation when the bot cannot resolve the request.
💡If the bot detects none of your exit intents, the activity takes the Fallback exit.
💡A good way to route this exit is a regular “Queue” step, so a human can take the call instead of the Virtual User.
💡The Parameter can also be shown in the Extensions Service Settings (e.g. within My Sessions) as additional context for the receiving service user.
-
Virtual User: Select the Virtual User you configured above.
- Route all your mapped custom exits as well as the default exits of the activity (AI Fallback, Failed, Idle Timeout).
- Finally: add the “Disconnect” activity at the end and Save your Workflow.
Testing your Virtual User
✅On any change we recommend thorough testing of your Virtual User.
- As a reminder: Ensure your Virtual Users used in workflows have a license applied. Otherwise a warning is shown in your “Add Virtual User” workflow activity and it will not connect.
- Apply the workflow in the Modalities Settings tab of your service.
- Start a “Test Call” to your Service, either via PSTN or the UPN shown in the General Service Settings.
-
Test the tool-calling behaviour:
- Try happy-path scenarios where the bot should call a specific Web Request or MCP Server.
- Try failure scenarios — caller gives wrong inputs, requests data your tools cannot provide — and verify the bot follows the fallback rules in your Flow Description rather than inventing answers.
- Verify the Outcome mapping: confirm each conversation outcome ends on the Workflow exit you mapped it to, and that an unresolved call leaves through the Fallback exit.
- If the bot picks the wrong tool, calls it at the wrong moment, or misuses its output, sharpen the Flow Description and the AI Description on the Tool Extension before changing the tools themselves.
Known Limitations
INC AI and Virtual User Limitations
General note on AI-driven interactions
AI driven replies are very dependent on what the Customer is saying. For example, if the Customer is saying “I have trouble with my modem” it is not necessarily given that the bot will associate “Internet” as your workflow routing exit, unless specifically handled in your Virtual User integration and instructions. We therefore highly recommend to test and account for “creative” or “non-tech-savvy” wording when designing your Virtual User interactions within your workflows.
🔎Recommended reading for beginners: We collected and wrote down some Best Practices - Virtual Users in Nimbus to help you with considerations and risks when replaying human interaction with AI.
General Virtual User limitations
The current Nimbus implementation with AI-driven bots underlies the following limitations:
- Supported Modalities: Virtual Users (Bots) are currently available for Audio/Video modality tasks.
- Virtual User Reporting: Sessions involving Virtual Users are not reflected as dedicated User Session. Virtual User session reporting is planned for a later point this year.
Microsoft Copilot Limitations
- Expect processing delays: Processing AI answers takes a few seconds for voice-to-text-transcription, followed by AI processing and then the same transcription back into a voiced response. Luware is trying to minimize the delay on Nimbus call infrastructure, but the dependency on external APIs will always incur this delay. The Customer will hear silence during this processing and no audio feedback / silence detection.
-
Ensure you have no ambiguity in your topics. For instance, the word “
Service” may be too generic if you want to transfer to different services. Rather usehealthcare|medical|emergencyas identifiers or use more complex Regular Expressions to identify replies.
Nimbus AI Services Limitations
| Bot Configuration Profile | 🔎 Design Notes (not limitations) |
|---|---|
| Intent Analyzer | The Nimbus Virtual User Intent Analyzer is primarily designed to handle intent detection, as described under Use Case - Setting up a Nimbus Virtual User for Intent Analysis. Other use cases, such as self-service and customer feedback surveys are not supported by Intent Analyzer. |
| AI Workflow |
|
| Open Profile |