FreeSWITCH mod_callcenter 官方手册

发布时间:2026/7/1 3:56:17
FreeSWITCH mod_callcenter 官方手册 mod_callcenter概念与加载mod_callcenter默认情况下是不加载的。要启用它请在autoload_configs/modules.conf.xml中取消注释相关行loadmodulemod_callcenter/该模块引入了三种对象类型队列 (Queue)用于存放呼入电话的命名保持池。每个队列都有自己的路由策略、保持音乐和等待时间限制。坐席 (Agent)可以接收队列来电的命名终端人或设备。坐席具有工作状态 (Status)如Available 可用, On Break 休息, Logged Out 登出, Available (On Demand) 按需可用以及由模块管理的当前运行状态 (State)。层级 (Tier)将一个坐席分配给一个队列的映射关系包含级别 (level即优先级组) 和位置 (position即该级别内的顺序)。默认情况下状态数据存储在 SQLite 数据库中。也可以配置 ODBC 数据源以实现共享访问。XML 配置文件 (callcenter.conf.xml) 定义了队列、坐席和层级这些配置会在启动时同步到数据库中。重要提示每次重启时XML 中的坐席和层级配置都会重新应用到数据库中。如果 XML 中提供了坐席的级别 (level) 和位置 (position)它们将被重置为配置的值。这种行为不适合多个 FreeSWITCH 共享数据库的部署场景。呼叫中心队列配置 (Queue Configuration)队列在callcenter.conf.xml的queues元素下定义。queuesqueuenamesupportdefaultparamnamestrategyvaluelongest-idle-agent/paramnamemoh-soundvalue$${hold_music}/paramnametime-base-scorevaluesystem/paramnamemax-wait-timevalue0/paramnamemax-wait-time-with-no-agentvalue0/paramnamemax-wait-time-with-no-agent-time-reachedvalue5/paramnametier-rules-applyvaluefalse/paramnametier-rule-wait-secondvalue300/paramnametier-rule-wait-multiply-levelvaluetrue/paramnametier-rule-no-agent-no-waitvaluefalse/paramnamediscard-abandoned-aftervalue60/paramnameabandoned-resume-allowedvaluefalse//queue/queuesqueue上的name属性是必填项。常规格式为namecontext例如supportdefault与坐席名称的格式相匹配。队列参数参考参数用途可选值默认值strategy坐席选择算法。见下方表格longest-idle-agentmoh-sound播放给等待中呼叫者的保持音乐。文件路径或流无announce-sound呼叫者等待期间定期播放的提示音文件。文件路径无announce-frequency播放提示音的间隔秒数。0 表示禁用。整数 0-864000record-template录制桥接呼叫的路径模板。支持通道变量和 strftime 时间标记。字符串无time-base-score计算呼叫者等待时间得分用于选择坐席的基准点。queue从呼叫者进入队列时开始算system从呼叫发起时开始算。queue, systemqueuemax-wait-time呼叫者被放弃挂断/跳出前的最大等待秒数。0 表示无限制。整数 0-864000max-wait-time-with-no-agent当没有坐席登录时呼叫者的最大等待秒数。0 表示无限制。整数 0-864000max-wait-time-with-no-agent-time-reached达到上述无坐席等待时间后的宽限期秒之后才会将呼叫者移出队列。整数 0-864005tier-rules-apply启用基于层级的等待时间规则见下文。true, falsefalsetier-rule-wait-second呼叫者晋升到下一个层级级别之前必须等待的秒数。整数 0-864000tier-rule-wait-multiply-level若为 true到达第 N 级的等待时间为N * 等待秒数。若为 false经过一次等待间隔后所有更高级别立即开放。true, falsefalsetier-rule-no-agent-no-wait若为 true当当前层级没有可用坐席时呼叫者跳过该层级的等待时间。true, falsetruediscard-abandoned-after放弃呼叫的记录从数据库中删除的延迟秒数阻止其恢复排队。0 表示无限期保留。整数 0-8640060abandoned-resume-allowed若为 true挂断并在上述秒数内再次呼入的呼叫者将恢复其在队列中的原位置。true, falsefalseagent-no-answer-status分配给未在振铃超时时间内接听的坐席的状态。Available, Available (On Demand), On Break, Logged OutOn Breakring-progressively-delay针对渐进式振铃策略向振铃组依次添加下一个坐席的间隔秒数。整数 0-8640010skip-agents-with-external-calls若为 true已经处于呼叫中心外部通话中的坐席将不会收到队列来电。true, falsetrueStrategy策略值值行为longest-idle-agent空闲时间最长的坐席接听来电。round-robin坐席轮流接收呼叫从上一个呼叫结束的位置继续。top-down始终从头开始按层级顺序尝试优先级最高且可用的坐席始终优先接听。agent-with-least-talk-time历史总通话时间最短的坐席接听来电。agent-with-fewest-calls已接听呼叫次数最少的坐席接听来电。sequentially-by-agent-order依次按层级级别和位置然后按最后一次分配呼叫的时间戳来选择坐席。ring-all符合条件层级中的所有可用坐席同时振铃。ring-progressively坐席按照配置的延迟间隔逐一振铃不断累加直到有人接听。坐席配置 (Agent Configuration)坐席在callcenter.conf.xml的agents元素下定义。XML 坐席配置会在重启时应用到数据库中任何通过 API 在运行期间所做的更改都会被覆盖。agentsagentname1000defaulttypecallbackcontact[leg_timeout10]user/1000defaultstatusAvailablemax-no-answer3wrap-up-time10reject-delay-time10busy-delay-time60//agentsname属性是必填项通常采用extensioncontext的格式。坐席参数参考参数用途可选值默认值type模块联系坐席的方式。Callback发起外呼至 contactuuid-standby桥接至 contact 中指定的现有通道 UUID。Callback, uuid-standby必填contact坐席分支的发起字符串 (Callback 类型) 或通道 UUID (uuid-standby 类型)。方括号中可以设置通道变量。字符串必填status加载 XML 时应用于坐席的初始工作状态。该状态控制坐席是否会被分配呼叫。Available, Available (On Demand), On Break, Logged OutLogged Outmax-no-answer触发坐席状态变更为无应答状态之前的连续未接听次数。0 表示禁用限制。整数 00wrap-up-time呼叫结束后坐席处于不可用状态整理工作的秒数之后才会恢复为 Available。整数 0 (秒)0reject-delay-time拒接了上一个呼叫的坐席在被分配下一个呼叫前需要等待的秒数。整数 0 (秒)0busy-delay-time线路返回忙音的坐席在被分配下一个呼叫前需要等待的秒数。整数 0 (秒)0no-answer-delay-time未接听的坐席在被分配下一个呼叫前需要等待的秒数。整数 0 (秒)0ready_timeUnix纪元时间戳在此之前不会向该坐席分配呼叫。由模块在无应答事件后自动设置也可通过 API 手动设置。整数 (纪元秒)0 (立即生效)Status状态值状态行为Available(可用)正常向坐席分配呼叫。Available (On Demand)(按需可用)仅在明确请求时才向坐席分配呼叫用于配合某些外部系统。On Break(休息)坐席已登录但拒绝接听呼叫。Logged Out(登出)坐席拒绝接听呼叫且不计入可用状态。层级分配 (Tier Assignment)层级 (Tiers) 将坐席与队列关联起来并定义坐席在该队列中的优先级。级别 (level) 数字较小的坐席会优先于数字较大的坐席被分配呼叫。在同一级别内由位置 (position) 决定分配顺序。层级在callcenter.conf.xml的tiers元素下定义。tierstieragent1000defaultqueuesupportdefaultlevel1position1/tieragent1001defaultqueuesupportdefaultlevel2position1//tiers如果省略 level 或 position默认为 1。重启应用层级配置时提供的值会覆盖运行期间对级别和位置的任何修改。同时省略这两个属性将保留数据库中的现有值。层级参数参考参数用途可选值默认值agent坐席名称与agents中的条目匹配。字符串必填queue队列名称与queues中的条目匹配。字符串必填level优先级组。在尝试更大的数字之前会先耗尽较小的数字受层级规则影响。整数 11position当启用使用位置的策略如 top-down, sequentially-by-agent-order时决定同级别内的顺序。整数 11层级规则与升级机制 (Escalation)当tier-rules-apply为 false默认值时呼叫会同时提供给所有层级没有延迟。当其为 true 时呼叫者从级别 1 开始并且只有在等待指定的秒数之后如果倍增规则为 true则乘以层级数才会晋升到下一个级别。如果当前层级没有坐席且tier-rule-no-agent-no-wait为 true呼叫者将立即晋升。callcenter 拨号计划应用程序callcenter拨号计划应用程序 (Dialplan Application) 会将入站呼叫放入指定的队列中。呼叫将一直等待直到找到可用的坐席并且坐席分支被桥接。语法callcenter queue_name示例extensionnameinbound-supportconditionfielddestination_numberexpression^5000$actionapplicationanswer/actionapplicationcallcenterdatasupportdefault//condition/extension在调用callcenter之前必须先应答 (answer) 呼叫。该应用程序会一直阻塞直到呼叫桥接到坐席或呼叫者放弃。队列等待时间限制max-wait-time 等会导致该应用程序返回结束此时拨号计划可以将呼叫路由到其他地方。一个配套的应用程序callcenter_track会将外部发起的呼叫注册为呼叫中心成员以进行数据跟踪但不会将其放入队列中。这支持了呼叫在mod_callcenter之外被桥接但仍需反映在坐席状态中的场景。mod_callcenter 的全局设置callcenter.conf.xml中的settings块用于配置模块级选项。settings!--param nameodbc-dsn valuedsn:user:pass/--!--param namedbname value/dev/shm/callcenter.db/--!--param namecc-instance-id valuesingle_box/--/settings参数用途可选值默认值odbc-dsn外部数据库存储的 ODBC 连接字符串。设置后模块使用 ODBC 而不是内部的 SQLite。格式dsn:user:pass。字符串无 (使用 SQLite)dbnameSQLite 数据库文件的路径或名称。文件路径callcentercc-instance-id实例标识符用于命名空间数据库行。在多个 FreeSWITCH 实例共享数据库的部署中非常重要。字符串single_boxdebug调试详细程度。值越高记录的细节越多。整数0reserve-agents若为 true在提供呼叫之前会保留坐席状态设为 Reserved防止同一个坐席同时被分配给两个呼叫者。true, falsefalsetruncate-tiers-on-load若为 true在模块加载且应用 XML 层级之前会清空 tiers 表。true, falsefalsetruncate-agents-on-load若为 true在模块加载且应用 XML 坐席之前会清空 agents 表。true, falsefalseglobal-database-lock若为 true模块使用全局锁串行化数据库访问。设置为 false 可允许更细粒度的锁定。true, falsetrueagent-originate-timeout发起呼叫时等待坐席 (Callback 类型) 接听的秒数。值为 0 会回退到默认值。整数 (秒)60mod_callcenter API 命令mod_callcenter通过callcenter_configAPI 和独立的callcenter_breakAPI 公开运行时的管理功能。这两个 API 均可通过fs_cli、事件套接字 (event socket) 以及 api/bgapi 拨号计划应用程序来使用。callcenter_config也注册为 JSON API。命令成功时返回OK失败时返回-ERR 原因获取 (get)、列表 (list) 和计数 (count) 命令则会返回具体数据。通用格式为callcenter_config section action args选项部分 (section) 包括agent坐席、tier层级和queue队列。callcenter_config agent命令用途agent add name type创建坐席。type 为 callback 或 uuid-standby。agent del name删除坐席。agent reload name从 XML 重新加载坐席定义。agent set status agent_name status设置坐席状态 (Logged Out, Available, Available (On Demand), On Break)。设置为 Available 会重置通话时间、已接听次数和无应答次数。agent set state agent_name state设置坐席运行状态 (Waiting等待, Receiving接收, In a queue call通话中, Idle空闲, Reserved保留)。agent set contact agent_name contact设置坐席的发起字符串或待机 UUID。agent set ready_time agent_name epoch将坐席保持不可用状态直到给定的 Unix 纪元时间。agent set reject_delay_time agent_name 秒数设置拒接后重新分配呼叫的延迟时间。agent set busy_delay_time agent_name 秒数设置遇忙后重新分配呼叫的延迟时间。agent set no_answer_delay_time agent_name 秒数设置无应答后重新分配呼叫的延迟时间。agent get status agent_name返回坐席的当前配置状态 (status)。agent get state agent_name返回坐席的当前运行状态 (state)。agent get uuid agent_name返回坐席当前的通道 UUID。agent list [agent_name]以管道符分隔的行格式列出所有坐席或指定名称的坐席。callcenter_config tier命令用途tier add queue_name agent_name [level] [position]将坐席分配给队列。level 和 position 默认为 1。tier set state queue_name agent_name state设置层级状态 (Ready就绪, No Answer无应答, Offering提供中, Active Inbound活跃呼入, Standby待机)。tier set level queue_name agent_name level设置层级的优先级别。tier set position queue_name agent_name position设置层级在其级别内的位置。tier del queue_name agent_name将坐席从队列中移除。tier reload queue_name agent_name从 XML 重新加载层级。传入all作为队列名称可重新加载所有层级。tier list按照级别和位置排序列出所有层级。callcenter_config queue命令用途queue load queue_name将队列定义加载到内存中。queue unload queue_name从内存中移除队列。queue reload queue_name卸载然后重新加载队列。queue list以管道符分隔的行格式列出所有已加载的队列。queue list agents queue_name [status] [state]列出队列中的坐席可按配置状态 (status) 和运行状态 (state) 过滤。queue list members queue_name列出队列中等待的呼叫者按得分排序等待最久的在前。queue list tiers queue_name列出一个队列配置的层级。queue count返回已加载的队列数量。queue count agents queue_name [status] [state]统计队列中的坐席数量可按 status 和 state 过滤。queue count members queue_name统计队列中等待的呼叫者数量。queue count tiers queue_name统计队列中的层级数量。callcenter_breakcallcenter_break停止模块对通道 UUID 的监控并释放相关的坐席。它用于让模块正在跟踪的坐席从呼叫中脱离出来。语法callcenter_break agent uuiduuid是要停止监控的通道 UUID。该命令会给通道打上标记以便mod_callcenter在下一次循环时结束对其的监管从而释放该坐席。