Skip to main content
This page covers the XML elements for conferencing: connecting multiple callers together with features like moderation, recording, and coaching.

Conference

The <Conference> element connects a caller to a conference room. Multiple callers joining the same conference name are connected together. Maximum participants per conference: 20.

Basic Usage

<Response>
    <Conference>my-conference-room</Conference>
</Response>
from plivo import plivoxml

response = plivoxml.ResponseElement()
response.add(plivoxml.ConferenceElement('my-conference-room'))
print(response.to_string())

Conference Attributes

Basic Settings

AttributeTypeDefaultDescription
mutedbooleanfalseJoin muted (can still hear others)
enterSoundstring""Sound on entry: beep:1, beep:2, or URL
exitSoundstring""Sound on exit: beep:1, beep:2, or URL
maxMembersinteger20Maximum participants (1-20)
timeLimitinteger86400Max conference duration in seconds
hangupOnStarbooleanfalseLet member exit by pressing *
stayAlonebooleantrueEnd conference if only one member

Moderation

AttributeTypeDefaultDescription
startConferenceOnEnterbooleantrueStart conference when this member joins
endConferenceOnExitbooleanfalseEnd conference when this member leaves
waitSoundURL-Audio to play while waiting for conference to start

Recording

AttributeTypeDefaultDescription
recordbooleanfalseRecord the conference
recordFileFormatstringmp3Recording format (mp3, wav)
transcriptionTypestring-Set to auto for transcription
transcriptionUrlURL-URL to receive transcription

Callbacks

AttributeTypeDefaultDescription
actionURL-URL called when member leaves
methodstringPOSTHTTP method for action
callbackUrlURL-URL for conference events
callbackMethodstringPOSTHTTP method for callback
redirectbooleantrueRedirect to action URL

DTMF

AttributeTypeDefaultDescription
digitsMatchstring-DTMF patterns to report
floorEventbooleanfalseNotify when member becomes floor-holder
relayDTMFbooleantrueTransmit DTMF to all members

Join Muted

Add participants who can listen but not speak:
<Response>
    <Conference muted="true">my-conference-room</Conference>
</Response>

Entry/Exit Sounds

Play beeps when participants join or leave:
<Response>
    <Conference enterSound="beep:1" exitSound="beep:2">
        my-conference-room
    </Conference>
</Response>
Use a URL to play custom audio:
<Response>
    <Conference enterSound="https://example.com/join-sound.xml">
        my-conference-room
    </Conference>
</Response>
The URL must return XML with Play, Speak, or Wait elements.

Moderated Conference

Create a “waiting room” where participants wait for the moderator: Participant XML:
<Response>
    <Conference startConferenceOnEnter="false" waitSound="https://example.com/hold-music.xml">
        moderated-meeting
    </Conference>
</Response>
Moderator XML:
<Response>
    <Conference startConferenceOnEnter="true" endConferenceOnExit="true">
        moderated-meeting
    </Conference>
</Response>
When the moderator joins, the conference starts. When they leave, everyone is disconnected.

Record Conference

<Response>
    <Conference record="true" recordFileFormat="mp3"
                callbackUrl="https://example.com/recording-ready/">
        recorded-meeting
    </Conference>
</Response>
from plivo import plivoxml

response = plivoxml.ResponseElement()
response.add(plivoxml.ConferenceElement(
    'recorded-meeting',
    record=True,
    record_file_format='mp3',
    callback_url='https://example.com/recording-ready/'
))
print(response.to_string())

With Transcription

<Response>
    <Conference record="true"
                transcriptionType="auto"
                transcriptionUrl="https://example.com/transcription/">
        transcribed-meeting
    </Conference>
</Response>

Exit with Action URL

<Response>
    <Conference action="https://example.com/conference-ended/"
                hangupOnStar="true">
        my-conference
    </Conference>
</Response>

Conference Action URL Parameters

