Call Transfer에는 다음과 같은 3가지 종류가 있다.
1. Blind Transfer
- 제 3자 상태의 확인 없이 무조건 돌려주기
2. UnScreened Transfer
- 제3자에게 통화를 해보고 신호가 가는지 확인해서 돌려주기
3. Screened Transfer
- 제 3자와 통화를 직접해서 돌려주겠다고 말까지 한 후, 돌려주기.
<구현 방식>
1. Blind Transfer
- IP-PBX가 REFER메시지를 처리하는 방식이 일반적인 것 같고,
A단말에서 REFER를 처리하는 방법도 있다.(단말이 REFER지원해야 함)
2. (Un)Screened Transfer
- IP-PBX가 INVITE(with REPLACES)를 보내는 방법도 있고
IP-PBX에서 ReINVITE만을 사용하는 방식도 있다.
<Invite with REPLACES 예제>
Alice Alice Parking
phone1 phone2 Bob Place
| | | |
|<===============================>| |
| | | |
| Alice transfers Bob to Parking Place |
| | | |
|------------REFER/200----------->| *1 *2 |
|<--NOTIFY/200 (trying)-----------|--INVITE/200/ACK-->|
|<--NOTIFY/200 (success)----------|<=================>|
|------------BYE/200------------->| |
| | | |
| | | |
| Alice later retrieves call from another phone |
| | | |
| *3 |-INV w/Replaces->| |
| |<--200-----------| |
| |---ACK---------->|----BYE/200------->|
| |<===============>| |
| | | |
Message *1: Bob-> Parking Place
INVITE sip:parkingplace@example.org SIP/2.0
To: <sip:parkingplace@example.org>
From: <sip:bob@example.org>;tag=7743
Call-ID: 425928@bobster.example.org
CSeq: 1 INVITE
Contact: <sip:bob@bobster.example.org>
Referred-By: <sip:alice@phone1.example.org>
Message *2: Parking Place -> Bob
SIP/2.0 200 OK
To: <sip:parkingplace@example.org>;tag=6472
From: <sip:bob@example.org>;tag=7743
Call-ID: 425928@bobster.example.org
CSeq: 1 INVITE
Contact: <sip:parkplace@monopoly.example.org>
Message *3: Alice@phone2 -> Bob
INVITE sip:bob@bobster.example.org
To: <sip:bob@example.org>
From: <sip:alice@phone2.example.org>;tag=8983
Call-ID: 09870@phone2.example.org
CSeq: 1 INVITE
Contact: <sip:alice@phone2.example.org>
Require: replaces
Replaces: 425928@bobster.example.org;to-tag=7743;from-tag=6472