← all projects
Mofid Securitiesdistributed systemsVoIP / SIPapplied AI

Smart Outbound Call Service Automated, Interactive Outbound Voice Platform

Thousands of customer calls, personalised and adaptive, with no agent on the line.

My roleBuilt the controller service; designed the inter-service protocol
CompanyMofid Securities, Iran's largest brokerage
DomainCustomer communications
ScaleHundreds of outbound calls per hour, on demand

01Overview

Mofid regularly needs to deliver important reminders and account updates to large numbers of customers, work that previously required call-centre agents to dial thousands of people by hand. The Smart Outbound Call Service automates this entirely: it places an outbound call to a target customer, runs a defined interactive call flow, plays personalised audio, and adapts to what the customer says, delivering the information without an agent on the line. It removed a large, repetitive manual workload and saved tens of hours of agent call time.

02Architecture

The system is split into two services with a deliberately clean separation of concerns. A stateless Go service registers with the SIP server and handles the live media, sending and receiving audio over RTP. A stateful FastAPI controller is the brain: it holds the call flows, the customer list, and each call's progress, and drives the Go service over a WebSocket action protocol (initiate call, play audio, listen, end call).

Because all state lives in the controller, the media service stays simple and disposable. The controller also owns the intelligence: TTS turns each message into speech, ASR transcribes the customer's reply, and an LLM interprets that reply to choose the next branch in the flow.

Controller (FastAPI)stateful — call flows,customers, call progressorchestrates every call AI layer TTS ASR LLM WebSocket initiate · playlisten · end Go media servicestateless — SIP + RTP audio SIP/RTP SIP servertelephony Customerphone
Figure 1. Stateful FastAPI controller orchestrates a stateless Go media service over a WebSocket protocol; AI services drive the conversation.

03A single call, step by step

continue the flow (next prompt) 1 · Initiatecontroller → Go 2 · Connectdial via SIP,customer answers 3 · SpeakTTS → playmessage 4 · Listencapture reply→ ASR 5 · DecideLLM + flow →next branch / end …or end the call
Figure 2. The interactive loop: the controller speaks, listens, interprets the reply with ASR + LLM, and branches the flow accordingly.

04My contributions

Design highlight. Splitting the system into a stateless real-time media layer (Go) and a stateful orchestration layer (FastAPI), decoupled by a small WebSocket action protocol, kept the hard real-time code simple while all conversational logic and state stayed in one testable place.

05Scale & technology

Used on demand for campaigns, the service handles hundreds of outbound calls per hour.

Go (SIP + RTP)Python · FastAPIWebSocketsSIPRTPTTSASRLLMs

06Impact

Architecture described at a conceptual level; internal identifiers and credentials are intentionally omitted.