You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

定制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:41:17