# nitishkumarkonar/calling_agent architecture

> Architecture diagram of the GitHub repository nitishkumarkonar/calling_agent, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nitishkumarkonar/calling_agent
- Repository: https://github.com/nitishkumarkonar/calling_agent

## Overview

Calling Suite is a browser-based platform with two independent campaign workflows: Plivo-powered IVR calling (including inbound routing and email blasts) and Bolna-powered AI conversations. Users create campaigns and manage contacts; calls produce outcomes, leads, callbacks, logs, and analytics. The README documents the gateway and platform capabilities; sampled controllers show campaign dispatch and webhook reconciliation. Some service-to-provider and persistence wiring is documented but not directly sampled, so those links are limited to documented relationships.

Main entry points: [`ai-system/ai_calling_agent/backend/src/Persistence/AppDbContext.cs`](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Persistence/AppDbContext.cs) (AI database), [`gateway/Program.cs`](https://github.com/nitishkumarkonar/calling_agent/blob/main/gateway/Program.cs) (Web gateway), [`ivr-system/calling_agent/backend/src/Persistence/AppDbContext.cs`](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Persistence/AppDbContext.cs) (IVR database), [`ivr-system/calling_agent/backend/src/Application/Services/CallingService.cs`](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Application/Services/CallingService.cs) (Call orchestration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gateway["Shared gateway"]
  node_gateway_app["Web gateway<br/>[Program.cs]"]
end

subgraph group_ivr["IVR system"]
  node_ivr_ui["IVR web app<br/>[App.tsx]"]
  node_ivr_api["IVR API<br/>[Program.cs]"]
  node_ivr_campaigns["Campaign management"]
  node_ivr_calling["Call orchestration<br/>[CallingService.cs]"]
  node_ivr_webhooks["Telephony callbacks<br/>[PlivoController.cs]"]
  node_ivr_email["Email blasts"]
  node_plivo["Plivo telephony"]
end

subgraph group_ai["AI system"]
  node_ai_ui["AI web app<br/>[App.tsx]"]
  node_ai_api["AI API<br/>[Program.cs]"]
  node_ai_campaigns["Campaign management"]
  node_ai_calling["Call orchestration<br/>[CallingService.cs]"]
  node_ai_webhook["Outcome webhook"]
  node_bolna["Bolna voice agent"]
end

subgraph group_state["Platform state"]
  node_leads[("Leads and contacts<br/>[Lead.cs]")]
  node_callbacks[("Callback records<br/>[Callback.cs]")]
  node_call_logs[("Call logs<br/>[CallLog.cs]")]
  node_analytics["Analytics"]
  node_ivr_db[("IVR database<br/>[AppDbContext.cs]")]
  node_ai_db[("AI database<br/>[AppDbContext.cs]")]
end

node_operator(("Campaign operator"))
node_smtp["SMTP email"]

node_operator -->|"opens"| node_gateway_app
node_gateway_app -->|"serves"| node_ivr_ui
node_gateway_app -->|"serves"| node_ai_ui
node_gateway_app -->|"proxies API"| node_ivr_api
node_gateway_app -->|"proxies API"| node_ai_api
node_ivr_ui -->|"API requests"| node_ivr_api
node_ivr_api -->|"routes"| node_ivr_campaigns
node_ivr_campaigns -->|"dispatches calls"| node_ivr_calling
node_ivr_calling -.->|"places calls"| node_plivo
node_plivo -.->|"sends events"| node_ivr_webhooks
node_ivr_webhooks -->|"reports outcomes"| node_ivr_calling
node_ivr_email -.->|"sends blasts"| node_smtp
node_ivr_campaigns -->|"stores campaigns"| node_ivr_db
node_ivr_calling -->|"records calls"| node_ivr_db
node_ai_ui -->|"API requests"| node_ai_api
node_ai_api -->|"routes"| node_ai_campaigns
node_ai_campaigns -->|"enqueues calls"| node_ai_calling
node_ai_calling -.->|"places calls"| node_bolna
node_bolna -.->|"sends outcomes"| node_ai_webhook
node_ai_webhook -->|"reconciles outcomes"| node_ai_calling
node_ai_campaigns -->|"stores campaigns"| node_ai_db
node_ai_calling -->|"records calls"| node_ai_db
node_ai_db -->|"provides call data"| node_analytics
node_ivr_db -->|"stores lead data"| node_leads
node_ai_db -->|"stores lead data"| node_leads
node_ai_db -->|"stores callbacks"| node_callbacks
node_ivr_db -->|"stores callbacks"| node_callbacks
node_ai_db -->|"stores call logs"| node_call_logs
node_ivr_db -->|"stores call logs"| node_call_logs

click node_gateway_app "https://github.com/nitishkumarkonar/calling_agent/blob/main/gateway/Program.cs"
click node_ivr_ui "https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/frontend/src/App.tsx"
click node_ivr_api "https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/API/Program.cs"
click node_ivr_campaigns "https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/API/Controllers/CampaignController.cs"
click node_ivr_calling "https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Application/Services/CallingService.cs"
click node_ivr_webhooks "https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/API/Controllers/PlivoController.cs"
click node_ivr_email "https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Application/Services/BulkEmailService.cs"
click node_ai_ui "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/frontend/src/App.tsx"
click node_ai_api "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/API/Program.cs"
click node_ai_campaigns "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/API/Controllers/CampaignController.cs"
click node_ai_calling "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Application/Services/CallingService.cs"
click node_ai_webhook "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/API/Controllers/BolnaWebhookController.cs"
click node_leads "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Domain/Entities/Lead.cs"
click node_callbacks "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Domain/Entities/Callback.cs"
click node_call_logs "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Domain/Entities/CallLog.cs"
click node_analytics "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Application/Services/AnalyticsService.cs"
click node_ivr_db "https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Persistence/AppDbContext.cs"
click node_ai_db "https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Persistence/AppDbContext.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_gateway_app toneBlue
class node_ivr_ui,node_ivr_api,node_ivr_campaigns,node_ivr_calling,node_ivr_webhooks,node_ivr_email,node_plivo toneAmber
class node_ai_ui,node_ai_api,node_ai_campaigns,node_ai_calling,node_ai_webhook,node_bolna toneMint
class node_leads,node_callbacks,node_call_logs,node_analytics,node_ivr_db,node_ai_db toneRose
class node_operator,node_smtp toneIndigo
```

## Components

### Shared gateway

- [Web gateway](https://github.com/nitishkumarkonar/calling_agent/blob/main/gateway/Program.cs): `gateway/Program.cs`

### IVR system

- [IVR web app](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/frontend/src/App.tsx): `ivr-system/calling_agent/frontend/src/App.tsx`
- [IVR API](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/API/Program.cs): `ivr-system/calling_agent/backend/src/API/Program.cs`
- [Campaign management](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/API/Controllers/CampaignController.cs): `ivr-system/calling_agent/backend/src/API/Controllers/CampaignController.cs`
- [Call orchestration](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Application/Services/CallingService.cs): `ivr-system/calling_agent/backend/src/Application/Services/CallingService.cs`
- [Telephony callbacks](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/API/Controllers/PlivoController.cs): `ivr-system/calling_agent/backend/src/API/Controllers/PlivoController.cs`
- [Email blasts](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Application/Services/BulkEmailService.cs): `ivr-system/calling_agent/backend/src/Application/Services/BulkEmailService.cs`
- **Plivo telephony**

### AI system

- [AI web app](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/frontend/src/App.tsx): `ai-system/ai_calling_agent/frontend/src/App.tsx`
- [AI API](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/API/Program.cs): `ai-system/ai_calling_agent/backend/src/API/Program.cs`
- [Campaign management](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/API/Controllers/CampaignController.cs): `ai-system/ai_calling_agent/backend/src/API/Controllers/CampaignController.cs`
- [Call orchestration](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Application/Services/CallingService.cs): `ai-system/ai_calling_agent/backend/src/Application/Services/CallingService.cs`
- [Outcome webhook](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/API/Controllers/BolnaWebhookController.cs): `ai-system/ai_calling_agent/backend/src/API/Controllers/BolnaWebhookController.cs`
- **Bolna voice agent**

### Platform state

- [Leads and contacts](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Domain/Entities/Lead.cs): `ai-system/ai_calling_agent/backend/src/Domain/Entities/Lead.cs`
- [Callback records](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Domain/Entities/Callback.cs): `ai-system/ai_calling_agent/backend/src/Domain/Entities/Callback.cs`
- [Call logs](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Domain/Entities/CallLog.cs): `ai-system/ai_calling_agent/backend/src/Domain/Entities/CallLog.cs`
- [Analytics](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Application/Services/AnalyticsService.cs): `ai-system/ai_calling_agent/backend/src/Application/Services/AnalyticsService.cs`
- [IVR database](https://github.com/nitishkumarkonar/calling_agent/blob/main/ivr-system/calling_agent/backend/src/Persistence/AppDbContext.cs): `ivr-system/calling_agent/backend/src/Persistence/AppDbContext.cs`
- [AI database](https://github.com/nitishkumarkonar/calling_agent/blob/main/ai-system/ai_calling_agent/backend/src/Persistence/AppDbContext.cs): `ai-system/ai_calling_agent/backend/src/Persistence/AppDbContext.cs`

### Other components

- **Campaign operator**
- **SMTP email**

## Connections

- Campaign operator → Web gateway: opens
- Web gateway → IVR web app: serves
- Web gateway → AI web app: serves
- Web gateway → IVR API: proxies API
- Web gateway → AI API: proxies API
- IVR web app → IVR API: API requests
- IVR API → Campaign management: routes
- Campaign management → Call orchestration: dispatches calls
- Call orchestration → Plivo telephony: places calls
- Plivo telephony → Telephony callbacks: sends events
- Telephony callbacks → Call orchestration: reports outcomes
- Email blasts → SMTP email: sends blasts
- Campaign management → IVR database: stores campaigns
- Call orchestration → IVR database: records calls
- AI web app → AI API: API requests
- AI API → Campaign management: routes
- Campaign management → Call orchestration: enqueues calls
- Call orchestration → Bolna voice agent: places calls
- Bolna voice agent → Outcome webhook: sends outcomes
- Outcome webhook → Call orchestration: reconciles outcomes
- Campaign management → AI database: stores campaigns
- Call orchestration → AI database: records calls
- AI database → Analytics: provides call data
- IVR database → Leads and contacts: stores lead data
- AI database → Leads and contacts: stores lead data
- AI database → Callback records: stores callbacks
- IVR database → Callback records: stores callbacks
- AI database → Call logs: stores call logs
- IVR database → Call logs: stores call logs
