Migrate Twilio voice webhooks to Vobiz: map request params (CallSid, From, To, Direction, CallStatus, Digits, SpeechResult) to Vobiz call params and Ring/StartApp/Hangup events, and swap X-Twilio-Signature (HMAC-SHA1 RequestValidator) for X-Vobiz-Signature-V3 (HMAC-SHA256 + nonce). Before/after Flask and Node code.
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.
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.
Twilio param
Vobiz param
Notes
CallSid
CallUUID
Unique ID for the call leg.
From
From
Caller’s number in E.164 (or caller ID you set for outbound).
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.
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.
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.