> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Notificaciones push VoIP

> Envía notificaciones push VoIP en iOS con OneSignal usando el registro de tokens PushKit y un certificado VoIP, además de alternativas de Android para comportamiento similar a llamadas.

Las notificaciones push VoIP permiten que tu aplicación reciba alertas de llamadas entrantes incluso cuando la app está en segundo plano o finalizada. Apple maneja los pushes VoIP de manera diferente a las notificaciones push estándar: usan un tipo de certificado separado, un token separado (a través de PushKit) y reglas de entrega distintas.

OneSignal admite el **envío** de pushes VoIP, pero el SDK de OneSignal **no** gestiona el registro de tokens VoIP. Tú eres responsable de:

* Registrar tokens VoIP en tu app usando Apple PushKit
* Crear una app de OneSignal dedicada con un Certificado de Servicios VoIP
* Registrar tokens y enviar pushes a través de la API REST de OneSignal

### Diferencias de plataforma

| Plataforma  | ¿Push VoIP admitido? | Cómo funciona                                                   |
| ----------- | -------------------- | --------------------------------------------------------------- |
| **iOS**     | Yes                  | Usa Apple PushKit y un certificado APNs VoIP                    |
| **Android** | No                   | Usa pushes de solo datos para simular comportamiento de llamada |

Si estás desarrollando una app de llamadas multiplataforma, usarás enfoques diferentes por plataforma.

***

## iOS: enviar notificaciones push VoIP

En iOS, las notificaciones VoIP usan Apple PushKit y siguen reglas de entrega especiales que difieren de las notificaciones push estándar. Dado que Apple trata los pushes VoIP de manera diferente, OneSignal requiere una configuración de app separada para VoIP.

<Warning>
  **Antes de comenzar** — estos son los errores más comunes al configurar VoIP:

  1. **No crear una app de OneSignal separada para VoIP.** Apple requiere un tipo de certificado diferente para VoIP, por lo que OneSignal necesita una app dedicada para enviar pushes VoIP. Tu app de push existente no puede usarse para ambos.
  2. **Subir el certificado incorrecto.** Necesitas un **Certificado de Servicios VoIP (.p12)**, no tu certificado push APNs estándar. Usar el incorrecto provoca fallos de entrega silenciosos.
  3. **Olvidar `test_type` en sandbox.** Al probar con una compilación de desarrollo, debes incluir `"test_type": 1` al registrar el token. Sin él, la llamada a la API tiene éxito pero los pushes nunca llegan.
</Warning>

