顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-webrtc(浏览器直接拨打电话)

现代的浏览器都支持webrtc,浏览器通过webrtc就可以直接注册sip账户到FreeSWITCH实现拨打和接听电话了。就可以不用额外安装软电话或者硬件的电话机,方便CRM等系统集成电话呼叫功能。

获取ssl证书

  • 阿里云购买(阿里云有提供1年的免费证书,可以用来测试)

    image-20220901185718024
    下载到3个文件 域名_public.crt 域名.key 域名_chain.crt 这样的顺序放入wss.pem文件。
    格式要求
    —–BEGIN CERTIFICATE—–

    —–END CERTIFICATE—–
    —–BEGIN RSA PRIVATE KEY—–

    —–END RSA PRIVATE KEY—–
    —–BEGIN CERTIFICATE—–

    —–END CERTIFICATE—–

如果购买的证书提供的不是这样的3个文件,只需要根据上面的格式放入,第一个段是CERTIFICATE(cert),第二个是RSA PRIVATE KEY(key),第三个是CERTIFICATE(chain)。解码证书的命令是 openssl x509 -in wss.pem -noout -text

  • 把wss.pem放到fs证书目录
    • 执行fs控制台命令global_getvar certs_dir 也可以ssh终端执行fs_cli -x "global_getvar certs_dir"查询到fs证书目录
    • 把wss.pem copy到证书目录
    • 也可以CCAdmin的SIP->internal->tls-cert-dir 修改这个路径
      image-20220901212027891

FreeSWITCH配置webrtc

  • 设置webrtc使用的IP和端口

配置webrtc监听的SIP和端口,CCAdmin->SIP->internal->wss-binding设置为:7443(冒号需要的),监听本机所有端口,也可以0.0.0.0:7443 监听ipv4所有IP的7443端口,也可以指定单独一个本机IP比如192.168.31.100:7443,也可以指定其他端口后面的测试例子是用端口7564。建议不要用7443端口,很多客户用7443端口连接会不稳定,建议改用其他端口。

image-20220901212254149

  • 修改后要重启sofia模块才能生效

执行fs控制台命令reload mod_sofia,也可以ssh终端执行 fs_cli -x "reload mod_sofia",或者CCAdmin运维调试界面SIP里面点一下restart。

image-20220901212858104

  • 查看修改是否生效

    执行fs控制台命令sofia status profile internal,也可以ssh终端执行 fs_cli -x "sofia status profile internal",或者CCAdmin运维调试界面SIP->internal后面点一下info(…),看到类似WSS-BIND-URL sips:mod_sofia@10.0.16.17:7564;transport=wss这样的信息,就是端口绑定成功了。如果使用云服务器或者开启了防火墙,还需要把 wss端口放开一下(注意是TCP端口)。

    image-20220901213529309

image-20220901213843732

域名解析到FS的外网IP

执行命令openssl s_client -connect sip.ddrj.com:7564 -showcertsopenssl s_client -connect sip.ddrj.com:7564 -state测试证书是否验证通过。

浏览器打电话测试

注意浏览器必须https打开的页面才可以使用webrtc。http页面会打开麦克风失败。

sipml5

sipml5官方网站 https://www.doubango.org/sipml5/ demo地址:https://www.doubango.org/sipml5/call.htm?svn=252

image-20220901215242187

image-20220901215446123

第二个界面设置好了点保存,然后回到第一个界面,点Login,如果登录成功了,恭喜你,前面的配置都对,拨打电话测试就可以了。

可以拨打echo,进行回音测试(路由里面启用放音测试),号码输入echo,点击Call->Audio,弹出是否允许使用耳麦,要勾选记住此决定。 如果听到自己说话的声音,就配置好了。

image-20220901220004608

jssip

  • 测试demo

jssip官方网站https://jssip.net/ demo地址:https://tryit.jssip.net/ demo源代码在https://github.com/versatica/tryit-jssip

image-20220902092305810

image-20220902113347416

保存设置,点下一步,进入呼叫界面,呼叫echo,过2-3秒,就会听到提示音了。为什么过2-3秒才可以听到声音,是因为默认使用了iceserver,可以自己下载demo代码tryit-jssip/lib/settingsManager.js把pcConfig.iceServers这个删除了去。session_timer如果设置为true,会注册不上,因为fs的Session-Expires要求大于120,jssip的Session-Expires默认是90,可以改成false,或者修改fs Session-Expires的最小时间,也可以发起呼叫设置sessionTimersExpires为120以上的值。。contact_uri这个如果不设置fs的通话记录的被叫就没办法显示正确的分机号。例子默认是启用视频通话的,可以发起呼叫的参数里面关闭视频呼叫(tryit-jssip/lib/components/Phone.jsx)。

{
            pcConfig         : this.props.settings.pcConfig || { iceServers: [] },
            mediaConstraints :
            {
                audio : true,
                video : false
            },
            rtcOfferConstraints :
            {
                offerToReceiveAudio : 1,
                offerToReceiveVideo : 0
            }
});

//其他参考
var options = {
    // 'eventHandlers'    : eventHandlers,
    'mediaConstraints': {'audio': true, 'video': false},
    'extraHeaders': [],
    'sessionTimersExpires': 180
};

image-20220902094041332

  • 代码下载

jssip下载地址https://jssip.net/download/releases/ 找到最新版本 下载 https://jssip.net/download/releases/jssip-3.9.1.min.js

  • 第三方例子,可以联系顶顶通获取。

sipjs

sipjs的官方网站是 https://sipjs.com/ demo代码地址 https://github.com/onsip/SIP.js/tree/master/demo 因为官方没提供可以直接访问的demo,本文就不写测试过程了。可以联系顶顶通获取第三方例子。

faq

  1. 访问webrtc的页面必须是https的。
  2. iceserver 一定不要设置,设置了会导致呼出或者接听等几秒才有声音。
  3. 证书格式一定要对,如果证书不对会注册不上,可以通过浏览器直接访问 webrtc端口,例子( https://sip.ddrj.com:7564 )查看证书信息。
  4. 有的浏览器需要位置服务权限才可以获取到本机IP,需要允许位置服务和媒体的权限
  5. 有问题可以浏览器按F12看日志和F12网络看wss的SIP协议数据
  6. webrtc只支持 pcma,pcmu,opus这样几个编码,浏览器注册的分机,线路设置->编码设置要设置为pcma,pcmu,opus