Modes de distribution
Lors de la création d’une stratégie de distribution, nous spécifions l’un des modes de distribution suivants pour définir la stratégie à utiliser lors de la distribution des tâches :
Type de tourniquet
Les tâches seront distribuées de manière circulaire afin que chaque rôle de travail disponible reçoive des tâches en séquence.
Mode inactif le plus long
Les tâches seront distribuées au rôle de travail qui est le moins utilisé en premier. S’il y a une liaison, nous allons choisir le rôle de travail qui a été disponible pendant plus longtemps. L’utilisation est calculée en tant qu’Load Ratio
avec l’algorithme suivant :
Ratio de charge = Agrégation de la capacité consommée par tous les travaux affectés au rôle de travail/Capacité totale du rôle de travail
Exemple
Supposons que chaque tâche chat
a été configurée pour consommer une capacité pour un rôle de travail. Une nouvelle tâche de conversation est mise en file d’attente dans le routeur de travail et les rôles suivants sont disponibles pour prendre la tâche :
Worker A:
Capacity = 5
ConsumedScore = 3 (Currently handling 3 chats)
LoadRatio = 3 / 5 = 0.6
LastAvailable: 5 mins ago
Worker B:
Capacity = 4
ConsumedScore = 3 (Currently handling 3 chats)
LoadRatio = 3 / 4 = 0.75
LastAvailable: 3 min ago
Worker C:
Capacity = 5
ConsumedScore = 3 (Currently handling 3 chats)
LoadRatio = 3 / 5 = 0.6
LastAvailable: 7 min ago
Worker D:
Capacity = 3
ConsumedScore = 0 (Currently idle)
LoadRatio = 0 / 4 = 0
LastAvailable: 2 min ago
Workers would be matched in order: D, C, A, B
Le rôle de travail D a le ratio de charge le plus bas (0), de sorte que le rôle de travail D recevra une tâche en premier. Les rôles de travail A et C sont liés au même ratio de charge (0,6). Toutefois, le rôle de travail C a été disponible pendant plus de temps (il y a 7 minutes) que le rôle de travail A (il y a 5 minutes), de sorte que le rôle de travail C sera mis en correspondance avant le rôle de travail A. Enfin, le rôle de travail B sera mis en correspondance en dernier, car le rôle de travail B a le taux de charge le plus élevé (0,75).
Meilleur mode des rôles de travail
Les rôles de travail les plus compétents pour gérer la mission sont sélectionnés en premier. Il est possible de personnaliser la logique de classement des rôles, avec une expression ou une fonction Azure permettant d’en comparer deux avec une règle de scoring. Consultez l’exemple
Lorsqu’une règle de scoring n’est pas fournie, ce mode de distribution utilise plutôt la méthode de scoring par défaut, qui évalue les rôles de travail en fonction de la façon dont les étiquettes et les sélecteurs du travail correspondent aux étiquettes du rôle de travail. Les algorithmes sont décrits ci-dessous.
Correspondance d’étiquette par défaut
Pour calculer un score basé sur les étiquettes du travail, nous incrémentons Match Score
de 1 pour chaque étiquette de travail qui correspond à une étiquette correspondante, puis divisez le nombre total d’étiquettes sur la tâche. Par conséquent, plus les étiquettes qui correspondent, plus un rôle de travail est élevé Match Score
. La Match Score
finale sera toujours une valeur comprise entre 0 et 1.
Exemple
Travail 1 :
{
"labels": {
{ "language": "english" },
{ "department": "sales" }
}
}
Rôle de travail A :
{
"labels": {
{ "language": "english" },
{ "department": "sales" }
}
}
Rôle de travail B :
{
"labels": {
{ "language": "english" }
}
}
Rôle de travail C :
{
"labels": {
{ "language": "english" },
{ "department": "support" }
}
}
Calcul :
Worker A's match score = 1 (for matching english language label) + 1 (for matching department sales label) / 2 (total number of labels) = 1
Worker B's match score = 1 (for matching english language label) / 2 (total number of labels) = 0.5
Worker C's match score = 1 (for matching english language label) / 2 (total number of labels) = 0.5
Le rôle de travail A sera mis en correspondance en premier. Ensuite, le rôle de travail B ou C sera mis en correspondance, selon qui était disponible pendant plus de temps, car le score de correspondance est lié.
Correspondance du sélecteur de rôle de travail par défaut
Dans le cas où la tâche contient également des sélecteurs de rôles de travail, nous allons calculer Match Score
en fonction de LabelOperator
de ce sélecteur de rôle.
Opérateurs d’étiquette Equal/notEqual
Si le sélecteur de rôle de travail a le LabelOperator
Equal
ou NotEqual
, nous incrémentons le score de 1 pour chaque étiquette de travail qui correspond à ce sélecteur de rôle, de la même manière que pour le Label Matching
plus haut.
Exemple
Travail 2 :
{
"workerSelectors": [
{ "key": "department", "labelOperator": "equals", "value": "billing" },
{ "key": "segment", "labelOperator": "notEquals", "department": "vip" }
]
}
Rôle de travail D :
{
"labels": {
{ "department": "billing" },
{ "segment": "vip" }
}
}
Rôle de travail E :
{
"labels": {
{ "department": "billing" }
}
}
Rôle de travail F :
{
"labels": {
{ "department": "sales" },
{ "segment": "new" }
}
}
Calcul :
Worker D's match score = 1 (for matching department selector) / 2 (total number of worker selectors) = 0.5
Worker E's match score = 1 (for matching department selector) + 1 (for matching segment not equal to vip) / 2 (total number of worker selectors) = 1
Worker F's match score = 1 (for segment not equal to vip) / 2 (total number of labels) = 0.5
Le rôle de travail E sera mis en correspondance en premier. Ensuite, le rôle de travail D ou F sera mis en correspondance, selon qui était disponible pendant plus de temps, car le score de correspondance est lié.
Autres opérateurs d’étiquettes
Pour les sélecteurs de rôles de travail utilisant des opérateurs qui comparent par magnitude (GreaterThan
/GreaterThanEqual
/LessThan
/LessThanEqual
), nous incrémenterons le rôle Match Score
par une quantité calculée à l’aide de la fonction logistique (Voir la figure 1). Le calcul est basé sur la quantité de valeur d’étiquette du rôle de travail qui dépasse la valeur du sélecteur de rôle de travail ou une quantité inférieure s’il ne dépasse pas la valeur du sélecteur de rôle de travail. Par conséquent, plus le sélecteur de rôle de travail a une valeur supérieure au rôle de travail, et plus le degré est élevé, plus le score sera élevé.
Fig. 1. Fonction logistique
La fonction suivante est utilisée pour les opérateurs GreaterThan ou GreaterThanEqual :
MatchScore(x) = 1 / (1 + e^(-x)) where x = (labelValue - selectorValue) / selectorValue
La fonction suivante est utilisée pour les opérateurs LessThan ou LessThanEqual :
MatchScore(x) = 1 / (1 + e^(-x)) where x = (selectorValue - labelValue) / selectorValue
Exemple
Tâche 3 :
{
"workerSelectors": [
{ "key": "language", "operator": "equals", "value": "french" },
{ "key": "sales", "operator": "greaterThanEqual", "value": 10 },
{ "key": "cost", "operator": "lessThanEqual", "value": 10 }
]
}
Rôle de travail G :
{
"labels": {
{ "language": "french" },
{ "sales": 10 },
{ "cost": 10 }
}
}
Rôle de travail H :
{
"labels": {
{ "language": "french" },
{ "sales": 15 },
{ "cost": 10 }
}
}
Rôle de travail I :
{
"labels": {
{ "language": "french" },
{ "sales": 10 },
{ "cost": 9 }
}
}
Calcul :
Worker G's match score = (1 + 1 / (1 + e^-((10 - 10) / 10)) + 1 / (1 + e^-((10 - 10) / 10))) / 3 = 0.667
Worker H's match score = (1 + 1 / (1 + e^-((15 - 10) / 10)) + 1 / (1 + e^-((10 - 10) / 10))) / 3 = 0.707
Worker I's match score = (1 + 1 / (1 + e^-((10 - 10) / 10)) + 1 / (1 + e^-((10 - 9) / 10))) / 3 = 0.675
Les trois rôles de travail correspondent aux sélecteurs sur la tâche qui peuvent y travailler. Toutefois, nous pouvons voir que le rôle de travail H dépasse la valeur du sélecteur « ventes » d’une marge de 5. Pendant ce temps, le rôle de travail I dépasse uniquement la valeur du sélecteur de coût par une marge de 1. Le rôle de travail G ne dépasse pas toutes les valeurs du sélecteur. Par conséquent, le rôle de travail H sera mis en correspondance en premier, suivi du rôle de travail I et enfin du rôle de travail G.