# Llamadas VoIP con Cordova

Pushwoosh soporta notificaciones de llamada estilo VoIP para iOS y Android utilizando el `pushwoosh-cordova-plugin`. Esto habilita la funcionalidad nativa de llamadas VoIP, incluyendo la interfaz de usuario de llamada entrante y los eventos de control de llamada.

## 1. Añade el plugin de Pushwoosh para Cordova con VoIP habilitado

Instala el plugin con la bandera de VoIP habilitada:

```sh
cordova plugin add pushwoosh-cordova-plugin --variable PW_VOIP_IOS_ENABLED=true --variable PW_VOIP_ANDROID_ENABLED=true
```

Esto configurará el plugin para soportar la funcionalidad VoIP en iOS.

## 2. Añade la dependencia CocoaPod PushwooshVoIP

Asegúrate de que el pod `PushwooshVoIP` se incluya automáticamente a través del plugin. Si es necesario, verifícalo manualmente en tu `Podfile`:

```ruby
pod 'PushwooshVoIP'
```

> Este pod es necesario para soportar las notificaciones VoIP basadas en PushKit y el manejo de llamadas a nivel de sistema.

## 3. Habilita el modo de segundo plano VoIP en Xcode

Abre tu proyecto en Xcode y sigue estos pasos:

1.  Ve a **Signing & Capabilities**.
2.  Añade la capacidad **Background Modes**.
3.  Marca la opción **Voice over IP**.

Esto permite que tu aplicación reciba notificaciones push VoIP mientras está en segundo plano.

## 4. Configura el código de la aplicación VoIP (si usas tanto VoIP como notificaciones push regulares)

Si tu aplicación utiliza tanto notificaciones push estándar como VoIP, debes establecer explícitamente el código de la aplicación VoIP antes de la inicialización de VoIP:

```javascript
pushwoosh.setVoipAppCode("XXXXX-XXXXX");
```

Reemplaza `"XXXXX-XXXXX"` con el Código de Aplicación de Pushwoosh asignado a tu aplicación habilitada para VoIP en el Panel de Control de Pushwoosh.
<Aside type="caution" title="Importante">
- Los tokens para las notificaciones push VoIP se registrarán bajo el Código de Aplicación VoIP, mientras que los tokens de notificaciones push regulares se registrarán bajo el Código de Aplicación principal.

- Este método debe ser llamado **antes** de llamar al método `registerDevice()`.
</Aside> 


## 5. Solicita permiso de llamada en Android

En Android, necesitas solicitar a un usuario que conceda permiso para recibir llamadas. Para ello, llama al método `requestCallPermission()`. Esto debe hacerse antes de registrar un dispositivo.

```javascript
pushwoosh.requestCallPermission();
```


## 6. Inicializa los parámetros de VoIP

Llama al siguiente método para inicializar la funcionalidad de VoIP:

```javascript
PushNotification.prototype.initializeVoIPParameters = function(supportsVideo, ringtoneSound, handleTypes, success, error) {
    if (typeof handleTypes === "function") {
        error = ringtoneSound;
        success = supportsVideo;
        handleTypes = undefined;
        ringtoneSound = undefined;
        supportsVideo = undefined;
    }

    exec(success, error, "PushNotification", "initializeVoIPParameters", [
        !!supportsVideo,
        ringtoneSound || "",
        handleTypes != null ? Number(handleTypes) : 1
    ]);
};
```

### Parámetros

-   `supportsVideo` – `true` o `false` dependiendo de si tu aplicación soporta videollamadas
-   `ringtoneSound` – nombre del archivo de tono de llamada personalizado (p. ej. `"incoming.caf"`), o una cadena vacía para el predeterminado
-   `handleTypes` – máscara de bits numérica para los tipos de manejo de llamadas (`1` para número de teléfono, `2` para correo electrónico, etc.)

## 7. Callbacks y métodos VoIP disponibles

El plugin de Cordova soporta los siguientes métodos y eventos relacionados con VoIP:

-   `answer` – se llama cuando un usuario responde a una llamada entrante
-   `endCall` – se llama cuando un usuario finaliza la llamada actual
-   `hangup` – se llama cuando se cuelga una llamada
-   `reject` – se llama cuando se rechaza una llamada entrante
-   `muted` – alterna el estado de silencio, solo para iOS
-   `held` – alterna el estado de espera, solo para iOS
-   `voipPushPayload` – devuelve el payload de la notificación push para la llamada VoIP entrante
-   `incomingCallSuccess` – se llama cuando la interfaz de usuario de llamada del sistema se muestra con éxito, solo para iOS
-   `incomingCallFailure` – se llama cuando la interfaz de usuario de llamada del sistema no se puede mostrar, solo para iOS
-   `speakerOn` – enciende el altavoz
-   `speakerOff` – apaga el altavoz
-   `playDTMF` – reproduce un tono DTMF durante una llamada, solo para iOS

Estos pueden ser enganchados usando el objeto `PushNotification` de Cordova, permitiéndote controlar y responder a los cambios de estado de la llamada VoIP.


## Enlaces relacionados

-   [Resumen del SDK de Pushwoosh para Cordova](/es/developer/pushwoosh-sdk/cross-platform-frameworks/cordova/)
-   [Notificaciones Push VoIP en iOS (Documentación de Apple)](https://developer.apple.com/documentation/pushkit)