A FreeSWITCH-powered VOIP system that connects agents with leads over SIP trunks, tracks every call's state in real time, records and transcribes each call, and can place calls with ElevenLabs AI voice agents, used by marketing agencies to auto-engage interested leads.
Visit Skylink ↗By the CapregSoft Engineering Team ·
from lead submission to the phone ringing
state tracking on every call leg
of calls recorded, transcribed & summarized
agents on the same dialing infrastructure
leads from Facebook, Google & TikTok
Figures shown are engineering targets and typical outcomes for work of this type, not audited per-client results. We'll share verified numbers for your specific context on a discovery call.
How CapregSoft approached Skylink — the short version.
Marketing agencies were generating leads across Facebook, Google, and TikTok faster than humans could call them back, and speed-to-lead is everything. Leads went cold sitting in spreadsheets waiting for a manual dial.
Managers had no live view of the floor. Call status and agent activity came from after-the-fact reports, so problems were spotted long after they could be fixed.
Calls weren't being captured or analyzed, so there was no recording, no transcript, and no way to learn what was working across thousands of conversations.
Built the telephony core on FreeSWITCH with SIP trunking, so the platform places and receives real calls and controls each leg of the call programmatically.
Tracked the real-time state of every call (ringing, answered, in-progress, completed, failed) by consuming FreeSWITCH events and fanning live updates to the dashboard over WebSockets.
Recorded every call, then ran an automated pipeline to generate a transcript, summary, and analysis, turning raw audio into searchable, actionable data.
Integrated business accounts for Facebook, Google, and TikTok to auto-fetch leads via an ETL pipeline, so a new lead is dialed automatically and the phone rings within a couple of seconds of form submission, instead of sitting in a spreadsheet.
Added ElevenLabs voice AI agents that can place calls autonomously, hold a natural conversation with a lead, and produce the same recording, transcript, and analysis as a human call.
Engineered the backend in Go with NATS and NSQ for messaging, so call events, recordings, and transcription jobs move through the system asynchronously and scale independently under campaign bursts.
Skylink isn't a softphone, it's an outbound engagement engine. The core is FreeSWITCH, an open-source softswitch, connected to carriers over SIP trunks so the platform can originate and receive real PSTN calls at volume. Building on FreeSWITCH (rather than a closed CPaaS) means we control every leg of the call programmatically: who gets dialed, when, how the call is bridged to an agent, and what happens on no-answer or hangup.
Go drives the orchestration. Each campaign, each dialing strategy, and each live call is coordinated by the Go backend, which speaks to FreeSWITCH and reacts to its event stream. Go's concurrency model is the right fit here: a dialing platform is thousands of independent, simultaneous call lifecycles, and goroutines model that cheaply.
Every call moves through states (ringing, answered, bridged, completed, failed) and a sales floor is only manageable if you can see those transitions as they happen. FreeSWITCH emits events for each transition; we consume them, normalize them, and publish them onto a message bus so any part of the system can react.
We used NATS for low-latency, real-time event fan-out (live call state to the dashboard over WebSockets) and NSQ for durable, at-least-once job queues (recording processing, transcription, lead ingestion). Splitting 'fast ephemeral signaling' from 'durable work that must not be lost' is a deliberate architectural choice, it keeps the live view instant while guaranteeing no recording or lead is ever dropped, even under a campaign spike.
A call that isn't captured is a lesson lost. Skylink records every conversation, and each recording kicks off an asynchronous pipeline: the audio is transcribed to text, then summarized, then analyzed for the signals an agency cares about, interest level, objections, next steps. Because this runs through NSQ-backed workers, transcription load never slows the live dialing path.
The output is an ELT pattern in practice: raw call audio and events are captured first and loaded into storage, then transformed downstream into transcripts, summaries, and structured analytics. That ordering matters, you keep the raw source of truth and can re-run improved transcription or analysis over historical calls later without re-dialing anyone.
Speed-to-lead wins deals, so leads can't sit in a CSV. Skylink integrates the business accounts of the major ad platforms, Facebook, Google, and TikTok, and pulls new leads automatically through an ETL pipeline: extract from each platform's API, transform into a common lead schema, and load into the dialing queue. The payoff is immediacy: the moment someone submits a form, the system places the call and their phone rings within a couple of seconds, while their interest is still fresh, instead of hours or days later when the intent has gone cold.
The newest layer is autonomous calling. By integrating ElevenLabs, Skylink can have an AI voice agent place a call, hold a natural-sounding conversation with a lead, and qualify or engage them, then produce the same recording, transcript, and analysis a human call would. Because the AI agent rides the same FreeSWITCH and event infrastructure as human agents, an agency can blend automated and human outreach without running two separate systems.
This was a High-Performance Backends engagement.
FreeSWITCH plus SIP trunking gives full programmatic control over every call leg (dialing logic, bridging, call-state handling, recording) and typically lower per-minute cost at volume. A hosted CPaaS is faster to start but limits how deeply you can control call flow and how the system scales. For a high-volume outbound platform, the control and economics of FreeSWITCH win.
FreeSWITCH emits an event for every call transition. The Go backend consumes those events and publishes them onto NATS for instant fan-out to the dashboard over WebSockets, so supervisors see ringing, answered, and completed states as they happen rather than in an after-the-fact report.
Each recording enqueues a job on NSQ-backed workers that transcribe the audio, generate a summary, and run analysis for interest and next steps. Running this asynchronously means transcription never slows live dialing, and the raw audio is kept so improved analysis can be re-run over historical calls.
Skylink integrates ElevenLabs so an AI agent can place a call over the same FreeSWITCH/SIP infrastructure, hold a natural conversation with a lead, and produce a recording, transcript, and analysis just like a human call. Agencies can blend AI and human outreach in one system.
They serve different needs. NATS handles low-latency, real-time signaling (live call state to the dashboard) where speed matters most. NSQ provides durable, at-least-once queues for work that must never be lost (recording processing, transcription, lead ingestion). Using each for what it's best at keeps the live view instant and the important work guaranteed.