Znacząca aktualizacja systemu Call Data Records (CDR) w 3CX.
W nawiązaniu do wczorajszej premiery V20 Update 6 Alpha, w tym wpisie omawiamy nowy system Call Data Records (CDR) w 3CX, w którym uprościliśmy strukturę CDR do jednej tabeli: cdr_output. Przedstawiamy dotychczasową strukturę, nowy projekt oraz kluczowe ulepszenia techniczne, które zmieniają sposób działania danych połączeń. Czytaj dalej, aby poznać wszystkie szczegóły.
Dotychczasowa struktura: rozproszona i mało efektywna
Pierwotnie dane CDR (Call Data Records) w 3CX były rozproszone w czterech tabelach: cl_calls, cl_participants, cl_party_info oraz cl_segments. Każda z nich przechowywała inne elementy cyklu życia połączenia – znaczniki czasu, dane uczestników i szczegóły routingu. Aby uzyskać pełny obraz połączenia, konieczne było stosowanie złożonych zapytań SQL z licznymi operacjami JOIN, co znacząco zwiększało obciążenie zapytań i spowalniało generowanie raportów. W kontekście analityki na dużą skalę czy raportowania w czasie rzeczywistym ta struktura nie była wystarczająco wydajna.
Nowe podejście: cdr_output
Przebudowaliśmy system na cdr_output – jedno-tabelowe rozwiązanie, które konsoliduje wszystkie dane połączeń w jednej, zoptymalizowanej tabeli. Znaczniki czasu, uczestnicy, routing i wyniki połączeń są teraz zebrane w jednym miejscu, eliminując konieczność stosowania JOIN. Wyjątkiem są dane nagrań, które zostały przeniesione do oddzielnej tabeli cdr_recordingsout. 3CX zawsze zapewniało skalowalność na poziomie tysięcy użytkowników, a nowa, uproszczona architektura jeszcze bardziej wzmacnia nasze możliwości. Zmniejsza złożoność, przyspiesza zapytania i przygotowuje 3CX do analityki w chmurze. To odważne podejście do inżynierii danych, które zapewnia precyzję i wydajność.
Ulepszenie #1: Wszystkie dane w jednej zoptymalizowanej tabeli
Dawniej: Operacje JOIN na wielu tabelach spowalniały wydajność – prawdziwy koszmar przy analizie danych o połączeniach.
Teraz: Tabela cdr_output zawiera wszystko – źródło, cel, znaczniki czasu, wyniki – w jednej kompaktowej strukturze. Jest płaska i prosta, eliminując nadmiar relacji, dzięki czemu analitycy BI mogą bez trudu śledzić przepływy połączeń.
Dlaczego to świetne rozwiązanie:
- Szybsze zapytania: Eliminacja złożoności wielu tabel na rzecz jednej struktury przyspiesza działanie i zapewnia skalowalność, niezależnie od ilości danych.
- Gotowe do chmury: Łatwo integruje się z hurtowniami danych lub narzędziami BI – bez dodatkowego przygotowania.
- Ułatwienie dla analityków: Przejrzysta ścieżka połączeń pozwala zaoszczędzić godziny pracy.
Przewaga technologiczna: Indeksy na cdr_id oraz call_history_id przyspieszają PostgreSQL, zapewniając błyskawiczne wyszukiwanie nawet w ogromnych zbiorach danych. Utrzymanie call_history_id w tabeli zmniejsza obciążenie SQL, zwiększa szybkość i ogranicza rozrost danych.
Ulepszenie #2: Każdy wiersz opowiada historię
Dawniej: Ograniczone metadane utrudniały analitykom raportów interpretację danych – dlaczego połączenie nie powiodło się? Gdzie jest kontekst? Kto przekierował rozmowę i do kogo?
Teraz: cdr_output zawiera teraz bogaty zestaw atrybutów:
- termination_reason (np. „cancelled”, „dst_participant_terminated”)
- termination_reason_details (np. „forward_all”, „completed_elsewhere”)
- creation_method (np. „route_to”, „divert”)
- creation_forward_reason (np. „polling”, „busy”)
- continuation_reason (np. „polling”, „forward_all”)
Korzyści:
- Pełna przejrzystość: Każdy wiersz to kompletna historia – koniec z poszukiwaniem brakujących informacji.
- Lepsze analizy: Automatyczne wskaźniki KPI, takie jak współczynnik porzuceń czy statystyki kolejek, bez dodatkowej konfiguracji.
- Wyjaśnienie końcowego etapu połączenia: Natychmiastowy wgląd w to, jak, dlaczego, kiedy i kto zakończył rozmowę.
Przewaga technologiczna: termination_reason_details umożliwia precyzyjną analizę (np. SQL GROUP BY w Grafana lub Power BI), a identyfikator cdr_id oparty na UUID (w formacie 00000000-01db-87c1-1bab-07aa0000000d) pozwala narzędziom BI poprawnie sortować połączenia według daty i kolejności bez dodatkowej konfiguracji. Wszystko jest dostępne – od początku połączenia, przez jego przekierowania, aż po zakończenie.
Ulepszenie #3: Kto do kogo dzwoni? Teraz to proste
Dawniej: Role uczestników były słabo zdefiniowane – określenie źródła i celu wymagało skomplikowanych operacji na tabelach, zgadywania, zagnieżdżonych operacji, wielu złączeń SQL (JOIN) i dużego obciążenia systemu.
Teraz: cdr_output upraszcza dotychczasowe zawiłości SQL JOIN, oferując przejrzysty podział na kluczowe elementy:
- source_participant_id (śledzenie źródła połączenia)
- source_participant_phone_number (np. „+1305305305”)
- destination_dn_name (np. „Dana White”)
- Flagi, takie jak source_participant_is_incoming oraz destination_participant_is_already_connected
| Nowe funkcje źródłowe | Nowe funkcje uczestnika |
|---|---|
| “source_participant_id” | “destination_participant_id” |
| “source_entity_type” | “destination_entity_type” |
| “source_dn_number” | “destination_dn_number” |
| “source_dn_type” | “destination_dn_type” |
| “source_dn_name” | “destination_dn_name” |
| “source_participant_name” | “destination_participant_name” |
| “source_participant_phone_number” | “destination_participant_phone_number” |
| “source_participant_trunk_did” | “destination_participant_trunk_did” |
| “source_participant_is_incoming” | “destination_participant_is_incoming” |
| “source_participant_is_already_connected” | “destination_participant_is_already_connected” |
Korzyści:
- Precyzyjne mapowanie: Kierunek połączenia jest teraz jednoznaczny – od źródła do miejsca docelowego, co upraszcza analizę przepływu połączeń.
- Obsługa złożonych scenariuszy: Bezproblemowe śledzenie wielu kolejek, dwukierunkowych trunków i złożonych transferów w ramach jednej struktury danych.
Przewaga technologiczna: Flagi logiczne (Boolean) odzwierciedlają modelowanie wymiarowe w hurtowniach danych, optymalizując wydajność zapytań SQL (WHERE). Standard UUID dla identyfikatorów uczestników zapewnia pełną kompatybilność z platformami BI, zachowując prawidłową sekwencję etapów połączenia bez dodatkowej konfiguracji.
Ulepszenie #4: Dokładność znaczników czasowych
Dawniej: cl_calls oferowała jedynie podstawowe znaczniki czasu rozpoczęcia i zakończenia połączenia, a cl_segments zawierała resztę informacji w sposób rozproszony.
Teraz: Tabela cdr_output zapewnia trzy precyzyjne znaczniki czasowe: cdr_started_at, cdr_ended_at, cdr_answered_at.
Korzyści:
- Precyzyjne metryki: Dokładny pomiar czasu od dzwonienia do odebrania połączenia – każda sekunda ma znaczenie.
- Prostsza analiza: Obliczenia można wykonywać w jednej tabeli bez konieczności agregowania danych z wielu źródeł.
Ekspercka analiza: Znaczniki czasu UTC (+00) zapewniają spójność we wszystkich regionach – to kluczowe dla globalnych wdrożeń chmurowych zasilających narzędzia takie jak Snowflake czy BigQuery. Identyfikator cdr_id w formacie GUID łączy te znaczniki czasu z segmentami połączeń, co umożliwia narzędziom BI natywne rozumienie ich kolejności i czasu trwania. Nie wymaga żadnych dodatkowych modyfikacji.
Ulepszenie #5: Gotowe na rozwój
Dawniej: Konfiguracje oparte na wielu tabelach były sztywne – każda nowa funkcja prowadziła do nadmiernej rozbudowy schematu.
Teraz: cdr_output to pojedyncza, elastyczna tabela – wystarczy dodać kolumnę, a system automatycznie się dostosuje.
Korzyści:
- Skalowalność na przyszłość: Rozwija się zgodnie z roadmapą 3CX bez dodatkowego obciążenia relacyjnego.
- Efektywność operacyjna: Jedna tabela do indeksowania, replikacji i partycjonowania, zaprojektowana z myślą o chmurze.
Ekspercka analiza: Flagi, takie jak processed i migrated, usprawniają przepływ danych, umożliwiając płynną integrację z Apache Kafka, AWS Athena, Kinesis oraz Google BigQuery. Powiązanie z call_history_id w obrębie tabeli przyspiesza zapytania dotyczące powiązanych połączeń, utrzymując wysoką wydajność i minimalizując obciążenie danych.
Następny krok – Przygotowanie danych w chmurze
Przekształciliśmy przestarzały system CDR w nowoczesną, skalowalną tabelę do raportowania połączeń. Nasze testy pokazują, że zapytania są nawet 10 razy szybsze – mniej JOIN-ów, bogatsze dane. Udanych raportów!
Zacznij korzystać z Update 6 Alpha
Aby wypróbować te nowe funkcje, zaktualizuj do wersji V20 Update 6 Alpha.
Dołącz do dyskusji na temat V20 na naszych dedykowanych forach dla Partnerów lub Klientów. Śledź nas na X i LinkedIn, aby być na bieżąco z nowościami.



