queues.conf

In der queues.conf werden Warteschlangen definiert und entsprechende Einstellungen vorgenommen. Die Datei ist - wie Sie das schon kennen - in Abschnitte unterteilt.

Unter [general] stellen wir nur persistentmembers = yes ein, damit beim Neustart von Asterisk die Agenten automatisch wieder in ihre Schlangen aufgenommen werden.

Jede Warteschleife stellt einen eigenen Abschnitt dar. Wir legen bespielsweise eine Schlange im Abschnitt [support] an. Folgende Parameter stehen zur Verfügung:

musiconhold

Legt die in musiconhold.conf definierte Musikklasse der Warteschleife fest. Wir wählen die oben angelegte Klasse default:

musiconhold = default

announce

Legt eine Audiodatei fest, die einem Agenten vor dem Beantworten eines Anrufs vorgespielt wird. Dies dient dazu, dass ein Agent, der auf mehreren Schlangen Anrufe entgegennimmt, weiß, um welche Schlange es sich handelt und z.B. den Anrufer entsprechend begrüßen kann.

;announce = schlange-support

Wenn Sie diese Einstellung verwenden, denken Sie daran, auch eine entsprechende Audiodatei im sounds/-Verzeichnis anzulegen, also z.B. schlange-support.gsm.

strategy

Legt fest, in welcher Weise und Reihenfolge die Agenten bei einem Anruf angeklingelt werden sollen:

ringall
Alle anklingeln, bis einer antwortet. (Default)
roundrobin
Der Reihe nach alle anklingeln, bis einer antwortet.
leastrecent
Das Interface anklingeln, bei dem der letzte Anruf am längsten zurückliegt.
fewestcalls
Den anklingeln, der am wenigsten Anrufe in dieser Schlange abgearbeitet hat.
random
Ein zufällig gewähltes Interface anklingeln.
rrmemory
Round-Robin mit Gedächtnis. Beginnt die Reihe bei dem, der nach dem letzten Anruf an der Reihe ist.

Es ist zu beachten, dass Agenten, für die ein niedrigerer Malus (penalty) festgelegt wurde, immer Agenten mit höherem Malus vorgezogen werden.

strategy = ringall

Die Einstellung ist abhängig von Ihren Gegebenheiten: ringall ist vielleicht lästig, die anderen Werte verursachen zusätzliche Wartezeit für den Anrufer, falls Agenten nicht ans Telefon gehen.

servicelevel

Legt die Zeit (in Sekunden) fest, in der Anrufe beantwortet sein sollen. Nur für statistische Auswertungen interessant („Wie viele Anrufe wurden innerhalb der Service-Zeit von x Sekunden beantwortet?“).

servicelevel = 60

context

Hier kann ein Context angegeben werden, in dem, wenn der Anrufer eine Extension mit nur einer Ziffer drückt, aus der Schlange rausgenommen und zu dieser Extension in diesem Context weitergeleitet wird.

context = supportschlange-Context  ; so könnten wir es einstellen

; aber wir lassen das erst mal weg, also auskommentiert:
;context = supportschlange-Context

timeout

Legt fest, wie lange (in Sekunden) ein Telefon klingeln soll, bis wir es als nicht besetzt (also Timeout) betrachten.

timeout = 15

retry

Bestimmt, wie lange (in Sekunden) gewartet werden soll, bevor erneut alle Agenten angeklingelt werden.

retry = 5

weight

Das Gewicht (Wichtigkeit) der Schlange, relativ zu anderen Schlangen. Wenn ein Agent auf mehreren Schlangen ist, werden ihm zuerst Anrufe von Schlangen mit höherem Gewicht durchgestellt. So könnte z.B. einer Notfallschlange ein höheres Gewicht gegeben werden.

weight = 0

wrapuptime

Die Wartezeit (in Sekunden), bevor ein Agent, der gerade einen Anruf beendet hat, erneut einen Anruf erhält (Default: 0).

