Client Application

Client Application

It is important to know that the client application has no implementation restrictions. This means the application can be developed in any language or web framework, as long as the CRM Connector application is correctly embedded in the iFrame.

If you have followed the whitelisting step from the prerequisites correctly, you should now be able to see the CRM Connector application inside the client application after it has been compiled and built. This application is then whitelisted and embedded in a CRM (e.g., Zendesk).

Another important point is that any CRM must allow you to store a set of configurations that can be accessed by the client application through an API or by storing a file.

For example, Salesforce provides a Call Center and an API for performing operations such as reading and validating data. ServiceNow offers a JSON input within the application that accepts all configurations and provides an API for access. In Zendesk, there is a manifest.json file where all JSON objects are declared, and a zcli.apps.config.json file where all key-value entries for the manifest.json declarations are stored.

Therefore, it is essential to carefully read the documentation for the chosen CRM to understand how to utilize these configurations when creating the client application.

Note: that the set of configurations is different for both Avaya Experience Platform and AXP Connect. Both sets of configurations in JSON format will be found below

Note: For accessing the client app demo code please reach out to Avaya

Avaya Experience Platform JSON config

{
  "parameters": {
    "ReqGeneralInfo": {
      "reqInternalName": "AvayaWorkspaces",
      "reqDisplayName": "Avaya Workspaces",
      "reqAdapterUrl": "your-lab-url-where-crmconnect-is-deployed",
      "reqSoftphoneHeight": "640",
      "reqSoftphoneWidth": "300",
      "activeSoftphoneHeight": "640",
      "activeSoftphoneWidth": "300",
      "idleSoftphoneHeight": "520"
    },
    "ServerConfig": {
      "serverHostName": "your-lab-url-where-crmconnect-is-deployed",
      "useLocalSessionSharing": "N"
    },
    "DialingOptions": {
      "reqOutsidePrefix": "9",
      "reqLongDistPrefix": "1",
      "reqInternationalPrefix": "011",
      "dialInternalLength": "4",
      "dialCountryCode": "1",
      "dialLocalLength": "7",
      "dialLongDistanceLength": "10",
      "emergencyCodes": ""
    },
    "SoftphoneOptions": {
      "language": "en_US",
      "startWorkButtons": "US",
      "startWorkState": "NR",
      "autoStartWorkEnabled": "N",
      "autoSignOutEnabled": "N",
      "clickToDial": "Y",
      "clickToConsultEnabled": "Y",
      "manualNotReadySelectionEnabled": "Y",
      "manualAfterContactWorkEnabled": "Y",
      "transferButtonEnabled": "Y",
      "toggleChannelsEnabled": "N",
      "conferenceButtonEnabled": "Y",
      "serverResponseTimeout": "120",
      "autoAcceptInteraction": "N",
      "logginSecurityLevel": "H",
      "logPersistenceDuration": "0",
      "dropIncomingInteraction": "Y",
      "manualOutboundInteraction": "Y",
      "customerJourneyButtonEnabled": "Y",
      "enableNotifications": "L",
      "setAgentStateToNotReadyOnRona": "Y",
      "reportsEnabled": "Y",
      "advancedCustomerHistoryEnabled": "Y",
      "debounceTime": "",
      "voicemailNumber": ""
    },
      "ActivityOptions": {
      "callLogEnabled": "Y",
      "callLogShow": "Y",
      "callLogShowRelatedTo": "Y",
      "callLogShowComments": "Y",
      "logOnIncompleteInteractions": "N",
      "customVoiceActivityField1":  "",
      "customVoiceActivityField2":  "",
      "customVoiceActivityField3":  "",
      "customDigitalActivityField1":  "",
      "customDigitalActivityField2":  "",
      "customDigitalActivityField3":  "",
      "agentIdFieldApiName": "",
      "callLogCaller": "",
      "callLogCalled": "",
      "callLogFrom": "",
      "callLogTo": "",
      "consultFieldApiName": "",
      "startTimeFieldApiName": "",
      "interactionHistorySize": "5",
      "defaultVoiceInteractionLogSubject": "",
      "defaultDigitalActivitySubject": "",
      "voiceHeaderLabels": "",
      "emailHeaderLabels": "",
      "chatHeaderLabels": "",
      "messagingHeaderLabels": "",
      "logData1": "",
      "logData2": "",
      "handleClickToDialFromTask": "R",
      "callLogQueue": "",
      "callLogUUI": "",
      "transcriptionFieldApiName": "",
      "callTypeCustomField":"",
      "statusCustomField":"",
      "callDurationInSecondsCustomField":"",
      "commentsCustomField":"",
      "callDispositionCustomField":"",
      "subjectCustomField":"",
      "typeCustomField":"",
      "contactNameField":"",
      "callLogObjectCustomField":""
    },
    "CallScreenPopOptions": {
      "screenPopOnAni": "Y",
      "screenPopOnDnis": "N",
      "screenPopOnConsultOrCompleted": "C",
      "internationalAnisearch": "N",
      "suppressScreenPop": "N",
      "waitBeforePerformScreenpop": "N",
      "customParam1": "",
      "customParam2": "",
      "customParam3": "",
      "customParam4": "",
      "customParam5": "",
      "customParam6": "",
      "customParam7": "",
      "customParam8": "",
      "customParam9": "",
      "customParam10": ""
    },
    "ReasonCodesEnabled": {
      "auxReasonEnabled": "N",
      "dispositionCodesEnabled": "N",
      "workCodesEnabled":"N"
    },
    "LabelOptions": {
      "ready": "",
      "notReady": "",
      "goReady": "",
      "goNotReady": "",
      "afterContactWork": "",
      "goAfterContactWork": "",
      "afterContactWorkExtended": "",
      "startWork": "",
      "pendingNotReady": "",
      "pendingAfterContactWork": "",
      "dispositionCodes": "",
      "cancel": "",
      "activate": "",
      "activateAgent": "",
      "toStartWork": "",
      "startWorkPending": "",
      "finishWork": "",
      "finishWorkPending": "",
      "connected": "",
      "welcomeConnected": "",
      "signOut": "",
      "offline": "",
      "showOfflineAgents": "",
      "hideOfflineAgents": "",
      "forceLogout": ""
    }
  }
}

