Skip to main content
Skip table of contents

Microsoft Dynamics CTI Adapter

The Microsoft Dynamics CTI Adapter is powered by the Dynamics 365 Channel Integration Framework (CIF). With this framework, you can integrate any third-party telephony provider or telephony aggregators into a model-driven app, where the Dynamics 365 Channel Integration Framework acts as an interface between the providers or aggregators and a model-driven app.

For more details, refer to the official documentation:
Channel Integration Framework Overview (Microsoft)

Setup Dependencies

Scripts

The scripts object for the Dynamics integration is as follows:

JSON
{
  "scripts": [
      {
          "src": "https://<instance>.dynamics.com/webresources/Widget/msdyn_ciLibrary.js",
          "dataset": {
              "crmurl": "https://<instance>.dynamics.com",
              "cifid": "CIFMainLibrary"
          }
      },
      {
          "src": "https://developer.onipscape.com/integrations/<version>/dynamics/ips-dynamics-integration.v<semantic-version>.min.js"
      }
  ],
}

To connect with your Dynamics instance and configure the ipSCAPE CTI to react and perform in the way you wish, you will need to configure various options.

Options

CODE
{
    "config": {
        "options": {
          "completeActivityRecordOnWrap": true,
          "createTaskOnPreview": false,
          "fields": {
            "callDispositionField": "new_wrapcode",
            "agentInteractionId": "new_agentInteractionId"
          },
            "entities": {
              "contact": {
                "plural": "contacts",
                "key": "contactid",
                "query": "fullname,telephone1,mobilephone,donotphone",
                "type": "person"
              },
              "account": {
                "plural": "accounts",
                "key": "accountid",
                "query": "name,telephone1,donotphone",
                "type": "entity"
              }
            }
        }
    }
}

There are a few available options:

  • completeActivityRecordOnWrap: BOOLEAN - Do you wish for the activity log created during the call to marked as complete when the call is wrapped?

  • createTaskOnPreview: BOOLEAN - Should a record be created when the lead is presented event though no call has been made?

Screen Pop

Screen pop can be set by call subtype or a default * required. The subtypes are as follows:

  • manual

  • inbound

  • preview

  • outbound

  • default

CODE
{
  "screenPop": {
    "default": {
      "entity": "contact",
      "query": "?$select=fullname,telephone1,mobilephone&$filter=telephone1 eq '{{telephone1}}'&$search={{telephone1}} or {{mobilephone}}",
      "map": [
        {
          "name": "telephone1",
          "type": "string",
          "path": "interaction.activity.customerCli"
        },
        {
          "name": "mobilephone",
          "type": "string",
          "map": "interaction.activity.sourcePhoneNumber"
        }
      ],
      "addNewRecord": true
    },
    "rules": [
      {
        "callType": [
          "preview"
        ],
        "addNewRecord": true,
        "entity": "contact",
        "query": "?$select=fullname,telephone1,mobilephone&$filter=telephone1 eq '{{telephone1}}'&$search={{telephone1}}",
        "map": [
          {
            "name": "telephone1",
            "type": "phone",
            "format": "local",
            "path": "interaction.leadData.phones.index=1[phone]"
          }
        ]
      }
    ]
  }
}

Parameter

Type

Description

entity

string

The entityLogicalName that sets the base for the search

query

string

The query string used for our dynamic search see more on this below

map

object

This provides the mapping for the data we need in our query

addNewRecord

boolean

When set to true, will open a form to add a new record should the search return no results

Our query example contains and example of how to data-merge values using the template pattern {{string}}.

In the example above we have the template {{telephone1}} which when compiled will use the value provided by the map to populate the template before processing the query.

Entities

CODE
{
  "entities": {
    "contact": {
      "plural": "contacts",
      "key": "contactid",
      "query": "fullname,telephone1,mobilephone,donotphone",
      "type": "person"
    },
    "account": {
      "plural": "accounts",
      "key": "accountid",
      "query": "name,telephone1,donotphone",
      "type": "entity"
    },
    "lead": {
      "plural": "leads",
      "key": "leadid",
      "query": "fullname,telephone1,donotphone",
      "type": "person"
    }
  }
}

The entities parameter is used for relating activities to entities. If the entity is listed, the CTI will use this to provide the reference.

If an entity type is not listed here it will be ignored by the integration.

Parameter

Type

Description

plural

string

Provides the plural for the entity as this is required when creating our query

key

string

The id for the object type

query

string

Comma separated list of data parameters returned for this object

type

person or entity

In our default integration we will have two select boxes that the agent can use to relate the activity. One will display people and the other will display entities.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.