a
DESIGNING MULTI-PARTY CALL FLOWS
ANDREW JORDAN | AMEYA
WE’RE GOING TO ANSWER THE FOLLOWING
What do we mean by multi party?
What features does this call flow unlock?
What use cases lend themselves to a multi party call flow?
How do I implement these features in my application?
ANDREW JORDAN | AMEYA
MULTI PARTY, WHAT DOES
THAT MEAN?
TWO PARTY VS N PARTY
• Simple to implement
• Can be stateless
• <Number><Client><SIP>
ANDREW JORDAN | AMEYA
• Robust call control
• Stateful tracking of participants
• <Conference>
A B A B
C
D
ANDREW JORDAN | AMEYA
WHAT FEATURES DOES MULTI PARTY UNLOCK
• Hold
• Warm and Cold Transfers
• Supervisor Monitoring / Barge
ANDREW JORDAN | AMEYA
WHAT DO YOU BUILD WITH THESE FEATURES?
• Inbound Support Contact Centers
• Outbound Sales Contact Centers
• Lead Management Platforms
• Incident Management Platforms
LETS GET TECHNICAL
A B
ANDREW JORDAN | AMEYA
A customer requesting
support calls into a Twilio
phone number, and the
agent and customer are
put into a conference.
INBOUND CALL
TO CONFERENCE
1. Inbound call from the customer
2. Customer’s Call receives the following TwiML
<Response>
<Dial>
<Conference Waiturl=“foo.bar/wait”>SupportID1234</Conference>
</Dial>
</Response>
3. Outbound REST API call to Agent
4. Agent’s call receives the following TwiML
<Response>
<Dial>
<Conference>SupportID1234</Conference>
</Dial>
</Response>
ANDREW JORDAN | AMEYA
1. Outbound REST API call to the Sales Agent
2. Agent’s Call receives the following TwiML
<Response>
<Dial>
<Conference>AgentID1234</Conference>
</Dial>
</Response>
3. Outbound REST API call to prospect
4. prospect’s call receives the following TwiML
<Response>
<Dial>
<Conference>AgentID1234</Conference>
</Dial>
</Response>
A sales agent calls out to
a prospect and both the
agent and prospect are
put into a conference.
OUTBOUND CALL
TO CONFERENCE
CALL CONTROL BUILDING
BLOCKS
MUTE / TRANSFER / HOLD /
EVENTS
ANDREW JORDAN | AMEYA
Mutes or unmutes a
participant in a
conference
MUTE
$ curl -XPOST /Conference/CFbbe46ff1274e283f7e3ac1df0072ab39/
Participants/CA386025c9bf5d6052a1d1ea42b4d16662
-d "Mute=true" 
-u 'AC123:{AuthToken}'
ANDREW JORDAN | AMEYA
$ curl -XPOST /Accounts/AC25e16e9a716a4a1786a7c83f58e30482/
Calls/CA386025c9bf5d6052a1d1ea42b4d16662.json 
-d "Url=https://myapp.com/transfer" 
-d "Method=POST" 
-u 'AC123:{AuthToken}'
Redirects a call that is
executing a TwiML
document to execute a
new TwiML document
TRANSFER
ANDREW JORDAN | AMEYA
$ curl -XPOST /Conference/CFbbe46ff1274e283f7e3ac1df0072ab39/
Participants/CA386025c9bf5d6052a1d1ea42b4d16662
-d "Hold=True" 
-d "HoldUrl=https://myapp.com/hold" 
-u 'AC123:{AuthToken}'
Redirects the media
stream of one participant
away from the
conference mix to a
TwiML document at the
HoldUrl
HOLD
ANDREW JORDAN | AMEYA
Webhooks that are fired
when conferences and
participants change state.
Supported state changes
are “start end join leave
mute hold”
EVENTS <Response>
<Dial>
<Conference
statusCallback="https://myapp.com/events"
statusCallbackEvent="start end join leave mute hold”>
room1
</Conference>
</Dial>
</Response>
FriendlyName EventedConference
ConferenceSid CFbbe46ff1274e283f7e3ac1df0072ab39
EndConferenceOnExit false
CallSid CA912194cbf5baa015e0c9755feee7a92c
StatusCallbackEvent participant-join
StartConferenceOnEnter true
AccountSid AC25e16e9a716a4a1786a7c83f58e30482&
Muted false
Hold false
I’D LIKE TO SPEAK TO THE
MANAGER
WARM TRANSFER DEMO
ANDREW JORDAN | AMEYA
1. Customer A Joins
2. Agent B Joins
3. A and B talk and need
to bring in C
4. A is put on hold
5. Agent C joins
6. Agent B and C discuss
7. Customer A is removed
from hold
8. All parties are
introduced
9. B leaves
A B
C
Event: participant-join Store: ConferenceSidEvent: participant-join Store: ConferenceSidParticipant Held REST API: Hold=trueEvent: participant-hold Store: Participant StateEvent: participant-join Store: ConferenceSidEvent: participant-leave Store: Participant StateParticipant Held REST API: Hold=falseParticipant Unheld Store: Participant State
MONITOR / BARGE
ANDREW JORDAN | AMEYA
1. Customer A Joins
2. Agent B Joins
3. Supervisor C joins on
mute
4. C can hear A and B but
A and B cannot hear C
5. C is un muted to
handle escalation A B
C
ANDREW JORDAN | AMEYA
1. Customer A Joins
2. Agent B Joins
3. Supervisor C joins on
mute
4. C can hear A and B but
A and B cannot hear C
5. C is un-muted to
handle escalation
A B
C
Event: participant-join Store: ConferenceSidEvent: participant-join Store: ConferenceSidParticipant Unmuted REST API: Mute=false
RECAP
Using Conference allows you to build robust multi party call flows
We see thousands of Twilio customers utilizing this architecture
We’re released features like Events and Hold to streamline these flows
We’re continuing to develop features to enable multi party call flows
ANDREW JORDAN | AMEYA
WE CAN’T WAIT TO SEE
WHAT YOU BUILD
YOUR NAME | TWITTER
ANDREW + AMEYA @TWILIO.COM

