FreeSWITCH
2:SIP可使用TCP或UDP承载,但RTP数据一般只使用UDP承载。
3:sofia profile internal rescan
4:sofia status profile internal
5:execute_on_originate originate 执行成功后可以执行一个API或lua脚本
6:FS呼叫命令:/usr/local/freeswitch/bin/fs_cli -x "bgapi originate {ignore_early_media=true,session_in_hangup_hook=true}[execute_on_answer='sched_hangup +60', sip_cid_type=rpid,origination_caller_id_number=82064007,api_hangup_hook='lua calllog.lua 30']sofia/external/13133805390@171.34.165.121:5077 '&lua(calltask.lua 30)'"
7:file = io.open("con/usr/local/freeswitch/scripts/config.xml", "r"); --打开xml文件 问题:路径出错导致FS 挂掉
8:originate { }sofia/example/1000@somewhere.com &javascript(test.js) 接了以后才会进入的脚本
<action application="set" data="api_hangup_hook=jsrun cleanup.js ${uuid}"/> 挂断以后进入的脚本
originate [execute_on_answer='sched_hangup +20',api_hangup_hook='lua calllog.lua 31']user/1000001 '&lua(calltask.lua 31)'
9:session:hangup() LUA挂机后就会往下执行,但会返回到上面的循环出 从而导致死循环
10:问题 lua的版本为5.2以下不支持位运算函数bit32, 解决方案:自己写个位运算函数
11:type(arg) lua中函数type可以测试给定变量或者值的类型
12:lua碰到语法错误是就不会继续往下走 如果在循环里面的话可能导致无限循环
13: lua -v 查看lua的版本
14: ./configure --enable-core-pgsql-support
15:问题: fs_cli连接不上 解决办法:
/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml
<!--<param name="listen-ip" value="::"/>--> 换成
<param name="listen-ip" value="127.0.0.1"/> --重启fs
<param name="listen-port" value="8021"/>
16:SIP协议返回码:
1** 临时状态
2** 成功收到,理解,接受
3** 重定向, SIP请求需要转到另一个UAS(代理服务器)处理
4** 请求失败,客户端或网络引起
5** 服务器内部错误 服务器出错,不能响应合法请求
6** 全局性错误 如600 Busy Everywhere
HTTP协议返回码:
1** 临时响应
2** 成功响应
3** 重定向
4** 客户端出错
5** 服务端出错
17:问题 -- 外呼呼不出去 处理 --- 网关的IP地址设置错误
18:--呼入时 满意度的变量设置在 a_leg 外呼时 设置在b_leg
session:execute("set","transfer_after_bridge=9999:XML:c" ..row.company_code) --客服挂机后转到9999执行满意度调查 --呼入
session:execute("set","nolocal:transfer_after_bridge=9999:XML:c" ..row.company_code) ---外呼
19:语音留言文件的路径 /usr/local/freeswitch/storage/voicemail/default/192.168.18.13/101000
20: /usr/local/freeswitch/conf/autoload_configs/voicemail.conf.xml
<param name="record-silence-threshold" value="2000"/> -- 沉默门槛 ms
<param name="record-silence-hits" value="2"/>
21:/usr/local/freeswitch/conf/sip_profiles/external/gw.xml --- 网关的路径
22:reloadxml
reload mod_voicemail
reload mod_callcenter
sofia profile external rescan ---重载 profile external
sofia status profile internal reg ---查看哪些分机注册
sofia profile internal rescan ---重载 profile internal
sofia status profile internal
profile internal stop/start/restart 停止、启动、重启 internal
sofia profile internal rescan 重读参数
sofia profile internal siptrace on/off 打开、关闭跟踪SIP消息
sofia profile external register geatwayname 注册
sofia profile external unregister geatwayname 注销
sofia profile external killgw geatwayname 删除一个网关
23:在LUA dbh:query(sql, function(row) ... end)回调函数中如果没查出数据则不会执行该函数 注意里面的变量
24:originate {ignore_early_media=true,eoc_direction=1}[origination_uuid=100000116788_20150919164832,customer_phone=18507080036]sofia/gateway/23541692/13767463150 &bridge([transfer_after_bridge=9999:xml:c1000001,execute_on_answer=record_session::/samton/file/rec/20140920/${uuid}.wav]sofia/gateway/23541692/18507080036)
25:originate 呼叫字符串, exten(会将通道转入Dialplan去路由)或&APP, Dialplan的类型(不设置默认就是XML), Context, 主叫名称, 主叫号码, 超时时间(秒) ----阻塞 bgapi(防阻塞
originate sofia/gateway/gatewayName/018720286753 079182207568 xml c1000001 'Outbound Call' 18720286753
originate {ignore_early_media=true}sofia/external/18507080036@192.168.18.5:5060 &bridge({hangup_after_bridge=false,transfer_after_bridge=9999:xml:default}sofia/ external/13767463150@192.168.18.5:5060)
originate user/1000,user/1001 &echo 同振
originate user/1000|user/1001 &echo 顺振
26:网关设置 如果本地号码加0的话会打不通
26:问题:FS一直报:[WARNING] mod_callcenter.c:2123 Queue 1000@1000001 not found locally, skip this member 警告 的原因: 1000@1000001队列已删除但是EOC_PBX库的members 表中该队列的相关数据没删除,mod_callcneter模块会有个进程扫描该表,找不到members表中的 1000@100000队列从而发出警告 解决办法 删除members表中的多余数据
27:队列中如果没有设置彩铃播放默认彩铃 member表中的state为Trying 如果设置了彩铃 member表中的state为Waiting
28:无法呼叫---SA系统中该公司没绑定中继号
29:nc -l -k localhost 8040
nc localhost 8040
30: callcenter_config agent set status 666666111@666666 'Logged Out'
callcenter_config agent set contact 1000@default user/1000
callcenter_config tier add [queue name] [agent name] [[level]] [[position]]
callcenter_config tier set [key(state|level|position)] [queue name] [agent name] [value]
callcenter_config tier del [queue name] [agent name]
callcenter_config tier list
31:报工号app --- sched_broadcast 报工号
报工号实现思路
在桥接B腿之前,执行LUA脚本,给两边放彩铃,需要在拨号方案中加入如下拨号计划
<action application="set" data="bridge_pre_execute_aleg_app=lua"/>
<action application="set" data="bridge_pre_execute_aleg_data=/home/job_num.lua"/>
<!--报工号控制-->(vim /usr/local/freeswitch/conf/vars.xml )
<X-PRE-PROCESS cmd="set" data="bridge_pre_execute_aleg_app=lua"/>
<X-PRE-PROCESS cmd="set" data="bridge_pre_execute_aleg_data=/home/job_num.lua"/>
32:如果 hangup_after_bridge = true,这时A也直接挂机
如果 hangup_after_bridge = false,则A继续向后执行
33:queue 中 callback(onhook)类型的坐席 --- 如果有电话分配到该坐席时,FreeSwitch将会会叫坐席
uuid-standby(offhook)类型坐席 --- 坐席需要首先拨入FreeSwitch 建立一个呼叫
34:https://freeswitch.org/confluence/display/FREESWITCH/mod_callcenter
https://freeswitch.org/confluence/display/FREESWITCH/Variables#Variables-answerusec api_hangup_hook
https://wiki.freeswitch.org/wiki/Mod_callcenter#callcenter_config 呼叫中心api
http://docs.freeswitch.org/group__switch__ivr__menu.html#gc92d5ee06dedf739d12b96041b1079b4 //ivr<menu>的字段解析
http://www.8000hz.com/archives/freeswitch-git-compile-1-7.html
35:call_strategy IS '
1、ring-all所有振铃
2、longest-idle-agent空闲时长最长振铃
3、round-robin记忆振铃
4、top-down 顺序振铃
5、agent-with-least-talk-time通话时长最小振铃、
6、agent-with-fewest-calls接听最少振铃
7、sequentially-by-agent-order优先级振铃、
8、random随机振铃
9、技能优先
36:autoload_configs/acl.conf.xml
<node type="allow" cidr="192.168.18.0/24"/> 3*8=24表示前面24位固定为192.168.18 最后八位可以为0-255的任意一个值,意思就是允许 18段的IP访问
37: NWE-->INIT-->ROUTING-->EXECUTE-->HANGUP-->REPORTINT-->DESTROY 7步
38:freeswitch 默认配置中 external.xml 对应的Profile是不鉴权的,因此凡送到5080端口的 INVATE 都不需要鉴权
<param name="auth-calls" value="false"/> /usr/local/freeswitch/conf/sip_profiles/external.xml 中 它收到的INVITE 不会鉴权 会使用 <param name="context" value="public"/>中的context
39:<X-PRE-PROCESS cmd="set" data="internal_auth_calls=true"/> /usr/local/freeswitch/conf/vars.xml
<param name="auth-calls" value="$${internal_auth_calls}"/> /usr/local/freeswitch/conf/sip_profiles/internal.xml 中 它收到的 INVITE 需要鉴权 ,如果经过了鉴权认证就 会找到一个用户,会使用<variable name="user_context" value="c1000001"/> 中的user_context /usr/local/freeswitch/conf/directory/c1000001/xxx.xml 用户目录中的 user_context 比 Profile中的context的优先级高
40:分机互打的路由 : /usr/local/freeswitch/conf/dialplan/outbound/ c公司code.xml 里面
41:/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml ESL服务器的密码
/usr/local/src/freeswitch-1.4.6/libs/esl/fs_cli.c (源码)1359行 fs_cli连ESL接服务器的密码
42: inbound 来话 outbound 去话 internal 5060 external 5080
43:问:voicemail <profile_name> <domain_name> profile_name 是指什么配置文件名?
答:/usr/local/freeswitch/conf/autoload_configs/voicemail.conf.xml 里的配置名 <profile name="default">
44:timeout 超时时间 (毫秒)
max-failures 容忍用户按键错误次数
max-timeouts 最大超时次数
inter-digit-timeout 两次按键的最大间隔时间(毫秒)
confirm-macro="*" 确定宏(位数不足用*补)
confirm-key="#" 按#号键结束
confirm-attempts="0" 确定次数
45:SIP消息分为请求和响应两类, 响应消息都包含一个状态码和一个原因短语
freeswitch> xml_curl debug_on
originate user/1000 &echo
originate user/1000 9999 (相当于在软电话1000上拨打9999)
freeswitch> originate user/1000 9999 XML default (同上)
sofia status profile internal reg (显示多少用户已注册
sofia status profile internal (显示多少用户已注册
如果需要引用这些变量,则全局变量以$${var}表示,临时变量以${var}表示。
在实际使用中,可以使用global_getvar或这个API命令来查看这些变量的值,
如:
freeswitch> global_getvar sound_prefix
/usr/local/freeswitch/sounds/en/us/callie
freeswitch > global_getvar local_ip_v4
192.168.7.6
ln -sf /usr/local/freeswitch/bin/fs_cli /usr/bin/
ln -sf /usr/local/freeswitch/bin/freeswitch /usr/bin/
make mod_modname install
APP 和 API的本质区别:
一个App是一个程序(Application),它作为一个Channel一端与另一端的UA进行通信,相当于它工作在Channel内部;
而一个API则是独立于一个Channel之外的,它只能通过找到Channel的UUID来控制一个Channel(如果需要的话),相当于一个第三者。
(App)——echo、park、bridge
(API)——originate和uuid_bridge,
uuid_bridge API和bridge App有些类似。我们知道它们一个是先呼叫后桥接,另一个是先桥接后呼叫
set App可以给变量赋值:
<action application="set" data="my_var=my_value"/>
另外,export可以对a-leg和b-leg同时赋值(即使此时b-leg还不存在):
<action application="export" data="my_var=my_value"/>
以上两条命令都可以将my_var变量的值设置为my_value。
不同的是set程序仅会作用于当前的Channel(a-leg),
而export程序则会将变量设置到两个Channel(a-leg和b-leg)上,
如果当时b-leg还没有创建,则会在创建时设置。
kill -HUP pid
sofia profile internal rescan
sofia prifile external rescan
sofia status profile internal ffmpeg
mod_fsv
/usr/local/freeswitch/conf/autoload_configs/switch.conf.xml 设置RTP端口范围
http://wiki.freeswitch.org/wiki/FreeSwitch_FAQ
CS_NEW - Channel is newly created.
CS_INIT - Channel has been initialized.
CS_ROUTING - Channel is looking for an extension to execute.
CS_SOFT_EXECUTE - Channel is ready to execute from 3rd party control.
CS_EXECUTE - Channel is executing it's dialplan.
CS_EXCHANGE_MEDIA - Channel is exchanging media with another channel.
CS_PARK - Channel is accepting media awaiting commands.
CS_CONSUME_MEDIA - Channel is consuming all media and dropping it.
CS_HIBERNATE - Channel is in a sleep state.
CS_RESET - Channel is in a reset state.
CS_HANGUP - Channel is flagged for hangup and ready to end.
CS_REPORTING - Channel is ready to collect call detail.
CS_DESTROY - Channel is ready to be destroyed and out of the state machine.
${strftime(%Y-%m-%d-%H-%M-%S)}
没有日志文件:
vi freeswitch/modules.conf
添加:loggers/mod_logfile
重新编译
vi /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
<load module="mod_logfile"/>
搭建企业PBX ,软交换 ,需要SIP软交换源码的请联系 330586792@qq.com