Skip to main content
Twilio and Vobiz drive calls the same way: the platform makes an HTTP request to your app, you return XML, and each request is signed so you can prove it came from the platform. Migrating is a matter of renaming a few request parameters, branching on Vobiz’s Event field instead of Twilio’s separate callback URLs, and swapping Twilio’s X-Twilio-Signature (HMAC-SHA1) validator for Vobiz’s X-Vobiz-Signature-V3 (HMAC-SHA256 + nonce). This page maps every piece and shows before/after validation code.
AUTH_TOKEN is your Vobiz Auth Token (the api_key you pass to the SDK is your Auth ID → X-Auth-ID; the Auth Token → X-Auth-Token). The same Auth Token is the HMAC key that signs your inbound webhooks.

Request parameter mapping

Twilio POSTs application/x-www-form-urlencoded params to your voice URL; Vobiz posts the same content type to your answer_url. The values you already read carry over under Vobiz names.

<Gather> action-URL parameters

Twilio’s <Gather> posts Digits and SpeechResult (plus Confidence) to its action URL. Vobiz’s <Gather> posts the same input under Vobiz names.
Twilio’s <Gather timeout=…> becomes Vobiz’s executionTimeout; speechTimeout becomes speechEndTimeout; numDigits, finishOnKey, and hints keep their names. Full attribute list: Gather reference.

Callback flow: separate URLs → one Event field

Twilio uses a primary voice URL plus a separate StatusCallback for lifecycle events. Vobiz delivers lifecycle transitions to your flow as an Event value, so you branch on one field.

Signature validation: X-Twilio-Signature → X-Vobiz-Signature-V3

Twilio signs with HMAC-SHA1 keyed by your Auth Token over the full URL (scheme, host, port, query) with every POST field appended in alphabetical order, base64-encoded, sent as X-Twilio-Signature. The RequestValidator helper reproduces the string and compares. Vobiz signs with HMAC-SHA256 keyed by your Auth Token over baseURL + "." + nonce (query stripped), base64-encoded, sent as X-Vobiz-Signature-V3 with the random nonce in X-Vobiz-Signature-V3-Nonce.

Before / after - Flask (Python)

Before / after - Node

Handling the lifecycle event in one handler

Key differences

  • One signature helper, HMAC-SHA256. Where Twilio’s RequestValidator rebuilds the full URL plus every sorted POST field, Vobiz signs baseURL + "." + nonce with SHA-256 - a short, deterministic string that’s easy to reproduce in any language with the standard library (no param-sorting step). Validate values you read from the body in your handler, as you would on any platform.
  • A nonce per request. Vobiz adds X-Vobiz-Signature-V3-Nonce, giving each signed request a fresh random component. Read it case-insensitively and feed it straight into the HMAC.
  • Events in the same handler. Instead of wiring a separate StatusCallback URL, branch on the Event field (Ring, StartApp, Hangup) inside your existing endpoint - fewer URLs to register and secure.
  • Same parameter vocabulary. CallStatus and Direction use the same words you already parse; mostly you rename CallSid → CallUUID and SpeechResult → Speech.
  • Constant-time compares. Use hmac.compare_digest (Python) or crypto.timingSafeEqual (Node) - never == - exactly as Twilio’s helper does internally.
  • Sub-account safety built in. On sub-account callbacks Vobiz adds X-Vobiz-Signature-MA-V3, signed with the parent-account token, so a parent can independently verify child traffic with the same validator.

Twilio migration overview

The at-a-glance matrix and recommended migration order.

Voice Call API mapping

REST calls: create, fetch, and control live calls on Vobiz.
Full request-parameter reference: XML request params.