I need some help regarding the implementation of CTI.

We currently have an hosted phone service with no salesforce adapter. But they can send an http message when an incoming call is received on an hard phone. Users will not using softphone to dial number, hold the line...

My requirement is very simple : 1) An incoming call is received by my salesforce user on his hard phone 2) My hosted phone service send an http message to salesforce 3) If the contact is unique, the record pop-up in a new window. If several contacts have the same phone number, a new window is open with all the records.

Seem simple but i don't figure what is the better and cleaner way to do that. My guess was to create a visualforce page, hosted in a salesforce site which can take parameters and create a record in a custom objet. Another Visualforce page, displayed in the sidebar check every 3 secondes if there is a new record on this table, regarding the user.

That's my developer way to do this. But is there another way to do that in a proper way Open CTI or something else ? Does i need to create a call center in salesforce ? A CTI Adapter ? If yes, what will be the adapter url ?

I'm a bit confused.

  • I know almost nothing about Open CTI, but was listening to a conversation at our DUG meeting last week on the subject. What I heard being said is that there's an Open CTI emulator you can use to test out any development work you want and to simulate any problems you're having. There's also a shortcut for bringing up a visualforce screen to emulate when the phone rings (CTRL + E). I recommend you look at the API.
    – crmprogdev
    Commented Feb 3, 2015 at 16:18
  • Does your "hosted phone service" provider has any API? Is there any way to get events for ringing, call connected? If http message sending is only way then you have to think something else. In my case we had API where were are getting all the events. So it was simple to implement.
    – Raj
    Commented Sep 24, 2015 at 7:59

2 Answers 2


There are several ways of accomplishing this, that I can think of. A relatively simple way, would be to build an apex rest service that can be invoked by the phone service, which would, lets say, add a new record into a custom object with the user identifier and incoming number. An Open CTI adapter implemented using a Visualforce page, and assigned to the user via the appropriate Call Center configuration would be "listening" for any new messages for this user from the phone service (via the custom object), and when one comes in, retrieve the phone number and use the searchAndScreenPop method to popup the requisite information on the user's Salesforce screen.


Apex REST service option will also work (like Suraj suggested), but it needs custom object data to be stored (which may be transient info) in SFDC DB. Then you need to look for a way to delete them , etc.. I would recommend going for a Client/Server Web Service model, which does not involve APEX/VF/Custom objects.

You can create an html page (loaded in the OpenCTI SFDC iframe) which polls for new messages from your phone service HTTP Server. You can use the phone number as the unique identifier and query for new messages to your Phone system http server. This Query can be a long poll process or Web Sockets, depending on the support from our phone system. Once you receive the incoming call info, you can use the OpenCTI searchandScreenpop function to do the screenpop. You need to set the Call center in the SFDC and Softphone Layout (and assign this to your SFDC user profile) to get the screenpop.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .