NimbusOne Dynamics 365 Integration

NimbusOne can be registered as a third-party voice channel provider inside Microsoft Dynamics 365, using the Dynamics 365 Channel Integration Framework (CIF) 2.0. Once configured, service representatives working in Copilot Service workspace or Omnichannel for Customer Service can handle Nimbus calls without leaving Dynamics 365.

This page is for the customer's Dynamics 365 System Administrator. It explains how the integration works, then walks through every configuration step in Dynamics 365. No changes are made on the Nimbus side beyond what your Luware contact enables for you.

🔎 From Microsoft Learn | What is Dynamics 365 Channel Integration Framework 2.0?

Dynamics 365 Channel Integration Framework is a cloud-based framework that integrates telephony channel providers with model-driven apps in Dynamics 365. The framework uses a browser-based JavaScript API library. With this framework, you can integrate telephony channels into a model-driven app in Dynamics 365, and the framework acts as the interface between the channel and the app.

Dynamics 365 Channel Integration Framework provides a set of APIs that include methods, events, and protocols. These APIs help developers and partners build communication experiences. They also allow non-Microsoft telephony systems running on a channel provider cloud to interact with model-driven apps in Dynamics 365.

With the Dynamics 365 Channel Integration Framework app, you can configure a channel in a model-driven app. Customer service representatives (service representatives or representatives) can then access the channel and serve customers.

 

How it works

The integration runs entirely inside your browser. Dynamics 365 loads the NimbusOne client in an embedded panel inside the Copilot Service workspace or Omnichannel for Customer Service communication panel. NimbusOne and Dynamics 365 exchange call events and record information through Microsoft's standard CIF 2.0 JavaScript interface. For example: 

  • Inbound Nimbus calls can raise a native Dynamics 365 notification with Accept and Decline actions.
  • Accepting a call can open the caller's Dynamics 365 record automatically alongside the NimbusOne panel.
  • Clicking a phone number on any Contact or Account record dials it through NimbusOne.
  • Full call control stays available from the docked NimbusOne panel, including Hold, Resume, Mute, Unmute, Transfer, Add Participant, and Terminate.

💡 No new Nimbus backend service is required. NimbusOne simply reports its state into the Dynamics 365 panel in addition to running standalone.

Configuration follows Microsoft's Bring Your Own Channel pattern. You, or your Dynamics 365 administrator, register NimbusOne as a Channel Provider and create a small set of supporting templates directly in Dynamics 365. There is no packaged installer or solution package to import in this release. Every record described below is created by hand, once, per Dynamics 365 environment.

Prerequisites

💡 Before you start

💡 Sections 1, 2 and 6 below are required. Sections 3–5 are each optional add-ons. The page explains what you gain and what you can skip.

System Requirements

  • A multisession app: Copilot Service workspace or Omnichannel for Customer Service. The classic Customer Service Hub is single-session and cannot host the panel.
  • Your organization's NimbusOne host name, for example https://nimbusone.example.com. 
    💡 Your Luware contact can provide this if needed.
  • Browser: Microsoft Edge or Google Chrome. Third-party cookies must be allowed for the Dynamics 365 host.
  • Channel Integration Framework: NimbusOne requires Dynamics 365 Channel Integration Framework (CIF) 2.0, provided with supported multisession applications such as Copilot Service workspace and Omnichannel for Customer Service. No separate CIF installation is required for these applications.

Licenses 

  • Nimbus: 
    • Same requirements as Luware NimbusOne (Contact Center license on Service and users (Agents) accessing those services)
    • No additional Nimbus add-on is required to use the integration.
  • Dynamics 365 licensing is governed by Microsoft. Please note that these cost are outside of your Nimbus subscription.

Permissions

  • Microsoft:
    • Dynamics 365 permissions: The user performing the configuration requires the System Administrator security role in the target Dynamics 365/Dataverse environment. The roles involved:
  • Copilot Service workspace OR Omnichannel for Customer Service.
    ☝️ Multisession apps only.
 

Configuration Steps

☝️Note: Values in the tables below marked as fixed must be entered exactly as shown. Changing them causes the call to ring in NimbusOne while Dynamics 365 shows nothing, with no error displayed to the agent. Everything else, such as display names, button labels, icons, and which form fields a notification shows, is yours to choose. The names used below are only suggestions.


Note:

  • Steps 1 and 2 are done in Copilot Service admin Center. 
  • Steps 3 to 5 are done in Copilot Service admin Center, under Support experience, Workspaces.

Step 1: Register the channel provider

  1. In your Dynamics 365, Go to your Copilot Service Admin Center
  2. Go to Workspaces > Third party voice channel provider > Manage > New.
  3. Fill in details as follows:
