Handbuch kallcenter

Autor: Michael Oberg

Version: 1.0-2

Datum: 07.08.2005

Inhaltsverzeichnis

Einleitung	3

kallcenter Client	4

Verbinden	4

Login	4

„Freie“ und „unfreie“ Verträge	5

Hauptmaske – Frei = 0	5

Fenstertitel	5

Statuszeile	6

Agent	6

SIP-Endpunkte	6

Auftrag	6

AEC	6

Sound-Kontrolle	7

Anzurufender	7

Wählen / Auflegen	7

Pause	8

Nächster Versuch	8

Bemerkungen	8

Speichern	8

Hauptmaske – Frei = 1	9

Sound	10

Grundeinstellungen – Mixer	10

Lautstärke-Anzeige und -Regelung	12

Log-Dateien und Core Dumps	13

Reports	14

Microsoft Query	14

Gespeicherte Abfragen	15

Abfrage-Beispiele	16

Verknüpfungen innerhalb von Excel	17

Installation	17

Empfohlene Hardware	17

RPM-Pakete	18

Systemvoraussetzungen	19

Installation der Datenbank	20

Benötigte Tabelleneinträge	21

Update-Dienst	21

Client-Konfiguration	21

Server-Konfiguration	22

Installations-Skript	22

Administration	24

Allgemeines	24

Aufträge	24

Agenten	25

Zuordnung von Aufträgen zu Agenten	26

SIP-Phones	27

Nummern-Import	28

Kursnummern	29

Kontakt	32

Einleitung

kallcenter ist eine Voice over IP-Lösung für Outbound-Callcenter, spezialisiert auf Verkaufs-Telefonate. Es reduziert die Kosten eines Callcenter-Betriebes auf folgende Weise:

Durch die Telefonkosten selbst.
Voice over IP ist günstiger als Call by Call, selbst unter Verwendung eines Least Cost Routers. Die Kosten bei einem Call by Call-Ferngespräch setzen sich aus drei Komponenten zusammen: Zunächst wird das Gespräch von der Quelle bis zum nächsten Gateway des Call by Call-Anbieters geleitet. Dies geschieht über Leitungen der Telekom oder örtlicher Anbieter wie NetCologne und bedeutet, daß der Call by Call-Anbieter die Kosten eines Ortsgesprächs an den Leitungseigentümer bezahlen muss – freilich zu den enorm vergünstigten Konditionen für einen Großabnehmer. Kosten für ein zweites Ortsgespräch entstehen am Ziel. Nur auf der Strecke dazwischen setzt der Call by Call-Anbieter seine eigenen Leitungen ein und kann die Preise (begrenzt durch den Wartungsaufwand für die Leitung) selbst festlegen.
Bei Voice over IP wird das Gespräch von der Quelle bis zum Gateway des Call by Call-Anbieters über IP-Leitungen geführt. Die hierbei entstehenden Kosten werden nach den üblichen Flatrate-Tarifen gerechnet, also unabhängig vom tatsächlichen Gesprächsaufkommen, so daß sie für den Endkunden bei massivem Gesprächsaufkommen (oder bei gleichzeitiger anderweitiger Benutzung der Internet-Anbindung) kaum noch ins Gewicht fallen. Die tatsächlichen Gesprächskosten werden nun nur noch durch die Leitung des Call by Call-Anbieters und durch die Kosten des Ortsgesprächs im Ziel bestimmt; das Ortsgespräch an der Quelle entfällt.

Durch die Automatisierung des Anwahl-Vorgangs.
Dies wirkt sich vor allem bei schlechten Telefonnummern-Quellen aus. Wenn die meisten Gespräche mit einer schnellen Ablehnung enden oder der Gesprächspartner gar nicht erreichbar ist, sinkt die durchschnittliche Gesprächsdauer auf wenige Minuten. In diesem Fall wird die Zeitdauer der Anwahl zu einem Kostenfaktor.

Durch die Automatisierung der Datenweiterverarbeitung.
Im Falle eines Abschlusses gibt der Callcenter-Agent die zugehörigen Daten unmittelbar in die Eingabemaske von kallcenter ein. Damit kommen sie in eine mySQL-Datenbank und können in beliebiger elektronischer Form jederzeit wieder ausgelesen werden, zum Beispiel

als angepasste Microsoft Excel-Tabelle,

als Microsoft Access Report,

als CSV-Datei,

als XML-Datei,

über direkte Datenbank-Abfragen (ODBC oder andere).

Das ermöglicht nicht nur eine automatische Weitergabe der Abschlüsse an die ursprünglichen Auftraggeber, sondern auch eine Erfassung der Aufwände, zum Beispiel Telefonaufkommen, Prämien für die Callcenter-Agents etc.

Durch die Eliminierung von Fehlerquellen.
Die Daten den Abschlusses werden noch während des Telefonats in die Maske eingegeben. Bankverbindungsdaten können parallel über einen Webbrowser kontrolliert werden (z.B. bei www.bankleitzahlen.de). Danach werden die Daten nur noch in elektronischer Form weiter verarbeitet. Fehler durch wiederholtes Abschreiben oder Abtippen können so nicht entstehen.

kallcenter benötigt als reine Outbound-Lösung keine Telefonanlage. Es genügt ein breitbandiger SDSL-Anschluss (oder auch mehrere, je nach Telefonaufkommen), ein SDSL-Router (der i.a. vom Provider leihweise zur Verfügung gestellt wird), ein PC als Datenbank-Server, PC-Arbeitsplätze mit Headsets und ein Ethernet-verkabeltes PC-Netzwerk.

kallcenter steht – so wie es im folgenden beschrieben wird – vollständig unter der Gnu General Public License, ist also freie Open Source. Unterstützung bei der Einrichtung, der Anpassung der Software (z.B. Änderung der Eingabemaske), der Erstellung von Reports oder Anbindung anderer Systeme kann gegen Entgelt beim Autor angefordert werden (siehe Kontakt).

kallcenter Client

Verbinden

Nach dem Programmstart erscheint ein Dialog, über den die Verbindung zwischen dem Softphone und dem SIP-Provider („Registrierung“ des Softphones) hergestellt wird.

Anmerkung: Diese Eingabemaske stammt noch vom ursprünglichen kphone und kann in späteren Versionen unterdrückt werden. Die Felder Benutzername und Passwort sind Read-Only.

Login

Bereits mit dem Programmstart erscheint ein Fenster mit einer scrollbaren Liste der aktiven Agenten. Inaktive Agenten werden nicht angezeigt, siehe auch Server.

Ist ein Agent ausgewählt, so erscheinen in der Liste darunter die ihm zugeordneten Aufträge.

Unterhalb der beiden Listen sind zwei Anzeigen, die den Verbindungsstatus (Registrierung) angeben (links unten; Stecker in Steckdose/Verlängerungskabel bedeutet „Verbindung steht“, Stecker alleine bedeutet „Verbindung getrennt“) sowie auf Fehler aufmerksam macht (rechts unten; Häkchen bedeutet „alles in Ordnung“).

Ein Anklicken eines Auftrags in der unteren Liste entspricht einem Login mit dem ausgewählen Agenten und Auftrag. Ein Passwort muss nicht angegeben werden.

Das Softphone reserviert mit dem Login automatisch bis zu 1000 Nummern-Datensätze aus der Datenbank für den Agenten (sofern nämlich soviele noch vorhanden sind). Mit dem Logout (schließen der Hauptmaske) werden die noch nicht bearbeiteten Datensätze wieder freigegeben.

„Freie“ und „unfreie“ Verträge

Ein Vertrag mit der Kennzeichnung „Frei = 0“ liefert dem Agenten eine Reihe anzurufender Telefonnummern. Ein Vertrag mit der Kennzeichnung „Frei = 1“ präsentiert hingegen immer wieder eine leere Eingabemaske, bei der die Telefonnummer frei gewählt werden kann.

Hauptmaske – Frei = 0

Nach dem Login erscheint entweder die Meldung, daß keine Datensätze mehr zu bearbeiten sind, worauf sich die Maske wieder schließt; oder es erscheint eine Eingabemaske mit dem nächsten zu bearbeitenden Datensatz:

Fenstertitel

Die Titelzeile ist ein Überbleibsel von kphone. Sie zeigt (vorausgesetzt, eine Verbindung zum SIP-Server konnte aufgebaut werden) die Sitzungsnummer, ein „@“-Zeichen und die IP-Adresse des SIP-Servers.

Statuszeile

Die Statuszeile enthält drei Felder:

Status – gibt Fehler an, wie z.B. Gründe für einen Anruf-Abbruch.

Audio – gibt Fehler im Soundsystem an, z.B. wenn eine andere Anwendung den Eingang oder Ausgang der Soundkarte blockiert. (Anmerkung: gerade Blockaden sollten aber ausgeschlossen sein, da derartige Anwendungen von kallcenter beendet werden.)

Das dritte Feld gibt an, ob eine Verbindung zum anderen Gesprächsteilnehmer aufgebaut wird oder besteht.

Agent

Die angegebenen Informationen zum Agenten sind:

Vorname, Name, Id, wie sie auch in der Login-Maske gestanden haben. Dies sollte verhindern, daß ein Agent versehentlich die Anrufe eines anderen bearbeitet.

„Anz. Anrufe“ - Dieses Feld gibt an, wieviele Datensätze noch zu bearbeiten sind. Dies sollten zum Zeitpunkt des Logins 1000 Datensätze sein, eventuell mehr, falls von einem früheren Login beispielsweise noch Termine zu bearbeiten sind. Mit jedem abgespeicherten Datensatz verringert sich diese Zahl.

Anmerkung: Das Feld „Anz. Anrufe“ gibt nur die Anzahl der zum gegebenen Zeitpunkt anrufbaren Einträge an. Wenn bei einem Eintrag ein erneuter Anruf unternommen werden soll (Termin, Nicht erreicht) und im Feld „Nächster Versuch“ ein noch in der Zukunft liegender Zeitpunkt eingetragen wurde, wird dieser Datensatz solange nicht gezählt, bis dieser Zeitpunkt überschritten wurde.

SIP-Endpunkte

Die SIP-Endpunkte sind die SIP-Nummer des Softphones selbst (dies ist die SIP-Nummer, über die das Softphone von außen angerufen werden kann – was z.Zt. nur über VoIP, nicht aus dem Festnetz heraus möglich ist), und die SIP-Nummer des Angerufenen. Letztere wird vom Provider auf eine Festnetznummer abgebildet. Der Aufbau der SIP-Nummer hat dabei die Form „Landesvorwahl+Vorwahl ohne führende Null+Telefonnummer@Realm des SIP-Providers“. Bei der Landesvorwahl sind die Formen 0049 (z.B. TelDaFax) oder 49 (z.B. GMX, 1&1, web.de) üblich.

Die Informationen zu den SIP-Endpunkten sind nur interessant, falls eine Fehlfunktion beim SIP-Provider vermutet wird. Sie können in zukünftigen Versionen ausgeblendet werden.

Auftrag

Die angegebenen Informationen zum Vertrag sind:

Vertragspartner (Auftraggeber / Firma), Name des Auftrags (z.B. Vertragsnummer).

Anmerkung: Weitergehende Informationen sollten in Papierform vorliegen bzw. in einer mündlichen Einführung vorgestellt werden.

