PDA

View Full Version : [Jingle] proposal for call transfer


Diana Cionoiu
08-03-2008, 10:02 PM
A-party is caller (AT) world (DOT) sun/phone (makes first call)
B-party is attendant (AT) office (DOT) biz/desk (makes the transfer)
C-party is boss (AT) bigdesk (DOT) biz/phone (is target of the transfer)


Unattended transfer:

Normal call initiated from caller to attendant:

<iq from='caller (AT) world (DOT) sun/phone'
id='jingle1'
to='attendant (AT) office (DOT) biz/desk'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-initiate'
initiator='caller (AT) world (DOT) sun/phone'
sid='851ba2'>
<content creator='initiator'
name='voice'>
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp'
media='audio'
profile='RTP/AVP'>
<payload-type id='0' name='PCMU' />
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
</content>
</jingle>
</iq>

Attendant's phone acknowledges:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='jingle1'
type='result'/>

Attendant answers the call:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='accept1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-accept'
initiator='caller (AT) world (DOT) sun/phone'
responder='attendant (AT) office (DOT) biz/desk'
sid='851ba2'>
<content creator='initiator'
name='voice'>
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp'
media='audio'
profile='RTP/AVP'>
<payload-type id='0' name='PCMU' />
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'>
<candidate .../>
</transport>
</jingle>
</iq>

Attendant decides to transfer the call:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='transfer1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-transfer'
initiator='caller (AT) world (DOT) sun/phone'
responder='attendant (AT) office (DOT) biz/desk'
sid='851ba2'>
<invite xmlns='urn:xmpp:tmp:jingle-pbx'
to='boss (AT) bigdesk (DOT) biz/phone'/> <<-----
</jingle>
</iq>

Caller's phone understands the transfer request and acknowledges it:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='transfer1'
type='result'/>

Caller puts attendant on hold

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='hold1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-info'
initiator='caller (AT) world (DOT) sun/phone'
sid='851ba2'>
<hold xmlns='urn:xmpp:tmp:jingle:apps:rtp:info'/>
</jingle>
</iq>

Caller initiates a new call to boss:

<iq from='caller (AT) world (DOT) sun/phone'
id='jingle3'
to='boss (AT) bigdesk (DOT) biz/phone'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-initiate'
initiator='caller (AT) world (DOT) sun/phone'
sid='1a332d'>
<invite xmlns='urn:xmpp:tmp:jingle-pbx'
from='attendant (AT) office (DOT) biz/desk'/> <<-----
<content creator='initiator'
name='voice'>
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp'
media='audio'
profile='RTP/AVP'>
<payload-type id='0' name='PCMU' />
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
</content>
</jingle>
</iq>

Caller's phone detects the successfull transfer and hangs up attendant:

<iq from='caller (AT) world (DOT) sun/phone'
to='attendant (AT) office (DOT) biz/desk'
id='hangup1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-terminate'
initiator='attendant (AT) office (DOT) biz/desk'
sid='851ba2'>
<reason>
<condition><transferred/></condition>
<text>Unattended transfer success</text>
</reason>
</jingle>
</iq>



Attended transfer:

Normal call initiated from caller to attendant:

<iq from='caller (AT) world (DOT) sun/phone'
id='jingle1'
to='attendant (AT) office (DOT) biz/desk'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-initiate'
initiator='caller (AT) world (DOT) sun/phone'
sid='851ba2'>
<content creator='initiator'
name='voice'>
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp'
media='audio'
profile='RTP/AVP'>
<payload-type id='0' name='PCMU' />
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
</content>
</jingle>
</iq>

Attendant's phone acknowledges:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='jingle1'
type='result'/>

Attendant answers the call:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='accept1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-accept'
initiator='caller (AT) world (DOT) sun/phone'
responder='attendant (AT) office (DOT) biz/desk'
sid='851ba2'>
<content creator='initiator'
name='voice'>
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp'
media='audio'
profile='RTP/AVP'>
<payload-type id='0' name='PCMU' />
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'>
<candidate .../>
</transport>
</jingle>
</iq>

Attendant makes a call to boss:

<iq from='attendant (AT) office (DOT) biz/desk'
id='jingle2'
to='boss (AT) bigdesk (DOT) biz/phone'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-initiate'
initiator='attendant (AT) office (DOT) biz/desk'
sid='663e9f'>
<content creator='initiator'
name='voice'>
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp'
media='audio'
profile='RTP/AVP'>
<payload-type id='0' name='PCMU' />
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
</content>
</jingle>
</iq>

Attendant decides to transfer the call, details about the session to
boss are
provided:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='transfer1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-transfer'
initiator='caller (AT) world (DOT) sun/phone'
responder='attendant (AT) office (DOT) biz/desk'
sid='851ba2'>
<invite xmlns='urn:xmpp:tmp:jingle-pbx'
from='attendant (AT) office (DOT) biz/desk'
to='boss (AT) bigdesk (DOT) biz/phone'
sid='663e9f'/> <<-----
</jingle>
</iq>

Caller's phone understands the transfer request and acknowledges it:

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='transfer1'
type='result'/>

Caller puts attendant on hold

<iq from='attendant (AT) office (DOT) biz/desk'
to='caller (AT) world (DOT) sun/phone'
id='hold1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-info'
initiator='caller (AT) world (DOT) sun/phone'
sid='851ba2'>
<hold xmlns='urn:xmpp:tmp:jingle:apps:rtp:info'/>
</jingle>
</iq>

Caller initiates a new call to boss:

<iq from='caller (AT) world (DOT) sun/phone'
id='jingle3'
to='boss (AT) bigdesk (DOT) biz/phone'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-initiate'
initiator='caller (AT) world (DOT) sun/phone'
sid='851ba2'>
<invite xmlns='urn:xmpp:tmp:jingle-pbx'
from='attendant (AT) office (DOT) biz/desk'
to='boss (AT) bigdesk (DOT) biz/phone'
sid='663e9f'/> <<-----
<content creator='initiator'
name='voice'>
<description xmlns='urn:xmpp:tmp:jingle:apps:rtp'
media='audio'
profile='RTP/AVP'>
<payload-type id='0' name='PCMU' />
</description>
<transport xmlns='urn:xmpp:tmp:jingle:transports:ice-udp'/>
</content>
</jingle>
</iq>

Boss' phone or client identifies an active session with the same
from+to+sid
and replaces that with the incoming call. Existing session to attendant is
hung up:

<iq from='boss (AT) bigdesk (DOT) biz/phone'
to='attendant (AT) office (DOT) biz/desk'
id='hangup2'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-terminate'
initiator='attendant (AT) office (DOT) biz/desk'
sid='663e9f'>
<reason>
<condition><transferred/></condition>
<text>Attended transfer success</text>
</reason>
</jingle>
</iq>

Caller's phone detects the successfull transfer and hangs up attendant:

<iq from='caller (AT) world (DOT) sun/phone'
to='attendant (AT) office (DOT) biz/desk'
id='hangup1'
type='set'>
<jingle xmlns='urn:xmpp:tmp:jingle'
action='session-terminate'
initiator='attendant (AT) office (DOT) biz/desk'
sid='851ba2'>
<reason>
<condition><transferred/></condition>
<text>Attended transfer success</text>
</reason>
</jingle>
</iq>

Diana

P.S. This mail was actually made by Paul Chitescu which works in the
Yate Team.