The player is one action in the Call Routing API. You send a link to an audio file and the keys you want active. Voitex handles playback, the keypad and the timing, and reports back what the caller did.
Let students listen to a full lecture by phone, skip back over a hard part, slow it down, and pick up tomorrow exactly where they stopped.
Play songs, albums and announcements to thousands of callers, with volume and next or previous track on the keypad.
Turn long episodes and chapters into something people can listen to from any phone, landline included, with no app to install.
Four steps, and your server only gets involved when it needs to.
Your menu, or your server, decides what to play: a lecture number, the latest episode, or where they left off last time.
The file starts downloading the moment your reply arrives. If it is still loading, callers hear hold music, never silence.
Skip, pause, change speed and volume, or open a spoken menu. Keys you did not map are ignored, so nobody loses their place by accident.
When they press a key you care about, finish, or hang up, you receive the exact position and settings, ready to resume.
This is the lecture keypad from the full example below. Grey keys move through the recording on their own, purple keys pause or open a menu, and white keys stop playback and tell your server.
{
"event": "player.completed",
"player": {
"reason": "key", "name": "bookmark", "digits": "8",
"position_ms": 1383400, "duration_ms": 2895000,
"speed": 1.5, "volume": 2, "paused": false,
"listened_ms": 1102000
}
}A key you didn't map does nothing, so a caller fumbling for 3 never loses their place. If they hang up mid-recording, call.ended brings the position as an automatic bookmark.
Use them in controls, in paused_controls and inside menus.
{"seek": -15}Jump back or forward 1 to 3600 seconds.{"pause_toggle": true}Pause or resume.{"speed": 1.5}Change speed. Their place is kept.{"volume": 2}A step louder or quieter, up to ±6.{"volume_cycle": true}Cycle 0 → +2 → +4 → 0.{"volume_reset": true}Back to normal volume.{"moh_toggle": true}While paused, switch to hold music.{"return": "bookmark"}Stop and tell you, with this name.{"menu": {…}}Open a spoken menu."confirm": [ … ]Optional on any control: heard after it works.Callers who know the menu type straight through it. A fast “5 7” works with no prompt heard. Two levels deep.
Paused callers get their own keys, a beep every 30 seconds or hold music, and up to an hour before timing out.
pause_timeout 300 sresume_rewind_ms 500Every player.completed, and the player block on call.ended, reports the caller’s place and settings. Send the same player back with them and the caller carries on as if nothing happened.
position_mswhere they stoppedspeed · volumetheir settingspaused · mohpaused or on hold musiclistened_mstime actually listenedpaused_ms · menu_mstime paused and in menus{
"action": "player",
"url": "https://cdn.example.org/lectures/24.mp3",
"start_ms": 0,
"controls": {
"1": {"seek": -15}, "3": {"seek": 15},
"4": {"seek": -60}, "6": {"seek": 60},
"7": {"seek": -300}, "9": {"seek": 300},
"2": {"pause_toggle": true},
"8": {"return": "bookmark"},
"0": {"return": "previous"}, "#": {"return": "next"}, "*": {"return": "menu"},
"5": {"menu": {
"prompts": [{"action": "play", "url": "https://cdn.example.org/prompts/options.mp3"}],
"timeout": 3,
"options": {
"1": {"menu": {"timeout": 3, "options": {
"1": {"volume": -2}, "2": {"volume_reset": true}, "3": {"volume": 2}}}},
"2": {"return": "liked"}, "3": {"return": "playlists"},
"5": {"return": "next_date"}, "6": {"return": "skip_10"},
"7": {"speed": 0.5, "confirm": [{"action": "say", "text": "Half speed"}]},
"8": {"speed": 1},
"9": {"speed": 1.5, "confirm": [{"action": "say", "text": "One and a half speed"}]}
}}}
},
"paused_controls": {
"2": {"pause_toggle": true},
"0": {"moh_toggle": true},
"5": {"return": "length"}
},
"pause_timeout": 300,
"action_url": "/ivr/player"
}mp3, wav, ogg, flac, aiff and more. The file is converted for the phone line automatically, so a high-quality file sounds the same as a small one.
Up to 3 hours and 120 MB per file. The first two minutes are ready almost instantly, so playback starts while the rest is prepared.
About ±0.2 seconds, which is exact enough for a bookmark or resume point.
Yes. Voitex reports positions; bookmarks, likes, playlists and listening history are yours to keep in your own system.
The player block on call.ended includes their position, so you can save it as an automatic bookmark.
Yes. listened_ms, paused_ms and menu_ms tell you how long the caller actually listened, paused and spent in menus.