mirror of
https://gitee.com/zhc02/timely_service.git
synced 2025-06-28 13:21:29 +08:00
core
This commit is contained in:
parent
e3af3c3212
commit
5ba57f4d0b
@ -1,4 +1,7 @@
|
|||||||
# timely客服系统
|
# timely客服系统
|
||||||
|
#### Timely交流群
|
||||||
|
|
||||||
|
QQ:850286851
|
||||||
|
|
||||||
#### 介绍
|
#### 介绍
|
||||||
基于TP5.1+swoole写的客服系统,目前开放demo测试版 ,更多功能之后会基于此版本慢慢完善
|
基于TP5.1+swoole写的客服系统,目前开放demo测试版 ,更多功能之后会基于此版本慢慢完善
|
||||||
@ -35,8 +38,5 @@ http://www.chat.cnavd.com/ 点击客服测试自动匹配客服服务
|
|||||||
2. 在项目根目录运行 mkdir -m 777 runtime
|
2. 在项目根目录运行 mkdir -m 777 runtime
|
||||||
3. 在项目根目录运行php think chat start 支持 start | start -d |restart |stop
|
3. 在项目根目录运行php think chat start 支持 start | start -d |restart |stop
|
||||||
4. 然后浏览器访问 www.xxxx.com/index/kefu/index
|
4. 然后浏览器访问 www.xxxx.com/index/kefu/index
|
||||||
#### Timely交流群
|
|
||||||
|
|
||||||
QQ:850286851
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace app\swoole\command;
|
namespace app\swoole\command;
|
||||||
|
|
||||||
|
|
||||||
|
use app\swoole\service\Event;
|
||||||
use Swoole\Process;
|
use Swoole\Process;
|
||||||
use think\console\Command;
|
use think\console\Command;
|
||||||
use think\console\Input;
|
use think\console\Input;
|
||||||
@ -144,7 +145,7 @@ class Chat extends Command
|
|||||||
$this->output->writeln('<error>no swoole server process running.</error>');
|
$this->output->writeln('<error>no swoole server process running.</error>');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
dump(Event::$online);exit;
|
||||||
$this->output->writeln('Reloading swoole server...');
|
$this->output->writeln('Reloading swoole server...');
|
||||||
Process::kill($pid, SIGUSR1);
|
Process::kill($pid, SIGUSR1);
|
||||||
$this->output->writeln('> success');
|
$this->output->writeln('> success');
|
||||||
|
@ -14,7 +14,6 @@ use think\Exception;
|
|||||||
use think\facade\Log;
|
use think\facade\Log;
|
||||||
use Logic\KefuLogic;
|
use Logic\KefuLogic;
|
||||||
use exception\LogicException;
|
use exception\LogicException;
|
||||||
use Logic\ServiceLogic;
|
|
||||||
use exception\BaseException;
|
use exception\BaseException;
|
||||||
use Logic\QueueLogic;
|
use Logic\QueueLogic;
|
||||||
use Logic\Visitor;
|
use Logic\Visitor;
|
||||||
@ -55,7 +54,7 @@ class Event
|
|||||||
* @param $fd 客户端标识
|
* @param $fd 客户端标识
|
||||||
* @param $data 请求数据
|
* @param $data 请求数据
|
||||||
*/
|
*/
|
||||||
public static function kefuConnection($fd, $data, $server)
|
public static function kefuLogin($fd, $data, $server)
|
||||||
{
|
{
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -72,6 +71,7 @@ class Event
|
|||||||
self::$kefu[$data['uid']]['visitor_fds'][$item['visitor_id']] = $item['client_id'];
|
self::$kefu[$data['uid']]['visitor_fds'][$item['visitor_id']] = $item['client_id'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Log::record('WebSocket请求开始,数据信息[' . json_encode($frame) . ']');
|
||||||
QueueLogic::updateQueueingkefuClientid($kefu_code, $fd);
|
QueueLogic::updateQueueingkefuClientid($kefu_code, $fd);
|
||||||
return self::reposon($fd, 200, '客服上线成功', [], 'kefu_online');
|
return self::reposon($fd, 200, '客服上线成功', [], 'kefu_online');
|
||||||
} catch (BaseException $e) {
|
} catch (BaseException $e) {
|
||||||
@ -178,7 +178,7 @@ class Event
|
|||||||
return self::reposon($fd, 200, $kefu_info['msg'], $kefu_info['data'], 'visitorToKefu');
|
return self::reposon($fd, 200, $kefu_info['msg'], $kefu_info['data'], 'visitorToKefu');
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
Db::rollback();
|
Db::rollback();
|
||||||
Log::info('分配客服数据错误信息:' . $e->getMessage());
|
Log::error('分配客服数据错误信息:' . $e->getMessage());
|
||||||
//取消客服在线状态
|
//取消客服在线状态
|
||||||
KefuLogic::setKefuOnlineStatus(ltrim($kefu_info['data']['kefu_code'], 'KF_'), '', 0);
|
KefuLogic::setKefuOnlineStatus(ltrim($kefu_info['data']['kefu_code'], 'KF_'), '', 0);
|
||||||
return self::reposon($fd, 401, '请重新尝试分配客服1', [], 'visitorToKefu');
|
return self::reposon($fd, 401, '请重新尝试分配客服1', [], 'visitorToKefu');
|
||||||
@ -190,7 +190,7 @@ class Event
|
|||||||
Db::commit();
|
Db::commit();
|
||||||
} catch (BaseException $e) {
|
} catch (BaseException $e) {
|
||||||
Db::rollback();
|
Db::rollback();
|
||||||
Log::record('分配客服数据错误信息:' . $e->getMessage());
|
Log::error('分配客服数据错误信息:' . $e->getMessage());
|
||||||
return self::reposon($fd, 402, '请重新尝试分配客服2', [], 'visitorToKefu');
|
return self::reposon($fd, 402, '请重新尝试分配客服2', [], 'visitorToKefu');
|
||||||
}
|
}
|
||||||
unset($customer, $kefu_info);
|
unset($customer, $kefu_info);
|
||||||
|
@ -22,32 +22,27 @@ class Service
|
|||||||
echo "server: handshake success with fd{$request->fd}\n";
|
echo "server: handshake success with fd{$request->fd}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function onMessage($server, $frame)
|
public function onMessage($server, $frame)
|
||||||
{
|
{
|
||||||
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
|
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
|
||||||
try {
|
try {
|
||||||
Log::record('WebSocket请求开始,请求信息[' . json_encode($frame) . ']');
|
Log::info('WebSocket请求开始,请求信息[' . json_encode($frame) . ']');
|
||||||
$data = json_decode($frame->data, true);
|
$data = json_decode($frame->data, true);
|
||||||
$cmd = $data['cmd'];
|
$cmd = $data['cmd'];
|
||||||
$messge = $data['data'];
|
$messge = $data['data'];
|
||||||
$resut = Event::$cmd($frame->fd, $messge,$server);
|
$resut = Event::$cmd($frame->fd, $messge,$server);
|
||||||
$server->push($resut['fd'], $resut['data']);
|
$server->push($resut['fd'], $resut['data']);
|
||||||
} catch (BaseException $e) {
|
} catch (BaseException $e) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $e->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $e->getMessage().'错误地址:'. $e->getFile().$e->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $e->getFile().$e->getLine());
|
|
||||||
$res = ['code' => $e->getCode(), 'msg' => $e->getMessage(), 'data' => '', 'cmd' => ''];
|
$res = ['code' => $e->getCode(), 'msg' => $e->getMessage(), 'data' => '', 'cmd' => ''];
|
||||||
} catch (\Error $er) {
|
} catch (\Error $er) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $er->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $er->getMessage().'错误地址:'. $er->getFile().$er->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $er->getFile().$er->getLine());
|
|
||||||
$res = ['code' => $er->getCode(), 'msg' => $er->getMessage(), 'data' => '', 'cmd' => ''];
|
$res = ['code' => $er->getCode(), 'msg' => $er->getMessage(), 'data' => '', 'cmd' => ''];
|
||||||
} catch (\Exception $era) {
|
} catch (\Exception $era) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $era->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $era->getMessage().'错误地址:'. $era->getFile().$era->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $era->getFile().$era->getLine());
|
|
||||||
$res = ['code' => $era->getCode(), 'msg' => $era->getMessage(), 'data' => '', 'cmd' => ''];
|
$res = ['code' => $era->getCode(), 'msg' => $era->getMessage(), 'data' => '', 'cmd' => ''];
|
||||||
} catch (\ErrorException $ere) {
|
} catch (\ErrorException $ere) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $ere->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $ere->getMessage().'错误地址:'. $ere->getFile().$ere->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $ere->getFile().$ere->getLine());
|
|
||||||
$res = ['code' => $ere->getCode(), 'msg' => $ere->getMessage(), 'data' => '', 'cmd' => ''];
|
$res = ['code' => $ere->getCode(), 'msg' => $ere->getMessage(), 'data' => '', 'cmd' => ''];
|
||||||
}
|
}
|
||||||
if(isset($res)){
|
if(isset($res)){
|
||||||
@ -60,28 +55,20 @@ class Service
|
|||||||
{
|
{
|
||||||
$response->end("<h1>Hello Swoole. #" . rand(1000, 9999) . "</h1>");
|
$response->end("<h1>Hello Swoole. #" . rand(1000, 9999) . "</h1>");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onClose($server, $fd)
|
public function onClose($server, $fd)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Log::record('WebSocket关闭请求开始,请求信息[' . json_encode($server) . ']');
|
Log::info('WebSocket关闭请求开始,请求信息[' . json_encode($server) . ']');
|
||||||
$resut = Event::disconnect($fd,$server);
|
$resut = Event::disconnect($fd,$server);
|
||||||
echo "client {$fd} closed\n";
|
echo "client {$fd} closed\n";
|
||||||
} catch (BaseException $e) {
|
} catch (BaseException $e) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $e->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $e->getMessage().'错误地址:'. $e->getFile().$e->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $e->getFile().$e->getLine());
|
|
||||||
|
|
||||||
} catch (\Error $er) {
|
} catch (\Error $er) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $er->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $er->getMessage().'错误地址:'. $er->getFile().$er->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $er->getFile().$er->getLine());
|
|
||||||
|
|
||||||
} catch (\Exception $era) {
|
} catch (\Exception $era) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $era->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $era->getMessage().'错误地址:'. $era->getFile().$era->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $era->getFile().$era->getLine());
|
|
||||||
|
|
||||||
} catch (\ErrorException $ere) {
|
} catch (\ErrorException $ere) {
|
||||||
Log::record('WebSocket请求异常,异常信息' . $ere->getMessage());
|
Log::error('WebSocket请求异常,异常信息:' . $ere->getMessage().'错误地址:'. $ere->getFile().$ere->getLine());
|
||||||
Log::record('WebSocket请求异常,异常信息' . $ere->getFile().$ere->getLine());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user