===== 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:**