每註冊一個新會員,自動分配一個客服
客服一共有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的話就寫文件,每個客服用 "rn"
隔開取的規則跟上面一樣
謝邀,簡單寫了個函數,是想要這樣嗎?
<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>
輸出結果
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 ,其實就是一個機器問答系統,然後某個客服結束後,立即將隊列中的用戶分配過去,這樣不存在插隊或者其他麻煩的事情。同時輕鬆做到每個客服都能忙起來。
我也是剛接觸這方面的知識,答得不好還請大家多指正,謝謝