Anmerkung: Alle bisher besprochenen Felder sind Read-Only.

AEC

Dieses Feature ist unfertig! AEC steht für „Acoustic Echo Cancellation“. Echo-Effekte können beispielsweise durch ein Übersprechen von Signalen zwischen Mikrofon- und Lautsprecher-Leitung entstehen. Dadurch hört der Angerufene das Echo seiner eigenen Stimme. AEC vermag dieses Echo zu unterdrücken, indem es das digitalisierte Mikrofonsignal mit dem Lautsprechersignal vergleicht und mit verringerter Lautstärke von diesem abzieht.

Leider benötigt dieses Feature eine bestimmte Mixer-Einstellung: das Mikrofonsignal wird als Stereosignal behandelt, und dabei wird auf den zweiten Kanal das ursprüngliche Lautsprechersignal geschaltet. Da aber die Mixer-Einstellungen von Soundkarte zu Soundkarte unterschiedlich sind, ist dieses Feature eigentlich nur in einer homogenen Systemlandschaft realisierbar.

Anmerkung: sollte der Callcenter-Agent selbst ein (verzögertes) Echo seiner eigenen Stimme hören, so kann dieses durch AEC nicht unterdrückt werden. Eine Unterdrückung ist immer nur an der Echo-Quelle möglich oder an einer Stelle, an der die Zeitverzögerung zwischen ein- und ausgehendem Signal gleich Null oder genau bekannt ist. ISDN-Telefone verfügen über eine eigene Echo-Unterdrückung, Analog-Telefone hingegen nicht. Ein in einem Analog-Telefon entstehendes Echo kann daher nur im SIP-Gateway beim Provider unterdrückt werden.

Sound-Kontrolle

Dieser Schalter ruft eine eigene Dialogbox auf, über die alle Sound-Einstellungen verändert werden können. Siehe dazu Kapitel Sound.

Anzurufender

Die angegebenen Informationen zum Anzurufenden sind:

Anrede, Vorname, Name

Geburtsdatum, Beruf, Straße

Postleitzahl, Ort

Telefon mit zwei Feldern für Vorwahl und Nummer (diese beiden Felder sind Read-Only)

Telefon 2 mit zwei Feldern für Vorwahl und Nummer (diese beiden Felder können ausgefüllt werden)

Es folgen vier Felder, deren Namen pro Vertrag festgelegt sind (im Screenshot: „Anz.Lose“ und dreimal „-“)

Bank, BLZ, Kontonummer, Kontoinhaber

Anmerkung: Die folgenden Felder sind Pflichtfelder für einen Auftrag:

Geburtsdatum, Straße, Postleitzahl, Ort; mindestens eines der vier vertragsabhängigen Felder; mindestens eines von Bank und BLZ; Kontonummer.

Siehe auch Speichern.

Anmerkung: Wird ein Feld modifiziert, so wird der gesamte Datensatz zwischengespeichert, sobald der Cursor das Feld verlässt. Gleichzeitig wird für den Datensatz ein „dirty“-Flag gesetzt. Damit ist sichergestellt, daß der Datensatz auch im Falle eines Logouts oder eines Absturzes nicht freigegeben und von einem anderen Agenten aufgenommen werden kann. Statt dessen erscheint er automatisch wieder beim nächsten Login mit diesem Vertrag.

Wählen / Auflegen

Mit einem Klick auf „Wählen“ wird der Gesprächspartner automatisch angewählt. Der Fokus in der Eingabemaske liegt automatisch auf „Wählen“, so daß ein Druck auf die Return-Taste ebenfalls „Wählen“ betätigt.

Die Taste „Auflegen“ ist anwählbar, sobald „Wählen“ angeklickt wurde. Der Fokus wechselt nach dem Anklicken von „Wählen“ automatisch auf „Auflegen“, so daß ein zweiter Druck auf die Return-Taste ebenfalls „Auflegen“ betätigt.

In kphone ist ein Timeout vorkonfiguriert; kommt die Verbindung bis zum Ablaufen des Timeouts nicht zustande, wird automatisch aufgelegt.

Nach dem Auflegen wechselt der Fokus wieder auf „Wählen“.

Anmerkung: Es ist möglich, einen Gesprächspartner mehrfach anzuwählen, da die Maske erst nach Anklicken von „Speichern“ verlassen wird.

Anmerkung: Im Moment des Anwählens wird der gesamte Datensatz zwischengespeichert; zudem wird für den Datensatz das „dirty“-Flag gesetzt (siehe auch Anzurufender). Damit ist sichergestellt, daß der Datensatz auch im Falle eines Logouts oder eines Absturzes nicht freigegeben und von einem anderen Agenten aufgenommen werden kann. Statt dessen erscheint er automatisch wieder beim nächsten Login mit diesem Vertrag.

Pause

kallcenter ist auf „Dauertelefonieren“ eingestellt. Das heißt, im gleichen Moment, in dem ein Datensatz abgespeichert und der nächste Datensatz angezeigt wird, wird dieser auch schon angewählt.

Um diesen Zyklus zu unterbrechen, muss vor dem Speichern eine Pause angefordert werden. Dazu setzt man das Kreuz im Checkfeld „Pause“.

Jeder Druck auf eine Speichern-Taste oder auf „Wählen“ entfernt automatisch das Kreuz im Checkfeld „Pause“, der Telefonzyklus beginnt erneut.

Anmerkung: im Moment des Logins befindet sich das Softphone im Status „Pause“, es wird also mit dem Login nicht sofort der erste Anruf gestartet.

Nächster Versuch

Falls ein weiterer Anruf erforderlich ist, muss das Feld „Nächster Versuch“ bearbeitet werden.

In diesem Feld steht jeweils Datum und Zeitpunkt der Anzeige des Datensatzes (also die aktuelle Zeit). Ein Anklicken des Pfeils nach oben am Tages-Feld (links) erhöht das Datum jeweils um einen Tag. Ein Anklicken des Pfeils nach oben am Uhrzeit-Feld (rechts) erhöht den Zeitpunkt um jeweils eine Stunde. Ein direktes Eingeben von Datum/Uhrzeit ist ebenfalls möglich.

Dieses Feld hat nur eine Bedeutung beim Abspeichern des Datensatzes als „Termin“. Siehe auch Speichern.

Bekannter Fehler: Momentan darf dieses Feld nur unmittelbar vor dem Abspeichern geändert werden (wobei der Wert wie gesagt außer bei „Termin“ ignoriert wird). Wird er vorher auf einen in der Zukunft liegenden Wert gesetzt und ein Feld modifiziert oder „Wählen“ angeklickt, wird der Datensatz mit diesem veränderten Zeitstempel zwischengespeichert und ist damit bis zum angegebenen Zeitpunkt nicht mehr verwendbar.

Anmerkung: Die Zeit, die beim Anzeigen des Datensatzes gesetzt wird, ist die Zeit der Systemuhr auf dem Server. Diese kann von der Uhr des Clients natürlich abweichen. Praktisch ist die Verwendung eines Zeitservers, um Verwirrung zu vermeiden; aber auch dann können sekundenweise Abweichungen entstehen.

Anmerkung: Die beim Abspeichern als „Nicht erreicht“ verwendete Zeit ist allerdings derzeit die der Systemuhr des Clients, erhöht um 5 Stunden. Die Abweichungen der Systemuhren darf daher keinesfalls in der Größenordnung von Stunden oder darüber liegen.

Bemerkungen

Unterhalb von Wählen/Auflegen befindet sich ein Freitextfeld für beliebige Anmerkungen. Die Eingabe von Zeilenumbrüchen ist möglich.

Speichern

Ganz unten befinden sich sechs Tasten zum Speichern des Datensatzes. Mit Betätigung einer dieser Tasten wird ein Status gesetzt und der Datensatz verlassen. Die Eingabemaske schaltet automatisch zum nächsten Datensatz weiter, sofern ein weiterer Datensatz existiert und zum gegebenen Zeitpunkt anwählbar ist. Andernfalls erscheint eine Meldung, das kein weiterer Datensatz anwählbar ist, und das Programm wird danach automatisch beendet.

Anmerkung: Das „dirty“-Flag (siehe Anzurufender und Wählen / Auflegen) wird durch das Abspeichern wieder zurückgesetzt.

Anmerkung: Die Reihenfolge, in der die Datensätze erscheinen, wird durch den Zeitpunkt des „nächsten Versuchs“ festgelegt. Sind mehrere Datensätze zum gleichen Zeitpunkt anrufbar, so wird zur Sortierung die interne Nummerierung herangezogen.

Die sechs Tasten sind:

Auftrag

Gelb

Nicht erreicht

Termin

Löschen

Negativliste

Beim Speichern als „Auftrag“ werden die Pflichtfelder überprüft (Geburtsdatum, Straße, Postleitzahl, Ort; mindestens eines der vier vertragsabhängigen Felder; mindestens eines von Bank und BLZ; Kontonummer). Ist eines davon nicht ausgefüllt, kann der Datensatz nicht gespeichert werden.

Beim ersten Speichern als „Nicht erreicht“ wird ein erneuter Versuch fünf Stunden später vorbereitet. Wird auch bei diesem zweiten Versuch „Nicht erreicht“ angeklickt, so wird der Datensatz als „Löschen“ gespeichert.

Beim Speichern als „Termin“ wird das Feld „Nächster Versuch“ berücksichtigt. Zu dem dort angegebenen Zeitpunkt wird der Datensatz erneut dargestellt.

Beim Speichern als „Negativliste“ wird nicht nur der Status des Datensatzes gesetzt, sondern außerdem die Nummer in die Negativliste eingetragen, und zwar sowohl in der Form Vorwahl und Durchwahl getrennt als auch als zusammenhängende Zeichenkette. Damit werden auch falsche Schreibweisen dieser Telefonnummer zukünftig blockiert.

Speichern als „Gelb“ oder „Gelöscht“ setzt lediglich den entsprechenden Status des Datensatzes. Damit kann der Datensatz nicht mehr eingeladen werden. (Der Unterschied zwischen „Gelb“ und „Gelöscht“ ist der, daß aus den „gelben“ Datensätzen zusammen mit den Aufträgen gegen Jahresende eine Liste von Nummern erstellt werden soll, die im nächsten Jahr erneut angerufen werden können und dabei bevorzugt werden, weil die Chance eines Auftrages nach Einschätzung des Callcenter-Agents überdurchschnittlich hoch liegt.)

Hauptmaske – Frei = 1

Ein Vertrag mit der Markierung „Frei = 1“ präsentiert die gleiche Maske wie ein Vertrag mit „Frei = 0“. Jedoch verhält sich die Maske etwas anders.

Das Feld „Anz.Anrufe“ zeigt in der Regel eine Eins. Allenfalls wenn mehrere Datensätze im Status Termin, Nicht erreicht oder mit gesetztem „dirty“-Flag in der Warteschlange stehen, wird hier ein größerer Wert angezeigt.

Jedesmal, wenn die Warteschlange leer ist, erzeugt kallcenter einen neuen, leeren Datensatz – daher ist „Anz.Anrufe“ stets mindestens Eins.