AXP Connect JSON config

{
  "parameters": {
    "ReqGeneralInfo": {
      "reqInternalName": "AvayaWorkspaces",
      "reqDisplayName": "Avaya Workspaces",
      "reqAdapterUrl": "your-lab-url-where-crmconnect-is-deployed",
      "reqSoftphoneHeight": "640",
      "reqSoftphoneWidth": "300",
      "activeSoftphoneHeight": "640",
      "activeSoftphoneWidth": "300",
      "idleSoftphoneHeight": "520"
    },
    "ServerConfig": {
      "serverHostName": "your-lab-url-where-crmconnect-is-deployed",
      "useLocalSessionSharing": "N"
    },
    "DialingOptions": {
      "reqOutsidePrefix": "9",
      "reqLongDistPrefix": "1",
      "reqInternationalPrefix": "011",
      "dialInternalLength": "4",
      "dialCountryCode": "1",
      "dialLocalLength": "7",
      "dialLongDistanceLength": "10",
      "emergencyCodes": ""
    },
    "SoftphoneOptions": {
      "language": "en_US",
      "startWorkState": "NR",
      "autoStartWorkEnabled": "N",
      "autoSignOutEnabled": "N",
      "clickToDial": "Y",
      "clickToConsultEnabled": "Y",
      "manualNotReadySelectionEnabled": "Y",
      "manualAfterContactWorkEnabled": "Y",
      "transferButtonEnabled": "Y",
      "toggleChannelsEnabled": "N",
      "conferenceButtonEnabled": "Y",
      "serverResponseTimeout": "120",
      "autoAcceptInteraction": "N",
      "logginSecurityLevel": "H",
      "logPersistenceDuration": "0",
      "dropIncomingInteraction": "Y",
      "manualOutboundInteraction": "Y",
      "customerJourneyButtonEnabled": "Y",
      "enableNotifications": "L",
      "setAgentStateToNotReadyOnRona": "Y",
      "reportsEnabled": "Y",
      "advancedCustomerHistoryEnabled": "Y",
      "debounceTime": "",
      "voicemailNumber": ""
    },
    "SoftphoneOptionsAXP": {
      "startWorkButtons": "US"
    },
      "ActivityOptions": {
      "callLogEnabled": "Y",
      "callLogShow": "Y",
      "callLogShowRelatedTo": "Y",
      "callLogShowComments": "Y",
      "logOnIncompleteInteractions": "N",
      "customVoiceActivityField1":  "",
      "customVoiceActivityField2":  "",
      "customVoiceActivityField3":  "",
      "customDigitalActivityField1":  "",
      "customDigitalActivityField2":  "",
      "customDigitalActivityField3":  "",
      "agentIdFieldApiName": "",
      "callLogCaller": "",
      "callLogCalled": "",
      "callLogFrom": "",
      "callLogTo": "",
      "consultFieldApiName": "",
      "startTimeFieldApiName": "",
      "interactionHistorySize": "5",
      "defaultVoiceInteractionLogSubject": "",
      "defaultDigitalActivitySubject": "",
      "voiceHeaderLabels": "",
      "emailHeaderLabels": "",
      "chatHeaderLabels": "",
      "messagingHeaderLabels": "",
      "logData1": "",
      "logData2": "",
      "handleClickToDialFromTask": "R",
      "callLogQueue": "",
      "callLogUUI": "",
      "transcriptionFieldApiName": "",
      "callTypeCustomField":"",
      "statusCustomField":"",
      "callDurationInSecondsCustomField":"",
      "commentsCustomField":"",
      "callDispositionCustomField":"",
      "subjectCustomField":"",
      "typeCustomField":"",
      "contactNameField":"",
      "callLogObjectCustomField":""
    },
    "CallScreenPopOptions": {
      "screenPopOnAni": "Y",
      "screenPopOnDnis": "N",
      "screenPopOnConsultOrCompleted": "C",
      "internationalAnisearch": "N",
      "suppressScreenPop": "N",
      "waitBeforePerformScreenpop": "N",
      "customParam1": "",
      "customParam2": "",
      "customParam3": "",
      "customParam4": "",
      "customParam5": "",
      "customParam6": "",
      "customParam7": "",
      "customParam8": "",
      "customParam9": "",
      "customParam10": ""
    },
    "ReasonCodesEnabled": {
      "auxReasonEnabled": "N",
      "dispositionCodesEnabled": "N",
      "workCodesEnabled":"N"
    },
    "LabelOptions": {
      "ready": "",
      "notReady": "",
      "goReady": "",
      "goNotReady": "",
      "afterContactWork": "",
      "goAfterContactWork": "",
      "afterContactWorkExtended": "",
      "startWork": "",
      "pendingNotReady": "",
      "pendingAfterContactWork": "",
      "dispositionCodes": "",
      "cancel": "",
      "activate": "",
      "activateAgent": "",
      "toStartWork": "",
      "startWorkPending": "",
      "finishWork": "",
      "finishWorkPending": "",
      "connected": "",
      "welcomeConnected": "",
      "signOut": "",
      "offline": "",
      "showOfflineAgents": "",
      "hideOfflineAgents": "",
      "forceLogout": ""
    }
  }
}

Note: Please keep in mind that the options above are just examples and the values are the default ones.

The configuration above is the collection of data that the CRM Connector application needs for proper functioning, and this will be received by the application itself at the time of the request and the issuance of the requestGetCRMDirectory/crmDirectory messages through a ping-pong of messages.

After all the steps above have been completed perfectly, you should have a client application whitelisted in Keycloak, which is functional in the chosen CRM, through which you can easily log in an agent in the CRM Connector application.

Note: A full implementation of a Sample Client Application working with Zendesk CRM will be provided by us.