Back to page

Persistent Session Event Chunks

Raw Markdown & AI/RAG Chunks
Raw Markdown Source 2658 chars
# Persistent Session Event Chunks

To capture real-time streaming updates without losing data during network fluctuations, the application architecture routes volatile session communications into highly optimized database buffers. **Asterisk 2** stores raw Telephony web messages inside temporary `SessionEvents` tables before running async parsing actions.

---

## Asynchronous Ingestion & Processing Schema

The chart below details how streaming event strings write to staging tables prior to final ledger serialization:

```mermaid
graph LR
    %% Ingress Streaming
    subgraph LiveBus["ARI WebSocket Layer"]
        StreamIn["Raw JSON Telephony Payload"]
    end

    %% Buffer Table
    subgraph StagingTable["TelephonyDbContext Ledger"]
        TabEvent[("SessionEvents Table<br/>(PK: EventId, Payload: JSON String)")]
    end

    %% Background Processing
    subgraph AsyncWorker["Background Parsing Engine"]
        EngineWorker["SessionEventProcessor.cs<br/>(Reads Staging Table Rows)"]
    end

    %% Final Target Ledgers
    subgraph TargetStorage["Long-Term Master Datastores"]
        TabCdr[("Finalized Call Ledgers<br/>(AstDbContext / AppDbContext)")]
    end

    %% Flows
    StreamIn ==>|"High-Speed Staging Write"| TabEvent
    TabEvent ==>|"Polled Bulk Read"| EngineWorker
    EngineWorker ==>|"Parse & Map Attributes"| TabCdr
    EngineWorker -.->|"Purge Processed Rows"| TabEvent

    %% Polished Palette
    classDef busToken fill:#0f172a,stroke:#38bdf8,stroke-width:2px,color:#fff,rx:6px,ry:6px;
    classDef tabToken fill:#1e293b,stroke:#a855f7,stroke-width:2px,color:#fff,rx:6px,ry:6px;
    classDef workerToken fill:#312e81,stroke:#ec4899,stroke-width:2px,color:#fff,rx:6px,ry:6px;
    classDef targetToken fill:#065f46,stroke:#10b981,stroke-width:2px,color:#fff,rx:6px,ry:6px;

    class LiveBus,StreamIn busToken;
    class StagingTable,TabEvent tabToken;
    class AsyncWorker,EngineWorker workerToken;
    class TargetStorage,TabCdr targetToken;
```

---

## Buffer Schema Field Model

### 1. `SessionEvent` Staging Class
- **`EventId`** (`long`): High-range primary automatic auto-increment integer ID.
- **`SessionId`** (`string`): Distributed tracing string linking the event to global application trace pipelines.
- **`EventType`** (`string`): Event class indicator string (e.g., `ChannelCreated`, `DtmfReceived`, `RecordingFinished`).
- **`Payload`** (`string`): Unrestricted storage text columns capturing complete, unparsed original JSON event payloads directly from telecommunication engines.
- **`CreatedAt`** (`DateTime`): High-precision UTC generation timestamp recording true packet network ingestion timelines.
AI Chunks (RAG) 3 chunks
Chunk #1 Persistent Session Event Chunks
# Persistent Session Event Chunks

To capture real-time streaming updates without losing data during network fluctuations, the application architecture routes volatile session communications into highly optimized database buffers. **Asterisk 2** stores raw Telephony web messages inside temporary `SessionEvents` tables before running async parsing actions.

---
Chunk #2 Asynchronous Ingestion & Processing Schema
## Asynchronous Ingestion & Processing Schema

The chart below details how streaming event strings write to staging tables prior to final ledger serialization:

```mermaid
graph LR
    %% Ingress Streaming
    subgraph LiveBus["ARI WebSocket Layer"]
        StreamIn["Raw JSON Telephony Payload"]
    end

    %% Buffer Table
    subgraph StagingTable["TelephonyDbContext Ledger"]
        TabEvent[("SessionEvents Table<br/>(PK: EventId, Payload: JSON String)")]
    end

    %% Background Processing
    subgraph AsyncWorker["Background Parsing Engine"]
        EngineWorker["SessionEventProcessor.cs<br/>(Reads Staging Table Rows)"]
    end

    %% Final Target Ledgers
    subgraph TargetStorage["Long-Term Master Datastores"]
        TabCdr[("Finalized Call Ledgers<br/>(AstDbContext / AppDbContext)")]
    end

    %% Flows
    StreamIn ==>|"High-Speed Staging Write"| TabEvent
    TabEvent ==>|"Polled Bulk Read"| EngineWorker
    EngineWorker ==>|"Parse & Map Attributes"| TabCdr
    EngineWorker -.->|"Purge Processed Rows"| TabEvent

    %% Polished Palette
    classDef busToken fill:#0f172a,stroke:#38bdf8,stroke-width:2px,color:#fff,rx:6px,ry:6px;
    classDef tabToken fill:#1e293b,stroke:#a855f7,stroke-width:2px,color:#fff,rx:6px,ry:6px;
    classDef workerToken fill:#312e81,stroke:#ec4899,stroke-width:2px,color:#fff,rx:6px,ry:6px;
    classDef targetToken fill:#065f46,stroke:#10b981,stroke-width:2px,color:#fff,rx:6px,ry:6px;

    class LiveBus,StreamIn busToken;
    class StagingTable,TabEvent tabToken;
    class AsyncWorker,EngineWorker workerToken;
    class TargetStorage,TabCdr targetToken;
```

---
Chunk #3 Buffer Schema Field Model
## Buffer Schema Field Model

### 1. `SessionEvent` Staging Class
- **`EventId`** (`long`): High-range primary automatic auto-increment integer ID.
- **`SessionId`** (`string`): Distributed tracing string linking the event to global application trace pipelines.
- **`EventType`** (`string`): Event class indicator string (e.g., `ChannelCreated`, `DtmfReceived`, `RecordingFinished`).
- **`Payload`** (`string`): Unrestricted storage text columns capturing complete, unparsed original JSON event payloads directly from telecommunication engines.
- **`CreatedAt`** (`DateTime`): High-precision UTC generation timestamp recording true packet network ingestion timelines.