3CX呼叫数据记录(CDR)系统重大升级
继昨天发布的V20 Update 6 Alpha版本之后,本文将介绍3CX新的呼叫数据记录(CDR)系统。我们将CDR简化为单一表格:cdr_output。我们将分析旧结构,展示新设计,并重点介绍正在改变呼叫数据工作方式的技术优势。请继续阅读详细内容。
传统设置:分散的瓶颈
最初,3CX的CDR/呼叫数据分散在四个表格中:cl_calls、cl_participants、cl_party_info和cl_segments。每个表格存储不同的呼叫生命周期元素:时间戳、参与者数据和路由详情 – 这需要复杂的SQL JOIN操作才能拼凑出完整记录。这种多表设计增加了查询开销,降低了生成报告的性能。对于云规模的分析或实时报告,这种结构根本无法跟上。
新方案:cdr_output
我们将其改造为cdr_output,这是一个将所有呼叫数据整合到一个高效表格的单表解决方案。时间戳、参与者、路由和结果 – 所有内容都统一了,消除了JOIN的需求。只有录音数据需要JOIN,现在存储在单独的cdr_recordingsout表中。在3CX,我们一直能够扩展到数千用户。这种精简的架构进一步增强了我们的可扩展性,降低了复杂性,提升了查询速度,并为云就绪分析做好了准备。这是数据工程的大胆重新思考,旨在提供精确性和强大功能。
进步#1:所有数据整合在一个智能表格中
传统:多表JOIN降低性能 – 深入挖掘呼叫见解时的真正痛点。 新方案:cdr_output将所有内容打包 – 源、目标、时间戳、结果 – 都在一个紧凑的表格中。它简单明了,消除了关系型数据库的混乱,让BI分析师能够轻松跟踪呼叫流程。
为什么出色:
- **更快的查询:**摒弃多表复杂性,实现单表速度 – 查询平滑扩展,不受数据规模影响。
- **云就绪:**可直接整合到数据湖或BI工具中 – 无需额外准备。
- **分析师优势:**呼叫路径清晰快速可追踪,节省大量麻烦。
**技术优势:**cdr_id和call_history_id的索引为PostgreSQL提供闪电般快速的查找,即使处理海量数据集。将call_history_id链接保持在表内降低了SQL开销,提升了速度,减少了数据膨胀。
进步#2:每行都讲述完整故事
传统:元数据不足导致报告分析师只能猜测 – 为什么呼叫失败?上下文在哪里?谁转接给谁? 新方案:cdr_output嵌入了丰富的属性集:
- termination_reason(例如,”已取消”、”目标参与者终止”)
- termination_reason_details(例如,”全部转发”、”在其他地方完成”)
- creation_method(例如,”路由至”、”转移”)
- creation_forward_reason(例如,”轮询”、”忙”)
- continuation_reason(例如,”轮询”、”全部转发”)
影响:
- **完全清晰:**每一行都是完整的故事 – 不再需要拼凑线索。
- **更智能的见解:**支持掉线率或队列统计等KPI,无需额外工作。
- **结果明晰:**立即了解如何、为什么、何时以及谁结束了呼叫。
**技术优势:**termination_reason_details支持精确分析(想想Grafana或PowerBI中的SQL GROUP BY),而基于UUID的cdr_id现在采用GUID标准00000000-01db-87c1-1bab-07aa0000000d,使BI工具能够直接准确理解日期时间和呼叫顺序。所有信息都在那里 – 呼叫如何开始、移动和结束。
进步#3:简化呼叫方向识别
传统:参与者角色定义不清 – 源与目标需要跨表推断、猜测、嵌套操作、多重JOIN和性能损耗。 新方案:cdr_output通过一系列清晰分离的功能处理之前的SQL JOIN混乱:
- source_participant_id(用于跟踪)
- source_participant_phone_number(例如,”+1305305305″)
- destination_dn_name(例如,”Dana White”)
- 标志如source_participant_is_incoming和destination_participant_is_already_connected
源端新功能
参与者新功能
“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”
影响:
- **精确映射:**呼叫方向一目了然 – 从源到目标,完成,简化流程分析。
- **处理复杂场景:**在单一架构中无缝跟踪多个队列流程、双向中继和多层转接。
**技术优势:**布尔状态标志反映了数据仓库的维度建模,优化WHERE子句性能。参与者ID中的UUID标准确保与BI平台无缝集成,开箱即可保持呼叫分支排序。
进步#4:时间戳精度
传统:cl_calls提供基本的开始/结束时间;cl_segments分散了其余部分。 新方案:cdr_output提供三个精确的时间戳:cdr_started_at、cdr_ended_at、cdr_answered_at。
影响:
- **精确指标:**获取精确的响铃到应答时间 – 每一秒都很重要。
- **分析简单性:**单表计算取代多表聚合。
**专家见解:**UTC时间戳(+00)确保跨区域一致性 – 这对于全球云部署馈送到Snowflake或BigQuery等工具至关重要。基于GUID的cdr_id将这些时间戳与呼叫分支关联,使BI工具能够原生理解序列和持续时间。无需调整。
进步#5:为增长而建
传统:多表设置僵化 – 新功能意味着完整的架构扩展。 新方案:cdr_output是一个单一的、可扩展的表格 – 添加一列,系统就会适应。
影响:
- **面向未来的扩展:**随3CX路线图发展而增长,无关系开销。
- **运营效率:**一个表格用于索引、复制或分区 – 设计就是云原生的。
**专家见解:**processed和migrated等标志简化数据管道,实现与Apache Kafka、AWS Athena或Kinesis和Google BigQuery的无缝集成。表内的call_history_id链接加速相关呼叫查询,保持性能紧凑和数据负载精简。
下一步 – 准备云数据
我们将笨重的CDR系统转变为现代可扩展的呼叫报告表格。我们的基准测试显示查询速度提升高达10倍 – 更少的JOIN,更丰富的数据。祝您报告愉快!
开始使用Update 6 Alpha
要试用这些新功能,请升级到V20 Update 6 Alpha。