我厂最近新买了新办公楼,新办公室那边的电话系统:包括软交换,数字中继网关,E1和VOIP,交由我去配置。多功能程序员 :)
下面是配置freeswitch过程中的一些记录,贴在这里与大家分享。更多详细资料请参考fs官方以及中文官网。
1.freeswitch src里,有个perl脚本, add_user批量增加用户
2.查看用户注册情况sofia status profile internal reg
3.对5004用户进行模拟呼叫originate user/5004 &echo()
4.配置conf/dialplan/default.xml设置sip对外呼出(加0外拨,加00外地,本地区号去除,主叫方送号)
<extension name="Local_Extension2">
<condition field="destination_number" expression="^0(551)*([0-9]\d{5,})$">
<action application="export" data="dialed_extension=$1"/>
<action application="answer"/>
<action application="set" data="call_timeout=30"/>
<action application="set" data="record_sample_rate=8000"/>
<action application="export" data="RECORD_STEREO=false"/>
<action application="set" data="hangup_after_bridge=true"/>
<action application="set" data="continue_on_fail=true"/>
<condition field="caller_id_number" expression="^(50)([0-4][0-9])$">
<action application="set" data="effective_caller_id_number=123456$2"/>
</condition>
<!--<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>-->
<!--<action application="bridge" data="${rtmp_contact(default/${dialed_extension}@$${domain})}"/>-->
<action application="bridge" data="sofia/gateway/gw1/$1"/>
</condition>
</extension>
5. 配置外线呼入找号,公司内部拨内部长号转换为公司内部分机短号(帮公司省钱,公司新政应该分点奖金给我 0.0)
<extension name="public_extensions">
<condition field="destination_number" expression="^123456([0-4]\d)$">
<action application="pre_answer"/>
<action application="transfer" data="50$1 XML default"/>
</condition>
</extension>
<extension name="public_extensions">
<condition field="destination_number" expression="^([0-9]\d+)$">
<action application="pre_answer"/>
<action application="transfer" data="$1 XML default"/>
</condition>
</extension>
6. 拨号计划中查看所有Channel Variable. 通过使用 info 这个 APP,可以查看所有的 Channel Var。我们先修改一下 Dialplan。
<extension name="Show Channel Variable">
<condition field="destination_number" expression="^1235$">
<action application="info" data=""/>
</condition>
</extension>
7.set和export的区别
<action application="set" data="dialed_extension=$1"/>
<action application="export" data="dialed_extension=$1"/>
set 是将变量设置到当前的 Channel 上,即 a-leg。而 export 则也将变量设置到 b-leg 上。当然,这里 b-leg 还不存在。所以在这里它对该 Channel 的影响与 set 其实是一样的。因此,使用 set 完全是多余的。但是除此之外,export 还设置了一个特殊的变量,叫 export_vars,它的值是dialed_extension。
8.拨号字符串中的通道变量
使用大括号{ } 和 中括号[] 的语法解释如下:
{foo=bar} 只能用在拨号字符串的开头. 它会在每个通道上设置相同的值.
[foo=bar] 它设置在某个特定的拨号字符串的前面,此通道变量值只对当前通道有效.
下面这个例子设置变量foo=bar 到所有通道,设置 chan=1 到blah 同时设置chan=2 到 blah2
如果你想让中括号[]内的变量覆盖同名大括号{}内设置的变量值,你可以在大括号{}内先设定 ‘local_var_clobber=true‘ ,例如:{local_var_clobber=true,sip_secure_media=true}sofia/default/[email protected]|sofia/default/[email protected]|[sip_secure_media=false]sofia/default/[email protected]
9.配置fs拨打外部网关
conf/sip_profiles/external下建立gw1.xml内容
<gateway name="gw1">
<param name="realm" value="192.168.1.2:5060"/>
<param name="username" value="5678"/>
<param name="password" value="1234"/>
<param name="register" value="false" />
<param name="caller-id-in-from" value="true"/>
</gateway>
10.实现IVR语言菜单www.freeswitch.org.cn/2010/03/21/yong-freeswitchshi-xian-ivr.html
首先如果要实现名字为welcome的语言菜单要修改conf/dialplan/public.xml
<extension name="incoming_call">
<condition field="destination_number" expression="^你的DID号码$">
<action application="answer" data=""/>
<action application="sleep" data="1000"/>
<action application="start_dtmf"/>
<action application="ivr" data="welcome"/>
</condition>
</extension>
其次welcome的语言菜单配置,修改conf/autoload_configs/ivr.conf
<configuration name="ivr.conf" description="IVR menus">
<menus>
<!--<menu name="demo_ivr">-->
<menu name="welcome"
greet-long="custom/welcome.wav"
greet-short="custom/welcom_short.wav"
invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav"
exit-sound="voicemail/vm-goodbye.wav"
timeout="15000"
max-failures="3"
max-timeouts="3"
inter-digit-timeout="2000"
digit-len="4">
<entry action="menu-exec-app" digits="0" param="transfer 1000 XML default"/>
<entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML default"/>
</menu>
</menus>
</configuration>
11.判断电话语音文件是否存在
<extension name="play-news-announcements">
<condition expression="${file_exists(${sounds_dir}/news.wav)}" expression="true"/>
<action application="playback" data="${sounds_dir}/news.wav"/>
<anti-action application="playback" data="${soufnds_dir}/no-news-is-good-news.wav"/>
</condition>
</extension>
12.接通后再录音录音时不要将前置媒体录制进去.
<action application="set" data="media_bug_answer_req=true"/>
13.fs中生成随机uuid
<action application="set" data="newuuid=${create_uuid()}"/>
14.FreeSWITCH在呼叫失败的情况下播放语音提示 http://zdm2008.blog.163.com/blog/static/20491545201321945439885/
<action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/>
改为
<action application="playback" data="${originate_disposition}.wav"/>
15. fs_cli命令行桥接legA,legB电话
originate {effective_caller_id_number=xxxxxx}sofia/internal/[email protected] &bridge(sofia/gateway/gw1/xxxxxxxxxx)