Zendesk CTI Adapter

Overview

IPscape supports Zendesk integration. Once configured you will see a 'softphone' within Zendesk from which you can make and receive calls.


1. Get the app

  1. Log into Zendesk

  2. Click the Admin icon () in the sidebar, then select Apps > Marketplace.

  3. Search for “IPscape” and find the ipSCAPE V8 CTI Adapter app

    image-20250904-035128.png
  4. Click “Install”

    image-20250904-035440.png

2. Configure the app

0a1444b5-b6ba-49ff-8daa-31039cd61e18#media-blob-url=true&id=6f40d077-f0c1-428c-9566-045adfec981a&contextId=2290909186&collection=contentId-2290909186
  1. Install the app

  2. Enter a Name for the app.

  3. Fill out the settings detailed in the table below

  4. Click Update

Setting name

Value

Title

Title identifying the CTI adapter app

Tenant

Your tenant URL. For example: http://mytenant.ipscape.com.au

Integration Key

The Integration API Key created in the Workspace.
See https://knowledgehub.ipscape.com/Integrations/ipSCAPE-API.1764262098.html#ipSCAPEAPI-3.HowtouseipSCAPEAPIs

Width

Set the CTI Adapter widget width (px)

Height

Set the CTI Adapter widget height (px)

Enable role restrictions

Use this to restrict access to this app to certain Zendesk Roles

Enable group restrictions

Use this to restrict access to this app to certain Zendesk Groups


3. Zendesk Configuration JSON

The Zendesk integration is constructed using the Talk Partner Edition API to use as a CTI toolkit, and the Zendesk Apps framework to extend the agent interface in Support.

A telephony event triggers one or more actions in Zendesk Support. For example, when an agent answers a call, the telephony system can create and display a ticket in Zendesk Support. Read more about the Zendesk Talk Partner Edition.

Setup Dependencies

To connect with your Zendesk instance and configure the ipSCAPE CTI to react and perform in the way you wish, you will need to configure both the users and the tickets configurations in the options configuration.

Users

JSON
{
    "users": {
        "addNewUser": true,
        "defaultName": "Phone: {{customer_line}}",
        "map": [
            {
                "name": "customer_line",
                "type": "phone",
                "format": "local",
                "path": "interaction.activity.customerCli"
            }
        ]
    },
    ...
}

Parameter

Type

Description

addNewUser

boolean

If a match is not found when searching for a user, should a new user be created?

defaultName

string

This is the name used by the CTI to create a new user. You can use merge fields to make this name unique.

In the example, Phone: {{customer_line}} we are using a merge field customer_line which is

described in the map array to insert the customerCli into the string.

map

Array

This map is used to provide merge fields for the defaultName

Tickets

JSON
{
    "tickets": {
          "public": false,
          "type": "incident",
          "subject": "{{callType}} call: {{campaign}} ",
          "priority": "urgent",
          "useCallNote": true,
          "closeTicketOnWrap": true,
          "custom_fields": [
              {
                  "InteractionID": "interactionId"
              },
              {
                  "Campaign": "campaign"
              },
              {
                  "ActivityID": "activityId"
              },
              {
                  "Customer ID": "customerId"
              }
          ],
          "map": [
              {
                  "name": "interactionId",
                  "type": "number",
                  "path": "interaction.agentInteractionId"
              },
              {
                  "name": "activityId",
                  "type": "number",
                  "path": "interaction.activity.activityId"
              },
              {
                  "name": "campaign",
                  "type": "string",
                  "path": "interaction.campaign.title"
              },
              {
                  "name": "callType",
                  "type": "string",
                  "path": "interaction.interactionType"
              },
              {
                  "name": "customerId",
                  "type": "string",
                  "path": "interaction.activity.ivrData.key=digits[value]"
              }
          ]
      }
  },
    ...
}

Parameter

Type

Description

public

boolean

Is true if any comments are public, false otherwise

type

string

The type of this ticket. Allowed values are "problem", "incident", "question", or "task".

subject

Array

The value of the subject field for this ticket. Merge fields are available to help create a meaningful subject line. * Merge fields must be added to the map

priority

string

The urgency with which the ticket should be addressed. Allowed values are "urgent", "high", "normal", or "low".

useCallNote

boolean

If true, comments entered into the call note in the CTI adaptor are also added to the ticket.

closeTicketOnWrap

boolean

If true the ticket status is set to closed when the call is wrapped.

custom_fields

Array

Custom fields for the ticket. Collection of key:value pairs where the key is the field Display name of the Zendesk field and the value is the name of the map item.

map

Array

This map is used to provide merge fields and values for the custom_fields.

Screen Pop

Screen pop can be set by call sub-type or a default * required. The subtypes are: manual , inbound, preview, outbound, default

  • {
      "screenPop": {
        "default": {
          "map": [
            {
              "name": "phone",
              "type": "phone",
              "format": "local"
              "map": "interaction.activity.customerCli"
            }
          ]
        },
        "rules": [
          {
            "callType": [
              "preview"
            ],
            "searchOnly": true,
            "map": [
              {
                  "name": "customerKey",
                  "type": "string",
                  "path": "interaction.leadData.customData.key=customer_key[value]"
              },
              {
                  "name": "phone1",
                  "type": "phone",
                  "format": "local",
                  "path": "interaction.leadData.phones.index=1[phone]"
              }
            ]
          }
        ]
      }
    }
    
    

The default map provides the fallback behaviour for all calls provided there is no matching rule for the given callType. In the example provided we are creating a parameter phone of type phone which will search through the IpSCAPE call data for the parameter named customerCli found at the path interaction => activity => customerCli The phone number will then be used in our search params with the specified formatting, in this case as a local phone number.

Phone numbers can be formatted as:

  • local - (02) 8999-9999

  • national - 0289999999

  • international - +61 2-8999-9999

  • E164phone - +61289999999