Voxtrunk - Self-Hosted AI Phone Agent Web Application
Sell AI phone reception as a service. Own the whole stack. Voxtrunk is a self-hosted AI voice agent platform for agencies and telecom resellers. It answers r
Sell AI phone reception as a service. Own the whole stack.
Voxtrunk is a self-hosted AI voice agent platform for agencies and telecom resellers. It answers real phone calls in under a second, holds a natural conversation, books appointments against a real diary, and writes a transcript your customer can read the same minute the call ends.
Every comparable product on the market ties you to one carrier and one speech vendor. Voxtrunk does not. It speaks plain SIP, so it registers to any trunk provider on earth, and it runs on Asterisk 18 — which is what FreePBX, Issabel and Yeastar are underneath. Speech-to-text, language model and voice are three separate dropdowns in the panel; changing one does not touch the others.
You install it once on a single Ubuntu server. After that there is nothing to pay us, ever. No per-minute cut, no seat licence, no phone-home. You bring your own carrier account and your own API keys, and the margin between what those cost you and what you charge your customers is entirely yours.
Live demo: voxtrunk.webkodingtheme.com/app
Landing page: voxtrunk.webkodingtheme.com
Operator account: demo@voxtrunk.test / VoxtrunkDemo!26
Customer account: demo+client@voxtrunk.test / VoxtrunkDemo!26
Sign in with both. They are two genuinely different applications, and the difference is the business model.
Important: ongoing third-party costs you pay directly
Voxtrunk is a one-time purchase, but the services it depends on are not. This item does not include, resell or mark up any third-party service. Before it can answer a single call you will need your own paid accounts with the providers below, and each of them bills you directly, at their own prices, on your own account. We take no cut, never see your usage, and cannot credit or refund those charges.
Speech to text — Deepgram or AssemblyAI. Billed per minute of audio processed. Required.
Language model — OpenAI, OpenRouter, Groq, Together, or any OpenAI-compatible endpoint including one you host yourself. Billed per token. Required.
Voice — Deepgram or ElevenLabs. Billed per character spoken. Required.
Knowledge base embeddings — OpenAI. Billed per token embedded. Charged whenever your customers upload documents for the agent to answer from, whichever language model you chose. Optional feature, but if you use it, this cost applies.
SIP trunk and phone numbers — your carrier, at their rates.
A VPS — your host, monthly.
SMTP — only if you want password-reset emails. Optional.
Three separate vendors are metering every single call — speech in, model, voice out — for as long as the call lasts. Your cost per minute depends on which vendors and which model you pick, and it changes when they change their prices, so price your own packages with room in them. Voxtrunk enforces the monthly minute allowance you set per customer, which is what stops an unmetered customer becoming an unmetered bill on your provider accounts.
What Voxtrunk itself costs after purchase is nothing: no runtime licence, no per-seat fee, no per-minute fee, no subscription, and nothing that phones home. Once installed it keeps working whether or not it can reach us.
A wholesale platform, not a single-site tool
Unlimited customers on one installation. Each is a separate account with its own logins, agents, numbers, transcripts and recordings. Tenant isolation is enforced in every database query, and the boundary is covered by automated tests — a customer asking for another customer’s call gets a 404, not a leak.
Minute allowances, enforced before the phone is answered. Set a monthly cap per customer. When they reach it the agent stops answering and the refusal is written to their call list with the reason, so nobody has to explain a silent line. Leave the cap empty for an unmetered account.
Suspend without deleting. One checkbox stops a customer answering calls while every transcript, agent and setting stays exactly where it was. Untick it and they are back, mid-afternoon, with no reconfiguration.
Numbers are yours, not theirs. Phone numbers are bought and paid for by you, so only you can assign one to an agent. Your customer sees which number their agent answers on and cannot change it or claim one belonging to somebody else.
Call recording as a per-customer decision. Off by default. Turn it on for a customer, set how many days recordings survive, and old files delete themselves. Recording law differs by country and this is deliberately your call and theirs, not a default we made for you.
Carrier-agnostic, on purpose
This is the whole reason Voxtrunk was written. The established products in this category are locked to one American carrier and one voice vendor, and their buyer comment threads are full of the same unanswered question from Angola, Saudi Arabia, the UAE, India and half of Europe: can I use my own SIP trunk?
Here the answer is yes, because there is nothing else on offer. Voxtrunk speaks plain SIP through Asterisk 18 and has no opinion about who carries the call. If your carrier authenticates by registration, it registers. If it authenticates by IP address, it identifies. If you already run FreePBX, Issabel or a Yeastar appliance, you are already running Asterisk and this drops alongside it.
No vendor SDK anywhere outside the provider folder. That is a structural rule in the source, not a promise in a brochure: adding a speech vendor means writing one file against a three-method interface. The two speech vendors and five model endpoints that ship are proof the interface is real rather than theoretical.
Keys are stored encrypted and are never displayed again after saving. Each vendor has a Test button that makes the cheapest authenticated call that vendor offers, so you find out a key is wrong at the panel rather than on a customer’s call.
Where in the world this works
There is no country list, because there is nothing in Voxtrunk that knows what country it is in. It speaks plain SIP. If you can buy a trunk where you are — and in almost every country you can — you can run this.
The phone number comes from your carrier, not from us. Your server sits wherever you put it. Nothing has to be routed through a vendor in another country, and nothing stops working because a provider decided not to open an office in your market. That is the entire point of the previous section.
Three things genuinely do vary by country, and it is better you hear them now than after buying:
The spoken languages are the twelve listed below. If your callers speak something outside that list, this is not yet the product for you. Adding one is a settings change on our side, not a rewrite, but it is not there today.
Your speech, model and voice vendors have their own coverage and their own terms. Deepgram, OpenAI, ElevenLabs and the rest each decide where they will sell. Voxtrunk does not care which you use — that is why it is swappable, and why an OpenAI-compatible endpoint you host yourself is a supported option — but check the vendor you intend to use before you commit.
Call recording and announcing an AI are regulated differently everywhere. Some places require consent to record, some require the caller be told they are speaking to a machine. Recording is a per-customer switch with its own retention period precisely so you can meet the rule that applies to each of your customers. What that rule is remains your responsibility, not the software’s.
Why it is fast, and what that cost to build
It speaks on the first clause. The agent does not wait for a complete answer before opening its mouth — the moment the first sentence exists it is on its way to the caller, and the rest is generated while they are already listening.
It generates before the caller has finished. While the endpointer is still deciding whether that pause was the end of a sentence, Voxtrunk has already begun composing an answer to the words it has, behind an audio gate that only opens if it guessed right. A wrong guess costs nothing but a few tokens.
It can be interrupted. Talk over the agent and it stops — model aborted, speech aborted, queued audio flushed. Without this an AI agent talks straight through a person, which is the single most common complaint about the category.
The knowledge base is not on the critical path. Finding the relevant passages costs a round trip, so it starts on the interim transcript while the caller is still speaking. With a knowledge base attached the median is around 1050 ms rather than the 1185 ms the naive order would give.
You can see where the time goes. Set VOICE_TIMING=1 and every call logs the split — endpointer, first token, first audio byte — so if calls feel slow you know which of the three to attack, and each is a dropdown away from being changed.
For the record, the naive first version of this loop took 4513 ms. Getting to 915 was websocket speech synthesis, connection warm-up, tighter endpointing, speculative generation behind an audio gate, and moving the server next to the vendors. The measurements at every step are in the README that ships with the source.
The customer side is the product you are selling
An AI receptionist is only worth a monthly fee if the person paying can change what it says without ringing you. So the customer panel is written for a shop owner, not an engineer, and it never mentions a technology.
The agent is described, not programmed. Business name, opening hours, address, what you do, and the questions you get asked with the answers you give — five plain fields. Voxtrunk compiles those into the agent’s instructions. There is no prompt to write and no prompt to get wrong.
It cannot invent an appointment. The times the agent offers come from the diary the customer filled in, checked against what is already booked, and the booking tool refuses a slot that has gone. A caller is never told about a Thursday at ten that does not exist — which is exactly the failure that makes people distrust these agents.
Knowledge in the customer’s own words. Paste a price list or import a page, and the agent quotes from it when a caller asks something the five fields do not cover. Passages are found by meaning rather than keyword, and the search runs while the caller is still talking so it costs no waiting.
Every call is readable. Full transcript, first-reply time with a plain-language verdict on it, and the recording with the caller on the left channel and the agent on the right — so you can hear who talked over whom.
Speaks the caller’s language, not yours
Twelve spoken languages — English, Turkish, Arabic, Spanish, German, French, Dutch, Portuguese, Italian, Hindi, Russian and Polish — chosen per agent, each with a matching default voice. The language the agent speaks on the phone and the language the panel is in are two separate settings, because a Spanish shop owner may want an English-speaking line, or the reverse.
The panel itself ships in English, Spanish and Arabic, with right-to-left handled as a layout rather than a font swap: the navigation moves to the right, figures stay left-to-right so 649 ms still reads as 649 ms, and the monospace face steps aside where it would prise Arabic letters apart. Adding a language is one file of plain strings and no build step.
When the agent does not know, it says so. Per agent, choose whether an unknown question ends in taking a name and number for a callback, or in an honest “I don’t know”. It will not improvise an answer to keep the conversation moving.
Installed with an administrator, not a demonstration account
The installer generates one administrator password, prints it once, and the account cannot do anything else until it has been replaced — because that value was printed to a terminal, and a scrollback buffer is a copy of it. There is no demonstration account on your installation and no credentials printed on your sign-in page.
Legal pages fed from your details. Privacy policy, terms and a data-processing notice are generated from the organisation details you enter — your legal name, your address, your contact — and each one is editable if your lawyer wants different words. They carry your name, because your customers are your customers.
An honest note on prompt injection. Any AI agent that reads a web page can be told things by that page, and any agent that listens to a caller can be told things by the caller. Voxtrunk strips the invisible characters used to hide instructions in a page, bounds how much imported text can reach the model, and frames everything imported as quoted material rather than instructions. What actually contains the risk is structural: the agent has exactly one tool, booking, and it is validated against the real diary. At worst a manipulated agent says something odd. It cannot reach your data or your customers’.
Your licence, and what the check actually does
Your purchase code goes in the panel once, under Licence. From then on the installation confirms it with us about once a week. You will want to know exactly what that means before you buy, so here it is in full.
What is sent: the purchase code, the hostname you set in PUBLIC_URL, and an identifier your installation generates for itself. That is the complete list. No transcript, no recording, no caller number, no customer name, no agent configuration, no API key. Nothing about your business or your customers’ businesses leaves your server, ever.
If the check cannot run, nothing happens. Your server is offline, our service is down, your firewall is strict, you are on an air-gapped network — the attempt is recorded as failed and your installation carries on exactly as before. A check that fails is not a verdict. This is deliberate: it would be indefensible for your phone lines to depend on a server of ours staying up.
If the code is confirmed not to be a valid purchase, there is a fourteen-day grace period. After it, one thing stops: creating new customers and new agents. Your existing customers, your existing agents, every phone call, every page that reads rather than creates — all untouched. The call path never consults the licence at all, and there is an automated test that fails if anyone ever wires it in.
You can switch it off. Leave LICENSE_ENDPOINT empty in your .env and the panel never contacts us and never mentions it. It ships pointed at our service because that is the sensible default, not because you are locked to it.
Envato reverses a sale when a payment is disputed by the bank. When that happens the money is taken back from the author, and before this existed the download simply carried on working. That is the situation this addresses, and the reason it is written to inconvenience a fraudulent buyer rather than a paying one.
What you actually receive
The complete source, unencrypted and unobfuscated. Server-rendered HTML, no build step, no bundler, no framework to learn. If you can read JavaScript you can read all of it, and the comments explain why decisions were made rather than restating what the line does.
An installer for Ubuntu 22.04 and 24.04 that sets up Asterisk, Node, PostgreSQL and nginx, creates the database, generates every secret, wires the dialplan and starts both services under pm2.
Documentation as one self-contained HTML page, covering installation, carriers, providers, a full reference for every .env variable with its default and an example, day-to-day operation, white-labelling, upgrades and migrations, the API and webhooks, and troubleshooting for telephony, providers, the database and pm2 — including the two PJSIP traps that cost real days to find and are invisible from the outside.
A plain-language guide for your customer, written for a shop owner rather than an engineer: sign in, create the agent, brief it, turn it on. Send it to them with their login.
A read-only HTTP API and signed outbound webhooks, so calls, transcripts, appointments and per-customer minute usage go straight into your billing system or CRM. Keys are scoped per customer or across the installation, and every webhook is HMAC-signed.
93 automated tests you can run yourself before you trust it with a customer, including tenant isolation and API scoping.
Roadmap
Two things are deliberately absent from version 1.0 rather than half-built, and both are next:
Warm transfer to a person. The agent hands a live call to a human on your customer’s staff, with what has been said so far.
Outbound campaigns. Reminders and follow-ups placed by the agent rather than answered by it.
Requirements
A VPS running Ubuntu 22.04 or 24.04 with root access. One vCPU and 2 GB of memory is enough to start. A domain name pointed at it, and a TLS certificate (the installer tells you the one certbot command).
You will also need a SIP trunk from any carrier, and your own paid accounts with a speech vendor, a language model vendor and a voice vendor. All of them bill you directly at their own prices — see Important: ongoing third-party costs you pay directly above — and all of them are switchable from the panel at any time.
Support
Six months of included support, extendable at checkout. Questions about installation, configuration and the documented features are answered. Customisation and third-party integration work are outside support but can be discussed.
License
Regular License — use in one end product that end users are not charged for. Appropriate if you run the agents for your own business or your own locations.
Extended License — use in one end product that end users may be charged for. This is the one you want if you are selling AI reception as a monthly service, which is what Voxtrunk is designed for.
For full terms see Envato Standard Licenses.
Changelog
v1.1.0 (2026-08-22)
– Licence verification: enter your Envato purchase code under Licence in the panel
– Only the purchase code, your site hostname and a locally generated install id are sent — no call, recording, transcript or customer data leaves your server
– A failed or unreachable check is not a verdict and disables nothing
– A confirmed invalid code starts a 14-day grace period, after which only creating new customers and agents is refused — existing customers, agents and every call keep working
– The call path never consults the licence, and a test fails if it ever does
– Responses are signed and verified against a public key shipped with the source
– Leave LICENSE_ENDPOINT empty in .env to switch the check off entirely
– 93 automated tests, up from 76
v1.0.0 (2026-08-11)
– Initial release
– Carrier-agnostic SIP telephony on Asterisk 18 with AudioSocket
– Trunk management with generated PJSIP configuration, registration and IP authentication
– Swappable speech, language model and voice providers with connection testing
– 915 ms median first reply over real SIP, with barge-in
– Multi-tenant operation: minute allowances, suspension, per-customer recording retention
– Structured agent brief, real-diary appointment booking, knowledge base with meaning-based recall
– Transcripts and stereo call recordings with automatic retention
– Panel in English, Spanish and Arabic with right-to-left layout; twelve spoken call languages
– Password reset by mail, from the panel, or from the console
– Read-only HTTP API and HMAC-signed outbound webhooks, with API keys scoped per customer or installation-wide
– Audit log, encrypted provider keys, tenant isolation tests, 76 automated tests
– One-command installer for Ubuntu 22.04 and 24.04
What's Your Reaction?
Like
0
Dislike
0
Love
0
Funny
0
Angry
0
Sad
0
Wow
0