Das Feld „Telefon“ ist bei diesen neu angelegten Datensätzen leer und veränderbar. Der Callcenter-Agent kann hier eine Telefonnummer eintragen. Das Feld bleibt bis zum ersten Anruf veränderbar, selbst bei einem zwischenzeitlichen Logout. Nach dem ersten Anruf ist es jedoch wieder Read-Only.

Die Speicher-Tasten und „Pause“ zeigen ebenfalls ein anderes Verhalten. Eine automatische Anwahl erfolgt in einem „Frei“-Vertrag nicht. Ohne Telefonnummer kann das ja auch nicht funktionieren.

Die eingegebene Telefonnummer wird bei der Anwahl geprüft: Nummern mit der Vorwahl (0)180, (0)190 oder (0)900 werden blockiert, ebenso alle Nummern, bei denen die führende Null der Vorwahl mit angegeben wird. Bei der Prüfung wird die gesamte Nummer (Vor- und Durchwahl) berücksichtigt, so daß auch fehlerhafte Eingaben wie Vorwahl 18, Durchwahl 0123 (statt Vorwahl 180, Durchwahl 123) erkannt werden.

Eine Telefonnummer aus der Negativliste kann ebenfalls nicht angerufen werden.

Wurde die Nummer bereits von einem anderen Datensatz angewählt, erscheint eine Warnung mit Angabe des Zeitpunkts der letzten Anwahl.

Falls die eingegebene Nummer in der Datenbank bereits in einem anderen Eintrag vorkommt, aber noch nicht angerufen wurde, wird dieser andere Eintrag als „gelöscht“ markiert.

Anmerkung: Der neu angelegte Datensatz wird bereits beim Anlegen als „dirty“ markiert. Auf diese Weise wird verhindert, daß durch Logouts oder Abstürze immer mehr Datensätze erzeugt und dann freigegeben werden.

Sound

Grundeinstellungen – Mixer

Nach der Installation von kallcenter auf einem Client muss als erstes das Sound-System konfiguriert werden. Die Einstellungen können jederzeit nachgeregelt werden, auch wenn dies normalerweise nicht notwendig sein sollte.

Ein Klick auf den Schalter „Sound-Kontrolle“ öffnet die gleichnamige Dialogbox. Ein Klick auf den Schalter „Öffnen“ unter „Systemweite Einstellungen“ öffnet dann den Mixer kmix.

Die auf ALSA aufbauenden Mixer zeigen keine einheitliche Oberfläche, sondern passen sich jeweils den Fähigkeiten der Soundkarte an. Daher ist eine detaillierte Beschreibung hier nicht möglich. Ein grober Überblick wird durch folgende Regler gegeben, die fast immer vorhanden sind, obwohl ihre Namen unterschiedlich lauten können und sie nicht immer in denselben Registerkarten stehen:

PCM (Pulse Code Modulation) Playback Volume
Verstärkt den Output der Kopfhörer. Dies ist eine rein digitale Amplitudenverstärkung. Sie erzeugt daher keine Störungen (Übersteuerung). Es gibt zwei Ausnahmen: 1) wenn die Lautstärke insgesamt so hoch wird, daß das nachgeschaltete Analogsystem versagt, 2) wenn durch die Verstärkung Lautstärkewerte entstehen, die größer sind als der maximal darstellbare Wert.

Master Volume
Verstärkt den Output der Kopfhörer. Dies ist eine rein analoge Verstärkerstufe. Sie neigt daher zu Übersteuerungseffekten (Pfeifen, Rauschen).
PCM und Master wirken multiplikativ. Um eine Übersteuerung zu vermeiden, sollte PCM relativ hoch, Master vergleichsweise niedrig (i.a. < 70%) gewählt werden. Die richtige Wahl kann nur mittels Kontrollanruf ermittelt werden, da VoIP hier auch andere Werte benötigt als beispielsweise ein CD-Player.

Mic Boost
Verstärkt den Mikrofon-Input. Dies ist eine rein digitale Amplitudenverstärkung. Das unter PCM gesagte gilt hier auch.
Anders als PCM ist dies kein Regler, sondern ein Schalter, der nur einen Wert oder zumindest nur sehr wenige Werte annehmen kann. Sollte bei VoIP im allgemeinen auf den maximalen Wert eingestellt werden.

Mic Auto Gain
Entspricht einer automatischen Lautstärkeregelung, die Spitzen abfangen soll.

Mic Volume
Verstärkt den Mikrofon-Input. Dies ist eine rein analoge Verstärkerstufe. Sie neigt daher zu Übersteuerungseffekten (Pfeifen, Rauschen).
Dieser Wert sollte so niedrig eingestellt werden, daß keine Störungen hörbar sind (i.a. < 70%). Ist das Mikrofon dadurch (trotz Mic Boost) zu leise, gibt es noch den im Abschnitt Lautstärke-Anzeige und -Regelung beschriebenen Lautstärkeregler. Da dieser jedoch Amplituden nur bis zu einem Faktor Sechs verstärkt, kann man Mic Volume nicht beliebig niedrig wählen.

Mic Switch (i.a. rotes Licht unterhalb des Mic Volume)
Schaltet das Mikrofon ein oder aus.
Achtung: Die Default-Einstellung von SuSE Linux ist hier ein abgeschaltetes Mikrofon!

Mic Playback Switch (i.a. grünes Licht oberhalb des Mic Volume)
Schaltet den Mikrofon-Input auf den Kopfhörer zurück (Echo). Dies ist nur zum testen sinnvoll.

Die Einstellungen des Mixers können durch den Schalter „Speichern“ in der „Sound-Kontrolle“ permanent gemacht werden. Dazu werden sie in einer Konfigurationsdatei gespeichert und bei jedem neuen Anruf wiederhergestellt.

Anmerkung: Die Konfigurationsdatei ist „$HOME/.qt/kcenter.alsa“ und hat das gleiche Format wie „/etc/asound.state“.

Anmerkung: kallcenter beendet mit jedem Klick auf „Wählen“ sowie beim Starten alle anderen Prozesse, die die Soundkarte zu verwenden versuchen, darunter auch den Mixer kmix (der allerdings während eines Anrufs durchaus gestartet werden kann). Auch der aRts-Dienst der KDE (der für die Ausgabe von Systemklängen verantwortlich ist) wird beendet.

Lautstärke-Anzeige und -Regelung

Im Dialog „Sound-Kontrolle“ unter „Lokale Einstellungen“ befinden sich zwei Regler und zwei Anzeigebalken, die durch Tooltips als Mikrofon-Lautstärke/-Signal (oberer Regler/Anzeigebalken) bzw. Kopfhörer-Lautstärke/-Signal (unterer Regler/Anzeigebalken) gekennzeichnet werden.

Die Lautstärke-Anzeigen geben den Amplitudenwert in Prozent vom erlaubten Maximalwert wieder. Welcher Lautstärke dieser Maximalwert entspricht, entscheiden allerdings die Einstellungen des Mixers.

Die Lautstärkeregler wirken multiplikativ auf den Amplitudenwert. Der Mikrofon-Lautstärkeregler ist mit sieben Markierungen versehen. Die am weitesten links stehende entspricht der Null, die unmittelbar rechts davon stehende der Eins. Die am weitesten rechts stehende entspricht der Sechs: die Amplituden würden damit um das sechsfache verstärkt.

Nach Erfahrung wird die Mikrofonlautstärke vermutlich auf einen Wert zwischen 2 und 5 gestellt werden müssen, je nach Leistungsmerkmalen des Soundsystems.

Der Lautsprecher-Regler hat nur zwei Markierungen, die für die Werte Null und Eins stehen. Es ist also nicht möglich, den Lautsprecher-Output zu verstärken, man kann ihn hier lediglich dämpfen. Der Erfahrung nach werden erzeugen die angerufenen Telefone Signale, die bereits im maximalen Bereich liegen, wie das bei kallcenter mit der entsprechenden Einstellung der Mikrofonlautstärke auch der Fall ist. Wie laut diese maximalen Amplituden erscheinen, liegt alleine bei den Mixer-Einstellungen (PCM und Master).

kallcenter verfügt über eine automatische Lautstärkedämpfung sowohl für Mikrofon als auch für Lautsprecher. Wenn durch die oben beschriebene Verstärkung die Amplitudenwerte auf über 100% ansteigen, wird der entsprechende Lautstärkeregler automatisch zurückgestellt. Diese Rückstellung ist permanent, wenn der Dialog der Sound-Kontrolle offen ist. Sie ist nur temporär, wenn die Dialogbox geschlossen ist – Stör-Effekte werden so durch die Dämpfung vermieden, aber die einmal gewählten Lautstärken werden wiederhergestellt, sobald die Spitzenbelastung vorüber ist.

Alle Änderungen der Regler werden sofort abgespeichert. Der „Speichern“-Schalter bezieht sich nur auf die Einstellungen des Mixers, nicht auf die Lautstärkeregler.

Anmerkung: diese Lautstärken werden in der Konfigurationsdatei /etc/X11/kallcenterrc gespeichert.

Log-Dateien und Core Dumps

In der Default-Einstellung (siehe dazu auch Installation / Update Dienst / Installations-Skript) erzeugt kallcenter beim Start über das Desktop-Icon eine Log-Datei „kallcenter.log“ im Heimatverzeichnis des Benutzers. Außerdem wirft kallcenter im Falle eines Speicherzugriffsfehlers einen „Core Dump“, einen Hauptspeicherabzug. Sofern kallcenter mit der Option --enable-debug=yes übersetzt wurde, kann dieser Core Dump dazu benutzt werden, die Fehlerursache aufzuspüren. (Anmerkung: Seit Mitte Mai hat kallcenter keine Speicherzugriffsfehler mehr gehabt.)

Die Log-Datei enthält:

den Startzeitpunkt und die Version von kallcenter,

das komplette SIP-Transaktionslog, über Registrierungs-Anforderungen und -Antworten über Anruf-Anforderungen und -Antworten bis zum Auflegen oder Abbrechen eines Anrufes,

alle ICMP-Fehlermeldungen inklusive Angabe der betroffenen SIP- oder RTP-Ports (Input und Output),

Meldungen über das Ein- und Ausloggen (Benutzer und Vertrag),

Meldungen über Ein- und Ausschalten des Kopfhörers während des Anrufs (falls kein Fehler auftritt, gibt es nur während des Wähltons am Anfang Meldungen, danach sollte der Sound permanent aktiv bleiben),

während des Anrufs viermal pro Sekunde Angaben über die Anzahl der empfangenen und gesendeten Pakete sowie der Anzahl der ICMP-Fehlermeldungen (diese Meldungen werden in einer späteren Version weiter zusammengefasst und zugleich in der Hauptmaske visualisiert werden, um auf Leitungsstörungen hinzuweisen),

Meldungen über die Speichervorgänge.

Die Log-Datei wird vom Installations-Skript während des Einspielens einer neuen Version umbenannt, und zwar in „kallcenter-<Jahr>-<Monat>-<Tag>-<Stunde>-<Minute>-<Sekunde>.log“. Eine bessere Methode des Aufräumens ist ein cron-Job, der den kallcenter-Client nachts stoppt, die Logs umbenennt und Logs löscht, die älter sind als eine Woche.

