===== Llamadas voice over IP =====
* Esta función sólo está disponible en el framework Android.
* La versión del sistema operativo debe ser Android 2.3.X (Gingerbread) o superior.
* A la hora de desarrollar, es conveniente estar atento a los mensajes del logcat que vienen bajo el tag "[[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:xonevoip]]" y "[[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:sipmanager]]", para solucionar errores.
==== Implementación ====
Para empezar, descargamos e instalamos el módulo de llamadas [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:xonevoip]] desde [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:xonesupport]].
Como las llamadas telefónicas son algo que se puede recibir en cualquier momento, usamos un objeto global como pueden ser las variables user(""). Para ello, usamos [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:createobject]]("[[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:xonevoip]]") y se lo asignamos a algo como MAP_VOIP.
Si las funciones [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:voip]] no están soportadas en este terminal, al crear el objeto saltará una excepción y mostrará un mensaje de aviso por pantalla.
Necesitamos también definir en el nodo de la aplicación el atributo phone-coll="[[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:coleccionllamadaentrante]]", que se llamará automáticamente cuando se reciba una llamada desde ese perfil y que debe contener, como mínimo, los botones de colgar y descolgar la llamada. La idea bajo esta implementación, es que el desarrollador cree los botones para hacer llamadas, recibirlas o registrarse con el servidor, y que diseñe una pantalla de llamadas a su gusto.
Por ejemplo, se puede hacer que se registre al loguearse en la aplicación con los datos que se saquen de la base de datos y que haya una opción en algún menú para hacer las llamadas.
Para las pruebas, se puede montar un servidor [[http://www.asterisk.org/ | Asterisk®]] o usar algún proveedor gratuito como [[http://www.iptel.org/service | IPTel.]]
A continuación se describen las funciones y más abajo se muestra un ejemplo de uso completo.
==== Funciones de registro ====
=== CreateProfile ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:createprofile]](usuario, servidor) |
^ Parámetro ^ Descripción ^
| usuario | Nombre de usuario de la cuenta SIP. |
| servidor | Dominio del servidor SIP. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").CreateProfile "usuario", "servidor.org"
=== SetPassword ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setpassword]](password) |
^ Parámetro ^ Descripción ^
| password | Define la contraseña de la cuenta SIP. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetPassword "pass"
=== SetProtocol ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setprotocol]](protocolo) |
^ Parámetro ^ Descripción ^
| protocolo | Protocolo para conectarse al servidor. Casi siempre es UDP. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetProtocol "UDP"
=== SetPort ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setport]](puerto) |
^ Parámetro ^ Descripción ^
| puerto | Puerto al que conectarse del servidor. Casi siempre es 5060. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetPort 5060
=== SetSendKeepAlive ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setsendkeepalive]](keepalive) |
^ Parámetro ^ Descripción ^
| keepalive | Define si se debe enviar un paquete de keepalive al servidor. Puede ser true o false. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetSendKeepAlive "true"
=== SetOutboundProxy ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setoutboundproxy]](direccion) |
^ Parámetro ^ Descripción ^
| direccion | IP o dominio del servidor proxy para las llamadas salientes, si fuera necesario. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetOutboundProxy "212.212.212.212"
=== SetDisplayName ===
Nombre que se ve al hacer una llamada. Lo proporciona el proveedor [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:voip]]
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setdisplayname]](nombre) |
^ Parámetro ^ Descripción ^
| nombre | Nombre que se mostrará. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetProfileName "Test VoIP 01"
=== SetProfileName ===
Define el nombre del perfil que se puede ver en los ajustes de cuentas [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:voip]] de Android.
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setprofilename]](nombre) |
^ Parámetro ^ Descripción ^
| nombre | Nombre interno del perfil. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetProfileName "Test VoIP 01"
=== AddProfile ===
Da por válidos el resto de ajustes y crea el perfil.
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:addprofile]]() |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").AddProfile
=== RegisterProfile ===
Una vez creado el perfil, lo registra para poder recibir llamadas.
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:registerprofile]]() |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").RegisterProfile
=== UnRegisterProfile ===
Esta llamada desactiva el perfil y no deja pasar ni recibir llamadas. Según la versión de Android, esta llamada puede ser ignorada. [TODO]
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:unregisterprofile]]() |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").UnRegisterProfile
=== SetRingtone ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:setringtone]](fichero) |
^ Parámetro ^ Descripción ^
| fichero | Nombre del fichero de sonido que se reproducirá al recibir una llamada desde este perfil. Puede ser .WAV, .MP3 o lo que sea capaz de reproducir el terminal. Se recomienda usar un .WAV no demasiado pesado. |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SetRingtone "ringtone.mp3"
==== Funciones de llamada saliente ====
=== MakeVoIPCall ===
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:makevoipcall]](direccionsip) |
^ Parámetro ^ Descripción ^
| direccionsip | Dirección a la cual hacer la llamada |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").MakeVoIPCall "test@servidorsip.com"
==== Funciones de llamada entrante ====
=== AnswerVoIPCall ===
Responde a la llamada entrante.
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:answervoipcall]]() |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").MakeVoIPCall "test@servidorsip.com"
==== Funciones de llamada ====
=== HangVoIPCall ===
Cuelga la llamada, se haya establecido o no.
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:answervoipcall]]() |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").HangVoIPCall
=== SendDTMF ===
Envía tonos DTMF en la llamada activa. No suele funcionar, pues sólo existe un codec [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:voip]] capaz de transportar esta clase de tonos en modo "in-band" (G711) y no es habitual en proveedores [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:voip]].
^ Nombre | [[wiki:4.-cliente:404.-modulos-plugins:401.12.-llamadas_voip:senddtmf]](numero) |
^ Parámetro ^ Descripción ^
| numero | Cadena con el número a enviar. Valores posibles: 0123456789ABCD |
^ Valor devuelto | 0 si OK, -1 si error. |
Ejemplo de uso:
user("MAP_VOIP").SendDTMF "1234"
==== EJEMPLO ====
Este es un ejemplo en plan "Walkie-Talkie". Para usarlo cojemos dos teléfonos, en uno cargamos el primer mappings y en el otro el segundo.
**Perfil #1:**
**Perfil #2:**