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

Panoramisk / Le druide de la VoIP 

Agents et centre d’appel

Dans un article précédent nous avons vu comment créer des files d’attentes et insérer des postes dans ces files. Le chemin vers notre premier centre d’appel est désormais tracé, mais il nous manque les outils nécessaires à une gestion différenciée des agents. En effet, pour l’instant nous savons comment faire en sorte qu’un poste puisse recevoir des appels mis en file d’attente, ce n’est pas suffisant pour un centre d’appel même si cette solution est idéale pour une gestion simple de type entraide, par exemple pour un standard avec débordement.

Contexte

Tout d’abord il me faut définir ce qu’est un centre d’appel dans notre exemple: il s’agit de servir des appels en entrée, présentés sur un ou plusieurs numéros et acheminés dans une ou plusieurs files d’attente. Afin de prendre en charge ces appels, il est nécessaire d’avoir des agents et des téléphones. Le centre d’appel doit offrir des fonctions simples permettant à un agent d’entrer dans le système et d’en sortir, de façon authentifiée et ce à partir de n’importe quel poste banalisé.

Nous allons donc mettre en œuvre des postes IP simple (notez qu’ils pourraient également être analogiques) et avec le moins de service possible, ceux-ci ne sont pas associés à une personne et ne proposent donc pas de compléments comme la boite vocale par exemple. S’il on souhaite mixer l’usage d’un poste physique sur une application de centre d’appel tout en conservant des fonctions avancées de téléphonie et liées à la personne, on utilisera alors des postes capables de gérer plusieurs lignes avec un enregistrement SIP par ligne, ainsi, une ligne pourra être banalisée pour le centre d’appel et la seconde associée à la personne. Nous pourrions également mettre en place un contexte spécifique pour gérer l’ensemble des postes associés à l’activite de centre d’appel et ainsi gérer la sécurité relative à ceux-ci.

Les postes

La gestion de nos postes simples est effectuée à partir des configurations sip.conf et extensions.conf. La partie sip.conf est standard et ne nécessite pas de changement par rapport à ce que l’on a pu voir précédemment. Dans extensions.conf, on veillera à gérer le poste avec un simple Dial:

exten => 310,1,Dial(SIP/310)

Ce point est important car l’appel va être présenté à un agent certes, mais celui-ci est localisé à un instant donné sur un poste (extension au sens Asterisk). Si la configuration du poste est complexe, lorsqu’un appel est présenté à l’agent en provenance de la file d’attente, il sera traité par Asterisk en déroulant les actions liées à une extension.

Les agents

Un agent dans Asterisk est une entité capable de joindre une file d’attente et de prendre des appels. Il est représenté par une extension spécifique sous la forme Agent/%id%. L’identification de l’agent n’est pas et ne doit en toute rigueur pas être liée au poste attribué à l’agent puisque nous sommes parti du prédicat que les agents pouvaient utiliser de façon indifférenciée un poste ou un autre. Par exemple, sur un centre de moins de 100 postes, nous utiliserons un plan d’extension à 3 chiffres et un plan d’agent à 3 chiffres. Les postes seront numérotés de 200 à 299, les agents de 400 à 499. A un instant donné, l’agent 412 sera utilisateur du poste téléphonique 256, le lendemain, il utilisera le poste 243 mais aura toujours l’identifiant 412. Dans le jargon, nous appelons souvent cette fonctionnalité le “free-seating”.

Dans le fichier de configuration agents.conf, nous allons définir les agents de notre système et certaines caractéristiques globales comme l’enregistrement systématique ou l’enrichissement des ticket d’horodatage. Les éléments principaux sont les suivants:

[general]
persistentagents=yes[agents]
agent => 421,9119,Alex Chauvin
agent => 422,2412,Stefano Campagna

Ce fichier compose la base des agents de notre système, elle n’est qu’administrative pour l’instant aucun agent n’est effectivement dans le système prêt à prendre des appels. Le premier paramètre de la ligne agent est l’identifiant qui sera demandé lors de la connexion et le second paramètre est le mot de passe permettant une identification simple. Attention, ceci n’est pas assimilable à de la sécurité puisque le réseau est écoutable et que les impulsions DTMF transportant le pin code passent dans le flux de conversation ou dans la signalisation SIP. Ce pin code offre néanmoins la possibilité de supprimer les erreurs de login des agents et est donc conseillé.

La gestion des agents