; wir lassen unseren Agenten eine kleine Verschnaufpause, um
; einen Schluck Wasser zu trinken:
wrapuptime = 10

maxlen

Maximale Anzahl der in der Schlange wartenden Anrufer (Default: 0 für unbegrenzt).

maxlen = 0

announce-frequency

Bestimmt, in welchen Abständen (in Sekunden) den Anrufern ihre Position in der Schlange und/oder die geschätzte Wartezeit angesagt werden soll (0 für aus).

announce-frequency = 90

announce-holdtime

Ob die geschätzte Wartezeit in den Ankündigungen nach der Position genannt werden soll. Mögliche Werte sind yes (ja), no (nein) oder once (nur einmal).

announce-holdtime = yes

announce-round-seconds

Rundungsschritte der Sekunden. Mit der Einstellung 0 werden nur die Minuten, nicht die Sekunden angesagt. Andere mögliche Werte sind: 0, 1, 5, 10, 15, 20 und 30.[67] (Mit 30 würde beispielsweise eine geschätzte Wartezeit von 2:34 auf 2:30 gerundet.)

announce-round-seconds = 0

Sprachbausteine

Die folgenden Parameter stellen ein, welche Sprachbausteine für die Ansagen der Position und Wartezeit verwendet werden. I.d.R sind hier keine Veränderungen notwendig:

queue-youarenext = queue-youarenext     ; "You are now first in line."
queue-thereare = queue-thereare         ; "There are" ...
queue-callswaiting = queue-callswaiting ; ... "calls waiting."
queue-holdtime = queue-holdtime         ; "The current est. holdtime is"
 ...
queue-minutes = queue-minutes           ; ... "minutes"
queue-seconds = queue-seconds           ; ... "seconds"
queue-thankyou = queue-thankyou         ; "Thank you for your patience."
queue-lessthan = queue-less-than        ; ... "less than" ...
queue-reporthold = queue-reporthold     ; "Hold time" ...
periodic-announce = queue-periodic-announce  ; "All reps busy, wait for 
next"

Wenn diese Parameter nicht angegeben werden (also auskommentiert sind), gelten diese Default-Werte.

periodic-announce-frequency

Bestimmt, in welchen Abständen (in Sekunden) den Anrufern die periodische Ankündigung (periodic-announce, s.o., „Zur Zeit sind alle Mitarbeiter im Gespräch, bitte warten Sie.“) angesagt werden soll.

periodic-announce-frequency = 60

monitor-format

Die Angabe dieses Parameters schaltet die Aufzeichnung von Gesprächen ein (wie mit der Monitor()-Applikation) und bestimmt das Aufzeichnungsformat. (Bei auskommentiertem monitor-format werden keine Mitschnitte gemacht.) Geben Sie hier also gsm, wav (große Dateien!) oder wav49 an.

; wenn Sie Aufzeichnungen wollen, diese Zeile einkommentieren:
;monitor-format = gsm

Per Default werden die Dateien (eine -in und eine -out) nach ${UNIQUEID} benannt. Sie können das bei Bedarf verändern, indem Sie im Dialplan vor dem Queue()-Aufruf Set(MONITOR_FILENAME=dateiname) angeben. Wir nehmen aber im Beispiel keine Veränderung vor.

Weitere Informationen über Mitschnitte siehe Monitor()

monitor-join

Kombiniert die beiden durch einen Gesprächs-Mitschnitt erzeugten Dateien ...-in und ...-out zu einer Datei. Werte: yes oder no.

monitor-join = yes

Weitere Informationen über Mitschnitte siehe Monitor()

joinempty

Legt fest, ob Anrufer in eine Warteschleife ohne Agenten eingereiht werden.

yes
Anrufer können in eine Schleife ohne Agenten oder von nur nicht-verfügbaren Agenten eingereiht werden.
no
Anrufer können nicht in eine Schleife ohne Agenten eingereiht werden.
strict

