首页 > 新闻 > 国内 >

FreeSWITCH&潮流IP电话高性价比企业通信解决方案

2014-11-27 14:29:16   作者:   来源:CTI论坛   评论:0  点击:


  我们来练习配置一种最简单的情形。当有电话呼入时,会播放:“您好,欢迎致电某某公司,请直拨分机号,查号请拨0”。然后,来话用户就可以输入1000~1019之间的分机号,也可以直接按0转到人工台(如分机1000)进行查号,或要求转接其他分机。

  IVR系统默认的配置文件为conf/autoload_configs/ivr.conf.xml,它装入conf/ivr_menus/目录下所有的XML文件。系统有一个示例的IVR配置,叫demo_ivr,也就是我们刚才拨5000听到的那个。为了实现我们的目标菜单,我们创建一个XML配置文件conf/ivr_menus/welcome.xml,内容如下:

  <include>
  <menus>
  <menu name="welcome"
  greet-long="welcome.wav"
  greet-short="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>
  </include>

  在上述配置中,首先,我们指定菜单的名字(name)是welcome,其他各项的含义如下:

  1.greet-long:指定最开始的欢迎音,即为最开始播放的“您好,欢迎致电某某公司,请直拨分机号,查号请拨0”的语音,该语音文件默认的位置应该是在/usr/local/freeswitch/sounds目录下。
  2.greet-short:该项指定一个简短的提示音。
  3.invalid-sound:如果用户按错了键,则会使用该提示。如果你安装时使用了“make sounds-install”命令安装了声音文件,则该文件应该是默认存在的。
  4.exit-sound:该项指定最后菜单退出时(一般是超时没有按键)的声音,默认会提示“Good Bye”。
  5.timeout:指定超时时间(毫秒),即多长时间没有收到按键就超时,播放其他提示音。
  6.max-failures:为容忍用户按键错误的次数。如果用户的按键与下面配置的正则表达式不匹配(即没有找到相关的菜单项),就认为是错误。
  7.max-timeouts:即最大超时次数。
  8.inter-digit-timeout:为两次按键的最大间隔(毫秒)。如用户拨分机号1001时,假设拨了10,等3秒,然后再按01,这时系统实际收到的号码为10(后面的01超时后没有收到),则会播放invalid-sound指定的声音文件以提示错误。
  9.digit-len:说明菜单项的长度,即最大收号位数。在本例中,用户分机号长度为4位,因此我们使用4。

  以上菜单设定好后,需要在控制台中执行reloadxml(或按F6键)使配置生效。

  配置完成后就可以在控制台上进行如下测试(呼叫1001,接听后进入ivr菜单):

  freeswitch> originate user/1001 &ivr(welcome)

  测试成功后,你就可以配置Dialplan把并户来话转接到菜单了,在Dialplan中加入一个extension(请注意,你需要加到正确的Dialplan Context中,如果不确定应该加到哪个Context中的话,在default和public中都加上会比较保险。):

  <extension name="incoming_call">
  <condition field="destination_number" expression="^1234$">
  <action application="answer" data=""/>
  <action application="sleep" data="1000"/>
  <action application="ivr" data="welcome"/>
  </condition>
  </extension>

  接下来呼叫1234进行测试,就可以听到我们刚才配置的IVR菜单了。注意,在实际应用中,为了能接受外部来的呼叫,你可能要把这里的1234改成你实际的DID(Direct Inbound Dial)号码。

  添加一个账号

  在实现应用中,FreeSWITCH默认提供的20个账号可能不够用;或者,我们需要不同的号码段(如使用600~699号码段)作为分机号。这时,就需要添加一个新的账号。

  我们已经了解现有的用户配置文件是存放在FreeSWITCH安装目录的conf/directory/default目录下,每个用户对应一个XML配置文件,如1000.xml即包含了1000这个用户的配置文件。例如我们要添加6001这个用户,只需以1000.xml为模板,将该文件中的内容复制为6001.xml,然后把6001.xml文件中的所有出现1000的地方全部替换成6001即可。

  当然,除了手工的复制和替换外,上述步骤可以在UNIX系统上的Shell中使用下列命令完成:
  # sed -e "s/1000/6001/" 1000.xml > 6001.xml

  批量添加账号

  如果需要添加很多账号,很显然一个一个的添加是不现实的。

  其实也很简单,如果在Linux系统下,我们只需要用一下Shell中的for循环就可以了。比如我们要创建6020~6039这20个用户,具体的Shell命令如下:
  # for i in `seq 6020 6039`; do sed -e "s/1000/$i/" 1000.xml > $i.xml ; done

  使用Windows平台的人,可以安装UnxUtils,就可以使用大部分的UNIX命令了。如我们可以使用如下“。bat”脚本完成同样的添加用户的功能(将下列内容存到与1000.xml相同的目录下的扩展名为“。bat”的文件中,用鼠标双击即可执行):
  for /L %%i in (6020, 1 6039) do sed -e "s/1000/%%i" 1000.xml > %%i.xml

  创建完用户配置文件后就可以在FreeSWITCH中使用reloadxml命令使之生效了。配置生效后,使用这些用户注册和呼出都没有问题,如果这些用户也需要做被叫的话,那就需要修改Dialplan,增加到这部分用户的路由。如,我们增加了6020~6039这20个用户后,可以简单地将默认的Dialplan中的正则表达式“10[01][0-9]$”改为“60[0-3][0-9]$”,就可以包含我们新创建的用户了。更改后的部分内容如下:

  <extension name="Local_Extension">
  <condition field="destination_number"
  expression="^(60[0-3][0-9])$">

  视频通话

  FreeSWITCH也支持基于SIP的视频通话,潮流有很多型号的视频话机如GXV3275,下面我们来看一看基本的设置,以及视频转码与录像等高级话题。

  1) 配置视频通话:

  FreeSWITCH默认的配置文件中并没有对视频编解码的相关项,因而默认不支持视频呼叫。如果需要支持视频呼叫,只需要在配置文件中增加相关的视频编解码就可以了。

  目前FreeSWITCH支持的视频编解码有H261、H263、H263-1998(H263+)、H263-2000(H263++)、H264、VP8等。具体应该使用哪种或哪几种编解码需要看SIP终端的支持。需要注意的是,与音频编解码不同,FreeSWITCH中的视频编解码目前仅支持透传,即FreeSWITCH仅将通话中一方的视频原样送到另一方去,而不做任何编码转换。这就要求进行视频通信的双方要使用一致的编解码。

  FreeSWITCH支持的媒体编码默认是在conf/vars.xml中定义的,读者可以在该文件中找到类似下面的配置:

  <X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMU,PCMA,GSM"/>
  <X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM"/>

  以上两行分别定义了两个全局变量,它们的字面意思分别是全局的和出局的编解码首选项。假设我们增加H264编码支持,配置如下:

  <X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMU,PCMA,GSM,GSM,H264"/>
  <X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM,GSM,H264"/>

  修改完上述配置文件后,由于它实际修改的是全局变量,一般来说需要重启FreeSWITCH才能使之生效(当然也有不重启FreeSWITCH使之生效的方法,但由于操作比较复杂,在此就不多介绍了)。

  配置完毕后可以使用如下命令查看是否生效(其中“CODECS IN”和“CODECS OUT”分别代表入局和出局时使用的编解码):

  freeswitch> sofia status profile internal
  =====================================================================
  ======================================
  Name                internal
  CODECS IN           G722,PCMU,PCMA,GSM,G729,H264
  CODECS OUT          PCMU,PCMA,GSM,G729,H264

  配置了正确的视频编解码后,就可以在视频话机之间进行视频通话了。

  2) 视频录像与回放

  FreeSWITCH中支持录音,有了视频通话后,大家就希望支持录像。与录音相比,录像要复杂一些。录像数据要按一定的格式存储在文件中,而这些文件格式有好多种。不同的文件格式称为不同的容器(Container),在这些容器中,通常会包含多个音频轨道(Track)和视频轨道,有的还含有同步信息。

  目前,处理视频格式最好的开源软件就是ffmpeg,暂时还没有人将它与FreeSWITCH集成(这样说也不全对,因为笔者已经在做了)。FreeSWITCH中实现了一个简单的mod_fsv模块,提供FreeSWITCH中的录像及回放支持。它不依赖于任何其他的视频处理库,而是自己定义了一种私有的格式,将音频轨道用L16编码的数据保存,视频轨道则将整个RTP原始包都保存进去。

  在默认的Dialplan中,也提供了录像与回放的例子。拨打9193可以通过record_fsv App进行录像,Dialplan的设置如下:

  <action application="record_fsv" data="/tmp/testrecord.fsv"/>

  录像过程中,用户可以看到自己的视频也被原样echo了回来。

  录制完成后,就可以拨打9194播放刚刚录制的录像了,它是使用play_fsv App实现的:

  <action application="play_fsv" data="/tmp/testrecord.fsv"/>

  小结:

  从上面我们可以看出, FreeSWITCH与潮流IP电话组合部署提供了很好的的企业通信解决方案。 FreeSWITCH是开源的软交换软件,不仅配置非常灵活,而且在性价比方面也有非常好的优势。对于最终用户来说,FreeSWITCH的默认配置就已经包含了非常实用的功能,基本不用太多的配置。对于集成商或开发人员来说,FreeSWITCH提供了非常丰富灵活的开发接口,因而也能很容易的与业务系统进行集成。

分享到: 收藏

专题