# การโทร 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. เพิ่ม dependency ของ PushwooshVoIP CocoaPod

ตรวจสอบให้แน่ใจว่า `PushwooshVoIP` pod ถูกรวมไว้โดยอัตโนมัติผ่านปลั๊กอิน หากจำเป็น ให้ตรวจสอบด้วยตนเองใน `Podfile` ของคุณ:

```ruby
pod 'PushwooshVoIP'
```

> pod นี้จำเป็นสำหรับการรองรับการแจ้งเตือน VoIP ที่ใช้ PushKit และการจัดการการโทรในระดับระบบ

## 3. เปิดใช้งานโหมดเบื้องหลัง VoIP ใน Xcode

เปิดโปรเจกต์ของคุณใน Xcode และทำตามขั้นตอนเหล่านี้:

1. ไปที่ **Signing & Capabilities**
2. เพิ่ม capability **Background Modes**
3. เลือกตัวเลือก **Voice over IP**

การทำเช่นนี้จะช่วยให้แอปของคุณสามารถรับ push การโทร VoIP ขาเข้าได้ในขณะที่ทำงานในเบื้องหลัง

## 4. กำหนดค่ารหัสแอป VoIP (หากใช้ทั้ง VoIP และ push ปกติ)

หากแอปของคุณใช้ทั้ง push แบบมาตรฐานและ VoIP คุณต้องตั้งค่ารหัสแอปพลิเคชัน VoIP อย่างชัดเจนก่อนการเริ่มต้น VoIP:

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

แทนที่ `"XXXXX-XXXXX"` ด้วย Pushwoosh App Code ที่กำหนดให้กับแอปพลิเคชันที่เปิดใช้งาน VoIP ของคุณใน Pushwoosh Control Panel
<Aside type="caution" title="สำคัญ">
- โทเค็นสำหรับ VoIP push จะถูกลงทะเบียนภายใต้ VoIP App Code ในขณะที่โทเค็น push ปกติจะถูกลงทะเบียนภายใต้ App Code หลัก

- ควรเรียกใช้เมธอดนี้ **ก่อน** ที่จะเรียกใช้เมธอด `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` – bitmask ตัวเลขสำหรับประเภท handle การโทร (`1` สำหรับหมายเลขโทรศัพท์, `2` สำหรับอีเมล, ฯลฯ)

## 7. callbacks และเมธอด VoIP ที่มีให้ใช้งาน

ปลั๊กอิน Cordova รองรับเมธอดและอีเวนต์ที่เกี่ยวข้องกับ VoIP ดังต่อไปนี้:

- `answer` – ถูกเรียกเมื่อผู้ใช้รับสายเรียกเข้า
- `endCall` – ถูกเรียกเมื่อผู้ใช้วางสายปัจจุบัน
- `hangup` – ถูกเรียกเมื่อมีการวางสาย
- `reject` – ถูกเรียกเมื่อสายเรียกเข้าถูกปฏิเสธ
- `muted` – สลับสถานะปิดเสียง, สำหรับ iOS เท่านั้น
- `held` – สลับสถานะพักสาย, สำหรับ iOS เท่านั้น
- `voipPushPayload` – คืนค่า push payload สำหรับสาย VoIP ที่เข้ามา
- `incomingCallSuccess` – ถูกเรียกเมื่อ UI การโทรของระบบแสดงผลสำเร็จ, สำหรับ iOS เท่านั้น
- `incomingCallFailure` – ถูกเรียกเมื่อ UI การโทรของระบบแสดงผลไม่สำเร็จ, สำหรับ iOS เท่านั้น
- `speakerOn` – เปิดลำโพง
- `speakerOff` – ปิดลำโพง
- `playDTMF` – เล่นเสียง DTMF ระหว่างการโทร, สำหรับ iOS เท่านั้น

สามารถเชื่อมต่อสิ่งเหล่านี้ได้โดยใช้อ็อบเจกต์ `PushNotification` ของ Cordova ซึ่งช่วยให้คุณสามารถควบคุมและตอบสนองต่อการเปลี่ยนแปลงสถานะการโทร VoIP ได้


## ลิงก์ที่เกี่ยวข้อง

- [ภาพรวม Pushwoosh Cordova SDK](/th/developer/pushwoosh-sdk/cross-platform-frameworks/cordova/)
- [การแจ้งเตือน VoIP Push บน iOS (เอกสาร Apple)](https://developer.apple.com/documentation/pushkit)