Field Value
Name Luware NimbusOne
Unique name1 <prefix>_LuwareNimbusOne
Label LuwareNimbusOne
Channel URL2 https://<your-nimbusone-host>/cti
Enable Out Bound Yes. Required for click-to-dial.
Channel Order 1
Api Version 2
Trusted Domain2 https://<your-nimbusone-host>. Origin only, no path.
💡 Leave Custom Parameters and Sandbox Configuration empty.

☝ IMPORTANT: Two settings easy to get wrong

Both of the following produce confusing symptoms rather than a clear error.

  • 1 Unique name prefix: MUST begin with your organization's customization prefix, 2 to 8 alphanumeric characters in the format prefix_Name. Without it, saving fails with an export-key error that does not name the missing prefix. 
    💡 Find your prefix under Power Apps >  Solutions > Your solution > Publisher > Prefix.
  • 2 Channel URL and Trusted Domain: must always be changed together. A mismatch fails with a browser error naming the old host, which looks like a caching problem but is not one.
 

Step 2: Attach the provider to an experience profile

✅ Out-of-box experience profiles are locked and cannot take a channel provider. So instead, you create your own.

  1. Go to: Workspaces > Experience profiles > Manage > New.
  2. App binding: bind the profile to Copilot Service workspace.
  3. Channel providers: 
    1. open Edit and set Third party voice channel providers to Luware NimbusOne. 
    2. Leave All active channels off.
  1. Roles: add the security role (group role, e.g. Basic User) held by the agents who should see the panel.
  2. Verify with Workspaces, Experience profiles, Search by user. Assignment Method must read Direct or via role. Fallback means no profile is assigned, and the agent will land on a locked default profile, which cannot carry the channel.

☝ Known Issue: If the panel does not appear outright for agents: A custom experience profile has not consistently loaded the NimbusOne panel for every agent in every environment tested so far. If agents complete this section but the panel still does not appear, try creating a fresh experience profile and reattaching the channel provider before assuming the configuration itself is wrong.

Optional Step 3: Create the Application tab template

✅ This step creates the tab that shows the caller's record. On its own it does nothing. Step 4 is what puts it on screen. Both Steps 3 and 4 are an optional pair, and both can be skipped:

  • When implemented: Each answered call gets its own Dynamics 365 session, named after the caller, with the caller's record anchored beside the NimbusOne panel. The session title then follows the call's state, showing On hold, Parked, Wrap-up, or Ended as it changes.
  • When skipped: The caller's record still opens on answer, in the session the agent is already in, and everything else on this page still works. NimbusOne detects that the session template is absent and falls back to its own handling automatically. Nothing else needs configuring for that.
  1. Go to: Workspaces > Application tab templates > Manage > New.
  2. Fill details as follows: 
Field Value
Name1 NimbusOne caller record
Unique name1 luware_nimbusone_caller
Title Caller
Page type Entity Record
1💡 The Name and Unique name are yours to choose. Note that Step 4 refers to this template by name.
  1. Save, then set these in the Parameters section that appears:
Parameter Value
entityName contact
entityId {callerRecordId}. Fixed value, copy exactly.
validateRecord True
☝️Both parameters matter. An empty entityId opens a blank new-contact form instead of the caller. Without validateRecord, an unrecognized record opens that same blank form rather than nothing.
  1. If validateRecord is not listed, add it with New Template Parameter. Name it validateRecord, set the Unique Name to new_tabtemplateparam_validateRecord, and set the Value to True.
     

Optional Step 4: Create the session template 

✅ This step is required if you configured step 3. Both rely on each other.

  1. Go to: Workspaces > Session templates > Manage > New.
  2. Fill details as follows:
Field Value
Name NimbusOne voice session
Unique name luware_nimbusone_session. Fixed value, write exactly as stated.1
Type Generic
Title {callerName}. Fixed value, copy exactly.
Communication panel mode Docked
Anchor tab NimbusOne caller record. (🔎 See → the Application tab template created in step 3)
  • 1☝️ Unlike step 3, the Unique name here must read exactly “luware_nimbusone_session". NimbusOne requests this template by name. 
  • Type must be Generic, since NimbusOne cannot open a session from an Entity-type template. 
  • Communication panel mode Docked keeps the NimbusOne panel visible when the session opens. 
  • The Title must contain {callerName}, which is also what carries the call's state as it changes.

Optional Step 5: Create the notification template

💡 This step is optional: 

  • When implemented: Add this template if you want EITHER of the following:
    • Dynamics prompt: an Accept and Decline prompt from Dynamics 365, in addition to the one in the NimbusOne panel.
    • Desktop notifications: an alert when the agent has the workspace minimized or is on another browser tab. This is the only way to alert an agent who is not looking at Copilot Service workspace. The NimbusOne panel cannot raise these notifications on its own.
  • When skipped: Skip this section unless you want incoming calls announced by Dynamics 365 itself. Without it, agents answer and decline calls in the NimbusOne panel, and everything else on this page still works: click-to-dial, the screen pop, and the call session. Nothing else needs changing.