Sent when a member leaves the conference:
ParameterDescription
ConferenceNameName of the conference
ConferenceUUIDUnique conference identifier
ConferenceMemberIDMember’s ID in the conference
RecordUrlRecording URL (if recorded)
RecordingIDRecording identifier

Conference Callback URL Parameters

Sent for conference events:
ParameterDescription
ConferenceActionenter, exit, digits, floor, record
ConferenceNameConference name
ConferenceUUIDConference identifier
ConferenceMemberIDMember ID
CallUUIDCall identifier
ConferenceDigitsMatchMatched digits (when ConferenceAction=digits)
RecordUrlRecording URL (when ConferenceAction=record)
RecordingIDRecording ID
RecordingDurationDuration in seconds
RecordingDurationMsDuration in milliseconds
RecordingStartMsStart time (epoch ms)
RecordingEndMsEnd time (epoch ms)

Transcription URL Parameters

ParameterDescription
transcriptionTranscribed text
transcription_chargeCost of transcription
transcription_rateRate per minute
durationRecording duration
call_uuidCall identifier
recording_idRecording identifier
errorError message (if any)

Bridge Two Callers

Use conferences to connect two incoming callers: First Caller:
<Response>
    <Conference waitSound="https://example.com/hold.xml">
        private-bridge-123
    </Conference>
</Response>
Second Caller:
<Response>
    <Conference>private-bridge-123</Conference>
</Response>

MultiPartyCall

The <MultiPartyCall> element creates or joins a multi-party call (MPC) with advanced features like participant roles, coach mode for supervisors, and individual hold/mute controls.

Basic Usage

<Response>
    <MultiPartyCall role="customer" maxDuration="10000">
        my-mpc-name
    </MultiPartyCall>
</Response>
from plivo import plivoxml

response = plivoxml.ResponseElement()
response.add(plivoxml.MultiPartyCallElement(
    content='my-mpc-name',
    role='customer',
    max_duration=10000
))
print(response.to_string())

Participant Roles

RoleDescription
CustomerThe customer being served
AgentCustomer service representative
SupervisorCan monitor/coach agents (coach mode)

MPC-Level Attributes

These settings apply to the entire multi-party call:
AttributeTypeDefaultDescription
maxDurationinteger14400Max MPC duration in seconds (300-28800)
maxParticipantsinteger10Maximum participants (2-10)
recordbooleanfalseRecord the MPC
recordFileFormatstringmp3Recording format (mp3, wav)
recordMinMemberCountinteger1Min members to start recording (1 or 2)

Hold Music

AttributeTypeDescription
waitMusicUrlURLMusic for participants waiting for MPC to start
waitMusicMethodstringHTTP method for waitMusicUrl
agentHoldMusicUrlURLMusic for agents on hold
agentHoldMusicMethodstringHTTP method for agent hold music
customerHoldMusicUrlURLMusic for customers on hold
customerHoldMusicMethodstringHTTP method for customer hold music

Callbacks

AttributeTypeDescription
statusCallbackUrlURLURL for MPC events
statusCallbackMethodstringHTTP method (GET, POST)
statusCallbackEventsstringEvents to receive (see below)
recordingCallbackUrlURLURL for recording events
recordingCallbackMethodstringHTTP method for recording callback

Participant-Level Attributes

These settings apply to individual participants:
AttributeTypeDefaultDescription
rolestringrequiredAgent, Supervisor, or Customer
mutebooleanfalseJoin muted
holdbooleanfalseJoin on hold
coachModebooleantrueSupervisor coach mode (supervisors only)
stayAlonebooleanfalseStay if only participant
startMpcOnEnterbooleantrueStart MPC when joining
endMpcOnExitbooleanfalseEnd MPC when leaving

Entry/Exit Sounds

AttributeTypeDefaultDescription
enterSoundstringbeep:1Sound on entry: none, beep:1, beep:2, or URL
enterSoundMethodstringGETHTTP method for enterSound URL
exitSoundstringbeep:2Sound on exit: none, beep:1, beep:2, or URL
exitSoundMethodstringGETHTTP method for exitSound URL

