# VoIP-звонки в Cordova

Pushwoosh поддерживает уведомления о звонках в стиле VoIP для iOS и Android с помощью плагина `pushwoosh-cordova-plugin`. Это позволяет использовать нативную функциональность VoIP-звонков, включая UI входящего звонка и события управления звонками.

## 1. Добавьте плагин Pushwoosh для Cordova с включенной поддержкой VoIP

Установите плагин с включенным флагом VoIP:

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

Это настроит плагин для поддержки функциональности VoIP на iOS.

## 2. Добавьте зависимость PushwooshVoIP CocoaPod

Убедитесь, что pod `PushwooshVoIP` автоматически подключается через плагин. При необходимости проверьте это вручную в вашем `Podfile`:

```ruby
pod 'PushwooshVoIP'
```

> Этот pod необходим для поддержки VoIP-уведомлений на основе PushKit и обработки звонков на системном уровне.

## 3. Включите фоновый режим VoIP в Xcode

Откройте ваш проект в Xcode и выполните следующие шаги:

1.  Перейдите в **Signing & Capabilities**.
2.  Добавьте возможность **Background Modes**.
3.  Отметьте опцию **Voice over IP**.

Это позволит вашему приложению получать входящие VoIP push-уведомления, когда оно находится в фоновом режиме.

## 4. Настройте код VoIP-приложения (если используются и VoIP, и обычные push-уведомления)

Если ваше приложение использует как стандартные, так и VoIP push-уведомления, вы должны явно установить код VoIP-приложения перед инициализацией VoIP:

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

Замените `"XXXXX-XXXXX"` на код приложения Pushwoosh, назначенный вашему приложению с поддержкой VoIP в панели управления Pushwoosh.
<Aside type="caution" title="Важно">
- Токены для VoIP push-уведомлений будут зарегистрированы под кодом VoIP-приложения, в то время как обычные push-токены будут зарегистрированы под основным кодом приложения.

- Этот метод следует вызывать **перед** вызовом метода `registerDevice()`.
</Aside> 


## 5. Запросите разрешение на звонки на Android

На Android вам необходимо запросить у пользователя разрешение на прием звонков. Для этого вызовите метод `requestCallPermission()`. Это следует сделать перед регистрацией устройства.

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


## 6. Инициализируйте параметры VoIP

Вызовите следующий метод для инициализации функциональности 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
    ]);
};
```

### Параметры

- `supportsVideo` – `true` или `false` в зависимости от того, поддерживает ли ваше приложение видеозвонки
- `ringtoneSound` – имя файла пользовательского рингтона (например, `"incoming.caf"`), или пустая строка для рингтона по умолчанию
- `handleTypes` – числовая битовая маска для типов идентификаторов звонка (`1` для номера телефона, `2` для email и т.д.)

## 7. Доступные колбэки и методы VoIP

Плагин Cordova поддерживает следующие методы и события, связанные с VoIP:

- `answer` – вызывается, когда пользователь отвечает на входящий звонок
- `endCall` – вызывается, когда пользователь завершает текущий звонок
- `hangup` – вызывается, когда звонок сбрасывается
- `reject` – вызывается, когда входящий звонок отклоняется
- `muted` – переключает статус беззвучного режима, только для iOS
- `held` – переключает статус удержания, только для iOS
- `voipPushPayload` – возвращает полезную нагрузку push-уведомления для входящего VoIP-звонка
- `incomingCallSuccess` – вызывается, когда системный UI звонка успешно отображен, только для iOS
- `incomingCallFailure` – вызывается, когда системный UI звонка не удалось отобразить, только для iOS
- `speakerOn` – включить громкую связь
- `speakerOff` – выключить громкую связь
- `playDTMF` – воспроизвести DTMF-сигнал во время звонка, только для iOS

Их можно подключить с помощью объекта `PushNotification` в Cordova, что позволит вам контролировать и реагировать на изменения состояния VoIP-звонка.


## Связанные ссылки

- [Обзор Pushwoosh Cordova SDK](/ru/developer/pushwoosh-sdk/cross-platform-frameworks/cordova/)
- [VoIP Push-уведомления на iOS (документация Apple)](https://developer.apple.com/documentation/pushkit)