Skip to main content
If you already drive your call flows with PlivoXML, moving to VobizXML is mostly a copy-and-paste. Vobiz uses the same <Response> wrapper and the same verb names and nesting rules as Plivo, so the vast majority of your XML works as-is. There is exactly one real rename you need to make:
  • Plivo’s <GetDigits> and <GetInput> both become Vobiz’s <Gather>.
Everything else maps one-to-one by name. This guide gives you the full mapping table, a before/after example in both XML and the SDK builder, and a pointer to the interactive converter that does the work for you.

How Vobiz serves XML

Like Plivo, Vobiz fetches your call-control XML from your own HTTPS endpoint. When a call is answered, Vobiz POSTs to your answer_url, and you return a <Response> document with Content-Type: application/xml. Verbs execute top to bottom. See How VobizXML works for the request and response lifecycle.

Verb mapping table

PlivoXML elementVobizXML elementNotes
<Response><Response>Same wrapper. Return as application/xml.
<GetDigits><Gather>Renamed. type to inputType, timeout to executionTimeout.
<GetInput><Gather>Renamed. Same attribute changes as <GetDigits>.
<Speak><Speak>Same. Supports voice (WOMAN/MAN), language, loop.
<Play><Play>Same. Supports loop (0 = infinite).
<Dial><Dial>Same, with nested <Number>/<User>. Supports action, timeout, timeLimit, callerId, confirmSound, dialMusic.
<Number><Number>Same. Nests inside <Dial>.
<User><User>Same. Nests inside <Dial> for SIP/app endpoints.
<Record><Record>Same. Supports action, maxLength, timeout, playBeep, finishOnKey, fileFormat, recordSession, startOnDialAnswer.
<Conference><Conference>Same. Supports startConferenceOnEnter, endConferenceOnExit, callbackUrl.
<Redirect><Redirect>Same. Supports method.
<Hangup><Hangup>Same. Supports reason, schedule.
<Wait><Wait>Same. Supports length, silence, beep.
<PreAnswer><PreAnswer>Same. Only Speak/Play/Wait nest inside.
<DTMF><DTMF>Same. Send tones to a remote IVR.
<MultiPartyCall> and other advanced verbsNo direct equivalentReview and contact support before migrating. Do not assume a one-to-one mapping.
<Gather> uses executionTimeout (5-60 seconds, default 15), never timeout. In PlivoXML, <GetDigits timeout="..."> is the inter-digit/overall timeout; in VobizXML that attribute is executionTimeout. The timeout attribute in VobizXML belongs only to <Dial> and <Number>, where it is the ring timeout.

Inside Gather: the attribute changes

When you rename <GetDigits> or <GetInput> to <Gather>, change these two attributes:
Plivo attributeVobiz attributeValues
typeinputTypedtmf, speech, or dtmf speech
timeoutexecutionTimeout5 to 60 (default 15)
Most other attributes carry over directly, including action, method, numDigits, finishOnKey, and language.

Before and after: an IVR menu

Here is a typical Plivo IVR that collects a single digit and routes the caller.

PlivoXML (before)

PlivoXML
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <GetDigits action="https://yourapp.com/menu-choice" method="POST"
               type="dtmf" numDigits="1" timeout="10">
        <Speak>Press 1 for sales, 2 for support, or 0 for an operator.</Speak>
    </GetDigits>
    <Speak>We didn't receive your input. Goodbye.</Speak>
    <Hangup/>
</Response>

VobizXML (after)

Rename <GetDigits> to <Gather>, type to inputType, and timeout to executionTimeout. Nothing else changes.
VobizXML
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Gather action="https://yourapp.com/menu-choice" method="POST"
            inputType="dtmf" numDigits="1" executionTimeout="10">
        <Speak>Press 1 for sales, 2 for support, or 0 for an operator.</Speak>
    </Gather>
    <Speak>We didn't receive your input. Goodbye.</Speak>
    <Hangup/>
</Response>

Before and after: the SDK builder

If you build XML programmatically with the Plivo SDK, the change is just as small. Plivo’s add_get_digits(...) (and add_get_input(...)) becomes Vobiz’s add_gather(...) on a vobizxml.ResponseElement(), with the same type to inputType and timeout to executionTimeout renames.

Plivo SDK builder (before)

Plivo SDK
import plivoxml

response = plivoxml.ResponseElement()
get_digits = response.add_get_digits(
    action="https://yourapp.com/menu-choice",
    method="POST",
    type="dtmf",
    num_digits=1,
    timeout=10,
)
get_digits.add_speak("Press 1 for sales, 2 for support, or 0 for an operator.")
response.add_speak("We didn't receive your input. Goodbye.")
response.add_hangup()

print(response.to_string())

Vobiz SDK builder (after)

Vobiz SDK
import vobizxml

response = vobizxml.ResponseElement()
gather = response.add_gather(
    action="https://yourapp.com/menu-choice",
    method="POST",
    input_type="dtmf",
    num_digits=1,
    execution_timeout=10,
)
gather.add_speak("Press 1 for sales, 2 for support, or 0 for an operator.")
response.add_speak("We didn't receive your input. Goodbye.")
response.add_hangup()

print(response.to_string())
Don’t want to convert by hand? Paste your PlivoXML into the interactive converter at /migrate-plivo-to-vobiz and get clean VobizXML back instantly, with the GetDigits/GetInput to Gather rename and the executionTimeout change applied for you.

What to double-check after converting

  • Every <Gather> uses executionTimeout, not timeout. This is the most common mistake when porting from Plivo.
  • <MultiPartyCall> and other advanced Plivo verbs. These have no guaranteed one-to-one Vobiz equivalent. Review each one and contact support rather than inventing a mapping.
  • All URLs are fully qualified HTTPS. Action, callback, confirmSound, and dialMusic URLs must be absolute HTTPS, just as in Plivo.
  • Your response is served as application/xml. Not text/html or text/plain.

Next steps

Webhooks and signatures

Map Plivo webhook parameters and signature validation to Vobiz.

Plivo to Vobiz overview

See the full migration guide for moving from Plivo to Vobiz.