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:
{
"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
{
"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 ascomplete
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
{
"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 |
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
{
"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 |
query | string | Comma separated list of data parameters returned for this object |
type |
| In our default integration we will have two select boxes that the agent can use to relate the activity. One will display |