Il nous faut maintenant un moyen permettant aux agents d’entrer dans le système et d’en sortir à leur convenance. Ce modèle est basé sur le collaboratif et non la contrainte. Dans cette même veine, deux types de gestion d’agent peuvent être mise en place dans Asterisk, l’agent décroché et l’agent en rappel.

Dans le premier cas, l’agent une fois enregistré a sa ligne décrochée et on peut lui envoyer de la musique d’attente. Lorsqu’un appel lui sera présenté, un bip l’en informera et il pourra prendre l’appel par #. A la fin de l’appel, lorsque la ligne est libérée ou que l’agent presse #, le poste revient en musique d’attente. Si le combiné est raccroché, l’agent est alors déconnecté du système. Cette technique impose un très grand nombre d’appel par agent et une
utilisation obligatoire du casque, c’est donc le cas d’un centre d’appel type 118.

Dans le second cas, l’agent est enregistré, mais son téléphone reste libre. Lorsqu’un appel est présenté, le poste sonne et on peut procéder à un décrocher traditionnel pour prendre l’appel. A la fin de l’appel, raccrocher le combiné laissera l’agent connecté au système. Cette solution est beaucoup moins intrusive et plus adaptée à notre modèle français de fonctionnement.

Le choix d’une méthode ou de l’autre se fait au niveau de la fonction utilisée pour l’enregistrement de l’agent, dans le premier cas on utiliser AgentLogin, dans le second AgentCallbackLogin.

Voici maintenant un exemple de gestion de cet enregistrement avec insertion automatique dans la file d’attente.

exten => 810,1,AgentCallbackLogin(|s|${CALLERIDNUM}@internal)
exten => 810,2,set(agent=${AGENTBYCALLERID_${CALLERIDNUM}})
exten => 810,3,AddQueueMember(support,Agent/${agent})
exten => 810,4,Playback(agent-loginok)
exten => 810,5,Hangup()

Les actions sont les suivantes:

  1. on authentifie l’utilisateur et le connecte en mode callback sur l’extension présentée (le poste depuis lequel il passe son appel et présent dans CALLERIDNUM). Ici, j’utilise le contexte internal pour cette prise d’appel, on pourrait tout à fait créer un contexte spécifique à nos postes de centre d’appel pour simplifier la gestion. Cette phase va demander à l’agent son numéro d’identification ainsi que son pin code pour le valider.
  2. lors de la phase 1, la variable interne AGENTBYCALLERID_212 va être crée si l’agent utilise le poste 212. Cette variable contiendra le numéro d’identification de l’agent, par exemple 421 pour Alex Chauvin. On construit cette variable et la stocke temporairement dans agent.
  3. on ajoute dans la file d’attente support notre agent identifié comme Agent/421. Ceci permet de pouvoir traiter de façon spécifique les appels entrant dans la file d’attente si celle-ci est vide d’agent pouvant prendre l’appel. Si on affecte directement des agents dans la file au niveau du fichier queues.conf, cette gestion n’est alors pas possible.
  4. on indique à l’agent qu’il est bien connecté au système
  5. et on raccroche proprement la ligne.

La gestion de la déconnexion de l’agent nécessite une action spécifique puisque nous avons choisi l’option callback. Voici ce que je vous propose:

exten => 811,1,set(agent=${AGENTBYCALLERID_${CALLERIDNUM}})
exten => 811,2,System(asterisk -rx "agent logoff Agent/${agent}")
exten => 811,3,RemoveQueueMember(cis,Agent/${agent})
exten => 811,4,Playback(agent-loggedoff)
exten => 811,5,Hangup()
  1. on calcul la variable permettant de retrouver l’agent en fonction du poste sur lequel il est connecté
  2. on déconnecte l’agent du système via une commande en ligne (pas de fonction pour l’instant)
  3. on supprime l’agent de la file d’attente
  4. on informe l’agent qu’il est bien déconnecté
  5. on raccroche proprement

Conclusion

Nous voici avec une bonne base pour un petit centre d’appel, nous aborderons dans un article prochain la gestion et les statistiques de notre centre pour en extraire les indicateurs pertinents.

Posté par: Alexandre Chauvin-Hameau, le 05/04/2006
Trackback | Popularité: 28%
marqué , , et
AddThis Social Bookmark Button
UselessNothing newInformativeLearned a lotAmazingly helpful (4 votes, average: 4.5 out of 5)
Loading ... Loading ...

Voir aussi

Et pourquoi pas

© 2009 Panoramisk | Creative Commons License wordpress logo