每注册一个新会员,自动分配一个客服
客服一共有3个(以后会增加更多客服) 怎样处理?
第一个新会员, 客服1
第二个新会员,客服2
第三个新会员,客服3
第四个新会员,客服1
...
我是先查询出客服表中所有客服,然后更新新注册会员表中客服字段。
现在是怎样让之间一一对应?
每注册一个新会员,自动分配一个客服
客服一共有3个(以后会增加更多客服) 怎样处理?
第一个新会员, 客服1
第二个新会员,客服2
第三个新会员,客服3
第四个新会员,客服1
...
我是先查询出客服表中所有客服,然后更新新注册会员表中客服字段。
现在是怎样让之间一一对应?
请问要不要考虑 客服闲置状态
比如客服 a b c
这个时候来了3个人 分给了a b c
此时c 已经帮处理完自己的事情了
这时 又来了第四个人 分给谁
若不存在此情况
<code>$number = file_get_contents("log.txt"); file_put_contents("log.txt", ($number +1)%3);</code>
配合redis来做吧。
使用List结构,先构建客服list,新用户进来的时候RPOP一个队尾客服使用,然后在把这个客服LPUSH到队头去
当新增客服的时候,你如果想序号顺序不变比如目前是 2 3 1,新加入的4后List要变成 2 3 4 1这时候就要去除队列进行逻辑判断下。如果不需要就直接LPUSH 到队头。
不用redis的话就写文件,每个客服用 "\r\n"
隔开取的规则跟上面一样
谢邀,简单写了个函数,是想要这样吗?
<code><?php function distribution_cs($user_id,$cs_total=3){ if($user_id%$cs_total==0){ return $cs_total; } return $user_id%$cs_total; } echo distribution_cs(1).","; echo distribution_cs(2).","; echo distribution_cs(3).","; echo distribution_cs(4).","; echo distribution_cs(5).","; echo distribution_cs(6).","; echo distribution_cs(7).","; echo distribution_cs(8).","; echo distribution_cs(9).","; echo distribution_cs(10).","; echo distribution_cs(11).","; echo distribution_cs(12).","; echo distribution_cs(13).","; echo distribution_cs(14,4).","; echo distribution_cs(15,4).","; echo distribution_cs(16,4).","; echo distribution_cs(17,4).","; echo distribution_cs(18,4).","; echo distribution_cs(19,4).","; echo distribution_cs(20,4).","; echo distribution_cs(21,5).",";</code></code>
输出结果
1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,4,1,
<code><?php class serviceFactory{ private $num; private $count = 0; function __construct($num){ $this->setNum($num); } function getService(){ if($this->count >= $this->num){ $this->count = 0; } $this->count ++; return $this->count; } function setNum($num){ $this->num = $num; } } $factory = new serviceFactory(3); echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; $factory->setNum(4); echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),",";</code>
超级简单的hash算法来一个, 客服个数 n 新注册用户id m 然后分配的客服为 m % n + 1 即可
之前写过一个类似的,不过不是客服,这里就不贴代码了,讲讲个人的做法了:
最终目的是让每个客服都忙起来,又不能让用户久等。
所以,新来一个用户,就给他分配一个:
<code>if ( 空闲状态的客服数 >= 0 ){ // 分配给最先进入空闲状态的那个客服 }else{ // 说明现在每个客服都有用户在咨询 // 并且可能某些客服下还有在排队等待的用户 获取每个客服 **当前咨询任务** 的开始时间 将这个用户分配给 当前资讯任务 的开始时间最早的 并且 后面排队人数最少的哪个客服 // 其实上面还有一个权重的问题,比如 A 客服 当前客户资讯任务开始时间比 B 早 2分钟,但是 A 后面排队的人数比 B 客服多 1个,这就要靠 权重值 来计算是分配给 A 还是 B。 } </code>
个人觉得哈,可以先分配虚拟客服 X ,其实就是一个机器问答系统,然后某个客服结束后,立即将队列中的用户分配过去,这样不存在插队或者其他麻烦的事情。同时轻松做到每个客服都能忙起来。
我也是刚接触这方面的知识,答得不好还请大家多指正,谢谢