Actions

AttributeTypeDescription
onExitActionUrlURLURL called when participant exits
onExitActionMethodstringHTTP method (GET, POST)
relayDTMFInputsbooleanTransmit DTMF to other participants

Supervisor Coach Mode

Supervisors with coachMode="true" can hear everyone but only agents hear them (customers cannot): Supervisor joining:
<Response>
    <MultiPartyCall role="Supervisor" coachMode="true">
        support-call-123
    </MultiPartyCall>
</Response>
Agent joining:
<Response>
    <MultiPartyCall role="Agent" startMpcOnEnter="true">
        support-call-123
    </MultiPartyCall>
</Response>
Customer joining:
<Response>
    <MultiPartyCall role="Customer">
        support-call-123
    </MultiPartyCall>
</Response>

MPC Recording

<Response>
    <MultiPartyCall
        role="Agent"
        record="true"
        recordFileFormat="mp3"
        recordingCallbackUrl="https://example.com/recording-ready/">
        recorded-call
    </MultiPartyCall>
</Response>

Recording Events

  • MPCRecordingInitiated
  • MPCRecordingPaused
  • MPCRecordingResumed
  • MPCRecordingCompleted
  • MPCRecordingFailed

Status Callback Events

Configure which events to receive with statusCallbackEvents:
ValueEvents Included
mpc-state-changesMPCInitialized, MPCStart, MPCEnd
participant-state-changesParticipantJoin, ParticipantExit, ParticipantMute, ParticipantUnmute, ParticipantHold, ParticipantUnhold, ParticipantCoachModeStart, ParticipantCoachModeStop
participant-speak-eventsParticipantSpeakStart, ParticipantSpeakStop
participant-digit-input-eventsParticipantDigitInput
add-participant-api-eventsAddParticipantByAPIActionInitiated, AddParticipantByAPIActionCompleted
<MultiPartyCall
    statusCallbackUrl="https://example.com/mpc-events/"
    statusCallbackEvents="mpc-state-changes,participant-state-changes,participant-speak-events">
    my-mpc
</MultiPartyCall>

Status Callback Parameters

ParameterDescription
EventNameEvent that triggered callback
EventTimestampWhen the event occurred
MPCUUIDUnique MPC identifier
MPCNameFriendly MPC name
MemberIDParticipant identifier
ParticipantRoleAgent, Supervisor, or Customer
ParticipantCallUUIDParticipant’s call UUID
ParticipantCoachModeWhether in coach mode
MPCDurationTotal MPC duration (on end)
MPCBilledDurationBilled duration
MPCBilledAmountCost in USD

On Exit Action

Continue call flow after leaving MPC:
<Response>
    <MultiPartyCall
        role="Customer"
        onExitActionUrl="https://example.com/post-call-survey/"
        onExitActionMethod="POST">
        support-call
    </MultiPartyCall>
</Response>

On Exit Parameters

ParameterDescription
MPCUUIDMPC identifier
MPCFriendlyNameMPC name
MemberIDParticipant ID
ParticipantCallUUIDCall UUID
ParticipantJoinTimeWhen participant joined
ParticipantEndTimeWhen participant left
ParticipantRoleParticipant’s role

Custom Hold Music

<Response>
    <MultiPartyCall
        role="Agent"
        agentHoldMusicUrl="https://example.com/agent-hold.xml"
        customerHoldMusicUrl="https://example.com/customer-hold.xml"
        waitMusicUrl="https://example.com/wait-music.xml">
        call-center-mpc
    </MultiPartyCall>
</Response>
Hold music URLs must return XML with Play, Speak, or Wait elements.

Conference vs MultiPartyCall

FeatureConferenceMultiPartyCall
Max participants2010
Participant rolesNoYes (Agent, Customer, Supervisor)
Coach modeNoYes
Individual hold/muteNoYes
API controlLimitedFull
Use caseSimple meetingsCall centers, support