<Steps>
  <Step title="Registrar un token VoIP usando PushKit">
    Usa el framework PushKit de Apple para registrarte en notificaciones VoIP y recibir un token VoIP.

    * Implementa PushKit en tu app
    * Almacena y actualiza el token VoIP a medida que Apple lo rota
    * Sigue de cerca las políticas VoIP de Apple

    <Accordion title="Ejemplo: implementación del delegado PushKit">
      ```swift theme={null}
      import PushKit

      class AppDelegate: NSObject, PKPushRegistryDelegate {
          func registerForVoIPPushes() {
              let registry = PKPushRegistry(queue: .main)
              registry.delegate = self
              registry.desiredPushTypes = [.voIP]
          }

          func pushRegistry(_ registry: PKPushRegistry, didUpdatePushCredentials credentials: PKPushCredentials, for type: PKPushType) {
              let token = credentials.token.map { String(format: "%02x", $0) }.joined()
              // Pass this token to OneSignal — see Step 4
          }
      }
      ```

      <Note>Este es código estándar de Apple PushKit. OneSignal no proporciona un SDK de PushKit — tú registras el token por tu cuenta y lo pasas a OneSignal en el Paso 4.</Note>
    </Accordion>

    Recursos de Apple:

    * [Documentación de PushKit](https://developer.apple.com/documentation/pushkit)
    * [Responder a pushes VoIP](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit)
    * [Mejores prácticas VoIP de Apple](https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html)
  </Step>

  <Step title="Crear una app de OneSignal separada para VoIP">
    Los pushes VoIP de Apple requieren un tipo de certificado diferente al de las notificaciones push estándar. Una sola app de OneSignal solo puede usar un tipo de certificado, por lo que debes crear **dos apps de OneSignal separadas**:

    * **App Push Principal**: Usa tu certificado APNs para notificaciones push estándar
    * **App Push VoIP**: Usa un Certificado de Servicios VoIP exclusivamente para notificaciones VoIP

    Ambas apps deben usar el mismo bundle ID de iOS y estar asociadas con la misma app iOS nativa. **No** necesitas inicializar el SDK de OneSignal dos veces — la app VoIP solo se usa del lado del servidor para enviar pushes VoIP a través de la API.

    <Note>El bundle ID (por ejemplo, `com.yourcompany.appname`) se encuentra en Xcode, en la pestaña **General** de tu target.</Note>
  </Step>

  <Step title="Subir un Certificado de Servicios VoIP">
    En tu app VoIP de OneSignal, sube un **Certificado de Servicios VoIP (.p12)**. Este es un tipo de certificado diferente al certificado push APNs estándar que usas para las notificaciones regulares.

    Para crearlo:

    1. Ve al [Portal de Desarrolladores de Apple](https://developer.apple.com/account/resources/certificates/add)
    2. Selecciona **VoIP Services Certificate**
    3. Sigue los pasos para generar y descargar el certificado
    4. Ábrelo en Acceso a Llaveros y expórtalo como archivo `.p12`
    5. Sube el archivo `.p12` a la configuración de iOS de tu app VoIP en OneSignal

    <Warning>
      **No** subas tu certificado push APNs estándar a la app VoIP. Si usas el tipo de certificado incorrecto, la API aceptará tu solicitud de push pero Apple la rechazará y la notificación nunca llegará.
    </Warning>

    <Frame caption="Certificado VoIP en Acceso a Llaveros">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=5d19f1262fdf67d5185ed8d8b4743493" alt="Certificado de Servicios VoIP mostrado en Acceso a Llaveros de macOS" width="1868" height="1624" data-path="images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png" />
    </Frame>

    <Frame caption="Certificado VoIP subido en el panel de OneSignal">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=6ee92a10fc3473c644880fa7517eb46b" alt="Certificado de Servicios VoIP subido en el panel de OneSignal" width="466" height="130" data-path="images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png" />
    </Frame>
  </Step>

  <Step title="Registrar el token VoIP con OneSignal">
    Usa la API [Create User](/reference/create-user) para registrar el token VoIP con tu app VoIP de OneSignal.

    <Warning>
      **Las compilaciones sandbox/desarrollo requieren `"test_type": 1`.** Si omites este campo, la llamada a la API tiene éxito y no devuelve ningún error, pero Apple trata el token como producción y rechaza silenciosamente cada push enviado a él.
    </Warning>

    ```curl theme={null}
    curl --request POST \
         --url https://api.onesignal.com/apps/YOUR_VOIP_APP_ID/users \
         --header 'accept: application/json' \
         --header 'content-type: application/json' \
         --data '
    {
      "subscriptions": [
        {
          "type": "iOSPush",
          "token": "YOUR_VOIP_TOKEN",
          "test_type": 1
        }
      ]
    }
    '
    ```

    <Note>Un token VoIP válido es una cadena hexadecimal en minúsculas de 64 caracteres (por ejemplo, `a1b2c3d4e5f6...`). PushKit no funciona en el Simulador de iOS — debes usar un dispositivo real para obtener un token válido.</Note>

    Para actualizar el token más tarde, usa la API [Update Subscription](/reference/update-subscription).
  </Step>

  <Step title="Enviar notificaciones VoIP">
    Usa la API [Create Notification](/reference/create-message) con los siguientes parámetros:

    * `"apns_push_type_override": "voip"` — indica a Apple que este es un push VoIP
    * `app_id` — el ID de tu app VoIP
    * `include_subscription_ids` — el ID de suscripción VoIP que registraste
    * Se requiere `contents` o `content_available`

    ```curl theme={null}
    curl --include \
         --request POST \
         --header "Content-Type: application/json; charset=utf-8" \
         --header "Authorization: key YOUR_REST_API_KEY" \
         --data-binary '{
      "app_id": "YOUR_VOIP_APP_ID",
      "content_available": true,
      "data": {
        "your_custom_data": "your_custom_value"
      },
      "apns_push_type_override": "voip",
      "include_subscription_ids": ["YOUR_VOIP_SUBSCRIPTION_ID"]
    }' \
    https://api.onesignal.com/notifications
    ```
  </Step>

  <Step title="Verificar tu configuración VoIP">
    Tu integración VoIP de iOS funciona correctamente si:

    1. El token VoIP aparece como una suscripción push de iOS en tu **app VoIP**
    2. Un push VoIP activa [`pushRegistry(_:didReceiveIncomingPushWith:for:completion:)`](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit) en tu app
    3. La app se activa incluso cuando está finalizada o en segundo plano
  </Step>
</Steps>

***

## Android: simular comportamiento tipo VoIP

Android no admite notificaciones push VoIP. No existe un equivalente a Apple PushKit.

En su lugar, las apps de llamadas en Android simulan el comportamiento VoIP usando:

* Notificaciones push de solo datos
* Servicios en primer plano
* Interfaz de usuario de llamada personalizada

Puedes usar el soporte push normal de Android de OneSignal combinado con las APIs nativas de Android para lograrlo.

**Enfoque recomendado:**

* Enviar notificaciones de solo datos
* Manejarlas en tu app para:
  * Iniciar un servicio en primer plano
  * Lanzar una actividad de interfaz de llamada
  * Mostrar una notificación de llamada entrante personalizada

Si deseas interceptar y controlar completamente el renderizado de notificaciones, usa la [Extensión de Servicio de Notificación](./service-extensions#notification-service-extension) de Android.

**Recursos útiles:**

* [Guía de app de llamadas de Android](https://developer.android.com/guide/topics/connectivity/telecom/selfManaged)
* [Ejemplo de interfaz de llamada entrante](https://medium.com/@dcostalloyd90/show-incoming-voip-call-notification-and-open-activity-for-android-os-10-5aada2d4c1e4)

<Info>La configuración de Android **no es específica de OneSignal**. OneSignal solo entrega la carga útil del push; tu app gestiona el comportamiento de llamada.</Info>

***

## Preguntas frecuentes

### ¿Las entregas confirmadas funcionan con VoIP?

No. Las [Entregas Confirmadas](./confirmed-delivery) **no se rastrean** para pushes VoIP. Las Entregas Confirmadas dependen de la Extensión de Servicio de Notificación, que no se activa para las notificaciones VoIP.

En su lugar, rastrea la recepción a través del evento nativo PushKit de iOS:

```swift theme={null}
pushRegistry(_:didReceiveIncomingPushWith:for:completion:)
```

Este evento es parte del target de tu app principal y no requiere una extensión separada. Consulta la [documentación VoIP de Apple](https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit#3377587) para más detalles.

### ¿Puedo enviar notificaciones VoIP desde el panel de OneSignal?

No. Las notificaciones VoIP deben enviarse a través de la API [Create Notification](/reference/create-message) con `"apns_push_type_override": "voip"`. El panel no admite este parámetro.

### ¿Por qué mi push VoIP falla silenciosamente?

Los pushes VoIP pueden fallar sin ningún error por parte de la API de OneSignal. Revisa esta lista de verificación:

1. **¿Estás usando una compilación sandbox/desarrollo?** Debes incluir `"test_type": 1` al registrar el token a través de la API Create User. Sin él, el token se registra como producción, Apple rechaza el push y falla silenciosamente.
2. **¿Subiste el certificado correcto?** La app VoIP de OneSignal debe usar un **Certificado de Servicios VoIP (.p12)**, no un certificado push APNs estándar. Ambos se ven similares en Acceso a Llaveros — verifica que el nombre del certificado comience con "VoIP Services".
3. **¿Estás enviando a la app de OneSignal correcta?** El `app_id` en tu solicitud de envío debe ser el de tu **app VoIP**, no el de tu app push principal. La `REST API Key` también debe provenir de la app VoIP.
4. **¿El token VoIP es válido?** Los tokens expiran cuando la app se reinstala o el dispositivo se restaura. Verifica que el token sea una cadena hexadecimal en minúsculas de 64 caracteres y que haya sido registrado recientemente.
5. **¿Tu app llama a `reportNewIncomingVoIPPushPayload`?** A partir de iOS 13, Apple **finaliza** las apps que reciben un push VoIP pero no reportan una llamada a CallKit. Este es un requisito de Apple, no una limitación de OneSignal.

***

## Páginas relacionadas

<Columns cols={2}>
  <Card title="API de creación de mensajes" icon="code" href="/reference/create-message">
    Envía notificaciones push mediante programación usando la API REST.
  </Card>

  <Card title="Entregas confirmadas" icon="circle-check" href="./confirmed-delivery">
    Rastrea la confirmación de entrega de notificaciones push en plataformas compatibles.
  </Card>

  <Card title="Extensiones de servicio" icon="puzzle-piece" href="./service-extensions">
    Personaliza el manejo de notificaciones con Extensiones de Servicio de Notificación.
  </Card>

  <Card title="API de creación de usuarios" icon="user-plus" href="/reference/create-user">
    Registra usuarios y suscripciones con la API de OneSignal.
  </Card>
</Columns>
