Programmable Voice

Programmable voice lets your own software drive a call. When a call comes in, VoicerOnePBX asks a URL you control what to do, and you answer with a short script of verbs — speak this, collect a digit, record, transfer. If you've used Twilio's TwiML, this will feel familiar; VoicerOnePBX speaks both a JSON form and literal TwiML.

Prefer to start from working code?

Three complete, runnable apps — an auto attendant, a survey, and a spoken support search — are written out in Python, Swift and Go on the Full Examples page, ready to download and run.

How it works

  1. A call is routed to a "programmable voice" destination. The PBX POSTs the call details to your control URL.
  2. You reply with a Call Control Document — an ordered list of verbs.
  3. The PBX runs them in order, then calls you back for the next step (e.g. after collecting a digit).

The verbs

VerbDoes
saySpeak text to the caller (text-to-speech).
playPlay an audio file from a URL.
gatherCollect keypad digits (or speech) and post them back.
recordRecord the caller and post the recording.
route / forwardSend the call to an extension, queue or number.
reject / hangupDecline or end the call.
redirectHand control to another URL.
streamFork the live call audio to a WebSocket (for voice bots / real-time AI).

Example (JSON)

[
  { "say":    { "text": "Welcome to Acme. Please say why you're calling after the tone." } },
  { "gather": { "input": "speech", "actionUrl": "https://app.example.com/handle" } }
]

The same flow can be expressed as Twilio-style TwiML (<Response><Say>…</Say>…</Response>) if that's what your tooling produces.

Outbound, too

You're not limited to inbound calls. Your software can ask the PBX to place a call and then drive it with the same verbs via POST /api/voice/originate — great for reminders, notifications and outbound campaigns.

Signed & guarded

Requests to your control URL are HMAC-signed (like webhooks), and the URLs the PBX will call back are guarded against being pointed at internal/metadata addresses.