Skip to main content
Plivo and Vobiz model conferences the same way: callers join a named room through a <Conference> XML element, and you control participants out-of-band through a REST API (mute, kick, play, record). The XML verb and most attributes line up one-to-one — the main differences are header auth, the SDK resource split (conference, conference_members, conference_recording), and a few Plivo-only attributes.

Plivo → Vobiz mapping

XML element & attributes

Plivo <Conference>Vobiz <Conference>Notes
<Conference>RoomName</Conference><Conference>RoomName</Conference>Identical. Room name is the element text, case-sensitive. Vobiz auto-creates the room.
mutedmutedSame boolean. Join muted.
startConferenceOnEnterstartConferenceOnEnterSame. Default true on both.
endConferenceOnExitendConferenceOnExitSame. Moderator-leaves-ends-call pattern.
maxMembersmaxParticipantsRenamed. Vobiz default 200.
waitSoundwaitSound (+ waitMethod)Hold audio while waiting to start.
enterSound / exitSound (beep:1, beep:2, URL)beep (boolean)Vobiz collapses both into one on/off beep; no custom URLs.
record + recordFileFormatrecord (boolean)Vobiz record is boolean only; format is fixed at the room level. Use the Record API for mp3/wav choice.
timeLimittimeLimitMax conference duration in seconds.
callbackUrl / callbackMethodcallbackUrl / callbackMethodLifecycle events. See Conference Callbacks.
digitsMatch + action / method(no equivalent)In-conference DTMF capture isn’t a Conference attribute on Vobiz — use a separate <Gather> leg.
stayAlone, recordWhenAlone, floorEvent, relayDTMF, hangupOnStar, transcriptionType/Url/Method, sendDigits(no equivalent)No direct Vobiz attribute. See gaps.

REST API (room + member operations)

Vobiz base URL: https://api.vobiz.ai/api/v1. Auth via X-Auth-ID + X-Auth-Token request headers (Plivo uses HTTP Basic with the same Auth ID/Token).
Plivo (path / Python method)Vobiz pathVobiz Python SDK
GET /Conference/ · conferences.listGET /Account/{auth_id}/Conference/client.conferences.list_conferences(auth_id)
GET /Conference/{name}/ · conferences.getGET /Account/{auth_id}/Conference/{conference_name}/client.conferences.get_conference(auth_id, conference_name)
DELETE /Conference/{name}/ · conferences.hangupDELETE /Account/{auth_id}/Conference/{conference_name}/client.conferences.delete_conference(auth_id, conference_name)
DELETE /Conference/ · conferences.hangup_allDELETE /Account/{auth_id}/Conference/client.conferences.delete_all_conferences(auth_id)
POST .../Member/{id}/Mute/ · conferences.member_mutePOST .../Member/{member_id}/Mute/client.conference_members.mute_member(auth_id, conference_name, member_id)
DELETE .../Member/{id}/Mute/ · conferences.member_mute_stopDELETE .../Member/{member_id}/Mute/client.conference_members.unmute_member(auth_id, conference_name, member_id)
POST .../Member/{id}/Kick/ · conferences.member_kickPOST .../Member/{member_id}/Kick/client.conference.kick_member(auth_id, conference_name, member_id)
DELETE .../Member/{id}/ · conferences.member_hangupDELETE .../Member/{member_id}/client.conference.hangup_member(auth_id, conference_name, member_id)
POST .../Member/{id}/Deaf/ · conferences.member_deafPOST .../Member/{member_id}/Deaf/client.conference.deaf_member(auth_id, conference_name, member_id)
DELETE .../Member/{id}/Deaf/ · conferences.member_deaf_stopDELETE .../Member/{member_id}/Deaf/client.conference.undeaf_member(auth_id, conference_name, member_id)
POST .../Member/{id}/Play/ · conferences.member_playPOST .../Member/{member_id}/Play/client.conference.play_audio_member(auth_id, conference_name, member_id, url=...)
DELETE .../Member/{id}/Play/ · conferences.member_play_stopDELETE .../Member/{member_id}/Play/client.conference.stop_audio_member(auth_id, conference_name, member_id)
POST /Conference/{name}/Record/ · conferences.recordPOST .../Conference/{conference_name}/Record/client.conference_recording.start_conference_recording(auth_id, conference_name, file_format="mp3")
DELETE /Conference/{name}/Record/ · conferences.record_stopDELETE .../Conference/{conference_name}/Record/client.conference_recording.stop_conference_recording(auth_id, conference_name)
POST .../Member/{id}/Speak/ · conferences.member_speak(no equivalent)No conference member TTS endpoint — see gaps.

Before / after: join a moderated conference (XML)

Plivoplivoxml builder:
from plivo import plivoxml

resp = plivoxml.ResponseElement()
resp.add(
    plivoxml.ConferenceElement(
        "WeeklyStandup",
        start_conference_on_enter=False,   # participants wait
        max_members=10,
        wait_sound="https://yourapp.com/hold-music",
        callback_url="https://yourapp.com/conf-events",
    )
)
print(resp.to_string())
Vobizvobizxml builder (bundled in every Vobiz SDK):
from vobizxml import ResponseElement

r = ResponseElement()
r.add_conference(
    "WeeklyStandup",
    start_conference_on_enter=False,       # participants wait
    max_participants=10,                   # was max_members
    wait_sound="https://yourapp.com/hold-music",
    callback_url="https://yourapp.com/conf-events",
)
print(r.to_string())
Both emit the same XML shape:
<Response>
  <Conference startConferenceOnEnter="false" maxParticipants="10"
              waitSound="https://yourapp.com/hold-music"
              callbackUrl="https://yourapp.com/conf-events">WeeklyStandup</Conference>
</Response>

Key differences & gotchas

  • Auth. Plivo uses HTTP Basic; Vobiz uses X-Auth-ID / X-Auth-Token request headers (the SDK sets these, but raw curl/HTTP clients must switch).
  • Member ops are split across SDK resources. client.conference (kick / hangup / play / deaf), client.conference_members (mute / unmute), client.conferences (room list / get / delete), client.conference_recording (start / stop) — but the REST paths stay under one /Conference/... tree.
  • Rename maxMembersmaxParticipants and note enterSound/exitSound collapse into a single beep boolean; recording format moves from XML to start_conference_recording(file_format=...).
  • Callback params differ in name. Vobiz posts ConferenceAction (enter/exit/start/end), ConferenceUUID, ConferenceName, CallUUID, ConferenceCurrentSize, and RecordingUrl. See Conference Callbacks.

What has no direct equivalent

  • Speak text to a single member — Plivo’s member_speak has no Vobiz endpoint. Pre-render the prompt to audio and use play_audio_member(url=...).
  • In-conference DTMF capture — Plivo’s digitsMatch + action/method isn’t a Vobiz Conference attribute. Run a separate <Gather> leg for menu input.
  • Conference transcription attributes — Plivo’s transcriptionType/transcriptionUrl/transcriptionMethod have no Vobiz equivalent; record the room and transcribe downstream.
  • stayAlone, recordWhenAlone, floorEvent, relayDTMF, hangupOnStar, sendDigits — these per-member behavior flags are not exposed on the Vobiz Conference element today.