{"slug": "automate-your-call-center-open-source-run-on-cloudflare-infra", "title": "Automate Your Call Center – Open-Source Run on Cloudflare Infra", "summary": "Mainbrella released an open-source voice agent system for call-center reception, with frontend and backend under GPLv3, that runs on Cloudflare's Workers Paid plan starting at $5 a month plus additional AI inference and telephone costs. The agent uses Deepgram Flux for transcription, Llama 3.3 70B for reply generation, and Deepgram Aura-1 for speech synthesis via Workers AI, with Twilio as the external phone carrier and call transcripts stored in Cloudflare D1. Outbound calls, live transfers, appointment booking, and CRM updates are not implemented yet.", "body_md": "[← Engineering blog](https://mainbrella.com/blog/)\n\n# Automate Your Call Center - Open Source run on Cloudflare Infra\n\nSuppose someone calls your bike shop to ask whether you're open on Saturday. A receptionist can answer from your hours, explain which repairs you handle, and take a name and callback number when the question needs a mechanic. You should be able to run that conversation on infrastructure you already pay for.\n\nMainbrella now includes an end-to-end voice agent system. The [frontend](https://github.com/mainbrella/web) and [backend](https://github.com/mainbrella/backend) are available under [GPLv3](https://github.com/mainbrella/backend/blob/main/LICENSE), free to download and run. You can host your own copy on Cloudflare's [Workers Paid plan, starting at $5 a month](https://developers.cloudflare.com/workers/platform/pricing/), instead of buying a managed voice platform such as Bland. **That $5 is the base plan. AI inference, telephone service, and usage beyond included allowances are additional.**\n\nThe current agent handles reception: questions about your business and messages you can read afterward. It has browser voice and text tests, inbound phone support, and saved transcripts. Outbound calls, live transfers, appointment booking, and CRM updates aren't implemented yet. If those are the job, there's more to build.\n\n## Give it the facts it can answer from\n\nIn [Voice](https://mainbrella.com/voice/), you set the business name, the receptionist's name, its greeting, its instructions, and a voice. For our example shop, the instructions would contain Saturday's hours, the kinds of bikes it services, and what information to collect for a callback. The screenshot below shows the actual application running locally with sample shop settings.\n\nYou can test the saved settings with a microphone or type a conversation before connecting a phone number. Each call keeps the settings it started with, so editing Saturday's hours during a call doesn't replace that caller's instructions halfway through the conversation.\n\nThe [system prompt](https://github.com/mainbrella/backend/blob/fc4b546e55c73573a1135b96baf2869442b01749/worker/lib/voice.ts) tells the receptionist to use the supplied business facts, admit when information is missing, and offer to take a message. It also explicitly says it cannot book appointments, send messages, update a CRM, or transfer a call. A model saying “you're booked” isn't a booking. Until there's a scheduling integration that can do the work and report the result, the agent shouldn't pretend otherwise.\n\n## From a ringing phone to a spoken answer\n\nA browser call goes over a WebSocket to a [Durable Object created for that call](https://github.com/mainbrella/backend/blob/fc4b546e55c73573a1135b96baf2869442b01749/worker/durable-objects/receptionist-call.ts). That's Cloudflare's application runtime with its own identity and persistent state. Each caller gets a separate conversation history. The shop's receptionist is shared configuration; the conversation belongs to the individual call.\n\nInside that conversation, Deepgram Flux transcribes incoming speech, Llama 3.3 70B generates the reply, and Deepgram Aura-1 turns the reply into audio. The call agent invokes all three through Workers AI; the arrows below follow the data through that sequence. You don't need to rent a GPU or run a separate speech server. Twilio remains the external phone carrier.\n\nThe phone route has an extra, decidedly unglamorous job. Twilio sends 8 kHz μ-law audio; the voice pipeline uses 16 kHz PCM. Our [phone bridge](https://github.com/mainbrella/backend/blob/fc4b546e55c73573a1135b96baf2869442b01749/worker/app/voice-twilio.ts) converts between them in both directions. It also forwards a playback interruption as a Twilio `clear` message, so buffered speech can stop when the caller interrupts. A nice LLM response doesn't help much if the phone keeps playing the previous one.\n\nCall transcripts go to D1, Cloudflare's SQL database, along with the call's status and timing. We don't save raw audio recordings. The temporary per-call state is scheduled for cleanup after the call ends, while the D1 transcript stays in account history. There's no transcript deletion control yet, so a private deployment needs its own retention policy.\n\nThe defaults allow three active calls per account and 100 starts in a rolling day, with a 15-minute or 60-turn limit per call. Those are application limits in the source. Raising a number is easy; qualifying the resulting workload is another job. The automated voice tests use simulated model responses and phone media, so they don't establish live call quality, latency, or large-scale capacity.\n\n## What the $5 plan buys\n\nWith your own deployment, Cloudflare runs the application and inference, your carrier connects phone calls, and you operate the service. Mainbrella doesn't charge a software license fee for that copy.\n\nThese are the published Cloudflare rates on October 15, 2026, before free allocations. Inference rates come from [Workers AI's pricing table](https://developers.cloudflare.com/workers-ai/platform/pricing/); the base subscription comes from [Workers pricing](https://developers.cloudflare.com/workers/platform/pricing/).\n\n| Item | Published rate | \n|---|---|\n| Workers Paid base plan | $5/month minimum, with included usage | \n| Flux speech recognition | $0.0077 per audio minute | \n| Llama 3.3 70B input | $0.293 per million tokens | \n| Llama 3.3 70B output | $2.253 per million tokens | \n| Aura-1 speech generation | $0.015 per 1,000 input characters | \n\nFor example, 1,000 minutes of audio sent to Flux is $7.70 at its listed rate, before allowances. That's just transcription. The assistant's replies add speech-generation charges, and each model turn includes conversation context in its input. Phone numbers and carrier minutes add their own charges. [Durable Object duration and requests](https://developers.cloudflare.com/durable-objects/platform/pricing/), database activity, storage, and any other enabled Mainbrella services also count toward your infrastructure bill.\n\n[Bland's current pricing page](https://www.bland.ai/pricing) lists its Start plan at $0.14 per minute with no platform fee, and Build at $299 a month plus $0.12 per minute. It says those rates include the language model, transcription, and speech generation, with telephony billed separately. A $5 base subscription and an inclusive AI-minute rate measure different things; there's no honest savings percentage without a workload. Self-hosting lets you pay the component costs directly and choose how much operating work to take on.\n\n## Running your own copy\n\nStart with the [backend's receptionist setup](https://github.com/mainbrella/backend#ai-receptionist) and the [web repository](https://github.com/mainbrella/web). These are the same application repositories we work in, with account, authentication, and billing code alongside voice. Setting up a private deployment takes configuration; the production Wrangler files contain our domains, bindings, and resource IDs.\n\n1. Provision your own Cloudflare resources and apply the backend migrations. Voice uses the AI binding, D1, and the SQLite-backed `RECEPTIONIST_CALL` Durable Object. Keep the account and wallet bindings required by your checkout.\n2. Configure authentication, trusted origins, and the frontend's `VITE_API_URL` for your deployment. The current voice code checks the prepaid wallet before starting calls, so configure funding in your instance or adapt that policy for private use.\n3. Set `VOICE_ENABLED=true` and`VOICE_PUBLIC_ORIGIN` to your public HTTPS API origin. Save a receptionist and test it in the browser.\n4. For phone calls, provision a Twilio number, set its account and number configuration, store `TWILIO_AUTH_TOKEN` as a secret, and map`TWILIO_AGENT_ID` to your saved receptionist. Configure the carrier rate required by voice billing. Point the number's incoming-call webhook at the URL shown in Voice, using HTTP POST.\n\nThe current phone configuration maps one number to one agent; it doesn't buy numbers for you. Incoming webhooks and media connections are checked against Twilio signatures, and the media connection also needs a short-lived token that can be used once. Keep those checks when adapting the code. Your public phone endpoint can start paid inference.\n\n## The work you're choosing to do yourself\n\n[Bland's call-center page](https://www.bland.ai/automate-your-call-center) makes its offer pretty clear: “We Build, Deploy & Manage Everything For You.” It advertises a deployment team, integrations with existing enterprise systems, and ongoing operation. It also advertises self-hosting. Owning the deployment alone isn't the difference here; Mainbrella gives you GPLv3 application source you can inspect and change yourself.\n\nIf you need a vendor to implement a complex call flow, maintain your CRM integration, and answer when something breaks, that work can be worth paying for. Mainbrella's current receptionist doesn't provide Bland's broader contact-center feature set or its enterprise assurances. The software is open source; Cloudflare's hosting and the speech models it serves have their own terms.\n\nFor the bike shop's hours and callback intake, I'd start with the smaller job. Put the business facts in the receptionist, test the questions customers actually ask, and read the messages it collects. You can run that system in your own $5/month Cloudflare plan, pay for the usage it generates, and change the code when the shop needs more. Buying a voice platform is now a choice about who does that work.", "url": "https://wpnews.pro/news/automate-your-call-center-open-source-run-on-cloudflare-infra", "canonical_source": "https://mainbrella.com/blog/automate-your-call-center/", "published_at": "2026-10-15 09:28:23+00:00", "updated_at": "2026-10-15 09:50:28.025390+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "large-language-models", "ai-infrastructure", "developer-tools"], "entities": ["Mainbrella", "Cloudflare", "Cloudflare Workers", "Deepgram Flux", "Llama 3.3 70B", "Deepgram Aura-1", "Twilio", "Cloudflare D1"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/automate-your-call-center-open-source-run-on-cloudflare-infra", "markdown": "https://wpnews.pro/news/automate-your-call-center-open-source-run-on-cloudflare-infra.md", "text": "https://wpnews.pro/news/automate-your-call-center-open-source-run-on-cloudflare-infra.txt", "jsonld": "https://wpnews.pro/news/automate-your-call-center-open-source-run-on-cloudflare-infra.jsonld"}}