# مكالمات VoIP في Cordova

يدعم Pushwoosh إشعارات المكالمات بأسلوب VoIP لنظامي iOS و Android باستخدام `pushwoosh-cordova-plugin`. يتيح هذا وظيفة مكالمات VoIP الأصلية، بما في ذلك واجهة المستخدم للمكالمات الواردة وأحداث التحكم في المكالمات.

## 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

تأكد من تضمين `PushwooshVoIP` pod تلقائيًا عبر الإضافة. إذا لزم الأمر، تحقق يدويًا في ملف `Podfile` الخاص بك:

```ruby
pod 'PushwooshVoIP'
```

> هذا الـ pod مطلوب لدعم إشعارات VoIP المستندة إلى PushKit ومعالجة المكالمات على مستوى النظام.

## 3. تمكين وضع VoIP في الخلفية في Xcode

افتح مشروعك في Xcode واتبع هذه الخطوات:

1. اذهب إلى **Signing & Capabilities**.
2. أضف قدرة **Background Modes**.
3. حدد خيار **Voice over IP**.

يسمح هذا لتطبيقك باستقبال إشعارات VoIP الواردة أثناء وجوده في الخلفية.

## 4. تكوين رمز تطبيق VoIP (إذا كنت تستخدم كلاً من إشعارات VoIP والإشعارات العادية)

إذا كان تطبيقك يستخدم كلاً من إشعارات الدفع القياسية و VoIP، فيجب عليك تعيين رمز تطبيق VoIP بشكل صريح قبل تهيئة VoIP:

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

استبدل `"XXXXX-XXXXX"` برمز تطبيق Pushwoosh (App Code) المخصص لتطبيقك الذي يدعم VoIP في لوحة تحكم Pushwoosh.
<Aside type="caution" title="هام">
- سيتم تسجيل التوكنات الخاصة بإشعارات VoIP تحت رمز تطبيق VoIP، بينما سيتم تسجيل توكنات الإشعارات العادية تحت رمز التطبيق الأساسي.

- يجب استدعاء هذه الطريقة **قبل** استدعاء طريقة `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` للبريد الإلكتروني، إلخ.)

## 7. ردود الاتصال (callbacks) والطرق المتاحة لـ VoIP

تدعم إضافة Cordova الطرق والأحداث التالية المتعلقة بـ VoIP:

- `answer` – يتم استدعاؤها عندما يجيب المستخدم على مكالمة واردة
- `endCall` – يتم استدعاؤها عندما ينهي المستخدم المكالمة الحالية
- `hangup` – يتم استدعاؤها عند إنهاء المكالمة
- `reject` – يتم استدعاؤها عند رفض مكالمة واردة
- `muted` – تبديل حالة كتم الصوت، لنظام iOS فقط
- `held` – تبديل حالة الانتظار، لنظام iOS فقط
- `voipPushPayload` – تُرجع حمولة الإشعار (push payload) للمكالمة VoIP الواردة
- `incomingCallSuccess` – يتم استدعاؤها عند عرض واجهة مستخدم مكالمة النظام بنجاح، لنظام iOS فقط
- `incomingCallFailure` – يتم استدعاؤها عند فشل عرض واجهة مستخدم مكالمة النظام، لنظام iOS فقط
- `speakerOn` – تشغيل مكبر الصوت
- `speakerOff` – إيقاف تشغيل مكبر الصوت
- `playDTMF` – تشغيل نغمة DTMF أثناء المكالمة، لنظام iOS فقط

يمكن ربط هذه الطرق باستخدام كائن `PushNotification` الخاص بـ Cordova، مما يسمح لك بالتحكم في تغييرات حالة مكالمة VoIP والاستجابة لها.


## روابط ذات صلة

- [نظرة عامة على Pushwoosh Cordova SDK](/ar/developer/pushwoosh-sdk/cross-platform-frameworks/cordova/)
- [إشعارات VoIP Push على iOS (مستندات Apple)](https://developer.apple.com/documentation/pushkit)