# Chamadas VoIP com Cordova

O Pushwoosh suporta notificações de chamada no estilo VoIP para iOS e Android usando o `pushwoosh-cordova-plugin`. Isso ativa a funcionalidade nativa de chamadas VoIP, incluindo a UI de chamada recebida e eventos de controle de chamada.

## 1. Adicione o plugin Pushwoosh para Cordova com VoIP ativado

Instale o plugin com a flag VoIP ativada:

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

Isso configurará o plugin para suportar a funcionalidade VoIP no iOS.

## 2. Adicione a dependência CocoaPod PushwooshVoIP

Certifique-se de que o pod `PushwooshVoIP` seja incluído automaticamente através do plugin. Se necessário, verifique manualmente no seu `Podfile`:

```ruby
pod 'PushwooshVoIP'
```

> Este pod é necessário para suportar notificações VoIP baseadas em PushKit e o tratamento de chamadas a nível de sistema.

## 3. Ative o modo de segundo plano VoIP no Xcode

Abra seu projeto no Xcode e siga estes passos:

1. Vá para **Signing & Capabilities**.
2. Adicione a capacidade **Background Modes**.
3. Marque a opção **Voice over IP**.

Isso permite que seu aplicativo receba pushes VoIP recebidos enquanto estiver em segundo plano.

## 4. Configure o código do aplicativo VoIP (se estiver usando pushes VoIP e regulares)

Se o seu aplicativo usa tanto pushes padrão quanto VoIP, você deve definir explicitamente o código do aplicativo VoIP antes da inicialização do VoIP:

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

Substitua `"XXXXX-XXXXX"` pelo Código de Aplicativo Pushwoosh atribuído à sua aplicação habilitada para VoIP no Painel de Controle Pushwoosh.
<Aside type="caution" title="Importante">
- Tokens para pushes VoIP serão registrados sob o Código de Aplicativo VoIP, enquanto tokens de push regulares serão registrados sob o Código de Aplicativo principal.

- Este método deve ser chamado **antes** de chamar o método `registerDevice()`.
</Aside> 


## 5. Solicite permissão de chamada no Android

No Android, você precisa solicitar a um usuário a permissão para receber chamadas. Para fazer isso, chame o método `requestCallPermission()`. Isso deve ser feito antes de registrar um dispositivo.

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


## 6. Inicialize os parâmetros VoIP

Chame o seguinte método para inicializar a funcionalidade 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` ou `false` dependendo se seu aplicativo suporta chamadas de vídeo
- `ringtoneSound` – nome do arquivo de toque personalizado (ex. `"incoming.caf"`), ou string vazia para o padrão
- `handleTypes` – máscara de bits numérica para tipos de identificador de chamada (`1` para número de telefone, `2` para e-mail, etc.)

## 7. Callbacks e métodos VoIP disponíveis

O plugin Cordova suporta os seguintes métodos e eventos relacionados a VoIP:

- `answer` – chamado quando um usuário atende uma chamada recebida
- `endCall` – chamado quando um usuário encerra a chamada atual
- `hangup` – chamado quando uma chamada é desligada
- `reject` – chamado quando uma chamada recebida é rejeitada
- `muted` – alterna o status de mudo, apenas para iOS
- `held` – alterna o status de espera, apenas para iOS
- `voipPushPayload` – retorna o payload do push para a chamada VoIP recebida
- `incomingCallSuccess` – chamado quando a UI de chamada do sistema é exibida com sucesso, apenas para iOS
- `incomingCallFailure` – chamado quando a UI de chamada do sistema falha ao ser exibida, apenas para iOS
- `speakerOn` – liga o viva-voz
- `speakerOff` – desliga o viva-voz
- `playDTMF` – toca o tom DTMF durante uma chamada, apenas para iOS

Estes podem ser conectados usando o objeto `PushNotification` do Cordova, permitindo que você controle e responda às mudanças de estado da chamada VoIP.


## Links relacionados

- [Visão Geral do SDK Pushwoosh para Cordova](/pt/developer/pushwoosh-sdk/cross-platform-frameworks/cordova/)
- [Notificações Push VoIP no iOS (Documentação da Apple)](https://developer.apple.com/documentation/pushkit)