Twilio Signal 2016 Designing Multi-party Call Flows

  • 1.
    a DESIGNING MULTI-PARTY CALLFLOWS ANDREW JORDAN | AMEYA
  • 2.
    WE’RE GOING TOANSWER THE FOLLOWING What do we mean by multi party? What features does this call flow unlock? What use cases lend themselves to a multi party call flow? How do I implement these features in my application? ANDREW JORDAN | AMEYA
  • 3.
    MULTI PARTY, WHATDOES THAT MEAN?
  • 4.
    TWO PARTY VSN PARTY • Simple to implement • Can be stateless • <Number><Client><SIP> ANDREW JORDAN | AMEYA • Robust call control • Stateful tracking of participants • <Conference> A B A B C D
  • 5.
    ANDREW JORDAN |AMEYA WHAT FEATURES DOES MULTI PARTY UNLOCK • Hold • Warm and Cold Transfers • Supervisor Monitoring / Barge
  • 6.
    ANDREW JORDAN |AMEYA WHAT DO YOU BUILD WITH THESE FEATURES? • Inbound Support Contact Centers • Outbound Sales Contact Centers • Lead Management Platforms • Incident Management Platforms
  • 7.
  • 8.
  • 9.
    ANDREW JORDAN |AMEYA A customer requesting support calls into a Twilio phone number, and the agent and customer are put into a conference. INBOUND CALL TO CONFERENCE 1. Inbound call from the customer 2. Customer’s Call receives the following TwiML <Response> <Dial> <Conference Waiturl=“foo.bar/wait”>SupportID1234</Conference> </Dial> </Response> 3. Outbound REST API call to Agent 4. Agent’s call receives the following TwiML <Response> <Dial> <Conference>SupportID1234</Conference> </Dial> </Response>
  • 10.
    ANDREW JORDAN |AMEYA 1. Outbound REST API call to the Sales Agent 2. Agent’s Call receives the following TwiML <Response> <Dial> <Conference>AgentID1234</Conference> </Dial> </Response> 3. Outbound REST API call to prospect 4. prospect’s call receives the following TwiML <Response> <Dial> <Conference>AgentID1234</Conference> </Dial> </Response> A sales agent calls out to a prospect and both the agent and prospect are put into a conference. OUTBOUND CALL TO CONFERENCE
  • 14.
    CALL CONTROL BUILDING BLOCKS MUTE/ TRANSFER / HOLD / EVENTS
  • 15.
    ANDREW JORDAN |AMEYA Mutes or unmutes a participant in a conference MUTE $ curl -XPOST /Conference/CFbbe46ff1274e283f7e3ac1df0072ab39/ Participants/CA386025c9bf5d6052a1d1ea42b4d16662 -d "Mute=true" -u 'AC123:{AuthToken}'
  • 16.
    ANDREW JORDAN |AMEYA $ curl -XPOST /Accounts/AC25e16e9a716a4a1786a7c83f58e30482/ Calls/CA386025c9bf5d6052a1d1ea42b4d16662.json -d "Url=https://myapp.com/transfer" -d "Method=POST" -u 'AC123:{AuthToken}' Redirects a call that is executing a TwiML document to execute a new TwiML document TRANSFER
  • 17.
    ANDREW JORDAN |AMEYA $ curl -XPOST /Conference/CFbbe46ff1274e283f7e3ac1df0072ab39/ Participants/CA386025c9bf5d6052a1d1ea42b4d16662 -d "Hold=True" -d "HoldUrl=https://myapp.com/hold" -u 'AC123:{AuthToken}' Redirects the media stream of one participant away from the conference mix to a TwiML document at the HoldUrl HOLD
  • 18.
    ANDREW JORDAN |AMEYA Webhooks that are fired when conferences and participants change state. Supported state changes are “start end join leave mute hold” EVENTS <Response> <Dial> <Conference statusCallback="https://myapp.com/events" statusCallbackEvent="start end join leave mute hold”> room1 </Conference> </Dial> </Response> FriendlyName EventedConference ConferenceSid CFbbe46ff1274e283f7e3ac1df0072ab39 EndConferenceOnExit false CallSid CA912194cbf5baa015e0c9755feee7a92c StatusCallbackEvent participant-join StartConferenceOnEnter true AccountSid AC25e16e9a716a4a1786a7c83f58e30482& Muted false Hold false
  • 19.
    I’D LIKE TOSPEAK TO THE MANAGER
  • 20.
  • 21.
    ANDREW JORDAN |AMEYA 1. Customer A Joins 2. Agent B Joins 3. A and B talk and need to bring in C 4. A is put on hold 5. Agent C joins 6. Agent B and C discuss 7. Customer A is removed from hold 8. All parties are introduced 9. B leaves A B C Event: participant-join Store: ConferenceSidEvent: participant-join Store: ConferenceSidParticipant Held REST API: Hold=trueEvent: participant-hold Store: Participant StateEvent: participant-join Store: ConferenceSidEvent: participant-leave Store: Participant StateParticipant Held REST API: Hold=falseParticipant Unheld Store: Participant State
  • 22.
  • 23.
    ANDREW JORDAN |AMEYA 1. Customer A Joins 2. Agent B Joins 3. Supervisor C joins on mute 4. C can hear A and B but A and B cannot hear C 5. C is un muted to handle escalation A B C
  • 24.
    ANDREW JORDAN |AMEYA 1. Customer A Joins 2. Agent B Joins 3. Supervisor C joins on mute 4. C can hear A and B but A and B cannot hear C 5. C is un-muted to handle escalation A B C Event: participant-join Store: ConferenceSidEvent: participant-join Store: ConferenceSidParticipant Unmuted REST API: Mute=false
  • 25.
    RECAP Using Conference allowsyou to build robust multi party call flows We see thousands of Twilio customers utilizing this architecture We’re released features like Events and Hold to streamline these flows We’re continuing to develop features to enable multi party call flows ANDREW JORDAN | AMEYA
  • 26.
    WE CAN’T WAITTO SEE WHAT YOU BUILD
  • 27.
    YOUR NAME |TWITTER ANDREW + AMEYA @TWILIO.COM