由于FreeSWITCH官方已经不再维护FreeSWITCH php esl模块了,但是通过mod_event_socket仍然可以使用php连接;我们可以使用 Workerman 作为中间件,进行连接网站与FreeSWITCH,实现在网站拨号、显示当前话机状态(空闲、振铃、通话、来电)等信息。
mod_event_socket是一个基于TCP的接口来控制FreeSWITCH。默认值是绑定到127.0.0.1端口8021,默认密码是ClueCon。
开发思路:
1、用 Workerman 创建一个 websocket 服务,对自己的网站进行服务;
2、再用 Workerman 创建一个客户端去连接 FreeSWITCH服务器的 mod_event_socket,
代码示例
<?php use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; $worker = new Worker ( 'websocket://0.0.0.0:5678' ); $worker->onWorkerStart=function($worker){ //链接freeswitich 服务器 默认 tcp 8021 端口 密码:ClueCon $fsconn = new AsyncTcpConnection('tcp://127.0.0.1:8021'); //workerman 与freeswitch 在同一服务器,不同时输入正确IP地址 $fsconn->onMessage = function($fsconn, $data) { $array = array(" "," ","\t","\n","\r"); $content_type= str_replace($array, '', $data); if ($content_type == "Content-Type:auth/request") { $re=$fsconn->send("auth ClueCon\r\n\r\n"); $re=$fsconn->send("event json ALL\r\n\r\n"); //订阅所有的事件,项目中可以有选择订阅 } }; $fsconn->connect(); }; $worker->onMessage = function ($connection, $data) { //TODO //此处接受网站发来的消息,如外呼、注册等消息 //可参考向指定客户端发送消息案例 http://doc.workerman.net/faq/send-data-to-client.html }; Worker::runAll ();
前端用 WebSocket 连接服务器的 5678端口,参考 https://www.runoob.com/html/html5-websocket.html
本文收集于网络,仅供技术交流使用,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容, 欢迎发送邮件至 admin@webse.cn 举报,一经查实,本站将立刻删除涉嫌侵权内容,本文链接:https://webse.cn/15844.html
评论列表(3条)
你好,请问在websocket的Message回调中,如何维护子进程生成的tcp客户端?
比如在websocket的回调中,收到网站发出的拨号指令,如何调用子进程建立的tcp客户端,把指令传递给freeswitch?
@xiaopi:可以使用 websocket 作为服务,让网站进行链接,再把他当作客户端链接 FS