There aren't any. I've lost a couple of my bigger clients as a result.
ECMA (European manufacturers association) publishes the CSTA standard which is the backbone for almost all of the CTI protocols - JTAPI (mostly used by Avaya and Cisco) and TSAPI (mostly used by Genesys and Avaya). Most phone vendors today (polycom/yealink/et al) support CSTA over SIP (uaCSTA or also known as TR/87) and that XML protocol is documented here:
http://www.ecma-international.org/activities/Communications/TG11/cstaIII.htm
https://www.ecma-international.org/publications/techreports/E-TR-087.htm
Ultimately I think the goal is to support uaCSTA and I have done a lot of research and here are some of my findings:
- There was a FreeSWITCH module created several years ago that attempted this. I have read through all of the code and it looks pretty well done but I have yet to install/test it just because it is so old. https://sourceforge.net/projects/cstainside/
- ESL events are really great and meet 50% of the CSTA needs (event subscription) and also add other functionality that CSTA doesnt support today. Obviously you don't want to expose ESL to the public so publishing this via some other connectivity (like web socket) would be preferable.
- Meeting the other half of the CTI needs (controlling the end phone to answer, transfer, hold, conference, etc) could be done by only invoking those specific function calls in CSTA. FreeSWITCH supports sending NOTIFY messages with some flexibility via ESL but the INFO messages that can be send from ESL is very limited. Se the mod_sofia.c code for sending info (to_uri is not set properly for a NAT environment among other things): https://github.com/signalwire/frees...src/mod/endpoints/mod_sofia/mod_sofia.c#L5699 You can see sending NOTIFY messages via ESL is much more extensive and essentially has what we need: https://github.com/signalwire/frees...src/mod/endpoints/mod_sofia/mod_sofia.c#L5338 I have a fork of FreeSWITCH that supports the proper sending of INFO messages but need to find time to finish testing with phone.
- I am still stuck in an analysis paralysis situation about how to best support event notification within the current PHP based solution and I would love some feedback. I have heavily research how to get PHP to support this via websockets and/or long running processes (event loops) but I am pretty confident that PHP is not the right solution due to scalability and stability issues. What I typically use would be Java (and it works well) but implementing the entire java stack (runtime, tomcat, etc) isn't a preferable approach and that led me to look at Go/Golang. I went down the path of Go but implementing the event loop there turns out to be a real mess (I see a lot of people using uWebSockets instead) and ESL socket support is limited in my cursory review. This all leads me to NodeJS as it has great ESL support, the event loop is already there but the single threading nature give me concern and I would like the broader community buy in before heading down that path.
Erlang seems too complicated to me. I think Elixir would be a good fit: the power of Erlang plus the flexible code experience of Ruby.I haven't spent much time with erlang but it intrigues me quite a bit (functional programming and failure handling specifically) but I am not sure a community based open source project would be successful using erlang. Elastic uses it and does wonders but that isn't really built by a community.
Curious if @markjcrane has thought about what comes after PHP for needs like this (long running processes, web sockets, etc).