Anrufer können nicht in eine Schleife ohne Agenten eingereiht werden (aber in eine Schlange mit nur nicht-verfügbaren Agenten).

Nicht-verfügbar ist nicht zu verwechseln mit im Gespräch (busy). Ein Agent ist nicht verfügbar, wenn er zwar der Schlange zugewiesen, aber tatsächlich nicht am System registriert ist (siehe auch member). Achtung: Statisch definierte Mitglieder (siehe member) gelten immer als verfügbar!

Sollte ein Anrufer nicht in eine Schlange aufgenommen werden, ist die Queue()-Applikation beendet, und der Dialplan wird fortgesetzt.

joinempty = no  ; wir wollen unsere Anrufer nicht unnötig warten lassen

leavewhenempty

Legt fest, ob Anrufer aus einer Schlange entfernt werden, sobald sich alle Agenten ausgeloggt haben. Mögliche Werte wie bei joinempty. Nach dem Verlassen der Schlange wird der Dialplan fortgesetzt.

leavewhenempty = strict  ; Anrufer nicht unnötig warten lassen

eventwhencalled

Stellt ein (yes|no), ob u.a. die folgenden Events für das Manager-Interface erzeugt werden: AgentCalled, AgentDump, AgentConnect, AgentComplete.

eventwhencalled = yes

eventmemberstatus

Stellt ein (yes|no), ob QueueMemberStatus-Events im Manager-Interface erzeugt werden (das können viele sein!).

eventmemberstatus = no

reportholdtime

Legt fest (yes|no), ob dem Agenten die Wartezeit des Anrufers angesagt werden soll, bevor dieser zu ihm durchgestellt wird. (Geschmacksfrage)

reportholdtime = no

memberdelay

Stellt ein, wie lange (in Sekunden) der Anrufer Stille hört, bevor er mit einem Agenten verbunden wird.

memberdelay = 1

timeoutrestart

Bestimmt, ob der Antwort-Timeout eines Agenten bei einem Besetzt- oder Leitung-überlastet-Signal zurückgesetzt wird. Kann nützlich für Agenten sein, die die Berechtigung haben, einen Anruf abzuweisen.

timeoutrestart = yes

autopause

Dieser Parameter legt fest, ob ein Agent, der einen Anruf nicht beantwortet, automatisch pausiert werden soll.

autopause = no

ringinuse

Legt fest, ob auch solche Agenten angeklingelt werden sollen, von denen bekannt ist, dass sie gerade im Gespräch sind. Der bisher einzige Channel driver, der diesen Status übermittelt, ist SIP.

ringinuse = no

member

Es ist möglich, direkt in der queues.conf Agenten statisch in der Form

member => Technologie/Resource[,Malus]

- also z.B. member => Zap/2 - anzulegen (darf mehrmals verwendet werden, siehe queues.conf). Das kann jedoch zu Problemen mit joinempty und leavewhenempty führen, da diese Agenten immer als verfügbar angesehen werden, auch wenn sie in Wirklichkeit nicht an ihrem Apparat sind. Zudem hat es den Nachteil, dass ein Agent immer fest einem Apparat zugeordnet ist und sich nicht von einem anderen Apparat aus anmelden kann.

Wir verwenden daher lieber die dynamische Form und ordnen unserer Schlange support in der Form

member => Agent/AgentenNr

zwei Agenten 1001 und 1002 zu:

member => Agent/1001
member => Agent/1002

Diese Agenten müssen wir noch in der agents.conf definieren (s.u.)[68]. Die AgentenNr ist eine frei wählbare Nummer, die jeden Agenten eindeutig identifiziert. Sie hat nichts mit den Extensions zu tun, die die Agenten evtl. verwenden.



[67] In älteren Versionen wurden auch andere Werte akzeptiert, was zu verwirrenden Ergebnissen führte, siehe Bug 9514.

[68] sonst wären es wirklich Geheimagenten ;-)