Como hacer un softphone web
Un compañero de otra empresa me preguntaba hace unos días sobre cómo debía de actuar si quisiera desarrollar un teléfono vía web y pese a que tengo claro cual es la respuesta rápida, dándole vueltas a más posibilidades el resultado no deja de ser, cuanto menos, interesante.
Hace unos años, para hacer una aplicación web que pudiera hacer llamadas a móviles, se hacía uso de una librería comercial llamada PortSIP. Esta utilizaba un ActiveX lo que lo hacía compatible únicamente con sistemas operativos Windows. La alternativa a esto, era utilizar un applet de Java llamado JIAXClient y utilizar el protocolo IAX para hacer llamadas. El problema era que ActiveX requería, no solo de Windows, si no también de una versión concreta de Internet Explorer, por lo que no era compatible en el 90% de los sistemas. JIAXClient utilizaba el sistema de Applet de Java, un subsistema que tras pasar por varias manos, acabó en Oracle y los navegadores dejaron de dar soporte y apoyo…
Posteriormente y para hacer compatible a otros sistemas operativos y otros navegadores distintos de Internet Explorer, muchas empresas optaron por utilizar un componente Flash que, unido al protocolo RTMP (RealTime Media Protocol) que utiliza este sistema, precisaba de un gateway que convirtiera RTMP a SIP y pudiera hacer llamadas SIP. Hoy día Flash está condenado y son pocos los navegadores que lo soportan nativamente, y solo si necesitas ejecutar una aplicación creada en Flash, necesitas confirmar su ejecución en una ventana aparte.
Los nuevos navegadores como Chrome o Firefox han «expulsado» cualquier librería externa que intente acceder al hardware del sistema sin pasar por ellos, de manera que ya no sirven los medios habituales que se utilizaban antaño (DLL, OCX, y extensiones del navegador que hacían uso de librerías de terceros para acceder al hardware). Hoy día parece que la única manera con vistas de futuro, pasa por WebRTC.
Aún así, hablar de WebRTC es hablar de los cimientos que hacen falta para tener un softphone web, ya que a partir de ahí hay que desarrollar bastante código antes de tener algo disponible para los usuarios. A partir de aquí, tenemos varias posibilidades:
- SIPPO : un producto comercial orientado a ofrecer soluciones integradas y prácticamente llave en mano utilizando WebRTC. Requiere de un sistema que haga de gateway WebRTC-SIP que se incluye en la solución.
- IVRPowers : otro software comercial que también ofrece soluciones integradas llave en mano utilizando, WebRTC o Flash (este último para navegadores más antiguos). Requiere también de un gateway WebRTC-SIP incluido con la solución.
- Twillio : Aunque no lo parezca, es un operador IP que pone a disposición una API para que desarrolles tu propio software de comunicación (softphone o lo que se te ocurra) y pagas en función de las llamadas realizadas y/o recibidas.
- Respoke : Una API creada por una startup filial de Digium que ayuda a desarrollar aplicaciones WebRTC utilizando un canal de Asterisk especial llamado chan_respoke. Han modificado la web y ahora no encuentro información adicional, pero siempre me ha parecido interesante la idea. Creo que el precio varía en función del ancho de banda utilizado por las llamadas y el número de llamadas simultaneas, aunque no he podido confirmarlo.
- JsSIP : Una librería completamente gratuita y libre hecha en Javascript que permite conectarse a un servidor WebSocket que haga de gateway SIP y pueda establecer una llamada SIP directamente desde la web. (Ya hemos hablado de este software en Sinologic.)
- SIPML5 : Otra librería completamente gratuita y libre hecha en Javascript que, junto con un software que hace de gateway SIP, nos permite desarrollar nuestra propia aplicación de voz.
- Janus : Un gateway WebRTC de propósito general que permite desarrollar soluciones WebRTC e interconectarlas a otros protocolos y señalizaciones. Esta es una de las aplicaciones WebRTC del año y algo a lo que hay que prestar especial atención si estamos interesados en desarrollar algo utilizando VoIP y web.
Soy consciente que hay muchas más empresas que desarrollan soluciones WebRTC, Gateways, APIs, librerías y servicios WebRTC para empresas y para facilitar la vida a todo aquel que quiera desarrollar un click2call o un softphone web, pero estas son las más conocidas que me vienen a la mente.
Tampoco he hablado de soluciones web que ofrecen sistemas cerrados y propietarios. Son muchos los fabricantes que ofrecen WebRTC como un reclamo para atraer nuevos clientes, un canto de sirena que habría que evitar si no quieres depender de esa empresa y que te obliguen a cambiar todo el sistema cada cierto tiempo con el miedo de que deje de funcionar si no aceptas las nuevas normas, cobros, certificados, mantenimientos o a saber qué…
Es un error mayúsculo confundir WebRTC con un softphone web. WebRTC es un nuevo paradigma dentro del mundo de la VoIP y por lo tanto aunque hay ciertos conceptos que son comunes a la VoIP que conocemos (protocolos, códecs, puertos, etc..) a efectos prácticos es como volver a empezar de cero, por lo que desarrollar algo WebRTC que se conecte a nuestro sistema SIP de toda la vida no es algo rápido, fácil ni trivial, si no que requiere de mucho esfuerzo, pruebas y conocimientos que, por lo general, no son fáciles de aprender y si deseamos algo «rápido y fiable», tampoco será barato.