没有合适的资源?快使用搜索试试~ 我知道了~
首页freeswitch之mod_callcenter介绍
freeswitch之mod_callcenter介绍
需积分: 50 15 下载量 128 浏览量
更新于2023-03-16
评论
收藏 283KB PDF 举报
针对mod_callcenter的总结,详细介绍的callcenter模块中通道变量
资源详情
资源评论
资源推荐
mod_callcenter
本文英文部分是来自https://freeswitch.org/confluence/display/FREESWITCH/mod_callcenter,中文部分是通过分析mod_callcenter.c的代码根据个人
的理解整理而成。
关于作者关于作者
鼎鼎:cdevelop@qq.com qq:1280791187。 本文会不定期更新,最新版本在http://www.ddrj.com/?p=79。
配置配置
callcenter.conf.xml 范例范例
<configuration name="callcenter.conf" description="CallCenter">
<settings>
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
<!--<param name="dbname" value="/dev/shm/callcenter.db"/>-->
<!--<param name="reserve-agents" value="true"/>-->
</settings>
<queues>
<queue name="support@default">
<param name="strategy" value="longest-idle-agent"/>
<param name="moh-sound" value="$${hold_music}"/>
<!--<param name="record-template" value="$${base_dir}/recordings/${strftime(%Y-%m-%d-%H-%M-%S)}.${destination_number}.${caller_id_number}.${uuid}.wav"/>-->
<param name="time-base-score" value="system"/>
<param name="max-wait-time" value="0"/>
<param name="max-wait-time-with-no-agent" value="0"/>
<param name="max-wait-time-with-no-agent-time-reached" value="5"/>
<param name="tier-rules-apply" value="false"/>
<param name="tier-rule-wait-second" value="300"/>
<param name="tier-rule-wait-multiply-level" value="true"/>
<param name="tier-rule-no-agent-no-wait" value="false"/>
<param name="discard-abandoned-after" value="60"/>
<param name="abandoned-resume-allowed" value="false"/>
</queue>
</queues>
<!-- WARNING: Configuration of XML Agents will be updated into the DB upon restart. -->
<!-- WARNING: Configuration of XML Tiers will reset the level and position if those were supplied. -->
<!-- WARNING: Agents and Tiers XML config shouldn't be used in a multi FS shared DB setup (Not currently supported anyway) -->
<agents>
<!--<agent name="1000@default" type="callback" contact="[leg_timeout=10]user/1000@default" status="Available" max-no-answer="3" wrap-up-time="10" reject-delay-time="10" busy-delay-time="60" />-->
</agents>
<tiers>
<!-- If no level or position is provided, they will default to 1. You should do this to keep db value on restart. -->
<!-- <tier agent="1000@default" queue="support@default" level="1" position="1"/> -->
</tiers>
</configuration>
settings 配置详解配置详解
odbc-dsn
The callcenter will use the supplied ODBC database instead of the default behavior, which is to use the internal SQLite database.
使用ODBC数据源,需要配置这个参数
1. 使用odbc.ini配置的数据源:dsn:user:pass或者dns
2. 不配置数据源直接连接方法:odbc://DRIVER=driver;SERVER=host;UID=username;PWD=password;DATABASE=db;OPTION=67108864 。 driver(驱
动,windows系统在ODBC数据源可以看到如“MySQL ODBC 5.3 Unicode Driver”,linux系统odbcinst.ini里面配置),host(数据库主机IP,本机:
localhost),username(数据库用户名),password(数据库密码),db(数据库名)。
dbname
This is to specify a different name or path and name of the SQLite database. Useful to put into a ram disk for better performance.
使用SQLite数据库时,用来设置SQLite 数据库文件路径。如果odbc-dsn和dbname都不设置,会使用SQLite数据库,默认路径是.\db\callcenter 。
reserve-agents
If defined to true, agent state is changed to Reserved if the old state is Receiving, the call will only be sent to him if the state get's changed.
This is useful if you're manipulating agent state external to mod_callcenter. false by default.
这个参数的作用是在呼叫坐席之前把agents.state 设置为Reserved。默认值是false,就是不启动这个功能。
truncate-tiers-on-load
If defined to true, we'll delete all the agents when the module is loaded. false by default.
默认false,设置true时,load的时候清空数据库里的tiers表。
truncate-agents-on-load
If defined to true, we'll delete all the tiers when the module is loaded. false by default.
默认false,设置true时load的时候清空数据量里的agetns表。
queues 配置详解配置详解
strategy
The strategy defines how calls are distributed in a queue. A table of different strategies can be found below.
ring-all: Rings all agents simultaneously.(全响)
全部坐席响铃。
longest-idle-agent: Rings the agent who has been idle the longest taking into account tier level.(空闲时间)
下面是longest-idle-agent 模式派话使用的SQL,通过分析下面的SQL,可以看出是 根据 tiers.level , agents.last_bridge_end ,
tiers.position 这3个参数来排序的。last_bridge_end 是坐席最后通话结束时间。
SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position, tiers.level, agents.type, agents.uuid, external_calls_count FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') ORDER BY level, agents.last_bridge_end, position
round-robin: Rings the agent in position but remember last tried agent.(循环)
下面是round-robin 模式派话使用的SQL,通过分析下面的SQL,可以看出是按照 tiers_level 从小到大, tiers_position 从小到
大,agents_last_offered_call 从小到大 循环分配坐席的。 。agents.last_offered_call 是最近一次呼叫坐席的时间。
SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position as tiers_position, tiers.level as tiers_level, agents.type, agents.uuid, external_calls_count, agents.last_offered_call as agents_last_offered_call, 1 as dyn_order FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') AND tiers.position > (SELECT tiers.position FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND agents.last_offered_call > 0 ORDER BY agents.last_offered_call DESC LIMIT 1) AND tiers.level = (SELECT tiers.level FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND agents.last_offered_call > 0 ORDER BY agents.last_offered_call DESC LIMIT 1) UNION SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position as tiers_position, tiers.level as tiers_level, agents.type, agents.uuid, external_calls_count, agents.last_offered_call as agents_last_offered_call, 2 as dyn_order FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') ORDER BY dyn_order asc, tiers_level, tiers_position, agents_last_offered_call
top-down: Rings the agent in order position starting from 1 for every member.(指定开始位置)
通道变量cc_last_agent_tier_level和cc_last_agent_tier_position默认值为0.
查找座席的排序算法为,先查找 level 等于 cc_last_agent_tier_level,position 大于 cc_last_agent_tier_position 的坐席,然后按照tiers_level,
tiers_position, agents_last_offered_call 排序所有坐席。
SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position as tiers_position, tiers.level as tiers_level, agents.type, agents.uuid, external_calls_count, agents.last_offered_call as agents_last_offered_call, 1 as dyn_order FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') AND tiers.position > 0 AND tiers.level = 0 UNION SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position as tiers_position, tiers.level as tiers_level, agents.type, agents.uuid, external_calls_count, agents.last_offered_call as agents_last_offered_call, 2 as dyn_order FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') ORDER BY dyn_order asc, tiers_level, tiers_position, agents_last_offered_call
agent-with-least-talk-time: Rings the agent with least talk time.(通话时间)
按照tiers.level , agents.talk_time , tiers.position 排序坐席。agents.talk_time 是坐席的通话时间。
启动或者坐席签入时agents.talk_time 会复位为0.
SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position, tiers.level, agents.type, agents.uuid, external_calls_count FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') ORDER BY level, agents.talk_time, position
agent-with-fewest-calls: Rings the agent with fewest calls.(通话次数)
按照tiers.level , agents.calls_answered , tiers.position 排序坐席。agents.calls_answered 是坐席的通话次数。
启动或者坐席签入时agents.calls_answered 会复位为0.
sequentially-by-agent-order: Rings agents sequentially by tier & order.(顺序)
按照tiers_level, tiers_position, agents_last_offered_call 排序所有坐席
SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position, tiers.level, agents.type, agents.uuid, external_calls_count FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') ORDER BY level, position, agents.last_offered_call
random: Rings agents in random order.(随机)
按照tiers.level 顺序然后随机排序。
如果连接mysql数据库,mod_callcenter.源代码需要修改一下。
2550 sql_order_by = switch_mprintf("level, random()");
修改为
2550 sql_order_by = switch_mprintf("level, rand()");
派话SQL
SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position, tiers.level, agents.type, agents.uuid, external_calls_count FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') ORDER BY level, random()
ring-progressively: Rings agents in the same way as top-down, but keeping the previous members ringing (it basically leads to ring-all in
the end).(渐进)
按照tiers.level 和tiers.position 排序坐席。每ring_progressively_delay秒,增加分配一个坐席。
派话SQL
SELECT system, name, status, contact, no_answer_count, max_no_answer, reject_delay_time, busy_delay_time, no_answer_delay_time, tiers.state, agents.last_bridge_end, agents.wrap_up_time, agents.state, agents.ready_time, tiers.position, tiers.level, agents.type, agents.uuid, external_calls_count FROM agents LEFT JOIN tiers ON (agents.name = tiers.agent) WHERE tiers.queue = 'support@default' AND (agents.status = 'Available' OR agents.status = 'On Break' OR agents.status = 'Available (On Demand)') ORDER BY level, position
默认值longest-idle-agent.
moh-sound
The system will playback whatever you specify to incoming callers. You can use any type of input here that is supported by the FreeSWITCH
playback system:
1. A direct path to a .wav file will play in a loop indefinitely.
2. The local stream, e.g. (localstream://moh) or use $${holdmusic} as defined in the default configuration.
3. The FreeSWITCH phrase system, e.g., (phrase:my-special-phrase). (I use this to play multiple prompts after each other.)
4. A tone stream as with ringing, e.g., (tone_stream://${us-ring};loops=-1).
等待音乐,通道变量cc_moh_override 可以覆盖这个设置。
剩余10页未读,继续阅读
小财迷的欧巴
- 粉丝: 2
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0