环境

linux 7.0
freeswitch版本:1.8.2

功能

  1. 转码:

    当需要将两条腿分别使用不同的编码,需要经过一个转码过程分别转变成对方需要的编码,Freeswitch会将收到的音频数据转成一种中间格式,称为L16,即线性16位编码,这种格式可以与其他各种编码进行转换。

    案例: 主被叫采用不同编码方式,使freeswitch实现转码功能,分机1000使用PCMA编码,分机1001使用PCMU编码。

    方法:修改文件vars.xml,添加如下一行:
    <X-PRE-PROCESS cmd="set" data="media_mix_inbound_outbound_codecs=true"/>
    reloadxml
    其他:杜金房老师的Freeswitch权威指南一书中指出只需将如下一行注释掉即可<param name="inbound-zrtp-passthru" value="true"/>
    ,但经过测试,协商失败,返回488。
    网上翻阅其他博客有说需要将internal.xml两处修改为false,测试结果同样为488.

    <param name="inbound-late-negotiation" value="true"/>
    <param name="inbound-zrtp-passthru" value="true"/>
    
  2. 添加录音功能

    FreeSwitch录音功能默认是关闭的,需要修改配置开启录音功能。
    编辑/usr/localfreeswitch/conf/dialplan/default.xml

    <extension name="Local_Extension">
    <condition field="destination_number" expression="^(10[01][0-8])$">
    

    下面添加如下配置即可

    <action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/>
    <action application="set" data="RECORD_COPYRIGHT=(c) 2011"/>
    <action application="set" data="RECORD_SOFTWARE=FreeSWITCH"/>
    <action application="set" data="RECORD_ARTIST=FreeSWITCH"/>
    <action application="set" data="RECORD_COMMENT=FreeSWITCH"/>
    <action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/>
    <action application="set" data="RECORD_STEREO=true"/>
    <action application="record_session" data="/usr/local/freeSwitch/recordings/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/>
    

    保存退出,F6重载配置生效。

  3. 增加会议室密码功能

    编辑conf/autoload_configs/conference.conf.xml,取消如下两行注释

    重新加载配置文件reloadxml reload mod_conference
  4. 启用会议密码验证

    编辑/usr/local/freeswitch/conf/dialplan/default.xml

    <extension name="nb_conferences">
      <condition field="destination_number" expression="^(30\d{2})$">
        <action application="answer"/>
        **<action application="set" data="conference_enforce_security=true"/>**   ‘default.xml增加此行’
        <action application="conference" data="$1-${domain_name}@default"/>
      </condition>
    </extension>
    
  5. 新增用户,并将用户名设置为Jack

    将1000.xml复制到1234.xml中。打开1234.xml,将所有1000都改为1234。并把effective_caller_id_name的值改为Jack,命令如下:

    接下来,打开conf/dialplan/default.xml,找到下面一行,增加1234字段
    <condition field="destination_number" expression="^(10[01][0-9]|1234)$">
    

    新增完成以后reloadxml文件,或者按F6使新的配置生效。

  6. 配置SIP网关拨打外部电话

    配置外呼时,需要修改两个地方,路由规则以及出局规则。
    路由规则路径为:/usr/local/freeswitch/conf/sip_profiles/external
    新建xml文件,本文为:AC_243.xml

    <include>
    <gateway name="AC_243">
    <param name="realm" value="172.20.8.243"/>
    <param name="proxy" value="172.20.8.243"/>
    <param name="register" value="false"/>
    <param name="register-transport" value="udp"/>
    </gateway>
    </include>
    

    172.20.8.243为SBC或者语音网关的地址,还需要再SBC上添加对应的freeswitch的地址
    出局规则(diaplan)路径为:/usr/local/freeswitch/conf/dialplan/
    目录下有俩个文件:default.xml——-外呼规则
    Public.xml———呼入规则
    编辑default.xml,添加一条规则:加前缀9外呼,打外线。默认输入为呼内线

    <extension name="AC_243">
    <condition field="destination_number" expression="^9(.*)$">
    <action application="bridge" data="sofia/gateway/AC_243/$1"/>
    </condition>
    </extension>
    
  7. 配置呼入

    奥科SBC+freeswitch的呼入。

    SBC添加项
    修改或添加SBC的呼入lan。IP修改为freeswitch的IP地址,freeswitch默认对应端口是5080,应添加SRD和sipinterface。切记语音编码改成711.729不支持
    freeswitch session播放音频 freeswitch没有录音_其他
    Freeswitch修改项
    默认SBC和freeswitch添加trunk后。默认应该是不通的。会报如下错误
    freeswitch session播放音频 freeswitch没有录音_xml_02
    这是因为sbc默认是开着呼叫鉴权的,可以看到sbc的报错如下:
    修改freeswitch的配置文件,将auth_calls改为false
    路径为:/usr/local/freeswitch/conf/vars.xml
    freeswitch session播放音频 freeswitch没有录音_其他_03
    修改完成后,查看sbc还是会报错:Rejected by acl “domains”. Falling back to Digest auth.
    这是因为freeswitch不接受外来域的请求,需要添加类似于白名单。
    配置文件路径:/usr/local/freeswitch/conf/autoload_configs/acl.conf.xml
    freeswitch session播放音频 freeswitch没有录音_xml_04

  8. 新增呼叫组

    先在conf\directory 目录下的default.xml文件定义一个组,比如下面的salse组:

    <group name="sales">
    <users>
    <user id="1000" type="pointer"/>
    <user id="1001" type="pointer"/>
    <user id="1002" type="pointer"/>
    <user id="1003" type="pointer"/>
    <user id="1004" type="pointer"/>
    </users>
    </group>
    

    然后在conf\dialplan 目录下的default.xml 拨号计划里面加上:

    <extension name="group_dial_sales">
    <condition field="destination_number" expression="^2000$">
    <action application="bridge" data="${group_call(sales@${domain_name})}"/>
    </condition>
    </extension>
    

    这样用户拨打的时候整个组的人都会被呼叫。

  9. Callcenter模块测试

    1、在安装文件目录下,将modules.conf中的callcenter模块注释掉
    2、安装callcenter模块
    make mod_callcenter-install
    安装过程遇到libtool版本不匹配,导致安装失败
    wget http://mirrors.ustc.edu.cn/gnu/libtool/libtool-2.4.6.tar.gz
    tar zxvf libtool-2.4.6.tar.gz && cd libtool-2.4.6
    ./configure —prefix=/usr
    make && make install
    make
    autoconf -ivf
    autoreconf —force —install
    make
    make install
    make mod_callcenter-install
    设置callcenter模块自动启动,取消注销callcenter模块
    vim /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
    3、编辑callcenter.conf.xml文件
    vim /usr/local/freeswitch/conf/autoload_configs/callcenter.conf.xml
    默认包含support@default队列
    freeswitch session播放音频 freeswitch没有录音_其他_05
    freeswitch session播放音频 freeswitch没有录音_配置文件_06
    agent中的user后不能带@default,否则系统无法识别对应分机号码
    tier:指定某一坐席归属哪一个队列

10.强制外显号码
在external/目录下添加网关配置文件规则

<include>
<gateway name="MRWG">
<param name="realm" value="192.168.1.231:5060"/>
<param name="register" value="false"/>
<param name="caller-id-in-from" value="true"/>
<param name="origination_caller_id_number" value="89113100"/>
<param name="origination_caller_id_name" value="89113100"/>
<param name="effective_caller_id_number" value="89113100"/>
<param name="effective_caller_id_name" value="89113100"/>
<param name="caller-id-in-from" value="false"/>
<param name="username" value="89113100"/>
<param name="password" value="not-used"/>
</gateway>
</include>

持续更新中…