蓝牙电话与FreeSwitch服务器和UA坐席的通话上一篇手机实时提取SIM卡打电话的信令和声音-(五、最终解决方案-智能拨号器方案)下一篇手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心一、前言由于前面文章中有读者反馈说蓝牙电话这个app不知道怎么用。前面的篇章只讲述了SDK对接时如何获取电话通话语音、并将自己预先录制的声音传进去但体验效果不直观。本文采用开源的B2B-UA当中经典的FreeSWITCH力图使用最简洁的步骤和方式在局域网中搭建一个“云平台”使电脑上的“软电话”能正常使用蓝牙电话的方案正常呼叫出去。本文中预设的依赖条件如下序号描述01蓝牙电话手机app或windows的PC应用02蓝牙电话手机app的登录账号没有账号的自己注册PC应用不需要账号03FreeSwitch安装包04eyeBeam和X-Lite安装包05Python脚本的运行环境和http服务器的防火墙端口06拨号器管理app这个是蓝牙电话手机app的管理端此处由于简化步骤已将表格中所有涉及到的软件的下载地址放入百度云盘需要的读者可以直接下载来使用。蓝牙电话手机apphttp://120.78.211.195:8060/Dialer.apk蓝牙电话windows应用http://120.78.211.195:8060/_uploads_soft_20220701_DialerCloud22_Fx4.zipFreeSwitch安装包见下面章节的下载地址。eyeBeam1.5安装包https://pan.baidu.com/s/1WoWrc1wlhDAMcYTMtf4JiQ 提取码96taX-Lite安装包https://pan.baidu.com/s/1AfTbslNqMKQrn46TZj3E0A 提取码savy拨号器管理apphttp://120.78.211.195:8060/DialerManager.apk二、安装包下载windows下载Index of /windows/installer/x64Linux下载Index of /freeswitch-releases学习资料《FreeSwitch权威指南 PDF电子书.pdf 杜金房》https://pan.baidu.com/s/1oPV0fikMqP0vsAUw0M6ZQA 提取码siag当前示例版本选用的是【FreeSWITCH-1.10.11-Release】版本它的Windows下载路径为(仅供参考)https://files.freeswitch.org/windows/installer/x64/FreeSWITCH-1.10.11-Release-x64.msi安装包下载后直接安装到默认路径即可安装完毕后运行FreeSWITCH进程。此处为了最大限度的精简步骤快速出成果以windows10的笔记本电脑的安装和配置的截图做为示例其它操作系统基本上也差不多。本文电脑的安装路径为C:\Program Files\FreeSWITCH\三、初始配置文件位置C:\Program Files\FreeSWITCH\conf\sip_profiles\internal.xml屏蔽296行和297行避免呼叫接通后挂断但fs服务器并未结束会话的问题。paramnameext-rtp-ipvalue$${external_rtp_ip}/paramnameext-sip-ipvalue$${external_sip_ip}/修改后文件内容如下​详情可参考《解决xlite和freeswitch通话没有语音的问题》https://blog.csdn.net/daitu3201/article/details/80096630四、拨号计划文件位置C:\Program Files\FreeSWITCH\conf\dialplan\default.xml在拨号计划的contextnamedefault后面直接加上这一段内容即可实现外呼和来电的策略。!--来电转坐席--extensionnamecall incoming phoneconditionfieldcaller_id_numberexpression^sim(\d)$/conditionfielddestination_numberexpression^(\d)$actionapplicationbridgedata{origination_caller_id_name${destination_number},origination_caller_id_number${destination_number}}user/${caller_id_number:3}${domain_name}//condition/extension!--坐席外呼--extensionnamecall transfer phoneconditionfielddestination_numberexpression^(\d)$actionapplicationbridgedata{origination_caller_id_name${destination_number},origination_caller_id_number${destination_number}}user/sim${caller_id_number}${domain_name}//condition/extension修改后文件内容如下​五、添加用户文件位置C:\Program Files\FreeSWITCH\conf\directory\default.xml在51行userid1000typepointer/前面根据自己的手机号示例手机卡的号码是18873216143增加user id18873216143 typepointer/user idsim18873216143 typepointer/两行增加后的文件如下图所示后面手机app会自动获取手机SIM卡的手机号调用预设的接口拉取sim18873216143的账号密码后注册到这个FreeSwitch​C:\Program Files\FreeSWITCH\conf\directory\default目录中复制1000.xml两份分别重命名为《18873216143.xml》和《sim18873216143.xml》。依次打开这两个文件将内容中所有的1000字符串替换为18873216143和sim18873216143保存后即可。文件内容如下文件位置C:\Program Files\FreeSWITCH\conf\directory\default\18873216143.xml​文件位置C:\Program Files\FreeSWITCH\conf\directory\default\sim18873216143.xml​后面每添加一个新用户都按此章节加入对应节点和复制修改文件即可。修改完毕后记得重启FreeSWITCH进程或在FreeSWITCH进程中输入reloadxml后Enter回车重新加载xml配置即可。六、在线用户设置OPTIONS心跳检测文件位置C:\Program Files\FreeSWITCH\conf\sip_profiles\internal.xml取消屏蔽189行到195行增加对所有的在线用户开启每隔30s发送一次OPTIONS心跳的设置。由于SIP客户端基本工作在无线网络上需要SIP服务器或SIP客户端主动发送心跳并接收心跳应答来使双方都能够感知到对方的存活状态。若对方已失效则应由SIP客户端重发REGISTER信令进行重新注册以实现不间断的voip事件和通话服务。paramnameunregister-on-options-failvaluetrue/!--Send an OPTIONS packet to all registered endpoints--paramnameall-reg-options-pingvaluetrue/!--Send an OPTIONS packet to NATed registered endpoints. Can be true or udp-only.--paramnamenat-options-pingvaluetrue/paramnameregistration-thread-frequencyvalue30/paramnameping-mean-intervalvalue30/paramnameping-thread-frequencyvalue1/paramnamesip-options-respond-503-on-busyvaluetrue/paramnamesip-messages-respond-200-okvaluetrue/paramnamesip-subscribe-respond-200-okvaluetrue/修改后文件内容如下​详情可参考《介绍几种OPTIONS检测的方法》https://blog.csdn.net/qiuzhendezhen/article/details/131561364七、账号测试方式电脑上分别安装eyeBeam和X-Lite。将上述在FreeSwitch中配置的账号/密码和FreeSwitch本机IP和端口填写进去保存。我本机IP是172.16.80.141 默认端口是5060eyeBeam或X-Lite软电话会自动注册到FreeSwitch服务器中这样双方就可以直接随便输入一个号码如10086点击呼叫这样该呼叫就会直接转呼到另外一个软电话上。如下图所示​​在坐席18873216143中呼叫10086则坐席sim18873216143将收到来电显示对方号码是10086。此时FreeSwitch拨号计划中走的是【C:\Program Files\FreeSWITCH\conf\dialplan\default.xml】文件的【call transfer phone】坐席外呼的策略。用户在软电话中点击【Answer】或点击界面中数字盘上方的【AA】按钮即可正常接听。接听/拒接/接通挂断等操作均与正常软电话的操作一致语音音质也应该无异常。​八、蓝牙电话的整合方式蓝牙电话app的云平台接入的整合方式分为下述两种办法app登录账号的类型为“代理商”的可以自己在设置界面中手动开启【固定SIP账号密码】。如下图所示自己手动将上述sim18873216143的账号密码服务器等数据填写进去保存即可正常连接。​​app登录账号的类型为“个人”或“企业”的需自己实现一个http或https的接口使用GET传入手机号码返回json格式的对应SIP账号密码等信息。具体的写法和格式描述可查看下一篇章《蓝牙电话-通过Rest接口关联FreeSwitch中继SIP账号》示例如下https://api.33e9cloud.com/terminal/bluetooth/register/server/18873216143返回结果{sipRealm:xxx.com,dateCreated:2024/01/31 14:10:08,ipPort:172.16.80.141:5060,sipPhone:sim18873216143,pwd:1234,statusCode:0,notReversal:0}若前面章节中未在SIP服务器添加sim18873216143这个账号则GET查询的返回结果为{dateCreated:2024/01/31 14:13:49,statusCode:920100,represent:手机号不合法}实现这个http接口后使用【拨号器管理】app使用同样的app登录账号和密码登录进去后点击左侧菜单栏的【平台自定义管理】。在新界面的“用户列表”中点击“我自己”在平台属性的【SIP平台接口】中粘贴上述的http接口URL即可。如下图所示​​九、总结文章阐述了一种办法使用最简洁的方式让蓝牙电话的用户能第一时间的将所谓的“云平台”给部署出来并能实现正常的电话呼叫。至于正常通话的话单和录音理论上FreeSWITCH是默认支持的由于本文篇章有限此处不再赘述有兴趣的读者可以自己去配置。最后特意声明此文章及文章内阐述的方法仅为局域网内搭建蓝牙电话的云平台而使用。依照《中华人民共和国反电信诈骗法》等法律法规的要求任何单位和个人不得非法制造、买卖、提供或者使用“具有改变主叫号码虚拟拨号互联网电话违规接入公用电话网络等功能的设备、软件”。请各位读者和朋友不要将其接入互联网进行使用请勿触碰法律的红线谢谢。上一篇蓝牙电话方案-纯手机app方案和PC手机方案在价格和用户使用习惯上的差异手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心