Home / Blog

Outbound AI voice agents

How to Build an AI Cold Calling System With Gemini Live

By Shreyas Raj. Written from my YouTube video, about 36 minutes long.

Cold Calling AI Army: Full Outbound System for ₹2/min (Gemini Live + LiveKit + Vobiz)

Video: Cold Calling AI Army: Full Outbound System for ₹2/min (Gemini Live + LiveKit + Vobiz) on the AI with Shreyas Raj YouTube channel.

Short answer: The stack is Gemini Live for the voice and the brain, LiveKit for orchestration, Vobiz for telephony and Supabase for data. You clone a working repo, let a coding agent adapt it with a long build prompt, collect the API credentials, then deploy it on a VPS with Coolify.
What you will learn

What the system does and what it costs

The system is an outbound calling platform with a dashboard: campaigns where you upload a CSV of numbers, an editable prompt, multiple agent profiles, call logs, a CRM view and stats such as booked calls and average duration. In the video I say the call cost in India came to roughly 1.75 rupees a minute.

The pieces are a SIP trunk for telephony, Gemini Live and LiveKit. Gemini Live bundles speech to text, text to speech and the language model in one model, so the cost is a single bracket. LiveKit acts like an orchestra conductor between telephony, speech and the model, and its cost is tiny.

I also explain the catch. Cost depends on context size. A large prompt pushes the per-minute price up, and I say it can climb toward 5 rupees. The fix is to keep the prompt small and use retrieval, which fetches only the relevant part of a big document during the call.

I also show the difference between this simple build and a full client-facing platform: a done-for-you system with campaigns, inbound calls, support tickets, credits, tags and analytics. The one I build in this video is a rudimentary version of that idea.

Clone a working repo and give the agent the build prompt

I do not build from scratch. I had an earlier voice agent repo on GitHub, so I open Windsurf, create a new folder and run git clone in the terminal.

Then I paste a roughly 2000-line system prompt that lets the agent build the whole system in one shot, and tell it to reuse the components of the cloned project. Starting from a repo that already works makes everything easier. I select Claude Opus with the 1 million context option and let it go.

Telephony can also be done with Telnyx if you are in the international market. I say it gives phone numbers cheaply, but that it asks for documentation before it releases a number, so have your documents ready. In India I use Vobiz.

Collect the credentials

While the agent builds, I gather what I call the infinity stones: the API credentials.

For Gemini, open AI Studio, go to billing, add a card and a minimum balance, then create an API key. For Vobiz, buy a phone number, go to SIP trunks, create a trunk with a name and a credential list, then note the trunk ID, SIP domain, username and password. For LiveKit, go to settings, API keys, create a key and copy the environment variables.

For Supabase, create a project, then in storage create a public bucket for call recordings and generate S3 access keys. From project settings grab the anon key, the service role key and the project URL. Keep every secret in a private note, never in a public place.

Bear in mind that I pasted my keys into an AI model only to format the environment file. Treat every secret carefully, delete keys you created for a demo when you finish, and never share them publicly.

Set up the database

Once the agent finishes writing the code, it produces a schema.sql file. Copy the whole file, open the Supabase SQL editor, paste and run it. A result of success with no rows returned is what you want.

Supabase's free tier allows two active projects, which is enough here. I note that you should not pay for extra projects before you need them, because costs can climb.

Deploy on a VPS with Coolify

I do not recommend running this on your own computer, because you would need to keep it on all the time. A VPS is cheaper and cleaner. I use a KVM 2 server in the Mumbai region with Coolify as the control panel, because a plain operating system means typing commands for everything.

First I ask the agent to make the code deployable with the VPS environment variables as the single source of truth, then push it to a new GitHub repository. In Coolify I create a project, add a private repository resource through a GitHub app, choose the Dockerfile build pack and paste the environment variables in developer view. To make the env file, I give the example file and my keys to an AI model and ask it to fill in the values.

One more design choice: I told the agent to make the VPS environment variables the single source of truth, and to make sure there are no deployment errors before I push. Pre-checking the codebase this way saves time when you deploy. A GitHub app registration lets Coolify read your private repositories without restrictions.

Fix the bad gateway and make the first call

After deploying, the page showed bad gateway. I copied the logs to the agent, which suggested a port variable. I added a port environment variable, set the exposed port to 8000, redeployed and the dashboard loaded.

Then I started a single test call to my own number with the agent calling on behalf of my company. The call came in, the voice sounded human, and it even handled a request to switch language. Call logs showed it afterwards.

I did the first demonstration call from the dashboard by entering a lead name, selecting a company and an agent profile and clicking start call. A rate limit message appeared in the coding agent during the build, so I switched to a different Opus version with the 1 million context option and continued.

What to add next

From here you ask the agent for what you need: calendar booking, a recalling tool, re-engagement campaigns, WhatsApp integration. I say the same agent can run bulk calls to many leads. Test with your own number first, keep prompts small and check each part before you scale.

The demo in the video was a call to my own number first, and a second call after the deployment from the live dashboard. The agent introduced itself, offered to book a slot and handled a request to switch language. Always test on your own number before you add any lead list.

Watch the full video to see each credential screen, the deployment and the live test call.

Watch the full video See EducateXAI

Results vary and depend on your effort. Read the results disclaimer.

Questions people ask

Why Gemini Live for outbound calls?

It combines speech recognition, speech output and the language model in one live model, so there is one cost bracket and fewer moving parts. In my experience it sounds natural and handles tool calls well.

What makes the per-minute cost go up?

Context size. A large prompt costs more per minute. In the video I suggest keeping the prompt small and using retrieval to pull only the relevant part of a long document during the call.

Why deploy on a VPS?

Running it locally means keeping your computer on around the clock and it can cause problems. A small VPS with Coolify gives you a stable public address and a friendly interface for environment variables and redeploys.

What do I do about a bad gateway error?

Check the logs and make sure the app has a port environment variable and that the exposed port matches. In my build, setting port 8000 and redeploying fixed it, and the dashboard then loaded.

More from the channel

Prefer short reads? Start with the EducateXAI guides.