Der Update-Dienst hat eine eigene Log-Datei kcupdate.log, ebenfalls im Heimatverzeichnis. Da sie in Vergleich zu kallcenter.log nur sehr wenige Meldungen enthält, wird sie auch nicht umbenannt.

Reports

Microsoft Query

Die Auswertung der Daten erfolgt am besten in Form von Excel-Tabellen. Dieses Medium ist nicht nur eine logische Wahl, weil die Büro-PC's im Gegensatz zu den Callcenter-PC's wahrscheinlich unter Microsoft Windows und mit Microsoft Office laufen werden, sondern auch, weil Excel-Tabellen ein beliebtes Medium sind, um elektronische Daten zwischen Firmen auszutauschen. Somit werden die Auftraggeber des Callcenters vermutlich dieses Medium benutzen wollen.

Als Alternative kann auch Microsoft Access verwendet werden, welches einen recht leistungsfähigen Reportgenerator enthält. Hierüber können die Reports für den Ausdruck formatiert werden, was in Excel wesentlich schwerer ist. Allerdings ist Access weniger verbreitet; auch liefert es kein geeignetes Austauschformat.

Unter Windows muss ein ODBC-Treiber für mySQL installiert werden. MyODBC 3.51 für Windows kann unter http://dev.mysql.com/downloads/ heruntergeladen werden (siehe mySQL Connector/ODBC). Ein direkter Link zum deutschen Mirror der GWDG (Gesellschaft für wissenschaftliche Datenverarbeitung mbH Göttingen) ist http://ftp.gwdg.de/pub/misc/mysql/Downloads/MyODBC3/MyODBC-3.51.11-2-win.exe.

Bei der Installation des Treibers wird eine ODBC-Datenquelle mit dem Namen callcenter auf die Datenbank callcenter angelegt, die sich (im vorliegenden Fall) auf dem Rechner 192.168.0.1 befindet. Benutzername und Passwort müssen natürlich mit den bei der Installation angegebenen übereinstimmen (siehe auch Installation / Installation der Datenbank).

Microsoft Query läßt sich in Excel über den Menüpunkt „Daten“, „Externe Daten importieren“, „Neue Abfrage erstellen“ aktivieren. Hierauf öffnet sich ein Dateidialog, über den man eine existierende, gespeicherte Abfrage öffnen oder über Assistenten neu erstellen kann. Die einfachste Möglichkeit zur Erstellung führt über den Schalter „Neue Quelle“, mit der darauffolgenden Auswahl „ODBC DSN“. Hier kann dann die oben erstellte ODBC-Datenquelle callcenter ausgewählt werden. Nach Auswahl von Tabellen, darzustellenden Spalten und einschränkenden Kriterien hat man eine einfache Abfrage, die jedoch Fehlerhaft ist. So fügt der Assistent offenbar automatisch falsche Einschränkungen der Form „<Tabelle 1>.pkey = <Tabelle 2>.pkey“ hinzu. Daher ist nach Ausführung der Abfrage die Ergebnismenge zu klein, in vielen Fällen sogar leer – nur die Titelzeile ist zu sehen.

Führt man – während der Cursor auf der Titelzeile steht – jedoch den Menüpunkt „Daten“, „Externe Daten importieren“, „Abfrage bearbeiten“ aus, so öffnet sich ein weit mächtigeres Bearbeitungswerkzeug (siehe Abbildung). Die Fehlermeldung „Diese Abfrage kann mit dem Assistenten nicht bearbeitet werden“ erschien sowohl bei Excel 2000 als auch bei Excel 2003, doch der Assistent ließ sich in beiden Fällen öffnen; zumindest bei Excel 2003 waren die erstellten Abfragen auch funktionsfähig.

Gespeicherte Abfragen

Microsoft Query speichert Abfragen in normalen Textdateien. Im Falle einer ODBC-Datenquelle hat die Datei die Extension *.dqy (für „database query“). Die Datei lässt sich mit einem normalen Editor (Notepad, Wordpad) bearbeiten. Auf diese Weise kann jede Abfrage für den mySQL-Kommandozeilen-Client nach Excel portiert werden.

Eine gespeicherte Abfrage kann durch den Menüpunkt „Daten“, „Externe Daten importieren“, „Daten importieren“ in eine Excel-Tabelle eingefügt werden.

Anbei ein Beispiel für die Ausgabe aller Aufträge seit einem bestimmten Zeitpunkt (i.a. der Tagesanfang). Das Zeichen „¶“ markiert Absätze/Zeilenenden, das Zeichen „“ Tabulatoren. Die Datei enthält:

einen zweizeiligen Header zur Kennzeichnung einer Microsoft Query-Datei,

die Angabe der ODBC-Datenquelle (DSN=callcenter...),

die Angabe der Login-Informationen (DSN;DATABASE=..., Datenbankname, Server-Adresse, Benutzername, Passwort etc.),

das select-Statement, in dem sich die eigentliche Programmlogik befindet; zudem werden durch Fragezeichen Werte angegeben, die vom Benutzer erfragt werden,

die Texte, die in den Eingabeaufforderungen angegeben werden, jeweils getrennt durch Tabulatoren („Anrufzeit nach/vor Zeitpunkt...“),

wenn direkt bei der Eingabe eine Typprüfung durchgeführt werden soll, für jeden Parameter die Kennziffer des Parameter-Typs (11 ist z.B. DATETIME, 12 ist VARCHAR, der Default-Wert),

und schließlich der Titelzeile für die Excel-Tabelle – diese Angabe scheint jedoch ignoriert zu werden, jedenfalls werden die Spaltentitel durch die Angaben im select-Statement bestimmt.

XLODBC¶

1¶

DSN=callcenter;DESC=MySQL ODBC 3.51 Driver¶ DSN;DATABASE=callcenter;SERVER=192.168.0.1;UID=callcenter;PASSWORD=hd6wUKgc89h;

PORT=3306;OPTION=3;STMT=;¶

select contractor, contracttitle, date as contractdate, salutation, numbers.firstname as firstname, numbers.surname as surname, birthday, job, bankname, banknumber, accountnumber, accountowner, street, zipcode, location, prefix, phonenumber, prefix2, phonenumber2, contracts.field1 as field1name, numbers.field1 as field1, contracts.field2 as field1name, numbers.field2 as field2, contracts.field3 as field1name, numbers.field3 as field3, contracts.field4 as field1name, numbers.field4 as field4, agents.firstname as agentfirstname, agents.surname as agentsurname, id, max(dialtime) as lastcalldate, remark from numbers, contracts, agents, calls, sip where contracts.pkey = numbers.contract and agents.pkey = numbers.agent and numbers.contract = contracts.pkey and calls.number = numbers.pkey and calls.phone = sip.pkey and numbers.state = 7 and agents.normal = 1 and numbers.normal = 1 and (dialtime >= ?) and (dialtime <= ?) group by numbers.pkey order by contractor, contracttitle, lastcalldate¶

Anrufzeit nach Zeitpunkt (Format yyyy-mm-dd hh:mm:ss)	 Anrufzeit vor Zeitpunkt (Format yyyy-mm-dd hh:mm:ss)¶

11	 11¶

contractor	 contracttitle	 salutation	 firstname	 surname	 street  zipcode	 location	 prefix	 phonenumber	 prefix2	 phonenumber2	 bankname	 banknumber	 accountnumber	 accountowner  birthday	 field1	 field1	 field2	 field2	 field3	 field3	 field4	 field4	 firstname	 surname	 id	 client	 remark¶

Die hier vorgestellte Abfrage gibt alle Informationen zu Abschlüssen aus, einschließlich des Zeitpunkts der letzten stattgefundenen Anwahl. Die Abfrage (dialtime >= ?, Text der Abfrage „Datum heute...“) beschränkt die ausgegebenen Abschlüsse auf diejenigen, die nach dem eingegebenen Zeitpunkt (i.a. der Tagesbeginn) gemacht wurden.

Abfrage-Beispiele

Hier folgen einige Beispiele für Report-Abfragen.

Logins seit angegebenem Zeitpunkt, angeordnet nach Client, Zeit, Agent:

-----------------------------------------------------------------------

select logintime, logouttime, firstname, surname, client from logins, agents, sip where logintime >= ? and agents.pkey = agent and sip.pkey = phone order by client, logintime

Anzahl/Dauer Logins seit angeg. Zeitpunkt, angeordnet nach Client und Agent:

----------------------------------------------------------------------------

select agents.firstname, agents.surname, agents.id, sip.client, count(*), sum(logouttime - logintime) as duration from logins, agents, sip where logintime >= ? and logins.agent = agents.pkey and logins.phone = sip.pkey and logouttime > '0000-00-00 00:00:00' group by agents.pkey, sip.pkey order by sip.client, agents.id

Liste aller Anrufe seit angeg. Zeitpunkt:

-----------------------------------------

select agents.id, prefix, phonenumber, dialtime, hanguptime from calls, agents, numbers where dialtime >= ? and agents.pkey = calls.agent and numbers.pkey = number order by dialtime

Anzahl/Dauer Anrufe seit angeg. Zeitpunkt:

------------------------------------------

select count(*), max(hanguptime - dialtime) as longest, sum(hanguptime - dialtime) as total from calls, numbers where dialtime >= ? and numbers.pkey = number and hanguptime > '0000-00-00 00:00:00'

Anzahl/Dauer Anrufe seit angeg. Zeitpunkt, geordnet nach Status, Client, Agent:

-------------------------------------------------------------------------------

select agents.firstname, agents.surname, agents.id, states.statename, sip.client, count(*), max(hanguptime - dialtime) as longest, sum(hanguptime - dialtime) as total from calls, agents, numbers, sip, states where dialtime >= ? and agents.pkey = numbers.agent and numbers.pkey = calls.number and sip.pkey = calls.phone and states.pkey = numbers.state and hanguptime > '0000-00-00 00:00:00' group by agents.pkey, numbers.state, calls.phone order by sip.client, states.statename, agents.id

Tageweise Auswertung des Telefonie-Aufkommens seit Installation:

----------------------------------------------------------------

select count(*), max(hanguptime - dialtime) as longest, sum(hanguptime - dialtime) as total, date_format(dialtime, '%Y-%m-%d') as day from calls where hanguptime > '0000-00-00 00:00:00' group by day order by day

Verknüpfungen innerhalb von Excel

Die Verwendung dieser Abfragen in verknüpften Tabellenblättern wird durch eine Eigenheit von Excel erschwert. Und zwar überschreibt die Titelzeile der Abfrage die Zeile, ab der Daten eingefügt werden. Die unter der Titelzeile stehenden Zeilen werden jedoch nicht überschrieben, sondern eingefügt, wie mit dem Menüpunkt „Einfügen“ / „Zeile“. Bei einer Aktualisierung werden die alten Zeilen gelöscht und anschließend die neuen eingefügt. Daraus folgt natürlich, daß alle in den eingefügten Datenbereich hineinführenden relativen Verknüpfungen verschoben werden, und zwar unter den Datenbereich. Also müssen alle relativen Verknüpfungen nach jeder Aktualisierung der Daten neu erstellt werden – besser verwendet man absolute Verknüpfungen.

