AgentCallBackLogin - Ersatz für später

Der_Phil

Neuer User
Mitglied seit
31 Dez 2005
Beiträge
48
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich bin gerade bei der "Einarbeitung" in das Thema Asterisk mit ACD etwas bei dem Befehl AgentCallBackLogin hängen geblieben.

Scheinbar ist die Funktion ja deprecated und wird wohl später raus fliegen. Nun lese ich dauernd etwas von "die Funktion wird nicht benötigt, da man dies auch mit dynamischen Queues ermöglichen kann" auf amerikanischen Seiten.

Kann mir jemand kurz erklären, wie das funktionieren soll?

Vielen Dank für euere Hilfe

Gruß
Phil
 
Hallo Phil,
was genau willst Du denn machen.
Ich arbeite beispielsweise mit festen Nebenstellen die ich den Warteschlangen in der queues.conf zuordne.

Beispiel:

member => sip/20



Man kann aber auch Nebenstellen dynamisch einer Warteschlange zuordnen über die Dialplananwendung AddQueueMember.

Siehe http://www.voip-info.org/wiki/view/Asterisk+cmd+AddQueueMember

Von dynamischen Warteschlangen habe ich noch nix gehört, wahrscheinlich meinst Du dynamische Warteschlangenmitglieder (Agenten)

Viele Grüße
Sven


 
Hi!

Ich möchte das Ganze wie eine klassische TK-Anlage betreiben.

Agent 1234 loggt sich über ne Taste + Pin am Telefon ein. Dann erhält er z.B. Anrufe aus den Queues Q1 und Q2.

Geht ein Anruf ein, so klingelt das Telefon eines der Angemeldeten Agenten, die die Queue bedienen.

Derzeit würde ich das mit AgentCallbackLogin machen.

Laut diverser Internetseiten scheint es in Zukunft diesen Befehl nichtmehr zu geben, da die Funktionalität auch anders realisiert werden könnte.

Voip-Info.org:
New for upcoming Asterisk v1.4.0 release: (July 2006) Due to various issues with AgentCallbackLogin this feature is likely to be deprecated by Digium (according to Kevin P. Fleming). Similar functionality can be achieved through existing dialplan functionatliy using dynamic members.

oder aus www.das-asterisk-buch.de:
AgentCallbackLogin() hingegen hat den Vorteil, dass sich Agenten einmal anmelden können und bei eingehenden Gesprächen zurückgerufen werden. Sie bleiben also auch beim Auflegen angemeldet und können ausgehende Gespräche führen. Diese Applikation ist aber seit Version 1.4 „deprecated“, wird also zukünftig nicht mehr vorhanden sein.

Digium verwendet im Beispiel doc/queues-with-callback-members.txt (in AEL, lässt sich aber leicht in einen „herkömmlichen“ Dialplan umwandeln)

Read(agentennr,agent-user);
VMAuthenticate(${agentennr},s);

zum Authentifizieren der Agenten, AddQueueMember() zum dynamischen Hinzufügen zur Schlange und Dial() zum Anrufen der Agenten.

Sollte AgentCallbackLogin() tatsächlich ersatzlos wegfallen, geht damit tatsächlich Funktionalität und das leichte Setup verloren. (An dieser Stelle nochmal vielen Dank an Markus Bönke!)


Die Frage ist, wie das möglich ist.
Muss ich dann ein Script einbinden, das einen Agenten in die jeweiligen Queues einzeln anmeldet?

Phil
 
Zuletzt bearbeitet:
Hallo Phil,

Muss ich dann ein Script einbinden, das einen Agenten in die jeweiligen Queues einzeln anmeldet?

