A propos | Laboratoire | Voisinage | Meilleurs articles | Nous aider | Forums

Panoramisk / Le druide de la VoIP 

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 (où est remplacé par le nom de la file en question). Le résultat peut ressembler à :

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 permettra à chaque appel entrant de lui adjoindre un niveau de priorité dans la file, par défaut 0 est affecté.

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é: 38%
marqué , , , et
AddThis Social Bookmark Button
UselessNothing newInformativeLearned a lotAmazingly helpful (7 votes, average: 3.86 out of 5)
Loading ... Loading ...

Voir aussi

Et pourquoi pas

© 2008 Panoramisk | Creative Commons License wordpress logo