05.02.2020

Założenia

Instancja aplikacji RocketChat hostowana prywatnie, tzw. self-hosted wraz z kilkoma agentami.

Problem

Algorytm przydzielania klientów próbuje wyrównać liczbę klientów przydzielonych dla każdego agenta używając licznika, który nie jest zerowany.

Przykład

Mamy 2 agentów: Jaś i Małgosia oraz pierwsze uruchomienie aplikacji (liczniki dla agentów wynoszą 0) Jaś odbył dzisiaj 3 rozmowy, więc licznik ma wartość 3. Małgosia także. Algorytm przydzielał im klientów po równo. Następnego dnia Jaś nie zalogował się do aplikacji i nie odbył żadnej rozmowy. Małgosia odbyła 3, a więc jej licznik wynosił 6 (Jasia licznik 3). Kolejnego dnia oboje zalogowali się do aplikacji, jednak algorytm skierował wszystkie rozmowy do Jasia. Tak aby wyrównać liczniki.

Rozwiązanie

Algorytm poprawiony jest w wersji hostowanej przez zespół RocketChat. Jednak “naprawa” mechanizmu jest dość prosta i możemy wykonać ją sami, bez zmiany kodu. Należy czyścić licznik rozmów każdego dnia. Poniższy skrypt clear_count.js można dodać do cron’a:

conn = new Mongo();
db = conn.getDB("rocketchat");

db.rocketchat_livechat_department_agents.update({username: "malgosia"},{$set:{'count':0}})
db.rocketchat_livechat_department_agents.update({username: "jas"},{$set:{'count':0}})

Uruchomienie: mongo --quiet clear_count.js