定制FusionPBX仪表盘:如何从xml_cdr区分个人与响铃组通话?
解决FusionPBX中区分个人通话与响铃组通话的问题
我之前在定制FusionPBX仪表盘时也碰到过这个需求,确实xml_cdr和ring_groups表没有直接的外键关联,得通过**拨号计划表(dialplans)**作为中间桥梁来建立关联。下面是具体的实现思路和SQL查询示例:
核心关联逻辑
FusionPBX的响铃组是通过拨号计划条目来触发的,所以关联路径是:xml_cdr → dialplans → ring_groups
ring_groups表存储响铃组的核心配置,每个响铃组有唯一的ring_group_uuid- 每个响铃组会对应一条
dialplans表的记录,这条记录的app字段值为ring_group,且app_data字段中会包含对应响铃组的ring_group_uuid xml_cdr表的dialplan_uuid字段可以直接关联到dialplans表的dialplan_uuid,从而把通话记录和响铃组绑定
提取响铃组通话数据
使用以下SQL可以筛选出所有关联到响铃组的呼入、呼出及未接通话:
SELECT x.uuid AS cdr_uuid, x.start_stamp AS call_time, x.direction AS call_direction, x.source AS caller_number, x.destination AS target_number, x.hangup_cause AS call_result, rg.ring_group_name AS ring_group_name, rg.ring_group_extension AS ring_group_ext FROM xml_cdr x JOIN dialplans d ON x.dialplan_uuid = d.dialplan_uuid JOIN ring_groups rg ON d.app_data LIKE '%' || rg.ring_group_uuid || '%' WHERE d.app = 'ring_group' -- 可选:添加时间范围过滤 AND x.start_stamp >= '2024-01-01 00:00:00' -- 可选:区分呼入/呼出/未接 -- AND x.direction IN ('inbound', 'outbound') -- AND (x.hangup_cause = 'NO_ANSWER' OR x.hangup_cause IS NOT NULL)
提取个人通话数据
个人通话指的是未关联到任何响铃组的通话,我们可以通过左关联排除响铃组相关记录,同时筛选出与个人分机相关的通话:
SELECT x.uuid AS cdr_uuid, x.start_stamp AS call_time, x.direction AS call_direction, x.source AS caller_number, x.destination AS target_number, x.hangup_cause AS call_result FROM xml_cdr x LEFT JOIN dialplans d ON x.dialplan_uuid = d.dialplan_uuid LEFT JOIN ring_groups rg ON d.app_data LIKE '%' || rg.ring_group_uuid || '%' WHERE -- 排除响铃组关联的通话 (d.app != 'ring_group' OR d.app IS NULL) -- 确保是个人分机的通话(可选,根据需求调整) AND (x.source IN (SELECT extension FROM extensions) OR x.destination IN (SELECT extension FROM extensions)) -- 可选:时间范围过滤 AND x.start_stamp >= '2024-01-01 00:00:00' -- 可选:区分呼入/呼出/未接 -- AND x.direction = 'inbound' -- AND x.hangup_cause = 'NO_ANSWER'
额外注意事项
- 未接通话的判断:除了
direction字段,还可以通过hangup_cause字段识别,常见未接的原因值有NO_ANSWER、USER_BUSY等 - 部分场景下,
xml_cdr的context字段也能辅助判断(比如响铃组使用专属context),但通过dialplan关联ring_groups是最可靠的方式 - 如果你的FusionPBX版本较旧,
app_data的格式可能略有不同,需要根据实际数据调整匹配规则
内容的提问来源于stack exchange,提问作者Akhilesh
相关产品推荐
相关产品推荐

