sipvoipplivo

Plivo call transfers


I am struggling with call transfers.

I have connected a hardware phone with a SIP endpoint from Plivo. I can make and receive calls without any problems but call transfers using the inbuilt "TRANSFER" button on the phone dont work.

Dialling into the SIP phone from a mobile works great. Then i press transfer on the phone and the mobile hears hold music, then the sip phone dials the new number, then all the connections just seem to die. I know its trying a blind transfer (from logs on the SIP phone)

I assume i have to set it up in Plivo and the SIPTransfer XML element, but i cant see what URL gets called during that SIP transfer. Could anyone please give me a basic guide on how the process works? How much is down o the phone itself, or plivo?


Solution

  • Transfer works in potentially two different ways:

    1. End-point based

    In this mode: A transfer B to C by requesting (REFER) B to establish a new call to C. If Plivo is B, it needs to support REFER for this to work.

    A              B              C
    <=conversation=>
    ----REFER------>
    <-202 Accepted--
                   ----INVITE----->
                   <---200 OK------
                   ----ACK-------->
                   <=conversation=>
    <---NOTIFY-----
    ---- 200 OK--->
    ---BYE-------->
    <--- 200 OK----
    
    1. Network based.

    In this mode: A transfer B to C by sending a REFER (or perhaps other signal) to a network application server (e.g. TAS implementating supplementary services in IMS). The TAS (as B2BUA between A & B) will be the one handling the REFER:

    A             TAS              B              C
    <=conversation=><=conversation=>
    ----REFER------>
    <-202 Accepted--
                   ----RE-INVITE--->
                   <---200 OK ------
                   ----INVITE--------------------->
                   <---200 OK----------------------
                   ----ACK--------->
                   ------------ACK---------------->
                   <=conversation=>
                   <=conversation=================>
    <---NOTIFY-----
    ---- 200 OK--->
    ---BYE-------->
    <--- 200 OK----
    

    In this case, B doesn't receive any REFER, it only needs to support to receive RE-INVITE (that will switch voice connection from A to C)

    Which one is used, depends on your voice provider. In simple, PBX-like environment, you can probably see 1). In network, IMS-like environments, it is likely that you will see 2).

    Network based works similarly to PSTN transfer (specially billing-wise) as the transfer-target leg is usually still associated to A (and will be billed for it) and B's connection is not really affected.

    While in the end-point based transfer, B just does blindly A's request (and if that has some billing implications they will be B's responsibility).

    Some references are: