SAP C4C Cloud CTI Integration
Just under 2 years ago we were presented with a task of integrating C4C to a cloud based telephony solution. This was for a government department that was implementing SAP Cloud for Service but had prior to that installed and went live with a cloud based telephony solution for their call centre. It was not long before finding out that SAP C4C CTI integration only works with client side applications. Server side integration was not possible. Fortunately all was not lost as the client was running the latest Windows which could run the CTI adapter. The requirement was to deliver both inbound outbound integration. Please note that I did this just under 2 years ago and a lot might have changed from what is possible in this space from a Cloud 4 Customer perspective.
I have been asked multiple times to document my approach and how we got this to work. The solution required minor assistance from the telephony service provider and most of the development effort was done on enhancing the CTI adapter and a small bridge application written in C#. My approach was as per below:
The existing process was quiet simple, an agent would login to the solution with their extention and join a queue, calls would then be directed to them. At this point, is where I need my solution to intercept the coming call and pass the details to C4C’s live activity pane. I looked at the existing archictecture and how it would normally work if the telephony solution was client side. Then in my design decided to follow a similar archicture by creating an app locally, hosting services started when a user opens the apps and enters their extention. This would then pass the agent’s extention and alert the service provider where to send the call packet data to.
For outbound the solution was very simple, the service provider had a SOAP service we could access. Using their api we simply created a way for users to add authentication details and make a call using the existing process between the browser and the adapter. We enhanced the outbound function of the CTI adapter that SAP provides to call our service started locally on the machine ready to recieve details of the call and pass that to the service provider. We also picked up minor format issues on numbers coming from C4C which I decided to fix in the same method as per below. The service from the service provider didn’t like country dialling code for some reason and we replaced that with “0”. This was handled better at a later stage to handle all the other country codes. Initially it was as per below for South Africa.
Inbound was slightly challenging, we collaborated with the service provider to give us data formats and types for the data that would be passed and consumed from a user’s desktop. From a design and code perspective I added a lot of monitoring and fail safe functions for when the connection drops or if there are issues or errors. Also made the application to assist users and technical staff in solving common issues. With that in mind I will only show the code I believe could help someone facing the same challenge or what I would need as a reference should I have to do it again.
The solution required us to open a web socket and listen in for any incoming calls passed by the cloud solution.
When a call is passed to the agent from their queue, the phone rings, in parallel to that we recieve data of the call and pass it to the live activity pane via the CTI adapter. This is the part that was missing when compared to the standard supported scope of client side integration.
I hope this documents my approach enough to help someone, we’ve had a number of CTI related development requirements from other customers, those however we always managed to deliver using the SDK. This one required me to use C# and was fun to deliver.
Hi Arnab Mondal3
For outbound, the call would already be C4C. So C4C actions the call in the 3rd Party System via the OutboundCallHandler.
Just a thought from what you’re describing above, if the requirement is to say have a call actioned from the 3rd party system to a customer, to be captured in C4C as an outbound call. The easiest might be to call a service to create that activity/phone call.
During a regular business , inbound and outbound will be a mix queue. Understand api updates are possible by calling service if that is what you meant but business requirement is to have screen popup for both inbound and outbound as its going to be a mixed queue.
Hi Thabiso Mokaba,
Thanks for writing this blog. I need some help here.
We are integrating CTI Outbound Call via 3rd party provider and we have enhanced the SAPCODCTIConnector.DLL with our custom logic, however we facing issue while binding the “EndpointAddress”, created for the Service to call the 3rd party provider.
In your blog, you have mentioned:
“We enhanced the outbound function of the CTI adapter that SAP provides to call our service started locally on the machine ready to receive details of the call and pass that to the service provider"
Can you please assist here? Did you update the “CTIConfiguration.xml” file in the “SAP Cloud for Customer CTI Client” folder or anything else? How did you achieve the EndpointAddress binding?
Thanks in Advance for your help.