application/x-www-form-urlencoded callbacks with the same call params, and both sign each request with an HMAC keyed by your auth token plus a nonce. The two differences that matter: Vobiz sends Ring / StartApp / Hangup as events to the answer flow (no separate ring_url), and Vobiz V2/V3 sign only the base URL + nonce, while Plivo V3 also hashes the sorted POST params.
Callback URL & event mapping
| Plivo | Vobiz | Notes |
|---|---|---|
answer_url (mandatory) | answer_url + answer_method | Returns XML to drive the call. |
ring_url | (no separate URL) — Ring event to answer flow | Vobiz emits a Ring callback instead of a dedicated endpoint. |
hangup_url + hangup_method | hangup_url + hangup_method | Fire-and-forget end-of-call notification; also emits a Hangup event. |
fallback_url / fallback_answer_url | fallback_answer_url + fallback_method | Invoked when the primary answer URL is unreachable. |
action attribute (Dial, Record, GetInput…) | action attribute (Dial, Record, Gather…) | Expects an XML response to continue. |
callbackUrl attribute (notify-only) | callbackUrl / callback_url attribute | Async notification; no XML expected. |
| Event: answered | Event: StartApp | ”Call answered.” |
| Event: hangup | Event: Hangup | ”Call ended.” |
| Event: ringing | Event: Ring | ”Call is ringing.” |
Signature header mapping
| Plivo | Vobiz | Scheme |
|---|---|---|
X-Plivo-Signature-V3 | X-Vobiz-Signature-V3 | HMAC-SHA256, base64. Signs baseURL + "." + nonce. |
X-Plivo-Signature-V3-Nonce | X-Vobiz-Signature-V3-Nonce | Random nonce for the V3 signature. |
| (no equivalent) | X-Vobiz-Signature-V2 (+ -Nonce) | HMAC-SHA256, base64. Signs baseURL + nonce (no .). |
X-Plivo-Signature-Ma-V3 | X-Vobiz-Signature-MA-V3 | Same scheme, signed with the main (parent) account token on sub-account callbacks. |
X-Plivo-Signature-V2 (legacy SHA1) | X-Vobiz-Signature (legacy SHA1) | Backwards compatibility only — avoid. |
The signed strings are not byte-identical. Plivo V3 signs the full URL + sorted POST params + nonce; Vobiz V3 strips query params and signs only
baseURL + "." + nonce. You cannot reuse Plivo’s validate_v3_signature(...) against Vobiz headers — use the HMAC below.Before / after: verifying the signature
Plivo ships a helper; on Vobiz verification is a few lines of stdlib HMAC (thevobiz SDK is for the REST API, not webhook validation).
Python (Flask)
CallUUID, From, To, Direction, CallStatus, HangupCause, Duration, plus Event / timestamp / auth_id on every callback. See the Vobiz XML request params and Callbacks reference.
Key differences & gotchas
- Different signed string. Vobiz V2/V3 hash only the base URL + nonce, so the signature proves origin and URL, not body integrity — treat param values defensively.
- Events instead of dedicated URLs. Branch on the
Eventfield forRing,StartApp, andHanguprather than registering separatering_url/hangup_url. - Header casing & compares. Nonces are 20-digit strings; read headers case-insensitively and compare with
hmac.compare_digest/crypto.timingSafeEqual, never==. - Main-account (MA) signatures. Sub-account callbacks add a parent-signed header (
X-Vobiz-Signature-MA-V3) — reuse the validator with the parent token.
What has no direct equivalent
- No SDK signature helper on Vobiz. Plivo bundles
validate_v3_signature/validateV3Signature; the Vobiz SDKs do not ship a webhook validator — use the stdlib HMAC snippet above. - No comma-separated multi-token signatures. Plivo concatenates signatures for multiple active tokens in one header; Vobiz documents a single signature per scheme (plus the MA variant). Rotate the token rather than running two in parallel.
- No dedicated
ring_urlendpoint. There is no separate ring callback URL — theRingevent is delivered through the answer flow.
Validating callbacks
Canonical Vobiz signature reference with Python, Node, Go, and Ruby.
Migration gotchas
Edge cases when moving from Plivo to Vobiz.