extensions.conf
Im Dialplan (Programmieren im Dialplan) können sich
zum einen die Agenten über eine bestimmte Extension in die Warteschleife
einloggen, zum anderen werden Anrufe mit der Applikation
Queue() in eine Warteschlange eingereiht.
Eine minimale Extension, die die Anrufer in die Warteschleife einreiht, sähe so aus:
exten => 20,1,Answer() ; abheben
exten => 20,n,Set(MUSICCLASS()=default) ; Musikklasse "default" setzen
exten => 20,n,Queue(support,t) ; in Warteschlange "support" einreihen
exten => 20,n,Hangup() ; hinterher auflegen
Wir lieben es etwas vollständiger und verwenden diese Extension:
exten => 20,1,Wait(2)
same => n,Answer() ; abheben
same => n,Set(MUSICCLASS()=default) ; Musikklasse "default" setzen
same => n,Queue(support) ; in Warteschlange "support" einreihen
; setzt QUEUESTATUS =
; TIMEOUT | FULL | JOINEMPTY | JOINUNAVAIL | LEAVEEMPTY | LEAVEUNAVAIL
exten => 20,n,Goto(q-${QUEUESTATUS}) ; je nach QUEUESTATUS springen
; keine Agenten auf der Warteschlange:
; (hier könnte man alternativ auf VoiceMail() leiten)
exten => 20,n(q-JOINEMPTY),Wait(1)
exten => 20,n,Playback(vm-nobodyavail,noanswer)
exten => 20,n,Playback(vm-goodbye,noanswer)
exten => 20,n,Hangup()
; keine Agenten (oder nur nicht-verfügbare) auf der Warteschlange:
exten => 20,n(q-JOINUNAVAIL),Goto(q-JOINEMPTY) ; wie JOINEMPTY behandeln
; alle Agenten haben die Warteschlange verlassen:
exten => 20,n(q-LEAVEEMPTY),Goto(q-JOINEMPTY) ; wie JOINEMPTY behandeln
; alle Agenten (auch nicht-verfügbare) haben die Warteschlange verlassen:
exten => 20,n(q-LEAVEUNAVAIL),Goto(q-JOINEMPTY) ; wie JOINEMPTY behandeln
; kein Agent antwortet:
exten => 20,n(q-TIMEOUT),Goto(q-JOINEMPTY) ; wie JOINEMPTY behandeln
; max. Anruferzahl für die Warteschlange ist erreicht:
; (hier könnte man alternativ auf VoiceMail() leiten)
exten => 20,n(q-FULL),Busy(5)
exten => 20,n,Hangup()
Wenn wir diese Extension anrufen, werden wir — da keine Agenten
angemeldet sind — die Ansage hören, dass zurzeit niemand unseren
Anruf entgegennehmen kann. (Wenn Sie das vermeiden wollen, setzen Sie
in der queues.conf die Parameter joinempty=yes und
leavewhenempty=no.)
Es fehlt also noch eine Extension, unter der sich die Agenten einloggen, d. h. als anwesend melden:
exten => 25,1,Answer() ; abheben
exten => 25,n,AgentLogin() ; Agent einloggen
exten => 25,n,Hangup() ; hinterher auflegen
Mit
AgentLogin() bleibt die Verbindung zum Agenten dauerhaft
bestehen, und die eingehenden Anrufe werden auf diesen bereits aufgebauten
Sprachkanal aufgeschaltet. Wenn der Agent den Hörer auflegt, wird er
abgemeldet. Das bedeutet auch, dass ein Agent nicht gleichzeitig
eingeloggt sein kann und ausgehende Gespräche machen kann.
AgentLogin() ist daher in der Praxis wirklich nur dann
geeignet, wenn es sich um ein reines Inbound-Call-Center handelt.
AgentCallbackLogin() hatte früher den Vorteil, dass sich Agenten
einmal anmelden konnten und bei eingehenden Gesprächen zurückgerufen
wurden. Diese Applikation ist mittlerweile aus Asterisk entfernt.
Der moderne Ersatz ist AddQueueMember()/RemoveQueueMember() aus
dem Dialplan heraus — ein Agent "loggt sich ein", indem er eine
spezielle Extension wählt, die ihn als Member der Queue hinzufügt:
; Authentifizierung (optional)
exten => 25,1,Answer()
same => n,Read(agentennr,agent-user)
same => n,VMAuthenticate(${agentennr}@call-center-agenten,s)
; Einloggen: Agent zur Queue "support" hinzufügen
same => n,AddQueueMember(support,PJSIP/${agentennr})
same => n,Playback(agent-loginok)
same => n,Hangup()
; Ausloggen über 26
exten => 26,1,Answer()
same => n,Read(agentennr,agent-user)
same => n,VMAuthenticate(${agentennr}@call-center-agenten,s)
same => n,RemoveQueueMember(support,PJSIP/${agentennr})
same => n,Playback(agent-loggedoff)
same => n,Hangup()
Damit bleibt der Agent auch nach dem Auflegen in der Queue und kann
zwischen den eingehenden Anrufen ausgehende Gespräche führen — genau
das, was AgentCallbackLogin() früher geboten hat, nur mit
verständlicherer Logik.
Es bleibt Ihnen als Aufgabe überlassen, vor die Einreihung in eine Warteschlange noch ein Menü zu schalten, z. B. „Um eine Bestellung aufzugeben, drücken Sie die 1. Für Reklamationen drücken Sie die 2.“, und dann zwei Warteschlangen einzurichten, denen die Agenten der entsprechenden Abteilung angehören.