Skip to main content
Plivo and Vobiz handle voice webhooks almost identically: both POST 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. Two things to know when mapping: Vobiz delivers Ring / StartApp / Hangup as events to the answer flow, and Vobiz V2/V3 sign the base URL + nonce.

Callback URL & event mapping

Signature header mapping

Signature scheme. Vobiz V3 signs baseURL + "." + nonce (query params stripped); V2 signs baseURL + nonce. Verify Vobiz callbacks with the HMAC validator below.

Before / after: verifying the signature

On Vobiz, verifying a callback is a few lines of stdlib HMAC.
Python (Flask)
Callback params are the same names you read from Plivo - 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

  • Signed string. Vobiz V2/V3 hash the base URL + nonce, which proves the request origin and URL - validate incoming param values in your handler as usual.
  • Events instead of dedicated URLs. Branch on the Event field for Ring, StartApp, and Hangup.
  • 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.

Validating callbacks

Canonical Vobiz signature reference with Python, Node, Go, and Ruby.

Migration gotchas

Edge cases when moving from Plivo to Vobiz.