In einer ersten Lösung habe ich nur mit dynamischen Agenten gearbeitet. Ich habe dazu eine Datei extensions_queues_login.conf und eine extensions_queues_logout.conf erstellt. ( diese natürlich in der extensions.conf mit include eingebunden.



Weiterhin habe ich ein Macro erstellt, welches für die Anmeldung der Agenten verwendet wird. Über dieses Macro werden dann die Kontexte zur An- und Abmeldung der Agenten aufgerufen:

Code:
[macro-agentlogin]
exten => s,1,Answer
exten => s,n,Set(AgentID=${ARG1})

; DB Eintrag AgentStatus erzeugen
exten => s,n,Set(AgentStatus=${DB(AgentStatus/${AgentID})})
; DBEintrag AgentPause erzeugen
exten => s,n,Set(AgentPause=${DB(AgentPause/${ARG1})})
; DB Wert AgentPause auf UNPAUSE setzen
exten => s,n,Set(DB(AgentPause/${ARG1})=UNPAUSE)

;  wenn AgentStatus = " " dann Anmeldung 
exten => s,n,GotoIf($["${AgentStatus}" = ""]?goon)

;wenn AgentStatus = " OFFLINE" dann Anmeldung 
exten => s,n,GotoIf($["${AgentStatus}" = "OFFLINE"]?goon:gooff)

;## Agentenanmeldung
exten => s,n(goon),Set(DB(AgentStatus/${AgentID})=ONLINE)
exten => s,n,Goto(app-consumer-pc-login,${ARG1},1)

; ## Agentenabmeldung
exten => s,n(gooff),Set(DB(AgentStatus/${AgentID})=OFFLINE)
exten => s,n,Goto(app-consumer-pc-logout,${ARG1},1)



extensions_queues_login.conf:

Code:
[app-consumer-pc-login]
exten => 604,1,AddQueueMember(consumer-pc|SIP/${EXTEN})
exten => 606,1,AddQueueMember(consumer-pc|SIP/${EXTEN})
exten => 608,1,AddQueueMember(consumer-pc|SIP/${EXTEN})
exten => 609,1,AddQueueMember(consumer-pc|SIP/${EXTEN})

exten => _6XX,1,NoOP(Agent kein Mitglied der Warteschlange)
exten => _6XX,2,Goto(app-consumer-nb-login,${EXTEN},1)



[app-consumer-nb-login]
exten => 680,1,AddQueueMember(consumer-nb|SIP/${EXTEN})
exten => 681,1,AddQueueMember(consumer-nb|SIP/${EXTEN})
exten => 685,1,AddQueueMember(consumer-nb|SIP/${EXTEN})

exten => _6XX,1,NoOP(Agent kein Mitglied der Warteschlange)
exten => _6XX,2,Goto(app-monitor-pc-login,${EXTEN},1)



[app-monitor-login]
exten => 610,1,AddQueueMember(monitor|SIP/${EXTEN})
exten => 611,1,AddQueueMember(monitor|SIP/${EXTEN})
exten => 638,1,AddQueueMember(monitor|SIP/${EXTEN})
exten => 658,1,AddQueueMember(monitor|SIP/${EXTEN})
exten => 665,1,AddQueueMember(monitor|SIP/${EXTEN})

exten => _6XX,1,NoOP(Agent kein Mitglied der Warteschlange)
exten => _6XX,2,Goto(login-ok,s,1)


[login-ok]
exten => s,1,UserEvent(Agentlogin|Agent: ${AgentID})
exten => s,n,Playback(agent-loginok)
exten => s,n,Hangup
Die extensions_queues_logout.conf war dann genauso aufgebaut nur mit RemoveQueueMember()

Das ganze hat soweit ganz gut funktioniert. Ist sicher nicht die elegandeste Lösung, aber funktioniert.


Mittlerweile arbeite ich mit festen statischen Warteschlangenmitgliedern, indem ich SIP Channels der Warteschlange fest zuordne. Wir haben uns eine webbasierende grfische Oberfläche gebastelt um diese SIP Channels den Warteschlangen zuordnen zu können.



Viele Grüße
Sven
 
Kostenlos!

Statistik des Forums

Themen
248,466
Beiträge
2,292,010
Mitglieder
377,893
Neuestes Mitglied
bihni1990