Files d’attente
Nous continuons notre série sur Asterisk et nous dirigeons vers une fonctionnalité riche dans le traitement d’appel multiple : la file d’attente.
Une file d’attente est nécessaire lorsque l’on souhaite accueillir sur le système téléphonique des appels à destination d’un groupe d’agent, dont le nombre peut être variable, sans perdre d’appel. Il est donc nécessaire pour cette application de permettre la mise en attente des appelants, idéalement en leur proposant de les accompagner
en musique. La complexité principale est liée au souhait que les agents puissent entrer et sortir de la file en fonction de leur service et que l’on puisse gérer à un instant donné plus d’appel entrant qu’il n’y a effectivement d’agent disponible.
Le principe de file d’attente dans Asterisk est mise en oeuvre sous la forme d’une queue. Plusieurs files peuvent être configurées avec des paramètres différents, un agent pouvant faire partie de plusieurs files à un instant donné. Le fichier queues.conf va servir à définir les files et leur comportement, nous associerons ensuite des extensions spécifique à la gestion des agents et à l’entrée des appelants dans la file.
Configuration des files d’attente
Parmi les paramètres principaux et ceux que je trouve le plus intéressant on va trouver les suivants.
Généraux
strategy = leastrecent
La stratégie de distribution des appels permet de modifier le comportement de la file face à l’arrivée de nouveaux appels. On peut choisir de faire sonner tous les postes actuellement enregistrés (ringall), typiquement dans un centre d’urgence, dans un centre d’appel on préférera opter pour une distribution basée sur l’ordre (roundrobin ou rrmemory), l’agent libre depuis le plus longtemps (leastrecent) ou celui qui a pris le moins d’appel (fewestcalls). C’est probablement dans l’un de ces deux derniers que vous trouverez l’arrangement le plus juste. Enfin on peut choisir un agent au hasard (random), celui-ci ne faisant pas forcement les choses bien, la fonction est a utiliser avec précaution. On peut néanmoins l’envisager dans le cas d’un tirage au sort.
maxlen = 10 joinempty = no leavewhenempty = yes
Ces paramètres spécifient comment faire entrer des appels dans la file d’attente. La taille de la file doit idéalement être adaptée au nombre d’agent généralement présent pour répondre. On peut également spécifier que faire lorsque la file est vide d’agent, au niveau de l’entrée et de la sortie forcée des appelants.
Pour l’appelant
announce-frequency = 60 announce-holdtime = yes announce-round-seconds = 30
Ces paramètres permettre de donner de l’information à l’appelant pendant son attente. En complément de la musique que nous pourrons lui proposer, toutes les 60 secondes on lui donnera une indication sur sa position dans la file d’attente ainsi qu’une estimation du temps à 30 secondes près. Attention à l’utilisation des deux derniers paramètres qui sont difficiles à manipuler si la file d’attente est courte
Pour l’agent
timeout = 10
Le timeout spécifie le temps que le téléphone d’un agent sonne si l’appel lui est présenté. Il est conseillé de ne pas mettre une valeur trop importante, ainsi, si l’agent n’est pas à son poste ou occupé à autre chose, alors l’appel pourra passer à un autre agent sans pour autant impacter de façon trop importante l’attente de l’appelant.
wrapuptime = 60
Ce délai est accordé à l’agent à la fin d’un appel avant de pouvoir lui présenter un nouvel appel. En fonction du nombre d’agent, il faut adapter cette valeur afin de laisser le temps à l’agent d’effectuer un travail relatif à l’appel qu’il vient de traiter, par exemple une saisie de commentaire ou l’envoi d’un courriel. Une valeur de 0 (defaut) implique que l’agent est remis immédiatement en ligne, cas fréquent dans les centres d’appel.
annonce = mesg-queue-support reportholdtime = yes
Ces options sont intéressantes car elles permettent d’affecter un agent à plusieurs files d’attente sans pour autant qu’il ne soit perdu lorsqu’il prend un appel. En effet, un message vocal spécifique précèdera toute prise d’appel lui indiquant idéalement d’où vient l’appelant. En complément on lui indiquera quel à été le délai d’attente de son appelant, ainsi il pourra adapter son discours.
Etat de la file
A la demande nous pouvons vérifier sur la console (asterisk -r) une file d’attente donnée avec la commande
base*CLI> show queue support support has 4 calls (max unlimited) in 'leastrecent' strategy (6s holdtime), W:0, C:1, A:0, SL:0.0% within 0sMembers: IAX2/203 (dynamic) (Not in use) has taken 2 calls (last was 582 secs ago) IAX2/204 (dynamic) (Not in use) has taken 3 calls (last was 14 secs ago) Callers: 1. SIP/220-f7a4 (wait: 0:32, prio: 0)
En utilisant un outil de monitoring temps réel (comme Asteriskguru Switchboard), on observe le remplissage des files.
Acheminement d’appel vers une file
Maintenant que la file d’attente est construite, il nous faut y diriger des appels, ceci est effectué à l’aide de la commande Queue(). Par exemple:
exten => 809,1,Goto(queue-support,s,1)[queue-support] exten => s,1,Answer() exten => s,n,Queue(support-produit)
De même on peut utiliser les commandes de gestion des agents dans la file afin de permettre à ceux-ci de s’insérer et de s’ôter de la file. Utilisés avec le nom de la file comme seul paramètre, l’extension d’appel est utilisé, sinon, il est possible de la spécifier. Deux autres fonctions permettent de mettre un agent en pause (PauseQueueMember) et de le remettre en activité (UnpauseQueueMember), ces fonctions sont notamment utilisées
lorsque les agents peuvent appartenir à plusieurs files, il leur est alors possible de suspendre leur activité de l’ensemble des files pour une interruption.
[agents] exten => 806,1,AddQueueMember(support-produit) exten => 806,2,Hangup()exten => 807,1,RemoveQueueMember(support-produit) exten => 807,2,Hangup()
Gestion de qualité de service
La gestion de file d’attente nécessite de trouver un point d’équilibre entre le nombre d’agent et l’attente dans la file pour les appelants. Une piste d’étude consiste en la mise en place de plusieurs points d’entrée pour une même file d’attente, ceci fonctionne si le nombre d’agent est élevé (disons > 10).L’utilisation de la variable
SetVar(QUEUE_PRIO=2)
Plus sa priorité est importante, plus l’appel a de chance d’être servi. On peut utiliser cette affectation en fonction de l’extension appelée ou de l’identification de l’appelant (sur son numéro ou sur un code demandé et saisi au clavier en DTMF).
De même, on peut spécifier un poids de traitement aux files d’attente. Lorsque ce mécanisme est mis en oeuvre il est alors possible d’effectuer un arbitrage entre un agent appartenant à plusieurs files et devenant libre (voir weight dans queues.conf).
Exemple de définition de file
dans queues.conf
[general] persistentmembers = yes[support-produit] strategy = leastrecent timeout = 10 retry = 15 wrapuptime=30 maxlen = 10 joinempty = yes leavewhenempty = yes annonce = mesg-queue-support reportholdtime = yes
|
Posté par: Alexandre Chauvin-Hameau, le 21/03/2006 Trackback | Popularité: 21% marqué 1.2, asterisk, file, plan de numérotation et queues.conf |
|







(8 votes, average: 3.88 out of 5)