Verknüpfungen sind natürlich in vielerlei Hinsicht nützlich. So können die Daten der Abfrage beispielsweise anders angeordnet werden (Beispiel: die Spaltentitel der vertragsabhängigen Felder lauten field1, field2 und so weiter, es wäre natürlich praktisch, wenn diese Spaltentitel durch die im Vertrag vorgegebenen Werte ersetzt würden), oder sie können weiter zusammengefasst werden, ohne weitere Abfragen nötig zu machen. Auch kann die Anordnung geändert werden, zum Beispiel kann eine Zeile auf mehrere aufgeteilt werden.

Installation

Empfohlene Hardware

kallcenter ist bei den Anforderungen an die Hardware ausgesprochen genügsam.

Für die Clients sollte wegen des darunterliegenden SuSE 9.2 ein Arbeitsspeicher von 256 MB RAM (SD-RAM oder DDR-RAM) vorhanden sein. Die CPU-Leistung ist weniger wichtig; ein Pentium III 1 GHz ist vollkommen ausreichend, kallcenter wurde auch schon auf langsameren Rechnern mit ausreichender Performance betrieben.

Die Netzwerkverbindung sollte wegen der Update-Dienste 100 MBit/s betragen. Dabei ist nicht nur kcupdate, sondern auch der Update-Dienst von SuSE gemeint – Paket-Installationen übers Netz via YaST und Internet-Updates über einen Proxy-Server via YOU transportieren noch erheblich größere Datenmengen über das Netz.

Auch beim Server ist ein Pentium III 1 GHz ausreichend, wobei der Arbeitsspeicher hier großzügiger bemessen sein sollte (512MB RAM) und keine grafische Oberfläche laufen sollte. Eine solche Maschine zeigte mit zehn gleichzeitig telefonierenden Clients im Normalbetrieb nur eine unbedeutende CPU-Belastung.

Daten-Importe belasten den Server natürlich massiv. So dauerte der Import einer über zwei Millionen Telefonnummern umfassenden CSV-Datei über einen in Perl geschriebenen, sehr gründlich arbeitenden Filter auf der genannten Maschine knapp 50 Minuten – was ebenfalls noch ausreichend ist.

Der freie Plattenplatz sollte mindestens 20 bis 30 GB betragen, was nach heutigen Maßstäben ebenfalls sehr klein ist. So benötigt eine Datenbank mit knapp über zwei Millionen Einträgen ca. 500 Megabyte Platz. Allerdings wird für den Import einer zwei Millionen Einträge umfassenden Datei abermals 500 Megabyte temporärer Platz benötigt, unabhängig davon, wieviele Einträge hinterher tatsächlich übernommen werden. Entsprechend kann man hochrechnen, wieviel für den Import des Klicktel-Pools mit seinen ca. 30 Millionen Nummern benötigt würde: ca. 7,5 Gigabyte für die Datenbank, und mindestens noch einmal 500 Megabytes temporärer Platz, falls der Pool in Teilen von maximal zwei Millionen Nummern importiert wird; falls alles auf einmal importiert werden soll, sind 15 Gigabytes notwendig, nicht gerechnet das Betriebssystem und andere Anwendungen sowie die Transaktions-Logs von mySQL, falls diese eingeschaltet sind. Diese Logs haben aber eine der Datenbank vergleichbare Größe, da sie alle Import-Aktionen mitschreiben. Wobei es natürlich möglich ist, die Transaktions-Logs zwischenzeitlich immer wieder zu löschen.

Größte Sorgfalt sollte bei der Auswahl der Soundsysteme der Clients angewendet werden.