💡 Both prompts stay in step with each other. Answering in one closes the other. If you decide later to stop using it, deactivate the template. No change is needed on the NimbusOne side.

 

✅ Implementation Steps:

  1. Go to: Workspaces > Notifications > Manage > Templates > New Notification Template.
  2. Fill details as follows:
Field Value
Name NimbusOne incoming call
Unique name luware_nimbusone_incoming_call. Fixed value, copy exactly.
Title Incoming call
Show Countdown Yes
☝ Countdown timing: The countdown must be longer than your Nimbus workflow Queue Activities “no-answer” timeout. If it is shorter, the prompt disappears while the call is still ringing, and the agent loses the ability to accept it from Dynamics 365.
Countdown (seconds) See the note below.
Accept Button Accept
Reject Button Yes, labeled Decline.
Show desktop notifications When app is in background
  1. Save, then add the fields shown in the prompt. For each, use Add Existing Notification Field, then New.
    ☝️ A maximum of four notification fields is supported.
Name Field header Value
Caller name Caller {callerName}. Fixed value.
Caller number Number {callerNumber}. Fixed value.
Service Service {serviceName}. Fixed value.

✅ Follow-up: Agent browser notifications

  1. Each agent, once per machine, must choose Allow Notifications when the browser first asks to show them.
  2. Note that Desktop notifications do not work …
    1. …in private or incognito browser windows, 
    2. … when Windows Focus Assist / Do not Disturb is on.
 

Step 6: Prepare your contact and account forms

✅ Required step. Two behaviors depend on your own form and column configuration rather than on the steps above: Click-to-dial works on any column whose format is Phone, but only where that column is placed on the form body. Phone numbers shown in the form header are read-only and are never clickable. If agents should be able to dial a number, make sure its column is on the form.

Table Columns searched
Contact Business Phone, Home Phone, Mobile Phone
Account Main Phone, Other Phone

💡 Screen pop searches these columns. A number stored in any other column, including a custom phone column, is not searched. An incoming call from that number opens no record in this release.

Step 7: Verify

✅ Required: Reload Copilot Service workspace completely, not just the browser tab, since new templates are only read at app load. Once done:

  1. The NimbusOne panel appears on the left and the agent can sign in.
  2. Click a phone number on a contact. The NimbusOne dialer opens with the number filled in.
  3. Call the agent from a number stored on a contact. If you configured step 5, the Dynamics 365 prompt appears with the caller's name. Otherwise the call rings in the NimbusOne panel only.
  4. Answer the call. If you configured steps 3 and 4, a session opens with the caller's record beside the panel. Otherwise the record opens in the session the agent is already in.
  5. Decline the next call. It is rejected and no session opens.

Troubleshooting

Symptom Likely cause Fix
Panel never appears Provider not on the agent's experience profile. Check that Assignment Method is Direct, not Fallback (step 2).
Panel appears, agent can sign in, but nothing else works Channel URL and Trusted Domain disagree. Set both to the same host (step 1).
No Dynamics 365 prompt on an incoming call Notification template absent, inactive, or its unique name differs from the fixed value. Expected if you skipped step 5. Otherwise compare against the fixed values in step 5. Unique names cannot be edited after saving, so recreate the template.
No session opens on answer, but the record does Session template absent, inactive, not Generic, or its unique name differs from the fixed value. Expected if you skipped steps 3 and 4. Otherwise compare against the fixed values in step 4.
A blank new-contact form opens on answer entityId empty, or validateRecord missing. Set entityId to {callerRecordId} and validateRecord to True (step 3).
Prompt disappears while the call is still ringing Countdown shorter than the no-answer timeout. Raise the countdown (step 5).
A phone number is not clickable Column is in the form header, or not on the form at all. Place the column on the form body (step 6).
A known caller's record does not open Number is stored in a column outside the searched list. See step 6 for the searched columns.
Changes appear to have no effect Templates are only read at app load. Fully reload Copilot Service workspace.

💡Good to Know

  • Fixed search and template values: the Contact and Account phone columns searched for screen pop (step 6) and the template unique names described above are fixed for this release and are not currently customizable per organization.
  • No activity sync: call outcomes and notes are not written back to Dynamics 365 as activity records in this release.
  • Manual setup only: there is no packaged installer for the Channel Provider and templates in this release. Each is created by hand following the steps above.
  • Single-provider only: co-existence with another third-party telephony channel provider active in the same Dynamics 365 environment at the same time is not validated in this release.
  • Standalone client unaffected: the standalone NimbusOne client continues to work outside Dynamics 365. You can have both open at once, and NimbusOne's existing single-active-session handling reconciles the two.
 

 

Table of Contents