Bonjour à tous,

Je cherche à mettre en oeuvre une file d'attente avec des agents répartis sur plusieurs serveurs asterisk.

présentation de l'architecture cible:

serveur A - 192.168.21.10
compte SIP configurés sous la forme SIP/1XX

serveur B - 192.168.22.10
compte SIP configurés sous la forme SIP/2XX

serveur C - 192.168.23.10
compte SIP configurés sous la forme SIP/3XX

sur le serveur A une file d'attente (199) de déclaré, voici la conf:

fichier queues.conf
Code:
[199]
timeout=30
strategy=ringall
retry=5
maxlen=0
leavewhenempty=yes
joinempty=no
ringinuse=no
les postes du site A s'enregistre sur à la queue via la fonction #1:
Code:
exten => #1,1,AddQueueMember(199)
exten => #1,n,Playback(agent-loginok)
exten => #1,n,hangup()
Et se désenregistre via la fonction #0:
Code:
exten => #0,1,RemoveQueueMember(199)
exten => #0,n,Playback(agent-loggedoff)
exten => #0,n,hangup()
Tout celà fonctionne parfaitement.

Maintenant, on me demande que des utilisateurs des sites B et C puissent se connecter à la file d'attente du site A pour traiter des appels...

J'ai donc mise en place les même fonctions sur les site B et C et je faist appel à deux script pour gérer la connexion / déconnexion à la queue. Voici ce que ca donne pour le site B:

Extensions.conf:
Code:
exten => #1,1,AGI(connexion.agi,${CALLERID(NUM)})
exten => #1,n,Playback(agent-loginok)
exten => #1,n,hangup()

exten => #0,1,AGI(deconnexion.agi,${CALLERID(NUM)})
exten => #0,n,Playback(agent-loggedoff)
exten => #0,n,hangup()
script connexion.agi:
Code:
#!/usr/bin/expect
set user [lindex $argv 0]
spawn telnet 192.168.21.10 5038
expect "Asterisk Call Manager/1.0"
send -- "Action: login\r"
send -- "Username: admin\r"
send -- "Secret: admin\r\r"
expect "Authentication accepted"
send -- "action: QueueAdd\r"
send -- "Queue: 199\r"
send -- "Interface: $user@192.168.22.10\r\r"
expect "Response: Success"
send -- "Action: logoff\r\r"
expect "Response: Goodbye"
expect "Message: Thanks for all the fish."
expect eof
script deconnexion.agi:
Code:
#!/usr/bin/expect
set user [lindex $argv 0]
spawn telnet 192.168.21.10 5038
expect "Asterisk Call Manager/1.0"
send -- "Action: login\r"
send -- "Username: admin\r"
send -- "Secret: admin\r\r"
expect "Authentication accepted"
send -- "action: QueueRemove\r"
send -- "Queue: 199\r"
send -- "Interface: $user@192.168.22.10\r\r"
expect "Response: Success"
send -- "Action: logoff\r\r"
expect "Response: Goodbye"
expect "Message: Thanks for all the fish."
expect eof
ces deux fonctions sont OK, puisque la commande show queue sur la CLI du serveur A me retourne ce qui suit lorsque je me connecte depuis le poste SIP/201 du site B:
Code:
199          has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:4, A:0, SL:75.0% within 0s
   Members:
      SIP/201@192.168.22.10 (dynamic) (Not in use) has taken 3 calls (last was 13125 secs ago)
      SIP/102 (dynamic) (Not in use) has taken no calls yet
   No Callers
mon problème est dans la gestion des appels.

Lorsque les membres de la file d'attente sont tous sur le site A, tout est Ok.

Le problème est dès qu'un membre d'un site distants se connecte à la file d'attente. j'ai constaté plusieurs symptomes:

  • Lors d'un appel entrant sur la queue, tous les postes commence à sonner puis seul un des postes des sites distants continue de sonner. Si l'utilisateur ne réponds pas l'appel est renvoyer au voicemail du poste qui à sonné...
  • il n'y a pas de remonté de statut pour les poste distants ce qui signifie que les postes distant auront un signal de double appel si ils sont déjà en ligne...

Est-ce que l'un d'entre vous a dèjà eu a configurer ce type d'architecture?

Si comment est-ce configuré?

Merci pour vos réponses.