El servicio básico puede ser como cualquier API RESTful: un directorio respaldado por la base de datos de quién está actualmente registrado, con códigos de notificación push para cada cliente y la infraestructura para enviar una notificación push como resultado de una llamada. Esa parte es fácil y se puede escribir en cualquier lenguaje de servidor estándar: NodeJS, Rails, Java, etc.
Cuando un cliente llama a otro, el cliente llamante solicitaría una notificación push al cliente receptor, y ambos iniciarían una negociación VoIP.
Para algunos consejos clave sobre este último, vea mi respuesta aquí:
- ¿Cuál es el costo de hacer una aplicación de realidad virtual?
- Si una empresa usa Slack, GoogleDocs, DropboxPaper, Confluence & Zoom, ¿hay una aplicación de colaboración de trabajo que pueda reemplazar la mayoría o todas estas?
- ¿Hay alguna aplicación en Google Play Store que tenga una calificación de 5 estrellas?
- ¿Perderé mi contacto si desinstalo y reinstalo wechat?
- ¿Cuáles son las 5 mejores aplicaciones de Android Wear que usas a diario?
¿Cómo puedo desarrollar una aplicación que tenga características como llamadas de WhatsApp en Android?
La respuesta corta es que no es difícil hacerlo desde un navegador que usa WebRTC, o desde una aplicación híbrida (Cordova) que usa algo como:
https://github.com/alongubkin/ph…
Sin embargo, el uso de WebRTC requiere un poco de aprendizaje, el cual toco en el enlace de arriba.