Install
$ agentstack add skill-vobiz-ai-agent-skills-vobiz-voice-xml ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Vobiz Voice XML skill
Use this when the user wants to script a call flow declaratively - IVR menus, voicemail, queues, conferences, agent transfers. Anything beyond just "make a call and stream audio" usually involves VobizXML.
How Vobiz fetches XML
- Call is created via
POST /Call/withanswer_url. - When the callee answers, Vobiz POSTs to
answer_urlwith call context. - Your server returns
...verbs...asapplication/xml. - Verbs execute top-to-bottom.
Core verbs
| Verb | Purpose | |---|---| | ` | TTS - speak text to the caller | | | Play an audio file (HTTPS URL) | | | Collect DTMF or speech input | | | Bridge to another party (PSTN, SIP URI, app, conference) | | | Record the call (optionally stream-while-recording) | | | Open a WebSocket for bidirectional audio (AI voice agents) | | | Add caller to a conference room | | | Fetch new XML from a different URL | | | Pause for N seconds | | | End the call | | ` | Run verbs before answering (no billsec) |
Request payload - what your answer_url receives
Standard application/x-www-form-urlencoded POST (GET sends them as query params). Common parameters: CallUUID, From, To, Direction, CallStatus, HangupCause, Duration, BillDuration, ForwardedFrom, plus ALegUUID/ALegRequestUUID for outbound calls and any custom X-VH- SIP headers. See xml/request for the full list.
Standard callback params by verb
Action/callback URLs receive the standard call params plus verb-specific ones:
- `
:InputType(dtmf|speech),Digits,Speech,SpeechConfidenceScore,BilledAmount. EmptyDigits/Speech` on timeout. - `
:DialStatus(completed|busy|failed|cancel|timeout|no-answer),DialRingStatus,DialHangupCause,DialALegUUID,DialBLegUUID` (empty if unanswered). - `
: liveDialAction` (answer|connected|hangup|digits) events. - `
:RecordUrl,RecordingID,RecordingDuration(Ms),RecordingEndReason` (RecordingTimeout|maxLength|FinishedOnKey|HungUp). - `
:ConferenceAction(enter|exit|start|end),ConferenceUUID,ConferenceName,ConferenceCurrentSize,RecordingUrl` (on end). - `
: standard params +Event=Redirect`.
Per-verb quick recipes
- IVR menu: `
wrapping a; put fallback+` after it. - Variable-length input: ``.
- Speech intent: `
; thresholdSpeechConfidenceScore`. - Blind transfer:
...then fallback after. - Screen the agent: ``.
- Voicemail: `
prompt +`. - Record whole call: `` first.
- Hold music:
...or ``. - AMD voicemail drop: `
then`. - Reject without billing: `` as the first element.
- Branch/loop:
https://.../next(last runnable element). - Send tones to a remote IVR:
1WW2#.
Pitfalls
- Response must be
application/xml(ortext/xml), nottext/html/text/plain, served over HTTPS, and under 100 KB. Return within 1-2 s or callers hear dead air. - **`
usesexecutionTimeout(5-60 s, default 15), NOTtimeout.**timeoutbelongs only to/and is the ring timeout.` caps total bridged duration - don't confuse the two. - Verbs execute strictly top-to-bottom. `
and anyaction-URL handoff (Dial/Gather/Record`) end the current document; elements after them are fallback-only. - All URLs in `
,,,` (action/callback/confirmSound/dialMusic) must be fully qualified HTTPS. - DTMF:
finishOnKey(default#) is excluded fromDigits; setfinishOnKey=""/noneto rely onnumDigits/timeout. On no input, Vobiz still posts with emptyDigits/Speech- check for empty. Dial: always branch on everyDialStatus(busy/no-answer/timeout/failed/cancel/completed).DialBLegUUIDis empty when nobody answers.Record:timeoutis silence timeout (not total length);maxLengthis the hard cap. SetmaxLengthhigh enough for voicemails.- Escape
&, `in/` text or the document fails to parse. - `
defaults tovoice="WOMAN",language="en-US"`; not every language has both MAN and WOMAN voices. - `
early media is unsupported on WebRTC and some PSTN routes - the flow must work without it. OnlySpeak/Play/Wait` nest inside it. loop="0"means infinite (Play,Speak) - it stops only on hangup or a parallel event, never on its own.
When to search docs
- "How do I build an IVR?" →
xml/gather,examples/vobiz-ivr-xml-python - "Voicemail" →
xml/record/record-a-voicemail,examples/vobiz-voicemail-xml-python - "Conference call" →
xml/conference,solutions/conference-calling - "AI voice agent" →
xml/stream,integrations/pipecat - "DTMF input" →
xml/dtmf,xml/gather/detecting-speech-inputs
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: vobiz-ai
- Source: vobiz-ai/Agent-Skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.