Hier gibt es kein Patentrezept. Es gibt verschiedene Anlaufstellen im Internet, um herauszufinden, ob ein Sound-System (Soundcard oder On-Board-Chipset) von Linux unterstützt wird oder nicht. Leider gibt es keine gute Anlaufstelle. Als Extremwerte können einerseits die SuSE/Novell-Hardware-Datenbank gelten (http://hardwaredb.suse.de/searchForm.php?searchtype=extended&LANG=de_DE), in der nur wenige unterstützte Karten und fast keine On-Board-Chipsets bzw. Hauptplatinen als „unterstützt“ vermerkt sind. So ist beispielsweise der relativ neue Chipset nVidia nForce2 nirgendwo gelistet, obwohl er unter SuSE 9.2 tadellos funktioniert (Sound ebenso wie alle anderen Funktionen). Interessanterweise ist die Hauptplatine GA-7N400 von Gigabyte, die diesen Chipset benutzt, als voll unterstützt gekennzeichnet, aber andere Hauptplatinen derselben Baureihe wie GA-7N400-L werden als „Unterstützung unbekannt“ gelistet, und die (voll unterstützte) Hauptplatine GA-7N400S-L wird gar nicht gelistet. Das entgegengesetzte Extrem ist die Soundcard-Liste auf der ALSA-Seite (http://www.alsa-project.org/alsa-doc/), in der man beispielsweise über die Sound Blaster Live 24 erfährt, daß sie über das Kernel-Modul ca0106 unterstützt wird, aber nicht, daß dieses Modul a) erst seit Kernel 2.6.11 zum Standardumfang gehört (also in SuSE 9.2 nicht vorhanden ist), und b) dieses Modul den Mikrofoneingang nicht unterstützt.

Es sind also bei jeder neuen Hardware-Kombination umfangreiche Recherchen und nach Möglichkeit ein Test nötig. Bei den Recherchen sollte man nach Möglichkeit nach Berichten von Anwendern suchen. Das Sound-System darf nicht alleine berücksichtigt werden; so kann ein voll funktionsfähiges Sound-System für Voice over IP untauglich sein, falls es zwischen Sound-System und Netzwerk-Schnittstelle einen Interrupt-Konflikt gibt.

Ein Beispiel für ein taugliches System aus aktuellen Komponenten ist folgende Kombination:

Hauptplatine Gigabyte GA-7N400S-L (Sound, IDE und S-ATA on board, alles durch nVidia nForce2; LAN 100MBit/s on board, durch RTL8139)

Prozessor AMD Athlon XP 3200+, FSB 400, Barton

Hauptspeicher Kingston DDR400, CL3

Festplatte Maxtor 6Y080MO (80 GB, 7200U/min, S-ATA/150)

Grafikkarte GeForce FX5200, 128MB, DDR

Dieses System ist natürlich für einen Callcenter-Client, der mehr oder weniger nur als Telefon fungiert, deutlich überdimensioniert. Noch ungetestet, aber vermutlich zu empfehlen ist die Kombination GA-7N400L (ohne S-ATA), AMD Sempron 2200+ und einer kleineren IDE-Festplatte.

RPM-Pakete

Für kallcenter gibt es zwei RPM-Pakete, kallcenter-client und kallcenter-server. Zur Zeit gibt es lediglich eine Version für SuSE Linux 9.2 und Pentium-kompatible Prozessoren. Die Installation unter SuSE Linux ist so komfortabel, wie man es auch von der mitgelieferten Software kennt. Wer sich der RPM-Pakete bedient, kann die Abschnitte Systemvoraussetzungen und Installation der Datenbank überspringen.

Erste Voraussetzung ist natürlich ein funktionierendes Netzwerk; Server und Clients müssen untereinander und mit dem Internet verbunden sein.

Nach dem Download der Pakete können diese mit dem Konqueror geöffnet und über YaST installiert werden. Die von kallcenter benötigten SuSE-Pakete werden von YaST automatisch nachinstalliert.

Idealerweise beginnt man mit der Installation des Servers; die Clients sind ohne Kontakt zum kallcenter-Server nicht arbeitsfähig.

Auf dem Server muss zunächst das Paket kallcenter-client installiert werden; es enthält die Binärprogramme, die vom Server aus auf die Clients verteilt werden. Anschließend folgt das Paket kallcenter-server. (Download der Pakete ist möglich von: http://fourier.mylinuxproject.de/kallcenter).

Nach Installation von kallcenter-server erscheint im Startmenü unter „Büroprogramme“ der Eintrag „kallcenter Setup“. (Der ebenfalls dort sichtbare Eintrag „kallcenter“ startet lediglich den Client.) Startet man dieses Programm als normaler Benutzer, so wird zunächst nach dem root-Passwort gefragt.

Danach erfolgt Schritt für Schritt das Setup. Sollten mySQL und Apache nicht laufen, so startet das Setup sie und erinnert den Benutzer daran, sie als Dienste zu aktivieren. Das durch das RPM-Paket bereits erzeugte Verzeichnis /SuSE92 wird über Apache mit der URL /SuSE92 freigegeben.

Das Setup bietet die Möglichkeit, eine bereits existierende kallcenter-Datenbank einzubinden oder sie (inklusive Benutzer) neu anzulegen. Benutzer, Datenbankname und Passwort werden abgefragt.

Anschließend wird nach der IP-Adresse des Servers gefragt. Das Setup gibt als Voreinstellung die Adresse des ersten gefundenen Netzwerk-Interfaces an. Wird kein aktives Interface (außer Loopback) gefunden, warnt das Setup, dass das Netzwerk noch eingerichtet werden muss.

Falls das root-Passwort von mySQL noch nicht gesetzt wurde, wird es vom Setup gesetzt. Ein leeres Passwort wird nicht akzeptiert.

Das Setup erzeugt die Konfigurationsdateien der kallcenter-Clients, plaziert sie in der Web-Freigabe „/SuSE92/kallcenter“ und öffnet abschließend eine Seite mit einer Beschreibung, wie die Clients eingerichtet werden können.

Anmerkung: die Web-Freigabe /SuSE92 ist uneingeschränkt verfügbar. Daher sollte der kallcenter-Server vom Internet her nicht über Port 80 (WWW) erreichbar sein – wofür natürlich im allgemeinen auch kein Grund besteht –, oder der Zugriff muss manuell auf das lokale Netz eingeschränkt werden.

Anmerkung: beim Passwort für die kallcenter-Datenbank macht das Setup-Programm einen Vorschlag. Dieser Vorschlag ist eine zufällige Buchstaben/Zahlen-Kombination. Je nach Anforderungen kann es sinnvoll sein, diesen Vorschlag zu ändern; dies hängt von der Art und Anzahl der externen Applikationen ab, die auf die kallcenter-Datenbank zugreifen sollen. Da das Setup die Konfigurationsdateien der kallcenter-Clients mit erstellt, ist es nicht notwendig, für die Einrichtung der Clients das Passwort zu kennen. Wohl aber wird es derzeit für die Reports gebraucht.

Hinweis: Es ist vorgesehen, einige Standard-Reports ebenfalls über das Setup zu generieren, derzeit aber nicht realisiert.

Anmerkung: Sollte der Server eine dynamische, via DHCP zugeordnete Adresse haben, kann im Setup statt einer IP-Adresse auch ein Name angegeben werden. Empfehlenswert ist dies jedoch nicht, Server sollten keine DHCP-Clients sein und schon gar nicht dynamische Adressen haben. Anderenfalls entstehen unnötige Abhängigkeiten und sogar Sicherheitslücken.

Systemvoraussetzungen

Wer sich der RPM-Pakete bedient, kann diesen Abschnitt überspringen. RPM stellt sicher, dass die benötigten Pakete installiert sind.

Die folgenden Shared Object Files werden vom Programm kallcenter eingebunden (bestimmbar mit „ldd kallcenter“):

Paket	SO File		Paket	SO File
fontconfig	libfontconfig.so.1		openssl	libcrypto.so.0.9.7
freetype2	libfreetype.so.6		openssl	libssl.so.0.9.7
glibc	libc.so.6		qt3	libqt-mt.so.3
glibc	libdl.so.2		xorg-x11-libs	libICE.so.6
glibc	/lib/ld-linux.so.2		xorg-x11-libs	libSM.so.6
glibc	libm.so.6		xorg-x11-libs	libX11.so.6
glibc	libpthread.so.0		xorg-x11-libs	libXcursor.so.1
glibc	libresolv.so.2		xorg-x11-libs	libXext.so.6
Kernel 2.6	linux-gate.so.1		xorg-x11-libs	libXft.so.2
expat	libexpat.so.0		xorg-x11-libs	libXi.so.6
libgcc	libgcc_s.so.1		xorg-x11-libs	libXrandr.so.2
libpng	libpng.so.3		xorg-x11-libs	libXrender.so.1
libstdc++	libstdc++.so.5		xorg-x11-libs	libXt.so.6
libz	libz.so.1			

Des weiteren rufen kallcenter und der kallcenter-Update-Dienst kcupdate folgende andere Programme auf:

Paket	Programm	Anmerkung
wget	wget	nur Update-Dienst kcupdate
alsa	alsactl	Speichern und Wiederherstellen der Sound-Einstellungen durch kallcenter
kdemultimedia3-mixer	kmix	Ändern der Sound-Einstellungen durch kallcenter
kdelibs3	dcop	Öffnen des kmix-Hauptfensters
psmisc	killall	Beenden anderer Sound-benutzender Programme (artsd, kmix)
psmisc	fuser	Ermitteln/beenden anderer Sound-benutzender Programme
coreutils	env	Löschen des Environments

Auf dem Server muss eine mySQL Datenbank existieren. Getestet wurde das System mit mySQL 4.0.21. Für den weiter unten beschriebenen Update-Dienst sollte ein Webserver existieren, beispielsweise Apache. Schließlich werden für die Import-Skripte der mySQL-Kommandozeilen-Client und Perl5 gebraucht. Unter SuSE Linux wären dies folgende Pakete:

Paket	Anmerkung
mysql	Datenbank-Server
mysql-client	Kommandozeilen-Client, für die Installations- und Import-Skripte
perl	Perl5, für die Import-Skripte
apache2	Webserver, für den Update-Dienst

Installation der Datenbank

Auf dem Server muss zunächst die Datenbank erstellt werden. Dafür werden folgende Skripte ausgeführt:

cat create-database.sql | mysql -u root -p

Dieses Kommando fragt nach dem Passwort des Datenbank-Administrators. Es erstellt eine leere Datenbank callcenter, den Benutzer callcenter mit dem Passwort hd6wUKgc89h, und gibt dem Benutzer callcenter Vollzugriff auf die Datenbank callcenter.

cat cc-db.sql | mysql -u callcenter -phd6wUKgc89h

Dieses Kommando legt die Tabellenstruktur an und füllt die Tabelle states.

Weiterhin müssen die folgenden Skripte kopiert werden:

Quelle	Ziel	Anmerkung
import-unique.pl	/root/	Importiert Telefonnummern aus CSV-Dateien im Klicktel-Format
negative-import.pl	/root/	Noch zu erstellen! Import-Format bislang unbekannt. Erweitert die Negativliste um Einträge aus externen Quellen

Anmerkung: Bei der jetzigen Architektur wird das Datenbank-Passwort in den Skripten selbst gespeichert. Daher müssen diese an einem für normale Benutzer unzugänglichen Ort abgelegt werden.

Anmerkung: Das Passwort für die Datenbank sollte ausgetauscht werden. Zunächst in der Datei create-database.sql, dann im Befehl zum Einspielen von cc-db.sql (siehe oben), dann in den beiden gerade genannten Perl-Scripts. Es steht außerdem noch an einer weiteren Stelle, nämlich im Installations-Skript des Update-Dienstes; dieses trägt es dann auf sämtlichen Clients bei der Erstinstallation von kallcenter in die Konfigurationsdatei ein. Siehe auch Update-Dienst / Installations-Skript.

Benötigte Tabelleneinträge

Folgende Tabellen müssen zumindest einen Eintrag enthalten, um arbeiten zu können:

agents – mindestens ein Agent muss existieren, um sich einloggen zu können; vorzugsweise ein Agent mit normal = 1 (Bedeutung siehe kallcenter Datenbank),

contracts – mindestens ein Auftrag muss existieren,

agentcontracts – der Agent muss diesen Auftrag sehen können,

numbers – eine anzurufende Telefonnummer muss vorhanden sein, die in der Hauptmaske angezeigt werden kann; falls der oben erzeugte Agent den Wert normal = 1 hat, sollte auch die Telefonnummer den Wert normal = 1 haben,

sip – es muss für jeden Rechner, auf dem das Softphone läuft, ein Eintrag in der Tabelle sip existieren; natürlich muss dieser einen funktionsfähigen SIP-Account beschreiben.

Update-Dienst

Client-Konfiguration

Neue Programmversionen können von einem Update-Server aus automatisch auf allen Clients eingespielt werden. Der Update-Server muss ein Webserver sein (z.B. Apache). Da seine Belastung minimal ist, kann er auf derselben Maschine laufen wie die Datenbank.

Bei der ersten Installation von kallcenter auf den Clients muss zunächst eine Konfigurationsdatei „/etc/kcupdaterc“ angelegt werden, die den Update-Dienst steuert. Wird kcupdate ausgeführt, ohne daß diese Datei existiert, so wird die Datei automatisch mit Default-Werten erstellt.

Die Datei enthält folgende Einträge:

Variable	Default-Wert	Anmerkung
KCSERVER	192.168.0.1	Adresse des Update-Servers
PATH	/bin:/usr/bin:/usr/local/bin	Mit diesem Pfad werden die Shellscripts des Update-Servers auf den Clients ausgeführt – Sicherheitswarnung: die Scripts laufen mit root-Rechten
HOME	/home/local	Mit diesem Home-Directory werden die Shellscripts des Update-Servers auf den Clients ausgeführt – Sicherheitswarnung: die Scripts laufen mit root-Rechten
VERSIONFILE	/home/local/VERSION	In dieser Datei wird das Erstellungsdatum (entspricht der Versionskennzeichnung) des Programms kallcenter abgelegt
LOADPATH	SuSE92/kallcenter	Dies ist die Web-Freigabe auf dem Update-Server (Verzeichnis)
MAINFILE	kallcenter.bz2	Name der Datei in der Freigabe auf dem Update-Server, deren Erstellungsdatum mit dem Wert in der Datei $VERSIONFILE verglichen wird, um zu entscheiden, ob ein Update vorgenommen werden muss
INSTALLFILE	INSTALL.update-tmp	Dieses Shellscript wird aus der Freigabe auf dem Update-Server geladen und lokal mit root-Rechten ausgeführt, um die Installation abzuschließen
INDEXHTML	index.html	wget lädt das Inhaltsverzeichnis der Web-Freigabe in eine Datei dieses Namens herunter. Der Name ist beispielsweise bei Linux/Apache index.html, bei Windows/IIS hingegen index.htm oder default.htm.

Server-Konfiguration

Auf dem Server muss eine Web-Freigabe existieren, die ein Auslesen des Verzeichnis-Inhaltes erlaubt (Apache: Option Indexes). Die Freigabe muss über die in der Konfigurationsdatei /etc/kcupdaterc angegebene URL http://$KCSERVER/$LOADPATH erreichbar sein.

In dieser Freigabe müssen die folgenden Dateien stehen:

Datei	Beschreibung
kallcenter.bz2	bzip2-komprimierte Fassung des Programmes kallcenter, nach Möglichkeit Übersetzt mit der Option –enable-debug=yes. Wichtig ist das Erstellungsdatum dieser Datei. Jede Änderung an diesem Datum erzwingt eine Neuinstallation auf allen Clients.
kallcenter-latest.tar.bz2	bzip2-komprimiertes tar-Archiv mit den Quellen von kallcenter. Hierin befinden sich auch Icons, Konfigurationsdateien und anderes, was außer dem Binärprogramm für die Installation gebraucht werden könnte.
kcupdate	Das Binärprogramm des Update-Dienstes.
INSTALL.update-tmp	Dieses Shellscript wird vom Update-Dienst mit root-Rechten ausgeführt. Das Environment wird dabei vollständig durch die Datei /etc/kcupdaterc bestimmt. Siehe Installations-Skript.

Installations-Skript

Das Installations-Skript INSTALL.update-tmp führt folgende Aufgaben durch:

Herunterfahren aller existierenden kallcenter-Instanzen (es sollten keine laufen, da der Update-Dienst von der kallcenter-Startroutine aktiviert wird),

Umbenennen der Log-Datei $HOME/kallcenter.log in kallcenter-<Jahr>-<Monat>-<Tag>-<Stunde>-<Minute>-<Sekunde>.log mit der aktuellen Systemzeit des Clients,

anlegen der Verzeichnisse /opt/kde3/share/apps/kallcenter/translations (für die Sprach-Lokalisierung) und /opt/kde3/share/apps/kallcenter/icons (für das Desktop-Icon, den Splash-Screen, verschiedene Icons in den Schaltflächen und Titelzeilen von kallcenter) sowie notfalls der darüberliegenden Verzeichnisse,

Herunterladen der aktuellen kcupdate-Version in das Arbeitsverzeichnis /tmp (Bemerkung: das aktuelle Arbeitsverzeichnis wird von kcupdate selbst auf /tmp gesetzt),

setzen von suid-root für kcupdate,

verschieben von kcupdate in das Heimatverzeichnis des Benutzers local,

löschen eventuell vorhandener Archive in /tmp (Arbeitsverzeichnis),

Herunterladen von kallcenter-latest.tar.bz2 und kallcenter.bz2,

Entpacken von kallcenter-latest.tar.bz2 im Arbeitsverzeichnis /tmp,

kopieren der Icons aus dem Sourcen-Verzeichnis (kallcenter/) nach /opt/kde3/share/apps/kallcenter/icons/,

kopieren der Sprach-Lokalisierung aus dem Sourcen-Verzeichnis nach /opt/kde3/share/apps/kallcenter/translations/,

setzen der Zugriffsrechte dieser Verzeichnisse – nur root darf dort schreiben,

entpacken von kallcenter.bz2,

setzen von suid-root für kallcenter,

verschieben von kallcenter in das Heimatverzeichnis des Benutzers local,

erzeugen eines Start-Skriptes (Desktop-Icon) für kallcenter auf dem Desktop des Benutzers local (Details zu diesem Skript siehe weiter unten),

Freigabe von Schreibrechten für den Benutzer local (und nur ihn) für das Desktop-Icon,

und schließlich: falls noch keine Konfigurationsdatei /etc/X11/kallcenterrc für kallcenter existiert, kopieren dieser Datei aus dem Sourcen-Verzeichnis mit gleichzeitigem Verändern des Eintrags für den Datenbank-Server, und zwar in den Wert $KCSERVER (also den Update-Server).

Abschließend werden die Archive und das entpackte Sourcen-Verzeichnis wieder gelöscht.

Das erstellte Startskript (Desktop-Icon) wurde folgendermaßen angepaßt:

das dargestellte Icon ist /opt/kde3/share/apps/kallcenter/icons/icon.png,

der Startbefehl führt zunächst kcupdate aus und lenkt Standard-Output und -Error auf die Log-Datei kcupdate.log um,

dann wird der Core Dump-Mechanismus eingeschaltet (hier mit einer Maximalgröße von 400 MB – beim Ressourcenverbrauch von kallcenter werden die Core Dumps allerdings wohl nicht über 10 MB anwachsen),

dann wird kallcenter gestartet und Standard-Output und -Error auf die Log-Datei kallcenter.log umgelenkt.

Die Pfade zu den Programm- und Log-Dateien sind durch die Variable $HOME (Heimatverzeichnis des Benutzers) gegeben.

Arbeitsverzeichnis ist ebenfalls das Heimatverzeichnis des Benutzers.

Sicherheitslücke: Momentan ist das Passwort für die Datenbank in der Konfigurationsdatei „/etc/X11/kallcenterrc“ gespeichert. Diese kann zwar theoretisch als nur „les-/schreibbar für root“ gespeichert werden. Aber jeder Schreibzugriff durch die Anwendung kallcenter (speziell durch Lautstärkeänderungen) führt zu einem Rücksetzen der Zugriffsrechte auf „schreibbar für root, lesbar für jeden“. Das Setzen von Zugriffsrechten wird von der Klasse QSettings nicht unterstützt. In einer späteren Version wird das Passwort in eine zweite Datei ausgelagert werden.

Administration

Allgemeines

Folgende administrative Aufgaben fallen im laufenden Betrieb an:

Einrichten neuer Aufträge

Einrichten neuer Agenten

Zuordnen von Aufträgen zu Agenten

Anbinden neuer Client-PC's

Importieren von Telefonnummern

Einrichten fester Nummern zum Üben

Eine weitere erfahrungsgemäß anfallende Aufgabe ist das ermitteln von fehlerhaft als „gelöscht“ gespeicherten Nummern, die erneut angerufen werden sollen. Doch ist dies eher die Aufgabe eines Reports. Eine Reaktivierung dieser Nummern ist nicht unbedingt erforderlich; statt dessen können die ermittelten Daten einfach erneut in einen „freien“ Vertrag eingegeben werden.

Um die angegebenen Aufgaben zu lösen, wäre eine entsprechende KDE-Anwendung sinnvoll. Die Entwicklung einer solchen Anwendung ist vorgesehen, aber bis auf erste Ansätze noch nicht realisiert.

Alternativ kann man direkt auf der Datenbank arbeiten. Dies ist über Kommandozeilen-Tools wie den mySQL Client ebenso möglich wie über grafische Frontends wie mysqlcc unter Linux oder mySQLfront unter Windows. Diese Methode wird im folgenden beschrieben.

Warnung: KDE/QT-Anwendungen verwenden in ihren Eingabemasken zur Codierung von Umlauten den Windows-Zeichensatz. Die Linux-Tools mySQL Client und mysqlcc hingegen verwenden den gleichen Zeichensatz wie die Linux-Konsolen.

Aufträge

Tabelle: contracts

Spalte	Erlaubter Wert	Beschreibung
pkey	keiner	Schlüsselwert, der von der Datenbank automatisch gesetzt wird.
contracttitle	Freitext, max. 40 Zeichen	Titel des Auftrags, zum Beispiel Auftragsnummer.
contractor	Freitext, max. 40 Zeichen	Auftraggeber.
field1, field2, field3, field4	Freitext, max. 40 Zeichen	Die Namen der vier auftragsabhängigen Felder.
date	Datum und Zeit, Form: YYYY-MM-DD HH:MM:SS	Hat nur Kommentarfunktion. Gibt an, wann der Auftrag in die Datenbank eingefügt wurde. Wird im Report ausgegeben.
field1required, field2required, field3required, field4required	0 oder 1	Gibt an, welches der vier auftragsabhängigen Felder ein Pflichtfeld ist (1) und welches nicht (0). Diese Felder haben z.Zt. nur Kommentarfunktion. kallcenter ignoriert die Werte zur Zeit: Pflicht ist das Ausfüllen von mindestens einem Feld. Default: 0
free	0 oder 1	0: beim Login mit diesem Auftrag holt sich der Agent 1000 „normale“ Nummern und telefoniert sie der Reihe nach ab. 1: beim Login mit diesem Auftrag erzeugt kallcenter stets neue, leere Datensätze, in die der Agent selbst die Telefonnummer eingibt. Default: 0

Beispiele für mySQL Client:

insert into contracts

(contracttitle, contractor, field1, field2, field3, field4, date, free)

values

('78801', 'SKL', 'Zehntel Lose', 'Glueckszahlen', 'Eurojoker', 'Traumjoker',

now(), 0);¶

insert into contracts

(contracttitle, contractor, field1, field2, field3, field4, date, free)

values

('78801 Frei', 'SKL', 'Zehntel Lose', 'Glueckszahlen', 'Eurojoker',

'Traumjoker', now(), 1);¶

Anmerkung: Aufträge sollten keinesfalls gelöscht werden. Andere Datensätze sind mit Aufträgen verknüpft.

Agenten

Tabelle: agents

Spalte	Erlaubter Wert	Beschreibung
pkey	keiner	Schlüsselwert, der von der Datenbank automatisch gesetzt wird.
firstname	Freitext, max. 40 Zeichen	Vorname des Agenten.
surname	Freitext, max. 40 Zeichen	Nachname des Agenten.
id	Freitext, max. 40 Zeichen	Benutzer-ID des Agenten.
active	0 oder 1	1: der Agent ist „aktiv“, wird in der Login-Maske angezeigt und kann sich einloggen. 0: der Agent ist „inaktiv“, quasi gelöscht. Er wird in der Login-Maske nicht mehr angezeigt und kann sich daher auch nicht einloggen. Default: 1
normal	0 oder 1	1: ein „normaler“ Agent, der sich mit einem „unfreien“ Vertrag anmeldet, reserviert sich mit dem Login 1000 „normale“ Nummern und gibt sie mit dem Logout wieder frei. 0: ein „nicht normaler“ Agent, kurz ein Kurs-Account, reserviert sich mit dem Login keine Nummern und gibt mit dem Logout auch keine frei. Ein solcher Agent kann jedoch mit „nicht normalen“ Nummen, kurz Kursnummern, arbeiten; diese sind ihm (und einem bestimmten Auftrag) ein für alle mal fest zugeordnet. Default: 1

Beispiele für mySQL Client:

insert into agents

(firstname, surname, id)

values

('Erika', 'Mustermann', '0001');¶

insert into agents

(firstname, surname, id, normal)

values

('Kurs', '01', 'kurs01', 0);¶

update agents

set active = 0

where id = '0002';¶

Anmerkung: Agenten sollten niemals gelöscht werden. Statt dessen sollten sie inaktiv geschaltet werden. Andere Datensätze sind mit Agenten verknüpft.

Zuordnung von Aufträgen zu Agenten

Tabelle: agentcontracts

Spalte	Erlaubter Wert	Beschreibung
pkey	keiner	Schlüsselwert, der von der Datenbank automatisch gesetzt wird.
contract	Zahl	pkey-Schlüsselwert des Auftrags.
agent	Zahl	pkey-Schlüsselwert des Agenten. Der durch den pkey-Schlüssel contract gegebene Auftrag wird dem durch den pkey-Schlüssel agent gegebenen Agenten zugeordnet.

Beispiele für mySQL Client:

insert into agentcontracts

(contract, agent)

values

(4, 23);¶

insert ignore into agentcontracts

(contract, agent)

select

7 as contract, agents.pkey as agent

where agents.active = 1 and agents.normal = 1;¶

delete from agentcontracts

where contract = 2;¶

delete from agentcontracts

where contract = 3 and agent = 23;¶

Anmerkung: Verknüpfungen zwischen Agenten und Aufträgen können gelöscht werden, um die Zuordnung aufzuheben.

Anmerkung: Die Zuordnung Agent/Auftrag muss eindeutig sein, sie darf nicht mehrfach vorkommen. „insert ignore“ ignoriert die Aufforderung, eine bereits existierende Zuordnung ein zweites mal einzufügen.

SIP-Phones

Tabelle: sip

Spalte	Erlaubter Wert	Beschreibung
pkey	keiner	Schlüsselwert, der von der Datenbank automatisch gesetzt wird.
client	Freitext, max. 40 Zeichen	Hostname des Client-PC's, ohne Domain. Im derzeitigen kallcenter-Modell gilt: ein PC – eine Telefonnummer – ein Provider. Im Sinne eines Least Cost Routings könnte es sinnvoll sein, dieses Modell zu ändern – allerdings macht das nur Sinn, wenn sehr viele Auslandstelefonate geführt werden.
server	Freitext, max. 40 Zeichen	SIP-Server. Wird vom Provider vorgegeben.
realm	Freitext, max. 40 Zeichen	SIP-Realm. Die anzurufenden Nummern werden in SIP-Nummern nach folgendem Schema umgesetzt: <Landesvorwahl><Vorwahl><Nummer>@<Realm>
display	Freitext, max. 40 Zeichen	Beliebiger Text. Z.B. Name des Providers. Hat keine echte Bedeutung.
number	Freitext, max. 40 Zeichen	Nummer des SIP-Phones. Wird vom Provider vorgegeben. Theoretisch können Anrufe über diese Nummer an den kallcenter-Client geleitet werden. In der Praxis wird dies von kallcenter nicht weiter unterstützt (es entspricht einem Inbound-Betrieb).
username	Freitext, max. 40 Zeichen	Benutzername. Wird vom Provider vorgegeben. Hierüber registriert sich das SIP-Phone beim SIP-Provider.
password	Freitext, max. 40 Zeichen	Passwort. Wird vom Provider vorgegeben. Hierüber registriert sich das SIP-Phone beim SIP-Provider.
usestun	0 oder 1	0: Der Provider benutzt kein STUN. 1: Der Provider benutzt STUN. Dann wird der STUN-Server vom nächsten Feld vorgegeben. Default: 0
stunserver	Freitext, max. 40 Zeichen	STUN-Server, falls STUN aktiviert wurde.
countryprefix	Freitext, max. 10 Zeichen	Landesvorwahl. Die anzurufenden Nummern werden in SIP-Nummern nach folgendem Schema umgesetzt: <Landesvorwahl><Vorwahl><Nummer>@<Realm> Die Schreibweise hängt vom Provider ab. So verwendet GMX beispielsweise 49 für Deutschland, TelDaFax verwendet 0049.

Beispiele für mySQL Client:

insert into sip

(client, server, realm, display, number, username, password, countryprefix)

values

('pc001', 'sip-gmx.net', 'sip-gmx.net', 'GMX', '4922112345', '4922112345',

'geheim', '49')¶

Anmerkung: SIP-Phone-Einträge sollten keinesfalls gelöscht werden. Andere Datensätze sind mit ihnen verknüpft.

Anmerkung: Der „client“ muss eindeutig sein.

Nummern-Import

Da die Anzahl der zu importierenden Telefonnummern mindestens in die zehntausende, je nach Nummernquelle in die Millionen geht, ist eine manuelle Eingabe nicht möglich – ausgenommen die Eingabe durch die einzelnen Agenten während des Telefonierens (nämlich bei „freien“ Aufträgen).

kallcenter bietet hier die Möglichkeit, CSV-Dateien beliebiger Größe zu importieren. Diese Dateien müssen das Default-Format von Klicktel haben. Es hat symbolisch die folgende Form:

"Anrede";"Vorname";"Nachname";"Bemerkung";"Strasse";"Hausnummer";

"Strasse und Hausnummer";"Stadtteil";"Landeskennzeichen";"Postleitzahl";

"Ort";"Art des Eintrags";"Vorwahl";"Durchwahl";"(Vorwahl) Durchwahl";

"Vorwahl/Durchwahl"¶

Eine Datei dieses Aufbaus kann mit dem Kommando „./import-unique.pl <Name der CSV-Datei>“ importiert werden. Das Perl-Script import-unique.pl filtert die Datensätze, wie es bei Klicktel-Daten nötig ist:

Folgende Einträge werden bereits im ersten Durchlauf entfernt:

„Anrede“ enthält „Firma“,

„Bemerkung“ enthält „Telefax“ oder „Mobil“,

Vorwahl beginnt mit 15/16/17 (Mobil), 180/190/800/900,

die Durchwahl enthält einen Bindestrich – dies sind Nummern hinter einer Telefonanlage, wahrscheinlich Firmennummern,

der Nachname enthält mehr als zwei Trennungen durch Leerzeichen – dies sind in der Regel Firmennamen,

Vor- oder Nachname enthält eine Ziffer – dies sind in der Regel Firmennamen.

Beim Einfügen in die temporäre Tabelle numbers2 werden außerdem Doppeleinträge entfernt, nur der erste bleibt jeweils erhalten:

falls die Telefonnummer bereits vorkam (beispielsweise sind mehrere Personen mit mehreren Einträgen am selben Anschluß angemeldet),

falls die Kombination „Nachname“/„Strasse und Hausnummer“/„Ort“ bereits vorkam (beispielsweise Selbstständige mit einer Firmen- und einer Privatnummer in derselben Wohnung).

Befindet sich die Telefonnummer bereits in der Haupt-Tabelle numbers, so wird sie entfernt.

Befindet sich in der Haupt-Tabelle numbers bereits ein Eintrag mit der gleichen Kombination „Vorname“/„Nachname“/„Strasse und Hausnummer“/„Postleitzahl“/„Ort“, so wird der neue Eintrag entfernt.

Befindet sich die Telefonnummer bereits in der Tabelle negative (Negativliste), so wird sie entfernt.

Erst nach allen Löschoperationen werden die Nummern in die Haupt-Tabelle numbers kopiert.

Kursnummern

Mit den bisher beschriebenen Features ist der Betrieb eines Callcenters bereits möglich. Es gibt jedoch einige weitere Features, die nur durch vollständige Kenntnis der Tabelle numbers benutzt werden können. Anbei daher die Beschreibung.

Eines der Features sind die Kursnummern, sowohl in Verbindung mit einem Kurs-Account als auch mit einem normalen Agenten.

Kursnummern sind Telefonnummern, bei denen das Feld „normal“ den Wert 0 hat. Bei einem normalen Agenten reserviert kallcenter beim Login nur „normale“ Nummern und gibt auch beim Logout nur die „normalen“ Nummern wieder frei. Kursnummern in Verbindung mit einem normalen Agenten können also dazu benutzt werden, diesem Agenten zusätzliche Telefonnummern fest zuzuordnen: beispielsweise Aufträge oder „gelbe“ Nummern aus dem letzten Jahr, oder importierte Nummern aus speziellen Quellen (hierfür fehlt derzeit aber ein Import-Skript).

In Verbindung mit einem Kurs-Account können Kursnummern zum Üben eingesetzt werden (daher auch der Name). Ein Kurs-Account reserviert weder Nummern beim Login noch gibt er sie beim Logout frei. Für einen solchen Account kann man 1000 Nummern-Datensätze mit „normal = 0“ und jeweils derselben Telefonnummer in die Tabelle numbers einfügen. Die Telefonnummer kann die eines Telefons des Callcenters selbst sein. Auf diese Weise kann ein neuer Mitarbeiter das Abtelefonieren und Abspeichern von Datensätzen mit einem Kollegen üben, der das Telefon bedient.

Tabelle: numbers

Spalte	Erlaubter Wert	Beschreibung
pkey	keiner	Schlüsselwert, der von der Datenbank automatisch gesetzt wird.
contract	Zahl	pkey-Schlüsselwert des Auftrags. Beim Reservieren einer „normalen“ Nummer trägt kallcenter hier den pkey-Schlüssel des Auftrags ein, für den der Datensatz reserviert wurde. Der Wert, der vorher darin stand, wird ignoriert. Beim Freigeben der Nummer wird der Wert stehengelassen. Bei einer Kursnummer muss dieser Wert fest vorgegeben sein. kallcenter führt keine Änderungen mehr aus.
agent	Zahl	pkey-Schlüsselwert des Agenten. Beim Reservieren einer „normalen“ Nummer trägt kallcenter hier den pkey-Schlüssel des Agenten ein, der sich den Datensatz reserviert hat. Der Wert, der vorher darin stand, wird ignoriert. Beim Freigeben der Nummer wird der Wert stehengelassen. Bei einer Kursnummer muss dieser Wert fest vorgegeben sein. kallcenter führt keine Änderungen mehr aus.
state	Zahl; 1-8	pkey-Schlüsselwert des Status. Nach diesem Feld werden die Telefonnummern an zweiter Stelle absteigend sortiert. Die Status-Werte sind: 1=frei, 2=reserviert (von einem Agenten), 3=nicht erreicht, 4=Termin, 5=Negativliste, 6=gelb, 7=Auftrag, 8=kein Auftrag (gelöscht). kallcenter ignoriert jedoch Statuswerte oberhalb von 5. Es werden also zunächst alle Termine dargestellt, dann alle nicht erreichten Nummern und dann alle reservierten.
no	Zahl	Nach diesem Feld werden die Telefonnummern an vierter Stelle sortiert. Diesem Feld wird vom Import-Skript eine Zufallszahl im Bereich 0-30000000 (der ungefähren Größe des Klicktel-Pools) zugewiesen, damit die Telefonnummern in zufälliger Reihenfolge abtelefoniert werden. Die in der Sortierung vorrangigen Felder erhalten bei neu importierten/reservierten Nummern ja stets gleiche Werte: dirty=0, state=2, nextcalldate='2005-01-01 00:00:00'; daher greift hier die Sortierung nach dem Feld no.
nextcalldate	Datum und Zeit, Form: YYYY-MM-DD HH:MM:SS	Nach diesem Feld werden die Telefonnummern an dritter Stelle sortiert. Vom Import-Skript wird diesem Feld der Wert '2005-01-01 00:00:00' zugewiesen. Bei gleichem Status greift diese Sortierung, so daß zunächst alle Termine in der Reihenfolge ihres Zeitpunktes abgearbeitet werden, dann alle „nicht erreichten“ Nummern in der Reihenfolge ihres Zeitpunktes und danach die reservierten Nummern, die laut Import-Skript alle den gleichen Zeitstempel haben sollten.
salutation	Freitext, max. 40 Zeichen	Anrede.
firstname	Freitext, max. 40 Zeichen	Vorname.
surname	Freitext, max. 40 Zeichen	Nachname.
birthday	Freitext, max. 40 Zeichen	Geburtstag.
job	Freitext, max. 40 Zeichen	Arbeit.
bankname	Freitext, max. 40 Zeichen	Bankverbindung: Name der Bank.
banknumber	Freitext, max. 40 Zeichen	Bankverbindung: Bankleitzahl (BLZ).
accountnumber	Freitext, max. 40 Zeichen	Bankverbindung: Kontonummer.
accountowner	Freitext, max. 40 Zeichen	Bankverbindung: Kontoinhaber (Name).
street	Freitext, max. 40 Zeichen	Wohnort: Strasse und Hausnummer.
zipcode	Freitext, max. 40 Zeichen	Wohnort: Postleitzahl.
location	Freitext, max. 40 Zeichen	Wohnort: Ort.
prefix	Freitext, max. 40 Zeichen	Vorwahl der anzurufenden Nummer.
phonenumber	Freitext, max. 40 Zeichen	Durchwahl der anzurufenden Nummer. Die anzurufende SIP-Nummer bestimmt sich nach dem folgenden Schema: <Landesvorwahl><Vorwahl><Nummer>@<Realm>
prefix2	Freitext, max. 40 Zeichen	Zweite Telefonnummer, Vorwahl. Kann vom Agenten beliebig gesetzt werden; hat nur Kommentarfunktion.
phonenumber2	Freitext, max. 40 Zeichen	Zweite Telefonnummer, Durchwahl. Kann vom Agenten beliebig gesetzt werden; hat nur Kommentarfunktion.
field1, field2, field3, field4	Freitext, max. 40 Zeichen	Die Werte der vier auftragsabhängigen Felder.
remark	Freitext, unbegrenzt	Beliebige Anmerkungen.
normal	0 oder 1	1: „Normale“ Nummer. Die Nummer kann von jedem „normalen“ Agenten und für jeden (unfreien) Auftrag beim Login reserviert werden, sie kann dann bearbeitet oder beim Logout wieder freigegeben werden. 0: „Kursnummer“. Die Nummer kann weder automatisch reserviert noch freigegeben werden. Default: 1
dirty	0 oder 1	0: Der Datensatz ist entweder unbearbeitet oder sauber abgespeichert worden. 1: Der Datensatz wurde bearbeitet (ein Feld wurde verändert, oder es hat eine Anwahl stattgefunden), aber noch nicht abgespeichert. Default: 0 Anmerkung: Nach diesem Feld wird an erster Stelle absteigend sortiert. Das heißt, bearbeitete Datensätze kommen stets vor allen anderen, sofern sie überhaupt darstellbar sind – das heißt, nextcalldate muss einen Zeitpunkt in der Vergangenheit beschreiben. Siehe dazu auch die Anmerkung Bekannter Fehler unter kallcenter Client / Hauptmaske – Frei = 0 / Nächster Versuch.
completenum	Freitext, max. 40 Zeichen	Hier wird beim Import (bzw. bei „freien“ Aufträgen bei der ersten Anwahl) die zusammengesetzte Zeichenkette <Vorwahl><Durchwahl> gespeichert. Prüfungen, ob die Anwahl der Nummer erlaubt ist (gegen die Negativliste, oder Vorwahlen der Form 180/190/800), werden gegen completenum durchgeführt. Auf diese Weise werden Fehleingaben kompensiert, bei denen ein Teile der Vorwahl in die Durchwahl oder umgekehrt geraten sind.

Kontakt

Autor:	Michael Oberg EDV-Berater
Anschrift:	Saarstrasse 16 50677 Köln
Telefon:	+49 (221) 9236938
Mobil:	+49 (174) 1008609
eMail:	michael.oberg@mylinuxproject.de
Web:	www.mylinuxproject.de fourier.mylinuxproject.de/kallcenter/

32

Handbuch kallcenter

Michael Oberg

2005-03-23T01:15:48