Projektarbeit Entwurf und Implementierung eines Callcenters für ein Web-Service-basiertes VoIP-Framework Aneta Kabzeva Januar 2006 Betreuer: Prof. Dr. Paul Müller Dipl.-Inform. Markus Hillenbrand Fachbereich Informatik AG Integrierte Kommunikationssysteme Universität Kaiserslautern · Postfach 3049 · 67653 Kaiserslautern Abstract Callcenter sind im heutigen Informationszeitalter viel mehr als einfache Anrufzentralen. Sie haben sich zu einem zentralen Dienst entwickelt, in dem Computertechnik und Telekommunikation zusammenwachsen. Das Internet spielt auch schon eine wichtige Rolle in der Telekommunikationsbranche. Die Internettelefonie setzt sich immer mehr gegenüber der klassischen Telefonie durch. Sie ist kostengünstiger und bietet schon eine große Anzahl von Funktionalitäten. Diese Projektarbeit beschäftigt sich mit dem Entwurf und der Implementierung eines Callcenter-Dienstes für das Web-Service-basierte VoIP-Framework Venice, welches an der TU Kaiserslautern entwickelt wurde. Inhaltsverzeichnis Inhaltsverzeichnis Kapitel 1: Einleitung........................................................................................................ 5 Kapitel 2: Grundlagen ..................................................................................................... 6 2.1 Callcenter............................................................................................................. 6 2.1.1 Callcenter-Arten.............................................................................................................. 6 2.1.2 Callcenter-Technik.......................................................................................................... 7 2.2 VoIP .................................................................................................................... 7 2.2.1 Funktionsprinzip ............................................................................................................. 8 2.2.2 Technische Standards...................................................................................................... 9 2.2.3 Erreichbarkeit ............................................................................................................... 10 2.2.4 Vor- und Nachteile von VoIP ........................................................................................ 11 2.3 Web Services ..................................................................................................... 12 2.3.1 Extensible Markup Language (XML) und XML Schema Definition (XSD) .................. 15 2.3.2 SOAP ........................................................................................................................... 17 2.3.3 Hyper Text Transfer Protocol (HTTP)........................................................................... 18 2.3.4 Web Service Description Language (WSDL) ................................................................ 18 2.3.5 Universal Description, Discovery and Integration (UDDI)............................................. 21 2.4 Das Venice-Framework...................................................................................... 23 2.4.1 Architektur des Venice-Frameworks ............................................................................. 25 2.4.2 Verarbeitung von Telefongesprächen ............................................................................ 27 2.4.3 Metering-, Accounting- und Billing............................................................................... 28 2.4.4 Leistungsmerkmale (Supplementary Services)............................................................... 28 2.5 Zusammenfassung.............................................................................................. 29 Kapitel 3: Entwurf und Implementierung eines Callcenters ....................................... 32 3.1 Software-Pakete und Werkzeuge........................................................................ 32 3.2 Callcenter-Datenbankstruktur............................................................................. 33 3.3 Callcenter-XML-Schema ................................................................................... 34 3.4 Callcenter-Schnittstellen .................................................................................... 35 3.4.1 Administrationsschnittstelle .......................................................................................... 35 3.4.2 Agentenschnittstelle ...................................................................................................... 39 3.5 Callcenter-Funktionsprinzip ............................................................................... 40 Inhaltsverzeichnis Kapitel 4: Zusammenfassung und Ausblick ................................................................. 46 Literaturverzeichnis .......................................................................................................... 48 Abbildungsverzeichnis....................................................................................................... 50 Abkürzungen ..................................................................................................................... 51 Einleitung 5 Kapitel 1: Einleitung In unserem heutigen Kommunikationszeitalter spielt das Telefon eine unersetzliche Funktion. Eine Welt ohne die Telekommunikation ist heute undenkbar. Die Telekommunikation hat in den letzten Jahren auch die Vorteile des Internets erkannt, und beide Technologien wachsen zusammen. Das Telefonieren über das Internet (Voice Over IP) ist ein vielversprechendes Ergebnis dieser Zusammenarbeit. Die rasante Verbreitung des Internet weltweit, die Einführung von Flatrates und zeitunabhängigen Tarifen hat ein großes Interesse an der Internettelefonie geweckt. Eine Internetverbindung ist in allen Firmen und fast allen privaten Haushalten verfügbar. Die IP-Telefonie spart deshalb nicht nur Telefonkosten, sondern auch die Kosten für die Telefonleitung und den doppelten Verkabelungsaufwand. Viele der Leistungsmerkmale der herkömmlichen Telefonie (z.B. Gesprächsweiterleitung, Anrufbeantworter oder Dreierkonferenz) werden auch von den VoIPSystemen auf dem Markt angeboten. Die Kombination mit dem Internet ermöglicht sogar die Einführung von neuen Leistungsmerkmalen wie z.B. die Aufzeichnung einer Nachricht als E-Mail. Ein wichtiges Merkmal für große Firmen ist die Callcenter-Funktion eines Telefonsystems. Diese Projektarbeit beschäftigt sich mit dem Entwurf und der Implementierung eines Callcenter-Dienstes für ein Web-Service-basiertes VoIP-Framework, das an der Technische Universität Kaiserslautern von der Arbeitsgruppe ICSY im Rahmen eines Projekts namens Venice entwickelt wurde. Im nächsten Kapitel werden die Grundlagen erklärt, die für das Verständnis der Arbeit notwendig sind. Zuerst wird der Begriff Callcenter definiert und die Callcenter-Arten werden vorgestellt. Dann wird kurz beschrieben, wie die Technik in einem Callcenter aussieht. Im zweiten Unterkapitel wird VoIP näher erläutert – wie es funktioniert, welche seine Vor- und Nachteile sind. Danach, im dritten Unterkapitel, wird die Web-Services-Technologie mit den Basisstandards XML, SOAP, HTML, WSDL und UDDI erklärt. Im letzten Teil des Kapitels wird das Venice-Framework vorgestellt, auf dem diese Projektarbeit aufbaut. Es wird eine Architektur präsentiert, mit der VoIP über Web-Services funktioniert. Im dritten Kapitel wird gezeigt, wie das Venice-Framework um die Callcenter-Funktionalität erweitert wird. Dabei wird zuerst die Aufgabe der Projektarbeit genau formuliert. Nachfolgend wird die entwickelte Lösung vorgestellt. Im ersten Unterkapitel sind die verwendeten Software-Pakete und Werkzeuge aufgezählt. Als nächstes wird die Struktur der benutzten Datenbank und das definierte XML-Schema für die nötigen Datentypen in getrennten Unterkapiteln erklärt. Die Schnittstellen für den Callcenter-Administrator und die Agenten sind im vierten Teil des Kapitels beschrieben. Der letzte Teil erläutert das Callcenter-Funktionsprinzip nach einem Aufruf des Dienstes. Daraufhin wird eine kurze Zusammenfassung der Projektarbeit angegeben, die die wichtigsten Aspekte noch einmal hervorhebt. Im anschließenden Ausblick werden Ergänzungsvorschläge gemacht, die den entwickelten Callcenter-Dienst verbessern können. Grundlagen 6 Kapitel 2: Grundlagen 2.1 Callcenter Die Geschichte der Callcenter begann um 1920, als die ersten Rufnummerauskunft-Zentralen der Telefongesellschaften entstanden. Später, in den sechziger Jahren, wurde von den Versandhändlern und Fluggesellschaften eine Organisationsform für die Optimierung des Kundenkontakts eingerichtet. 1973 erfand die Firma Rockwell das erste Anrufverteilsystem (ACD – Automatic Call Distributor) und setzte so die heutige Form der Callcenter ein [CallCenter]. Heutzutage hat fast jeder den Begriff „Callcenter“ schon einmal gehört, aber nur wenige wissen, was er genau bedeutet. Es gibt keine feste, wissenschaftliche Definition für Callcenter. Durch eine Zusammenfassung der wichtigsten Eigenschaften kann ein Callcenter wie folgt definiert werden: Ein Callcenter ist eine Organisationseinheit, die für die Bearbeitung von Kontakten optimiert ist. Sie zeichnet sich durch eine hohe Serviceorientierung des Personals, einen spezifischen Arbeitsprozess zur effizienten Bearbeitung von Kontakten und eine besondere technische Infrastruktur für die gezielte Steuerung der Kommunikationsvorgänge aus [CallCenter]. Die sogenannte Callcenter-Branche ist sehr umfangreich. Callcenter werden für Informationszwecke (Hotline oder Helpdesks), Kundenberatung und Dienstleistung, Bestellannahme (z.B. Versandhäuser oder Ticket-Services), Beschwerdemanagement, Notfalldienste (z.B. ADAC) und auch für Markt- und Meinungsforschung benutzt. 2.1.1 Callcenter-Arten Callcenter unterscheiden sich in Hinsicht auf die Organisationsart (Inhouse-Callcenter und CallcenterDienstleister) und in Hinsicht auf die Kommunikationsrichtung (Inbound-Callcenter und OutboundCallcenter). Das Inhouse-Callcenter ist eine unselbständige Kommunikationsmanagement- Organisationseinheit im Unternehmen selbst. Ein Callcenter-Dienstleister handelt dagegen rechtlich selbständig im Auftrag verschiedener Firmen [CallCenter]. Als Inbound werden Callcenter bezeichnet, die nur extern eingehende Anrufe entgegennehmen, d.h. der Kunde ruft das Callcenter an. Ein Outbound-Callcenter wickelt ausschließlich ausgehende Telefonate ab, d.h. die Kunden bzw. potenzielle Kunden werden gezielt angerufen. In der Praxis gibt es auch Mischformen zwischen Inboundund Outbound-Callcenter [CaCe05]. Grundlagen 7 2.1.2 Callcenter-Technik Die Telekommunikationsanlage (TK-Anlage) ist der Kern jedes Telefongesprächs. Sie verbindet die anrufende und die angerufene Person miteinander. In einem Callcenter soll der anrufende Kunde mit einem der Agenten – die Mitarbeiter des Callcenters – verbunden werden. Deswegen wird in diesen Organisationseinheiten eine spezieller Typ von TK-Anlagen benutzt – die ACD. Sie ist zuständig für die Weiterleitung der Anrufe an den Agenten. Das ACD-System arbeitet oft mit der IT des Unternehmens zusammen. Dies wird durch die Computer Technology Integration (CTI) ermöglicht. CTI bezeichnet die Integration von Datenbanken in Telefonsysteme. Oft verwenden Callcenter interaktive Sprachverarbeitungssysteme (IVR – Interactive Voice Response). Das IVR-System dient dazu, die Agenten von Routineauskünften zu befreien. Der Anrufer wird mit einem Sprachverarbeitungsgerät verbunden. Es werden verschiedene Möglichkeiten angeboten, die per Tonwahl, über die Tastatur oder per Sprache ausgewählt werden können [CallCenter]. Neben den klassischen Callcenter-Systemen setzt sich am Markt zunehmend eine neue Alternative ein – die Voice over IP basierten Callcenter (VoIP-Callcenter). Anstatt die Sprache durch eine separate Leitung zu übertragen, wie bei dem gewöhnlichen Telefonnetz, benutzt die IP-Telefonie das Internet zum Transfer der Telefongespräche. 2.2 VoIP Das Telefonnetz hat sich mehrmals seit der Erfindung des Telefons verändert. Am Anfang wurden die Verbindungen mithilfe von Menschen aufgebaut. Später wurden die Menschen durch automatische Wähler ersetzt. Die Signale wurden analog übertragen. Der nächsten Schritt in der Evolution des Telefonnetzes (PTSN – Public Switched Telephone Network) war die Digitalisierung der Signale vor ihrer Übertragung. Damit wurde ISDN (Integrated Services Digital Network) eingeführt [RuSi04]. Die rasante Entwicklung des Internets als eines der wichtigsten Kommunikationsmedien in unserer Zeit war der Auslöser der Idee für Internettelefonie. Den Anfang dieser neuen Technologie machte die israelische Firma Vocaltec mit der Telefonsoftware „Internet Phone“ im Jahre 1995. Diese Software funktionierte über IP, deswegen wurde die Technologie IP-Telefonie oder auch Voice over IP (VoIP) genannt. Das Telefonieren mit „Internet Phone“ war nur zwischen zwei Computern mit Multimediaeinrichtung (Soundkarte, Mikrofon, Lautsprecher) möglich, die die gleiche Software benutzen. Die Qualität der Sprachübertragung war schlecht. Die Verbindung war halbduplex, die Dialogteilnehmer konnten also entweder sprechen oder zuhören [Dusc02]. Da die Verbindungsmöglichkeiten begrenzt waren und Quality of Service nicht gewährleistet war, konnte sich VoIP noch nicht durchsetzen. Erst durch die ersten Gateway-Produkte, die die Kommunikation zwischen dem Internet und dem normalen Telefonnetz ermöglichten, gewann die Internettelefonie das Interesse der großen Grundlagen 8 Telekommunikationsanbieter. Heute werden schon mehrere Internettelefonie-Programme von unterschiedlichen Softwarefirmen angeboten. Die Sprachqualität lässt sich sogar mit der in der klassischen Telefonie vorhandenen vergleichen. Die schnelle Internetverbindungen, insbesondere die Verbreitung von DSL (Digital Subscriber Line), bieten eine ausreichende Geschwindigkeit zur Datenübertragung, was einer der entscheidenden Faktoren für die Qualität der Sprache ist. Außerdem benötigt man nicht mehr unbedingt einen Computer, um über das Internet zu telefonieren. Es gibt auch schon IPTelefonapparate, die sich von den normalen Telefongeräten kaum unterscheiden. 2.2.1 Funktionsprinzip Bei VoIP werden die analogen Signale, genau wie bei dem digitalen Telefonnetz, durch einen AnalogDigital-Umsetzer (A/D-Umsetzer) in digitale Form überführt und über Codecs (Coder/DecoderProgramme) in ein Binärformat umgewandelt (Abbildung 1). Je nach verwendetem Codec können die Daten unterschiedlich stark komprimiert werden [IPT05]. Bei der Komprimierung gehen Informationen, die für das menschliche Ohr nicht wahrnehmbar sind, verloren. Damit wird die Datenmenge reduziert und die zur Übertragung benötigte Bandbreite wird entsprechend verringert. Nach der Übertragung werden die digitalen Signale durch einen Digital-Analog-Umsetzer (D/A-Umsetzer) wieder in analoge Signale transformiert und über Lautsprecher ausgegeben (Abbildung 1). Sprach- A/D Signale Umsetze Internet D/A Sprach- Umsetze Signale Abbildung 1:Signalverarbeitung bei VoIP Der wesentliche Unterschied zwischen dem herkömmlichen Telefonnetz und VoIP ist die Vermittlungstechnik. Die Übermittlung beim PSTN ist verbindungsorientiert. Jedem Gespräch wird eine freie Leitung mit fester Bandbreite zugeordnet. Diese Leitung steht für die Dauer des Gesprächs ausschließlich zur Verfügung. Das hat den Vorteil, dass die Sprachqualität (QoS – Quality of Service) sichergestellt wird. Der Nachteil ist, dass die Ressourcen des Systems ineffizient genutzt werden. Wenn eine Nachrichtenverbindung aufgebaut wird, dann können über die belegte Leitung keine andere Verbindungen bereitgestellt werden. Die Nachrichtenübertragung ist bei VoIP dagegen verbindungslos. Die codierten Audiodaten werden in IP-Pakete aufgeteilt und über das Internet transportiert. Beim Empfänger werden die Datenpakete in Audiosignale zurückgewandelt und decodiert. Der Vorteil der Paketvermittlung ist, dass nicht genutzte Bandbreite für andere Anwendungen zur Verfügung steht. So wird keine Leitung für die Dauer des Gesprächs blockiert und Grundlagen 9 die Leitungskapazität effektiver ausgenutzt. Die Konkurrenz der Datenpakete mit Pakete anderer Anwendungen ist der Grund, warum eine bevorzugte Weiterleitung der Sprachdaten notwendig ist. Um eine Echtzeitübertragung und eine hohe Qualität der Sprachdaten (QoS) zu gewährleisten, dürfen die Pakete der Nachricht nicht aufgehalten werden. Die Sprachdaten sollen eine höhere Priorität als die anderen Daten im Netz haben. Alle Daten, die nicht in Echtzeit übertragen werden müssen, werden ggf. gezielt verzögert, um die hoch priorisierten Sprachdaten passieren zu lassen. Trotz dieser Priorisierungsmaßnahmen, kann das Netz durch eine hohe Anzahl an Sprachpaketen überlastet werden und zu Übertragungsproblemen führen. Verzögerungen einzelner Datenpakete einer Nachricht führen zu Tonstörungen auf Empfängerseite. Um große zeitliche Schwankungen (Jitter) zwischen dem Empfang von zwei Datenpaketen zu kompensieren, werden auf Empfängerseite sogenannte Pufferspeicher (Buffer) eingesetzt, die mehrere Pakete für den Decoder zwischenspeichern. Der Einsatz des Pufferspeichers verursacht aber eine Grundverzögerung (Delay), weil bei Gesprächsbeginn der Puffer zuerst gefüllt werden muss [Nöll05]. Deswegen muss bei der Auswahl der Größe des Pufferspeichers auch der daraus resultierende Delay beachtet werden. Bei der Verbindung zwischen zwei Computer werden nun ein oder mehrere Router benötigt, die die Daten an die Zieladresse richten [Dusc02]. Um Verbindungen zum klassischen Telefonnetz herzustellen, verwendet man Vermittlungsrechner, die sogenannten Gateways. Diese Gateways verbinden das Netzwerk des VoIP-Telefons mit dem üblichen Telefonnetz (Abbildung 2). Sie wandeln Signale aus dem Computernetz in Signale für das Telefonnetz um (und umgekehrt) und leiten die Anfragen in beide Richtungen weiter [Dusc02]. Diese Integration unterschiedlicher Netze wird „Konvergenz der Netze“ genannt. VoIP Netz Gateway Telefonnetz Abbildung 2: Gateway als Vermittler zwischen VoIP-Netz und Telefonnetz 2.2.2 Technische Standards Wie bei der klassischen Telefonie besteht ein VoIP-Telefongespräch aus zwei Vorgängen – dem Verbindungsaufbau und der Datenübertragung. Der Verbindungsaufbau wird auch als Signalisierung (Signaling) bezeichnet. Die Signalisierung dient dem Auf- und Abbau von Anrufen [RSL02] und gescheht über Signalisierungsprotokolle. Die meistverbreiteten Signalisierungsprotokolle sind H.323 von der International Telecommunication Union (ITU) [ITU-H.323] und das Session Initiation Protokoll (SIP) der Internet Engineering Task Force (IETF) [HSSR02]. Das H.323 Protokoll entstand aus dem ISDN-Bereich der Telefonie. Dieses Multimedia-Kommunikationsprotokoll der ITU garantiert kein Quality of Service [RSL02] und ist schwer zu implementieren. Das SIP wurde dagegen speziell Grundlagen 10 für den Verbindungsaufbau im Internet entwickelt. Es basiert auf das Hyper Text Transfer Protocol (HTTP) und ist einfacher aufgebaut als H.323. Mittlerweile setzt sich SIP am Markt durch, weil es eine große Anzahl von übergreifenden Diensten anbietet [RSL02]. Für die Datenübertragung wird - sowohl bei H.323-Systemen als auch für SIP-Systeme - das Real Time Protokoll (RTP) verwendet. RTP wurde speziell für die Übertragung von Audio- und VideoDaten in Echtzeit entwickelt. Zu RTP gehören das Real Time Transport Protocol (RTTP) und das Real Time Control Protocol (RTCP). Das RTTP ist zuständig für die Echtzeitübertragung der Daten. RTCP wird für die Steuerung des Datentransports verwendet und sorgt für höheren QoS [Dusc02]. RTP benutzt seinerseits das User Datagram Protocol (UDP) als Transportprotokoll, welches wiederum das Internet Protocol (IP) als darunter liegende Protokollebene einsetzt (Abbildung 3). RTP TCP RTCP UDP IPIP IP Abbildung 3: VoIP Protokoll Architektur Grundsätzlich kann man auch das Transmission Control Protocol (TCP) verwenden. TCP bietet eine zuverlässigere Datenübertragung als UDP, weil TCP bei der Vermittlung jedes einzelnen Paketes auf positive (ACK) und negative (NAK) Empfangsbestätigungen wartet. Diese Wartezeiten führen oft zur zeitlichen Verlängerung des Transports. Obwohl UDP keine gesicherte Datenübertragung garantiert, ist bei ihm der Transport schneller, was wichtiger für die Echtzeitübertragung ist. 2.2.3 Erreichbarkeit Für eine VoIP-Telefonverbindung ist eine eindeutige IP-Adresse und ein Port notwendig. Heute gibt es aber viele Internet-Benutzer, die keine feste IP-Adresse haben, sondern eine dynamische IP-Adresse verwenden, die sie bei jeder Netzverbindung zugewiesen bekommen. Ferner können sich mehrere Benutzer eine IP-Adresse teilen, wenn sie einen Router mit Port Address Translation (PAT) oder mit der etwas weiter verbreitete Network Address Translation (NAT) nutzen. Das SIP bietet eine Lösung für dieses Problem. Die SIP-Endpunkte melden sich an einem SIP-Server. So können andere SIPEndpunkte den SIP-Server nach der gewünschten Adresse fragen. Der Server sendet die Adresse zurück, und die Verbindung kann hergestellt werden. SIP bietet die Möglichkeit für eine E-Mail-artige Adressierung. Das bedeutet, dass eine Adresse für das Telefonieren und als E-Mail benutzt werden kann [IPT05]. Grundlagen 11 Es gibt aber auch Verfahren, die eine Rufnummerstruktur für die Internet-Telefonie anbieten, die den herkömmlichen Rufnummern ähnlich ist. Ein solches Verfahren ist ENUM (Electronic Numbering) der IETF [RSL02]. Bei ENUM werden die klassischen Telefonnummern umgekehrt aufgeschrieben mit Punkten zwischen den einzelnen Ziffern. Die Nummern werden nach dem Schema der ITU-T Empfehlung für internationale öffentliche Telefonnummern (E.164) dargestellt und werden an die Internet-Infrastruktur-Domain „e164.arpa“ (Address and Routing Parameters Area) angehängt [RSL02]. Somit wird z.B. die klassische Telefonnummer +49-631-1234 in 4.3.2.1.1.3.6.9.4.e164.arpa umgewandelt. Ein anderer Ansatz wurde von der Regulierungsbehörde für Telekommunikation und Post (RegTP) vorgeschlagen. RegTP hat eine spezielle Vorwahl 032 für alle VoIP- Dienste eingeführt. Sie ist seit Januar 2005 verfügbar [Nöll05]. Unter http://www.032auskunft.de wird sogar schon ein Telefonbuch bereitgestellt. 2.2.4 Vor- und Nachteile von VoIP VoIP bietet viele Vorteile. Die VoIP-Technologie ist kostengünstig. Das IP-Netz kann besser ausgelastet werden als das Telefonnetz, weil die Gespräche nur einen Teil der Bandbreite benötigen, und die Leitung kann so für verschiedene Diensten parallel benutzt werden. Die Gespräche über das Internet sind billiger, denn es ist egal, ob sie Orts- oder Internationalgespräche sind. Außerdem sind nicht mehr zwei getrennte Netzwerke für die Telefonie und die Datenübertragung nötig. Die Konvergenz der Netze erspart doppelte Verkabelung, Technik und damit auch Personalaufwand für die Instandhaltung und das Aufbauen der Netze. Heutzutage ist ein DSL-Anschluss in fast jeden Haushalt vorhanden, was das Umsteigen auf Internet-Telefonie erleichtert. Die Netzwerkkonvergenz ermöglicht auch viele neue Anwendungen. Vorstellbar sind Systeme, die eine gesprochene Nachricht in Textmeldung transformieren und andersherum solche, die E-Mails in Sprache umwandeln. Auch die Realisierung von E-Mail-Anwendungen mit Sprachübergabe oder Fax over IP wäre möglich. Das ENUM-Verfahren bietet ferner die Möglichkeit, dass die VoIP-Nutzer unter einer einzigen Nummer weltweit erreichbar sind. Das Telefonieren über das Internet hat aber auch Nachteile. Die Konvergenz der Netze bietet keine Ausweichmöglichkeit bei einem Ausfall – fällt das IP-Netz aus, kann man auch nicht mehr telefonieren. Da die VoIP-Telefonate günstig sind, kann die Verbreitung von unangenehmem Spam, wie bei E-Mails, nicht ausgeschlossen werden. Für die lästigen Spam-Anrufe wird der Begriff SPIT – Spam over Internet Telephony verwendet [Nöll05]. Auch kann die Überlastung des Netzes zu Denial of Service Angriffe (DOS) führen. Bei direkter Verbindung kann man die IP-Adresse des Gesprächpartners erfahren und Angriffe dagegen fahren. Zugleich können die Nachrichten durch Manipulation der IP-Adresse gefälscht (IP Spoofing) oder auch abgehört werden (Sniffing). Trotz Grundlagen 12 allem arbeitet das klassischen Telefonnetz auch nicht einwandfrei und dort gibt es ebenso Sicherheitsprobleme [Fink04]. Viele VoIP-Softwaresysteme sind als Standalone-Software für Endgeräte realisiert. Das ist der Grund, warum sich die Kunden mit aufwändigen Updates beschäftigen und sogar dafür extra zahlen müssen. Außerdem kann ein Update in Client- und Serverbereich hohe Administrationskosten verursachen [HMM04]. Es gibt also immer noch Aspekte, die Verbesserungen erfordern. Das Framework Venice der TU Kaiserslautern, auf dem diese Projektarbeit basiert, hat sich als Ziel die Lösung dieses und anderer mit VoIP verbundener Probleme gesetzt. Dafür ist im Projekt eine neue serviceorientierte VoIP-Architektur entwickelt worden, die auf der Technologie der Web Services basiert. 2.3 Web Services Web Services sind lose gekoppelte, wiederverwendbare Software-Komponenten, die auf verschiedenen Netzwerkrechnern laufen. Sie kapseln Funktionalität zu logischen Einheiten und sind über standardisierte Internet Protokolle zugreifbar [T-LAN]. Das Ziel der Web Services-Technologie ist Daten- und Funktionalitätsaustausch zwischen Kommunikationspartnern in automatisierbarer Weise, d.h. eine Maschine-zu-Maschine-Kommunikation [HaLö04]. Web Services sind also nichts völlig Neues. Dieses Konzept wird auch in CORBA (Common Object Request Broker Architecture), DCOM (Distributed Common Object Model) und Java RMI (Remote Method Invocation) umgesetzt [WüBu02]. Keine dieser objektorientierten Architekturen kann aber eine vollständige Unabhängigkeit von Betriebsystem (DCOM), Programmiersprache (Java RMI) und Übertragungsprotokoll (CORBA) anbieten. Um die Integration von Daten und Funktionalitäten aus unterschiedlichen Quellen zu ermöglichen, muss die Kommunikation auf einheitlichen Standards basieren, die für alle Teilnehmer verständlich sind. Alle in Zusammenhang mit Web Services verwendeten Standards sind XML-basiert (XML – Extensible Markup Language), und die Daten werden in XML-Format übertragen. Dadurch ist die Web Services-Technologie unabhängig sowohl vom Betriebsystem, als auch von der Programmiersprache und dem Übertragungsprotokoll. Die Standards, auf der die Web Services-Technologie basiert, sind SOAP (ehemals: Simple Object Access Protocol), WSDL (Web Service Description Language) und UDDI (Universal Description, Discovery and Integration). Abbildung 4 zeigt, wie diese Standards die Web Services-Architektur bilden. Grundlagen 13 Service-Entdeckung und Veröffentlichung UDDI Service-Beschreibung WSDL Mitteilungsaustausch SOAP, XML-RPC Übertragung HTTP, SMTP, FTP etc. Abbildung 4: Protokoll-Stack eines Web-Service Die Service-Anbieter veröffentlichen ihre Dienste in einem öffentlichen Verzeichnis (UDDI), und die Service-Anwender benutzen dieses Verzeichnis, um nach vorhandenen Diensten zu suchen. Damit der Service-Anwender weiß, was der Service ihm bietet, müssen der Service und seine Methoden beschrieben werden. Für diese Beschreibung wird WSDL eingesetzt. Damit die Nachrichten für alle Beteiligten verständlich sind, werden sie in XML-Format kodiert. Danach können sie mit SOAP oder XML Remote Procedure Call (XML-RPC) übermittelt werden. In der Praxis hat sich mittlerweile SOAP durchgesetzt. Für die Übertragung der Nahrichten über das Internet können unterschiedliche Transport-Protokolle eingesetzt werden, wie z.B. HTTP (Hyper Text Transfer Protocol), SMTP (Simple Mail Transport Protocol) oder FTP (File Transfer Protocol). In der Praxis wird fast ausschließlich das HTTP verwendet, weil es den Vorteil hat, dass der zugehörige Port in der Regel geöffnet ist. Somit wird die Übertragung nicht von Firewalls verhindert. Die Web Service-Architektur basiert, technisch gesehen, auf einer serviceorientierten Architektur (SOA). Nach [ChJe02] ist SOA definiert als „eine Architektur, die eine verteilte, entdeckungsbasierte Ausführungsumgebung nutzt, und eine Sammlung von serviceorientierten Softwarekomponenten nach außen verfügbar macht und verwaltet“. Bei SOA kommunizieren drei Entitäten miteinander – der Service-Anbieter (Service Provider), der Service-Anwender (Service Requestor) und das ServiceVerzeichnis (Service Registry) [WüBu02]. Diese Kommunikation ist dargestellt in Abbildung 5. Grundlagen 14 Service Provider bind publish Service Registry Service search Requestor Abbildung 5: Service-orientierte Architektur (SOA) Ein Service-Anbieter publiziert (publish) seine Dienste im Service-Verzeichnis. Das wird bei der Web Services-Technologie mittels UDDI erreicht. Im Service-Verzeichnis stehen nur die Dienst- und Schnittstellenbeschreibung, die Implementierung des Dienstes ist transparent für die Benutzer. Das erlaubt es dem Anbieter die Funktionen zu verändern oder auch neue einzufügen, solange diese Bearbeitungen die Schnittstelle nicht beeinflussen. Ein Service-Anwender kann entweder eine Software-Anwendung sein oder eine natürliche Person, die über ein Web-Interface auf den Service zugreift [WüBu02]. Der Anwender sucht (search) Dienste im Service-Verzeichnis. Der Anwender kann den Dienst entweder mit einer Suchmaske von UDDI oder mit dem URI (Uniform Resource Identifier) des Dienstes anfragen. Wenn der Dienst gefunden wird, bekommt der Service-Anwender die Schnittstellenbeschreibung des Dienstes als WSDL-Dokument. Der Service-Anwender kann dann den Service-Anbieter kontaktieren (mithilfe der Schnittstelleninformation aus dem WSDL-Dokument) und den Service in sein Programm integrieren und nutzen (bind). Das Bindungsprozess (bind) kann in drei unterschiedlichen Arten geschehen. Der Client (ServiceAnwender) kann über Stubs, Dynamic Proxy oder Dynamic Invocation Interface an einen Web Service gebunden werden. Diese verschiedenen Arten des Bindings werden nachfolgend erklärt [ABB+03]: Ø Stubsgenerierung (Static Stub): Bei dieser Technik wird ein lokales Objekt (Stub) auf der Client-Seite zur Kompilierungszeit generiert. Das Stub-Code wird automatisch aus der WSDL-Datei erzeugt und repräsentiert den Web Service lokal. Ein Methodenaufruf wird vereinfachend als ein lokaler Methodenaufruf ausgeführt. Der Stub führt dabei eine Serialisierung durch, damit er den Methodenaufruf in das richtige Format für den entfernten Dienst-Server umwandelt, und leitet dann den Aufruf weiter an den Server. Da der Stub vor Ausführungszeit generiert wurde wird er als Static Stub bezeichnet. Der Vorteil dieser Bindungsmethode ist ihre Einfachheit. Grundlagen 15 Ø Dynamic Proxy: Diese Technik generiert die lokale Repräsentation des Web Services zur Ausführungszeit. Das hat den Vorteil, dass der Service sich ändern kann, ohne das sich das auf die Generierung des Kodes auswirkt. Ø Dynamic Invocation Interface (DII): Mit der Dynamic Invocation-Technik kann ein Web Service-Aufruf völlig zur Ausführungszeit durchgeführt werden – eine Codegenerierung davor ist nicht nötig. Diese Methode ist die schwierigste von allen, aber sie ermöglicht eine lose Kopplung der Komponenten. Die Standards, auf denen Web Services basieren, werden in den folgenden Unterkapiteln ausführlicher beschrieben. 2.3.1 Extensible Markup Language (XML) und XML Schema Definition (XSD) XML steht im Mittelpunkt der Web Services-Technologie. XML wird als Datenformat für die Nachrichten und als Basis für alle Web Services-Standards (SOAP, WSDL und UDDI) in der Web Services-Technologie eingesetzt. XML ist eine Beschreibungssprache (Metasprache) zur einfachen und strukturierten Darstellung von maschinen- und menschenlesbaren Daten. Sie ist ein offener und kostenloser Standard. XML ist außerdem unabhängig von Betriebsystemen, Programmiersprachen und Übertragungsprotokollen und ermöglicht damit die Portabilität von Web Services. Eine Anpassung der Daten an spezifische Formate ist nicht nötig, und die Kommunikation geht über Systemgrenzen hinweg. Eine XML-Datei ist eine einfache Textdatei und folgt eine wohldefinierte Struktur, die aus Kopf- und Körper-Teil besteht (Abbildung 6). Die XML-Version und die in benutzte Zeichenkodierung (encoding) in der Datei werden im Dateikopf (Header) definiert. Der Körper (Body) enthält den Inhalt des Dokuments. Alle Elemente werden dabei in Klammernotation „<...>“ definiert. Die Namen der Elemente können (in einem gewissen Rahmen) frei gewählt werden. Normalerweise definiert der Entwickler Namen, die das Element beschreiben. Mehrere Namen können in einem Namensraum (Namespace) zusammengefasst werden. Dieser Namensraum kann dann in weitere XML-Dokumente importiert werden. Jeder Namensraum wird mittels eines URI spezifiziert und am Anfang einer XMLDatei eingeführt. Er ist für gültig für alle Subelemente, und seine Elemente können im aktuellen Dokument frei verwendet werden. Grundlagen 16 Header <? xml version=“1.0“ encoding=“UTF-8“ ?> Body <schema targetNamespace=“http://www.icsy.de/kabzeva/callcenter“ xmlns=http://www.w3.org/2001/XMLSchema“ xmlns: …=..... > Namespaces <element name=“…” type=”…” /> <simpleType name=”…”> <choice> <element name=“...“ type=“...“/> <element name=“...“ type=“...“/> </choice> </simpleType> <complexType name=“.....“> <sequence> <element name=“...“ type=“...“/> <element name=“...“ type=“...“/> </sequence> </complexType> </schema> Abbildung 6: Beispiel für XML Schema Die Struktur der XML-Dokumente kann entweder durch eine DTD (Document Type Definition) oder durch XSD beschrieben werden. In DTD und XSD sind die Datentypen definiert, die in einer XMLDatei verwendet werden können. XSD ist der neuere Ansatz und hat viele Vorteile im direkten Vergleich mit einer DTD. An erster Stelle nutzt XSD selbst eine XML-Syntax. DTD muss dagegen in einer eigenen Sprache abgefasst werden. Außerdem bietet XSD eine größere Menge von Basisdatentypen als DTD und erlaubt die Definition eigener einfachen („element“ und „simpleType“ in Abb. 6) und komplexen („complexType“ in Abb. 6) Datentypen. Zusätzlich ermöglicht XSD Modularisierung durch die Unterstützung von Namensräumen, die vorteilhaft für große und verteilte Systeme sind. Wenn sich mehrere Kommunikationspartner auf ein XSD einigen, können erstellte Dokumente einfach zwischen den Partnern ausgetauscht und verarbeitet werden. Grundlagen 17 2.3.2 SOAP SOAP wird bei der Nachrichtenübermittlung in der Web Services-Technologie eingesetzt. Früher stand das Akronym SOAP für „Simple Object Access Protocol“, inzwischen ist SOAP aber ein eigenständiger Begriff geworden. SOAP ist ein XML-basiertes Protokoll zum Austausch von strukturierten Daten zwischen Anwendungen in verteilten Umgebungen wie dem Internet. SOAP hat also die Aufgabe die auszutauschenden Informationen zwischen dem Service-Anbieter und dem Service-Anwender in ein XML-Format zu verpacken und sie über Transportprotokolle wie HTTP, FTP oder SMTP zu übertragen [WüBu02]. In der Praxis wird meistens SOAP über HTTP verwendet. SOAP kann auf zwei unterschiedliche Arten verwendet werden – für Remote Procedure Calls (RPC) und für dokumentbasierten Nachrichtenaustausch [WüBu02]. Man kann sich RPC als Frage/AntwortMechanismus vorstellen [HaLö04] - eine SOAP-fähige Applikation ruft Methoden auf (Frage), die sich als Web Service auf anderen Servern befinden. Für den Methodenaufruf werden per SOAP nur der Methodenname und die benötigten Parameter zum Service-Anbieter übertragen. Nach der Methodenausführung wird das Resultat (Antwort) wieder per SOAP zum Nutzer übertragen. Beim dokumentenbasierten Nachrichtenaustausch wird die Information nur in eine Richtung vermittelt [HaLö04]. Es werden keine Methoden aufgerufen, sondern nur strukturierte Nachrichten gesendet. Die SOAP-Nachrichten haben eine exakt festgelegte Struktur (Abbildung 7). Jede SOAP-Nachricht enthält einen SOAP-Umschlag (SOAP Envelope) und optional zusätzliche Anhänge (Attachments). Der SOAP-Umschlag besteht seinerseits aus einem optionalen Kopf (SOAP Header) und einem notwendigen Körper (SOAP Body). Hier werden auch die XML Namespaces definiert. Der SOAP Header enthält anwendungsspezifische Informationen wie eine eindeutige Nachrichten-ID, Authentifizierungs- und Autorisierungsangaben oder Routing-Daten. Der SOAP Body muss immer nach dem SOAP Header stehen, falls dieser vorhanden ist. Der Body enthält die eigentliche Nachricht, die gesendet werden soll, in XML-Form, d.h. einen RPC oder ein strukturiertes Dokument. Damit man die Möglichkeit hat, auch Anwendungsdaten (wie z.B. Bilddateien oder Berichte im PDFFormat) zu übertragen, können einer SOAP-Nachricht ein oder mehrere Anhänge (Attachments) hinzugefügt werden. SOAP ist nicht auf eine Punkt-zu-Punkt-Kommunikation beschränkt [Knut02]. Eine SOAP-Nachricht kann auf ihrem Weg zum Empfänger mehrere intermediäre SOAP-Kommunikationspartner passieren, die die Header-Informationen interpretieren und auch ändern können. Dieser sogenannte „Message Path“ [HaLö04] führt über solche Knoten. Ein SOAP-Knoten kann in drei Formen auftreten: Ø als der ursprüngliche Sender (SOAP sender), der die Nachricht verschickt, Ø als Zwischenknoten (SOAP intermediate), der die Nachricht weiterleitet, Ø oder als endgültiger Empfänger, der die Nachricht verarbeitet. Grundlagen 18 <? xml version=“1.0“ encoding=“UTF-8“ ?> <soapenv: Envelope SOAP Envelope xmlns: soapenv= “http://schemas.xmlsoap.org/soap/envelope/“ xmlns : xsd= “http://www.w3.org/2001/XMLSchema“ <soapenv: Header> ... </soapenv: Header> <soapenv: Body> ... </soapenv: Body> SOAP Header (optional) SOAP Body Video.mpg (MIME kodiert) Attachments SOAP Nachricht Abbildung 7: Struktur einer SOAP-Nachricht 2.3.3 Hyper Text Transfer Protocol (HTTP) HTTP ist ein Protokoll zur Übertragung von Daten über ein Netzwerk und wird hauptsächlich für das Laden von Webseiten und andere Daten aus dem World Wide Web (WWW) in einem Webbrowser verwendet [HTTP05]. In der Web Services-Technologie wird HTTP für die Übertragung der SOAP Nachrichten zwischen dem Client und dem Dienst eingesetzt. 2.3.4 Web Service Description Language (WSDL) WSDL ist ein plattform-, programmiersprachen- und protokollunabhängiger Standard für die Definition und die Beschreibung von Web Services. Ein WSDL-Beschreibungsdokument ist im XMLFormat verfasst. Die XML-Auszeichnungselemente enthalten Informationen über die Adresse des Dienstes (die URL), über die Funktionen des Services und wie er vom Service-Anwender benutzt werden kann, d.h. Schnittstelleninformation, und welche Transportprotokolle für das Binding verwendet werden [CCM+01]. Grundlagen 19 Es gibt zwei Möglichkeiten für die Erstellung eines WSDL-Dokuments. Die erste ist, das WSDLDokument von Hand zu verfassen. Daraus wird anschließend automatisch der Stubs- und SkeletonCode generiert und danach wird die Funktionalität implementiert. Ein Stub ist Stück Programmcode, der anstelle eines anderen Programmcodes steht. Dieser andere Code ist entweder noch nicht geschrieben, oder er ist im anderen Speicherbereich oder sogar auf einem anderen Rechner vorhanden. In verteilten Systemen gilt der letzte Fall – die Funktionalität eines über das Netzwerk erreichbaren Dienstes wird auf einem anderen System als Stub-Komponente dargestellt. So hat man den Eindruck, dass die Funktionalität lokal in diesem zweiten System vorhanden ist. Was tatsächlich geschieht ist aber, dass die Stub-Komponente die Anfragen zu dieser Funktionalität in Netzwerkaufrufe übersetzt, mit der fernen Komponente kommuniziert – dem dortigen Skeleton – und alles dort ausgeführt wird. Diese Vorgehensweise wird auch Top-Down-Ansatz genannt. Die zweite Möglichkeit, oder der sogenannte Bottom-Up-Ansatz, implementiert zuerst die gewünschten Funktionalitäten in einer Programmiersprache und generiert danach durch den Einsatz von Werkzeugen die Stubs, die Skeletons und die WSDL-Datei. Abbildung 8 zeigt die wichtigsten Elemente einer WSDL-Datei nach [HaLö04] und [RuSi04]. Ø Jede WSDL-Datei beginnt, genau wie eine XML-Datei, mit einer Definition der XMLVersion und der Kodierung. Ø Das Definitions-Element (<definitions>) ist das sogenannte Wurzelelement (Root-Element) des WSDL-Dokuments. Es enthält den Namen des Web Services im name-Attribut, der Namespace für den Service im targetNamespace-Attribut, die Namespaces für die verwendeten Standards in den xmlns-Attribute, und alle nachkommenden Elemente des WSDL-Dokuments. Ø Die Wiederverwendbarkeit von Dateien wird in WSDL durch das <import>-Element ermöglicht. Es stellt die Referenz zwischen zwei Dateien her. Mittels <import> werden WSDL-Elemente importiert, die in einer anderen Datei definiert sind oder auch XMLSchemata. Es wird die Adresse der zu importierenden Datei angegeben, wobei diese Adresse mit einem Namespace verbunden wird. Ø Das Datentyp-Element (<types>) enthält Definitionen von Datentypen. WDSL benutzt die Standardtypen von XML, aber durch <types> können zusätzliche, komplexere Datentypen definiert werden. Wenn das Dokument nur XML-Standardtypen verwendet, dann fehlt das Datentyp-Element. Ø Die Nachrichten-Elemente (<message>) enthalten die Nachrichten für die Kommunikation zwischen den Partnern (Client und Service). Für jede Nachricht wird ein einzelnes Element verwendet. Jedes Element hat einen Namen und einen oder mehrere Teile (<part>), die die Nachricht zusammenstellen. Jedes <part>-Element hat zwei Attribute – Name (name) und Typ (type). Das type-Attribut kann als Wert XML-Standarddatentypen annehmen oder Typen, die unter <types> definiert sind. Wenn die Nachricht von Client zum Service gerichtet Grundlagen 20 ist, enthält <part> die Parameter des Funktionsaufrufes. Wenn die Nachricht vom Service zum Client geschickt wird, entspricht <part> dem Rückgabewert des Funktionsaufrufes. Ø Die Operationen, die vom Web Service unterstützt werden, sind in dem Porttyp-Element (<portType>) enthalten. Für die Definition jeder Operation (<operation>) werden die entsprechenden Nachrichtendefinitionen aus den <message>-Elementen benutzt. Die Operationen können Sende- oder Empfangs-Operationen sein. Das Empfangen einer Nachricht wird durch das <input>-Element dargestellt, das Senden durch das <output>Element. Falls ein Fehler während der Bearbeitung der Nachrichten auftreten kann, wird das mithilfe eines <fault>-Elements innerhalb des <operation>-Elements bekannt gegeben. Ø Das Bindungs-Element (<binding>) gibt genauere Informationen darüber, wie die Nachrichten ausgetauscht werden, welches Protokoll für die Kommunikation benutzt wird und wie die Nachrichten auf dieses Transport-Protokoll abgebildet werden. Das <type>-Attribut des Elements wird hier zu einem <portType> referenziert. Ø Im Service-Element (<service>) befinden sich die eigentlichen Adressen (URLs), über die die Services erreicht und aufgerufen werden können, in <port>-Elementen. In jedem <port> wird nur eine Service-Adresse spezifiziert. Wenn mehrere URLs für einen Dienst existieren, müssen sie in mehreren <port>-Elementen definiert werden. Jedes Element kann eindeutig über das Attribut name identifiziert werden. Die Informationen in einem WSDL-Datei kann man in zwei Gruppen aufteilen – abstrakte und konkrete Informationen. Die abstrakten Angaben definieren die Datentypen, die Nachrichten und die Operationen, d.h. sie werden von den <types>, <message> und <portType>-Elementen präsentiert. In den konkreten Angaben wird über die tatsächliche Bindung und die Netzwerkadresse informiert, dazu werden also die Elemente <binding> und <service> gezählt [Paap03]. Grundlagen 21 <? xml version=“1.0“ encoding=“UTF-8“ ?> <definitions name=”CallCenter” targetNamespace=”http://www.icsy.de/kabzeva/callcenter” xmlns=”http://schemas.xmlsoap.org/wsdl/”> xmlns: soap=”http://schemas.xmlsoap.org/wsdl/soap” <import namespace= ”http://www.icsy.de/kabzeva/callcenter” location= ”http://www.icsy.de/services/example.wsdl” /> <types> ... </types> <message name=”Message_addShift> <part name=“sso“ type=“sso:...“/> <part name=”sh” type=”cc:Shift”/> </message> <message name=”Message_addShiftResponce> <part name=”boolean” type=”boolean”/> </message> <portType name=”…..PortType”> <operation name=“addShift“ parameterOrder=“sso sh“> <input message=“tns:Message_addShift“/> <output message=“tns:Message_addShiftResponse“/> </operation> </portType> <binding name=“CallCenterBinding” type=“tns:...PortType“> ... </binding> <service name=”CallCenterService”> <port name=”CallCenterPort” binding=”tns: CallCenterBinding”> <soap: address location=”http://localhost:6080/axis/services/…”/> </port> </service> </definitions> Abbildung 8: Struktur einer WSDL-Datei 2.3.5 Universal Description, Discovery and Integration (UDDI) UDDI ist der Standard für das Web Services-Verzeichnis (Service Registry in Abbildung 5). UDDI ist ein plattformunabhängiges, offenes Framework, das die Möglichkeit bietet, Web Services zu Grundlagen 22 beschreiben (Description), sie aufzufinden (Discovery) und verschiedene Dienste miteinander zu verbinden (Integration). Service-Anbieter können Informationen über sich und ihre angebotenen Dienste publizieren. Diese Informationen können in drei Arten unterteilt werden, die in White, Yellow und Green Pages zur Verfügung gestellt werden (Abbildung 9). <businessEntry> White Grundlegende Informationen Pages eines Unternehmens 1 n <publisherAssertion> Beziehung zwischen zwei Firmen n n <businessService> Yellow Beschreibung der Dienste, Pages die ein Unternehmen anbietet 1 1 Green <bindingTemplate> Pages Technische Beschreibung <tModel> 1 n und Zugriffspunkt - URI Abstrakte Beschreibung einer Spezifikation; eines Verhaltens Abbildung 9: Datenstrukturen einer UDDI-Registrierungsstelle nach [Braa05] Die Seiten-Sicht ist nur eine abstrakte Repräsentation der Informationen in UDDI. Dahinter stehen fünf Datenstrukturen, mit deren Hilfe die Veröffentlichung und das Auffinden organisiert werden. Die weißen Seiten (White Pages) beinhalten grundlegende Informationen über das Unternehmen – Name, Adresse, Telefonnummern, Ansprechpartner und weitere Kontaktinformationen. Die Datenstruktur, die dahinter steht, ist die <businessEntry>. Die gelben Seiten (Yellow Pages) beschreiben die Dienste anhand verschiedener Klassifizierungsmerkmale (Kategorisierung) und helfen so, einen Dienst anhand dieser Zuordnung zu finden. Die entsprechende Datenstruktur mit der Bezeichnung <businessService> speichert diese Daten. Die grünen Seiten (Green Pages) enthalten technische Details zur Kommunikation mit dem registrierten Dienst. Hier befinden sich die Netzwerkadresse des Dienstes und weitere Anbindungsinformationen. Diese Daten werden in der Datenstruktur <bindingTemplate> gespeichert. Die restlichen zwei Datenstrukturen sind die <publisherAssertion>, die Informationen über die Beziehungen zwischen zwei Unternehmen liefert, und das <tModel> - eine Erweiterung der <bindingTemplate>-Datenstruktur, welches abstrakte Informationen über eine Spezifikation oder das Verhalten des Dienstes anbietet. Grundlagen 23 Die großen öffentlichen UDDI-Verzeichnisse werden regelmäßig untereinander synchronisiert, um auf dem gleichen Stand zu bleiben. Das bis Ende vom Jahr 2005 bedeutendeste UDDI-Register war das Universal Business Register (UBR), das von leitenden Firmen wie IBM, Microsoft und SAP geführt wurde [HaLö04]. Das Hauptziel vom UBR war der Beweis der Interoperabilität und der Stabilität der UDDI-Spezifikationen. Dieses Ziel wurde erreicht und somit wurde das UBR am 12.01.2006 geschlossen. Obwohl IBM und Microsoft eigene Services schließen, wird SAP weiter ein eigenes UDDI-Verzeichnis anbieten [Tomi06]. Eine aus Web Services aufgebaute Applikation ist also ein verteiltes Software-System, auf das über standardisierte Protokolle zugegriffen werden kann. Es “befindet“ sich im Internet und bietet eine XML-basierte Schnittstellenbeschreibung an. Der Einsatz von XML als Basis für die Datenübertragung und die verwendeten Standards in der Web Services-Technologie (SOAP, WSDL und UDDI) macht Web Services unabhängig von Systemplattformen, Betriebsystemen und Netzwerkprotokollen. Das Kommunikationsprotokoll SOAP nutzt die Portabilität von XML und ermöglicht eine plattformunabhängige Interaktion zwischen Service-Anwender und -Anbieter. Mit WSDL werden die Dienste beschrieben – wo man sie finden kann, welche ihre Funktionen sind und wie sie benutzt werden. Die Dienste werden in einem UDDI-Verzeichnis registriert, wodurch das dynamische Finden und Aufrufen der Web Services ermöglicht wird. 2.4 Das Venice-Framework Heutzutage existieren zwei Formen von VoIP Systemen – Clientprogramme (Standalone-Software), die direkt in den Endgeräten installiert sind, und Web-Applikationen, bei denen der Webbrowser für den Aufruf der aktuellen Programmversion verantwortlich ist. Ein Clientprogramm übernimmt sowohl die Signalisierung (Signaling), als auch die Medienverarbeitung der Daten. Demzufolge ist die Standalone-Software sehr komplex und umfangreich. Da das Programm fest in den Endgerät installiert ist, muss man bei der Einführung neuer Funktionalitäten, eines neuen GUI (Graphical User Interface) oder einer neuen Version des Kommunikationsprotokolls immer ein Update auf allen Clients durchführen. Das verlangt viel Aufwand und verursacht hohe Kosten. Zudem ist ein Clientprogramm hardwareabhängig. Im schlimmsten Fall muss der Entwickler sogar schon existierende Funktionen bei der Integration in neue Endgeräte komplett neu implementieren. Die zweite Art von VoIP Systemen – die Web-Applikation, ist nicht so umfangreich wie ein Clientprogramm und erfordert keine lokalen Updates bei Veränderungen der Software, weil diese zentral auf einem oder mehreren Servern betrieben wird. Trotzdem bleibt der Nachteil, dass die Integration in eigene Applikationen schwer ist. Ein weiteres Problem Signalisierungsfunktionen der sind VoIP-Systeme ist unterschiedlich die Inkompatibilität bei den beiden der zurzeit Protokolle. Die meistverwendeten Kommunikationsprotokollen in VoIP Systemen, H.323 und SIP. Die Protokolle können nur durch Grundlagen 24 Gateways miteinander kommunizieren, die zwischen diesen übersetzen. Diese Probleme stehen der globalen Durchsetzung von VoIP noch im Weg [HiZh04]. Damit die Internet-Telefonie den Durchbruch schaffen kann, muss eine Architektur entwickelt werden, die heterogene Clients unterstützt und alle oben beschriebenen Probleme löst. Eine solche Architektur wurde von der Arbeitsgruppe Integrierte Kommunikationssysteme (ICSY) des Fachbereichs Informatik an der Technischen Universität Kaiserslautern in Zusammenarbeit mit der Siemens AG im Rahmen des Forschungsprojekts Venice, das dieser Projektarbeit zugrunde liegt, vorgeschlagen. Venice bietet ein offenes Web-Service-basiertes VoIP-Framework. Die angesprochenen Problembereiche werden mithilfe der Web-Service-Technologie bearbeitet. Die enthaltenen Software-Komponenten werden lose über das Internet gekoppelt und als Web Services realisiert. Das sichert, dass der Ausfall eines Dienstes keinen kompletten System-Ausfall verursacht. Der kompletten Signalisierungsprozess wird von einem Web-Service übernommen. Der Client wendet sich, wenn er einen neuen Anruf tätigen will, an den Service und dieser baut die Verbindung auf. Da die Signalisierung nicht mehr eine Aufgabe des Clients ist, wird die Größe des Clientprogramms reduziert – es ist viel einfacher und leichtgewichtiger. Aufgrund dieser Einfachheit wird der Client in Venice Simple Client genannt. Zudem sind Web-Service-Clients leicht zu entwickeln und können einfach auf unterschiedliche Endgeräte umgesetzt werden. Die Software wird über das Internet konfiguriert, und Updates werden automatisch nach Veränderungen durchgeführt. Venice-Clients können außerdem verschiedene Protokolle (H.323 und SIP) verwenden. Das ermöglicht Gespräche mit Anbietern anderer VoIP-Systeme, die eines dieser Protokolle verwenden. Mittels des VeniceFrameworks wird also die Kommunikation zwischen Clients mit verschiedenen Protokollen ermöglicht – ein SIP-Client kann problemlos Gespräche mit H.323-Clients führen und umgekehrt. Die Auslagerung der Signalisierung an den VoIP-Anbieter spart dazu auf Client-Seite die Konfiguration und Administration von zusätzlichen Hardwarekomponenten, wie z.B. Gateways. Die nötige Hardware wird durch die Service-Anbieter bereitgestellt und administriert. Die Einführung von neuen Leistungsmerkmalen (supplementary services) ist mit dem Framework auch einfacher umzusetzen [HMM04]. Grundlagen 25 2.4.1 Architektur des Venice-Frameworks Die Web-Services in Venice können in drei Kategorien aufgeteilt werden: Management Services, Basic VoIP Services und Supplementary Services (Abbildung 10). Abbildung 10: Architektur des Venice-Frameworks [HGM05] Die Verwaltungsdienste (Management Services) werden für die Verwaltung und Nutzung des VoIPSystems verwendet. Sie sind nicht mit den VoIP-Diensten gekoppelt und können so auch in anderen Grundlagen 26 serviceorientierten Anwendungen eingesetzt werden. Fünf Management Services werden derzeit in der Architektur angeboten [HGM05]: Ø Role-based Single Sign-on (SSO): Dieser Dienst kontrolliert die Anmeldung am System. Bevor ein Benutzer telefonieren (oder allgemein gesagt, Dienste nutzen) kann, muss er sich zuerst mit Login und Passwort ausweisen. Danach erhält er eine Marke (TGT – Ticket Granting Token), mit der er seine Identität nachweisen kann. Wenn er einen Dienst benutzen will, werden mithilfe der TGT Marke seine Rechte überprüft und es wird entschieden, ob er berechtigt ist, den Dienst bzw. einzelne Funktionen des Dienstes zu benutzen, d.h. ob er eine Marke (ST - Service Token) für den jeweiligen Dienst bekommt. Diese neue Marke enthält dann die Rechte des Nutzers für den jeweiligen Dienst. Dieses Verfahren hat den Vorteil, dass der Benutzer sich nur einmal am System anmelden muss. Das ist sehr hilfreich in einem VoIPSystem, weil bei der Betätigung eines Telefonanrufs mehrere Dienste beteiligt sein können. Eine ausführliche Beschreibung von SSO findet sich in [HGMM05]. Ø Metering, Accounting, and Billing (MAB): Die Verwendung der Web-Services-Technologie in Venice ermöglicht die Wahl zwischen Diensten, die die gleiche Aufgabe erfüllen, aber unterschiedliche Eigenschaften, wie z.B. QoS, haben. Diese Dienste können von verschiedenen VoIP- Providern angeboten werden. Damit die Provider die Kostenabrechnung für die benutzten Ressourcen durchführen können, verfügt Venice über einen Metering-, Accounting- und Billing-Service, der alle verwendeten Dienste vermerkt. Ø Software Deployment (SDS): Die leichte Benutzung der Software wird mithilfe dieses Dienstes erreicht. Der Benutzer muss sich nicht um Installation oder Updates kümmern, der Software Deployment Service erledigt das für ihm. SDS ist auch für die Anbieter nützlich, weil er viel Administrationsaufwand bei der Nachinstallation von Diensten und bei der Wartung des Systems abnimmt. Eine ausführliche Beschreibung vom SDS findet sich in [HMMi04]. Ø Information Brokering (IB): Aufgrund der vielen Informationen über die verschiedenen Dienste, wird im System ein Information Brokering Service eingesetzt, der für die Suche und das Auffinden der gewünschten Informationen verwendet wird. Um die Skalierbarkeit mit der wachsenden Zahl von Diensten und Anbietern zu gewährleisten, nutzt der IB Peer-to-PeerTechnologien. Ø Feature Interaction Manager (FIM): Dieser Manager überprüft die Forderung nach einem Leistungsmerkmal. Das Ziel von FIM ist dafür zu sorgen, dass keine Seiteneffekte aufgrund der aufeinander folgenden Benutzung von mehreren Leistungsmerkmalen auftreten. Die Basisdienste (Basic VoIP Services) bilden den Kern der Venice-Architektur. Sie bieten alle Basisfunktionen, die für die Durchführung eines Telefongesprächs nötig sind. Die Basic VoIP Services sind für die Verbindungsaufbau, die Durchführung und das Beenden des Gesprächs zuständig. Diese Komponente kommuniziert direkt mit dem Simple Client, wobei die unterliegende Grundlagen 27 Technologie transparent für den Client bleibt. Die Brücke (WSBridge) ist verantwortlich für das Auffinden der VoIP-Benutzer in anderen Domänen und das Routing des Gesprächs. Für den Simple Client bleibt die Interaktion mit dem Kommunikationspartner - und damit, ob er ein H.323- oder SIPClient ist - verborgen. Die Basic VoIP Services dienen als Vermittler zwischen dem Simple Client und allen anderen VoIP-Web-Services. Die Leistungsmerkmale (Supplemantary Services) sorgen für Komfort beim Telefonieren. Sie sind in Venice ebenfalls als separate Web-Services implementiert. Die Dienste können von verschiedenen VoIP-Providern angeboten werden. Der Benutzer kann frei die Dienste auswählen, die er benutzen will. Einige der von Venice angebotenen Leistungsmerkmale sind Rufumleitung (Call Deflection), Anrufweiterschaltung (Call Forwarding), Dreierkonferenz (Three-Party), Anrufbeantworter (Answering Machine / Voice Mail) usw. Im Rahmen dieser Projektarbeit wurde ein Callcenter-Dienst als Leistungsmerkmal entwickelt, der für größere Unternehmen von Interesse sein kann. 2.4.2 Verarbeitung von Telefongesprächen Alle Methoden, die für die Durchführung eines VoIP-Telefongesprächs nötig sind, werden vom Basisdienst zur Verfügung gestellt. Zuerst werden die Berechtigungen des Benutzers überprüft, der telefonieren will. Wenn er für die Benutzung des Basisdienstes berechtigt ist, stehen ihm die folgenden Funktionen zur Verfügung [HiZh04] [HMM04]: Ø initCall(): Bereitet der Gespräch vor und überprüft, ob es genug freie Ressourcen gibt. Im Fall einer Überlastung der Festplatte, des Hauptspeichers oder des Netzwerks kann der Aufbau eines Gesprächs abgelehnt werden. Ø makeCall(): Leitet den Anruf zum Gesprächspartner ein. Ø acceptCall(): Wird aufgerufen, wenn ein Anruf angenommen wird. Der Angerufene ist mit dem Gesprächsaufbau einverstanden, und die RTP-Verbindung kann hergestellt werden; die Nachrichtenübertragung wird anschließend gestartet. Ø denyCall(): Der Aufruf dieser Methode lehnt einen Anruf ab und befreit alle belegten Ressourcen auf dem Server. Der Anrufende wird über die Ablehnung informiert. Optional kann auch der Grund dafür angegeben werden. Ø getCallInformation(): Liefert alle für das Gespräch notwendigen Informationen – IP-Adresse, Portnummer und Codec. Ø endCall(): Beendet das bestehende Gespräch und befreit alle belegten Ressourcen auf dem Server. Ø setClientConfiguration(): Diese Funktion wird für die Konfiguration der Daten benutzt, die für eine Verbindungsaufbau von Bedeutung sind (IP-Adresse, Portnummer, mögliche Codecs). Der Client hat die Möglichkeit, für jedes Gespräch unterschiedliche Konfiguration einzustellen, damit er z.B. zwei Gespräche parallel führen kann. Grundlagen 28 Bei jedem Gesprächsaufbau wird vom Basisdienst automatisch ein CallHandler erzeugt. Er verwaltet die aufgebaute Verbindung und weist der Verbindung eine eindeutige CallID zu, die zur Identifizierung eines Telefonats verwendet wird. Nach Beenden des Gesprächs wird der CallHandler vernichtet, und alle benutzten Server-Ressourcen werden gelöst. 2.4.3 Metering-, Accounting- und Billing Der Metering-, Accounting- und Billing-Dienst in der Venice Architektur ist ereignisgesteuert. Der Dienst sammelt Informationen über alle Ereignisse, die im System geschehen (metering) und ordnet sie zu den entsprechenden Service-Provider (accounting), damit sie die Abrechnung der Kosten (billing) durchführen können. Die Informationen werden in einem Datenbank-Management-System gespeichert. Sie werden dann für ein Accounting abgefragt und danach für Billing weitergeleitet. Die Vermerkungen der Ereignisse „call established“ (Verbindung aufgebaut) und „call ended“ (Gespräch beendet) mit dem entsprechenden Zeitpunkt werden z.B. für die Berechnung der Gesprächslänge benutzt. Der Service-Anbieter kann die Kosten pro Zeiteinheit eingeben und die Kosten für das Telefonat können danach berechnet werden [HiZh04]. 2.4.4 Leistungsmerkmale (Supplementary Services) Die dargestellte Architektur bietet eine einfache Integration von Leistungsmerkmalen an. Die Leistungsmerkmale teilen sich in drei Gruppen auf [HiZh04]: Ø built in supplementary services, die in der Client-Software integriert sind (z.B. Call Hold), Ø Supplementary Services, die eine Unterstützung des Basisdienstes brauchen (z.B. Call Forwarding) und Ø Supplementary Services, die selbstständig benutzt werden können (z.B. ein Adressbuch). Die Leistungsmerkmale in den letzten zwei Gruppen können als externe (external supplementary services) bezeichnet werden. Der Client kann die externen Leistungsmerkmale über den Information Broker finden. Er bekommt dann die WSDL-Datei des Dienstes, die ihm Auskunft darüber gibt, wo der entsprechende Dienst zu finden ist, wie er aufgerufen wird und wo er im Client-GUI zu integrieren ist. Zuerst muss sich aber der Client auf Seite des VoIP-Anbieters für den Dienst registrieren. Wenn der Client dann eine Operation des Leistungsmerkmals aufruft und dieses zur zweiten Gruppe gehört, kontaktiert das Leistungsmerkmal den VoIP-Basisdienst, der dann die gewünschte Operation im Auftrag vom Client ausführt (durch den Aufruf der supp_execute()-Funktion des Supplementary Services). Ist der aufgerufene Service dagegen von der dritte Gruppe, wird er direkt vom Client mittels invoke() kontaktiert. Abbildung 11 veranschaulicht die beschriebene Kommunikation. Grundlagen 29 SSO Legend: Access Level of Functionality role = user VoIP Service Client role = voip role = admin supp_execute() invoke() Supplementary Service Abbildung 11: Supplementary Services in Venice nach [HGM05] Jeder Web-Service im Venice-Framework hat drei potenzielle Zugriffspunkte, über dies er aufgerufen werden kann. Wenn der Client ein einfacher Benutzer ist (role = user), kann er nur auf den öffentlichen Teil des Dienstes zugreifen. Das Interface dieses Teil muss daher stabil bleiben, weil es von allen in Betrieb befindlichen VoIP-Clients benutzt wird. Der zweite Teil der Dienst-Funktionalität ist nur für andere im System existierende Web-Services zugänglich (role = voip). Alle Administrationsfunktionen sind im dritten Teil enthalten und nur für die Administratoren des VoIPAnbieters erreichbar (role = admin). Der Single Sign-on Service (SSO) regelt die Berechtigung des Clients und gibt ihm Zugriffsrechte nur auf die Dienste, die für seine Rolle (role) erreichbar sind [HGM04]. 2.5 Zusammenfassung Dieses Kapitel beschäftigte sich mit den theoretischen Grundlagen und Technologien, die für das Verständnis dieser Projektarbeit von Bedeutung sind. Der erste Teil befasste sich mit dem Begriff der Callcenter. Ein Callcenter ist eine eigenständige Organisationseinheit in der eingehende und/oder ausgehende Telefonate auf die Agenten – die Angestellten im Callcenter – verteilt werden. Wenn der Callcenter nur extern eingehende Telefongespräche annimmt, wird er Inbound-Callcenter genannt. Initiieren die Agenten dagegen selber ausgehende Anrufe, spricht man von Outbound-Callcenter. Ein Grundlagen 30 Callcenter kann unternehmensintern verwaltet werden, dann wird er als Inhouse-Callcenter bezeichnet, oder unternehmensextern mittels Beauftragung von Callcenter-Dienstleistern. Aufgrund des gestiegenen Einsatzes von IP-basierten Callcentern in den letzten Jahren wurde als nächstes die VoIP-Technologie dargestellt. Sie bietet viele Vorteile im Vergleich zum klassischen Telefonnetz. Die Übertragung der Signale ist hier paketbasiert über das Internet Protokoll. Es wird keine Leitung für die Dauer des Telefonats exklusiv belegt, und man kann parallel auch andere Anwendungen benutzen. Die VoIP-Telefonie ist nicht nur kostengünstiger als PTSN und ISDN. Sie spart auch Verkabelungs- und Personenaufwand für ihren Aufbau. Das VoIP-Netz kann besser ausgelastet werden. Außerdem werden schon viele Leistungsmerkmale, wie z.B. Gesprächweiterleitung oder Anrufbeantworter, angeboten. Die VoIP-Systeme sind teilweise schon mit der herkömmlichen Telefonie vergleichbar. Trotzdem existieren noch einige Probleme, die gelöst werden müssen. Die momentan am Markt angebotenen VoIP-Ansätze sind schwer zu bedienen. Der Benutzer muss immer neue Updates installieren, wenn das System neue Funktionalitäten anbietet. Die Kommunikation zwischen Benutzern, die unterschiedliche Protokolle verwenden, ist nur schwer möglich, oft muss dafür zusätzliche Hardware eingebaut werden. Die existierenden VoIP-Lösungen haben einige Nachteile auch für die Service-Anbieter. Sie müssen meistens den Code verändern, wenn die Software an neue Endgeräte angepasst werden muss, und die Einstellung von neuen Leistungsmerkmalen ist dabei auch schwer. Eine Lösungsmöglichkeit für diese Probleme bietet die Web-Services-Technologie. Sie wurde im dritten Teil des Kapitels betrachtet. Web-Services sind verteilte Softwaresysteme zur Maschine-zuMaschine-Kommunikation über das Internet. Der Aufbau eines Web-Services basiert auf der serviceorientierten Architektur (SOA) und bietet eine lose Kopplung über das Netz. Alle in der WebServices-Technologie eingesetzte Standards (WSDDL, SOAP und UDDI) basieren auf der Beschreibungssprache XML. Der Datenaustausch kann deswegen unabhängig von Plattform, Programmiersprache und Betriebssystem durchgeführt werden. Die Datentypen werden dabei mittels XSD definiert. Die strukturierten Daten werden mit SOAP übermittelt. Die Schnittstellen der Dienste sind in XML-Format anhand WSDL beschrieben. Die Service-Anbieter publizieren ihre angebotenen Dienste im UDDI-Verzeichnis und der Service-Nutzer kann über UDDI nach Web-Services suchen. Der Service-Verzeichnis (UDDI) agiert also als Vermittler zwischen Anbieter und Nutzer. Nach dem Auffinden eines gesuchten Dienstes kann der Nutzer anhand der Schnittstellenbeschreibung im WSDL-Dokument mit dem Anbieter in Verbindung treten und den gewünschten Dienst benutzen. Im letzten Unterkapitel wurde das Projekt Venice vorgestellt, in dessen Rahmen ein solches WebService-basiertes VoIP-Framework implementiert wurde. Es wurde eine neue Architektur entwickelt, die die Interoperlabilität zwischen verschiedenen VoIP-Providern ermöglicht, ohne zusätzliche Integration von Hardware. So können neue Leistungsmerkmale einfach und schnell im System integriert werden. Die Client-Software ist einfach zu benutzen und kann in verschiedenen Endgeräten Grundlagen 31 eingesetzt werden. Der Client muss außerdem keine Updates mehr durchführen, weil das dann automatisch für ihn erledigt wird. Entwurf und Implementierung eines Callcenters 32 Kapitel 3: Entwurf und Implementierung eines Callcenters Die Aufgabe dieser Projektarbeit besteht darin, das vorgestellte Venice-Framework mit einem Callcenter-Leistungsmerkmal zu ergänzen. Dafür wird zunächst die Struktur des zu realisierenden Inbound-Callcenters festgelegt. Es muss auch entschieden werden welche Funktionen dem Administrator und den Mitarbeitern (Agenten) des Callcenters zur Verfügung stehen. Demzufolge wird im letzten Unterkapitel das Funktionsprinzip erklärt. 3.1 Software-Pakete und Werkzeuge Bevor die Struktur und die Funktionalitäten des Callcenters erläutert werden, werden die für die Durchführung der Arbeit eingesetzte Datenbank und die verwenderen Softwarepakete kurz vorgestellt. Für die Datenhaltung wird eine PostgreSQL-Datenbank genutzt. PostgreSQL ist ein objektrelationales Datenbank-Management-System (ORDBMS). Es ist besonders leistungsfähig, unterstützt fast alle Standards der Definitions- und Abfragesprache für Datenbanken SQL (Structured Query Language) und ist außerdem ein Open-Source-Produkt mit kostenloser Nutzung. Wie das Venice-Framework basiert auch der im Rahmen dieser Projektarbeit entwickelte Callcenter Dienst auf Java (Version 1.5.0) [SunJ05]. Für die Realisierung der grafischen Komponenten wurden Java Swing und eine Erweiterung der Swing-API – die Java GUI Programming Extensions (JavaGPE) [Hi-JGPE] – eingesetzt. Für die Generierung der Java-Klassen für Server und Client aus der WSDL-Datei des Dienstes wurde das Werkzeug WSDL2Java von Axis (Apache Extensible Interaction System) verwendet. Zusätzlich zu den Standardbibliotheken von Java wurden Teile eine Erweiterung für die Web-ServiceEntwicklung verwendet – das Java Web Services Developer Pack (JWSDP). Dieses wird auch von Sun angeboten [SunWS05]. Das JWSDP enthält das JAX-RPC-Package (Java API for XML based Remote Procedure Calls), welches von Axis verwendet wird, um die Bindung eines Clients an den Web-Service durchzuführen. Zur Realisierung des Callcenter-Dienstes wurde das Dynamic Invocation Interface zum Aufrufen der entfernten Funktionen verwendet (siehe Kapitel 2.3). Als Server wird Tomcat (Version 5.5) der Apache Foundation eingesetzt. In diesem Servlet-Container befindet sich der Service und ist von dort aus entsprechend ausführbar. Entwurf und Implementierung eines Callcenters 33 3.2 Callcenter-Datenbankstruktur Das entwickelte Callcenter ist ein Inbound-Callcenter, das bedeutet nach der Definition in Kapitel 2.1.1, dass es ausschließlich eingehende Anrufe bedient. Wenn das Callcenter unter seiner Telefonnummer angerufen wird, muss jedes Gespräch zu einem freien Agenten umgeleitet werden. Für die Realisierung dieser Gesprächsumleitung werden drei Tabellen in einer PostgreSQL-Datenbank angelegt (Abbildung 12). Status tel WorkTime status shift tel end_time FOREIGN_KEY Shift FOREIGN_KEY start_time day shift Abbildung 12: Datenbankschema des Callcenter Services Die Tabelle mit dem Namen Status speichert die Nummern aller Agenten (tel) und ihren aktuellen Status (status). Die Telefonnummern haben die folgende vom Venice-Framework vorgeschriebene Form: „user@domäne“ (z.B. [email protected]). Jede Telefonnummer darf nur einmal in der Tabelle vorkommen. Das Status-Feld jedes Eintrags kann nur einen der folgenden zwei Werte enthalten – „available“, wenn der Agent an seinem Arbeitsplatz ist und „not available“ sonst. In der WorkTime-Tabelle sind die möglichen Arbeitszeiten der Agenten eingegeben. Im Feld shift werden die Schichtennummer aufbewahrt. Die Anfangs- und Endzeit der Schicht werden entsprechend in start_time und end_time eingetragen. Die Schichtnummern sind eindeutig und die Eingabe von Schichten mit der gleichen Start- (start_time) und Endzeit (end_time) ist nicht möglich. Der Schicht-Plan der Agenten wird in der Shift-Tabelle eingetragen. Jeder Eintrag besteht aus der Telefonnummer des Agenten, dem Datum (Werktag) und der Schichtnummer. Die Angaben in der Telefonnummer-Spalte (tel) müssen in der Telefonnummer-Spalte der Status-Tabelle auch vorhanden sein. Ein Arbeitstag in der Tag-Spalte (day) kann in zwei Formen eingegeben werden. Erstens kann man das genaue Datum als Arbeitstag einfügen (z.B. 2005.12.03). Die zweite Möglichkeit ist, die ersten drei Buchstaben des englischen Namens eines Wochentags einzutragen (d.h. Mon, Tue, Wed, Thu, Fri, Sat und Sun für Montag bis Sonntag entsprechend). Diese gewählte Konstruktion erleichtert die Arbeit des Callcenter-Administrators. Wenn ein Agent jeden Freitag z.B. in der gleichen Schicht arbeitet, braucht der Administrator nicht immer das aktuelle Datum an jedem Freitag einzutragen, sonst kann er einfach in der day-Spalte Fri eingeben. Sollte es danach eine Veränderung der Schicht an einem Freitag geben, muss er nur einen neuen Eintrag für diesen Entwurf und Implementierung eines Callcenters 34 bestimmten Freitag in der Datenbank hinzufügen, indem er das entsprechende Datum als day angibt. Die Schichtennummern (shift) müssen aber auch mit den Nummern aus der shift-Spalte der WorkTime-Tabelle übereinstimmen. In der Shift-Tabelle können natürlich mehrere Einträge für ein und den selben Agent existieren. Die einzige Restriktion dabei ist nur, dass jedem Agenten an einem Tag nur eine Schicht zugeteilt werden darf, d.h. die Tupel ([email protected], Fri, 1) und ([email protected], Fri, 2) können nicht beide in der Tabelle gleichzeitig vorhanden sein, sondern nur eine davon1. 3.3 Callcenter-XML-Schema Der nächste logische Schritt nach dem Erstellen des Datenbank-Schemas ist das Verfassen der XMLSchema mit allen Datentyp-Definitionen für eine einheitliche Syntax. Für jede Tabelle in der erstellten Datenbank lässt sich ein entsprechender (komplexer) Datentyp definieren. Der komplexe Datentyp „Status“ (Abbildung 13) enthält die Elemente „telephoneNumber“ und „availabilityStatus“ als Sequenz. „telephoneNumber“ ist selbst eine herkömmlicher „string“ als Typ. „availabilityStatus“ hat einen definierten einfachen Typ namens „StatusType“ (Abbildung 13), der entweder den Wert „A“ (für „available“) oder „N“ (für „not available“) annehmen kann. <complexType name=“Status“> <sequence> <element name=”telephoneNumber” type=”string” /> <element name=”availabilityStatus” type=”tns:StatusType” /> </sequence> </complexType> <simpleType name=”StatusType”> <restriction base=”string”> <enumeration value=”A” /> <enumeration value=”N” /> </restriction> </simpleType> Abbildung 13: Auszug des XML-Schemas des Callcenter-Dienstes 1 Dies ist nur auf den ersten Blick eine Einschränkung durch die Datenbankstruktur. Prinzipiell ist es natürlich möglich, dass ein Callcenter-Mitarbeiter mehrere Telefonnummern besitzt und so auch mehrere reale Schichten durchführen kann. Entwurf und Implementierung eines Callcenters 35 Für die WorkTime-Tabelle lässt sich der komplexe Datentyp „WorkTime“ definieren. Seine Sequenz-Elemente sind „shiftNumber“ vom elementaren XML-Typ „int“, „shiftStart“ und „shiftEnd“ – beide vom XML-Basistyp „time“. Der komplexe Datentyp „Shift“ bestimmt entsprechend die Einträge in der Shift-Tabelle. Die Elemente, die ihn aufbauen sind „telephoneNumber“ vom XML-Typ „string“, „day“ vom definierten einfachen Datentyp „DayDate“ und „shiftNumber“ vom XML-Typ „int“. Der „DayDate“-Typ kann, wie der Name schon sagt, einen Tag („day“) vom Typ „DayOfWeek“ oder ein Datum („date“) vom XML-Typ „date“ sein. „DayOfWeek“ definiert genau wie StatusType (Abbildung 13) eine Aufzählung, die die oben erwähnten Werte „Mon“, „Tue“, „Wed“, „ Thu“, „Fri“, „Sat“ und „Sun“ enthält. Das Callcenter-XML-Schema wird in der WSDL-Datei des Dienstes importiert, und WSDL2Java generiert automatisch für jeden der definierten Datentypen die entsprechende Java-Klasse, die denselben Namen wie der Datentyp trägt. Diese Klassen werden in einem Paket gespeichert, das aus dem Namensraum der Datentypen abgeleitet wird. Jede Klasse besitzt eine get()- und set()-Methode für jedes Element, um seinen Wert entsprechend zu setzen oder zu bekommen. 3.4 Callcenter-Schnittstellen Der Callcenter-Web-Service soll für die Kommunikation nach außen, mit dem CallcenterAdministrator und den Agenten entsprechende Schnittstellen bieten. Werden zunächst die gewünschten Schnittstellen-Operationen in WSDL erstellt, lassen sich nach dem Top-Down-Ansatz (siehe Kapitel 2.3.3) automatisch die Stubs und Skeletons mit WSDL2Java erzeugen. Auf Serverseite lassen sich anschließend die Java-Klassen für die Erstellung der nötigen Datenbankeinträge und SQLAbfragen sowie die Callcenter-Logik implementieren. Auf Nutzerseite erfolgt die Kommunikation über zwei grafische Schnittstellen – eine für den Administrator und eine für die Agenten. Das Administrationsinterface ist eigenständig. Das GUI für die Agenten ist dagegen im Simple Client eingebettet und erlaubt so die Benutzung anderer Dienste, die der Client bietet und für die der Agent berechtigt ist, wie z.B. der Basisdienst Telefonieren. Die Operationen, die dem Administrator und den Agenten zur Verfügung stehen, werden im Folgenden präsentiert. Dabei wird zunächst die WSDL-Schnittstelle des Dienstes beschrieben und gleichzeitig die dazugehörige grafische Benutzerschnittstelle als direkte Umsetzung. 3.4.1 Administrationsschnittstelle Das grafische Interface für den Callcenter-Administrator besteht aus drei Unterbereichen, die er verwalten kann – jeweils einen für jede Tabelle aus der Datendank. Die Daten in diesen drei Bereichen können nur vom Administrator geändert werden. Entwurf und Implementierung eines Callcenters 36 WorkTime Management Im Work Time Panel (Abbildung 14) werden alle Arbeitszeiten aufgelistet mittels Aufruf der getWorkTime() Methode, die alle Daten aus der WorkTime-Tabelle holt. Die möglichen Operationen mit diesen Daten sind die folgenden: Ø editWorkTime(): Durch den Aufruf dieser Funktion kann der Administrator die Start- und/oder Endzeit einer ausgewählten Schicht ändern. Eine Änderung ist nur dann erlaubt, wenn keine andere Schicht mit denselben Start- und Endzeiten existiert. Nach erfolgreicher Änderung wird die Liste automatisch aktualisiert und die geänderten Zeiten sind auch zu sehen. Ø addWorkTime(): Diese Funktion wird aufgerufen, wenn der Administrator eine neue Arbeitszeit in der Datenbank eintragen will. Bevor der Eintrag in der Datenbank gespeichert wird, wird überprüft, ob die eingegebene Schichtnummer schon vorhanden ist und ob die gewünschten Start- und Endzeiten mit diesen von einer schon existierenden Schicht übereinstimmen. Tritt eins dieser Fälle auf, wird der Eintrag fehlschlagen und nicht in der Datenbank gespeichert. Bei einer erfolgreichen Speicherung wird die Liste automatisch aktualisiert – sie zeigt danach die neu eingetragene Schicht an. Ø deleteWorkTime(): Wenn der Administrator eine von ihm ausgewählte Schicht löschen will, muss diese Methode aufgerufen werden. Nach dem Löschvorgang wird die Liste automatisch aktualisiert und das gelöschte Objekt ist in der neuen Anzeige nicht mehr zu sehen. Das Löschen einer Schicht aus der WorkTime-Tabelle führt, dem Datenbank-Schema entsprechend, zum Entfernen aller Einträge in der Shift-Tabelle, die die Nummer der gelöschten Schicht enthalten. Abbildung 14:Work Time Panel Entwurf und Implementierung eines Callcenters 37 Die automatische Aktualisierung der Liste mit den Arbeitszeiten nach jeder Änderungsaktion ermöglicht dem Administrator gleich einen Überblick über den neuen Zustand der Einträge. Status Management Der Agents’ Status Panel (Abbildung 15) zeigt die entsprechende Telefonnummer und den Status aller im Callcenter arbeitenden Agenten. Für diese Anzeige wird die Funktion getStatus() ausgeführt, die alle Einträge aus der Status-Tabelle der Datenbank holt. Für die Manipulation dieser Daten stehen die folgenden Methoden zur Verfügung: Ø editStatus(): Anhand dieser Funktion kann der Status eines ausgewählten Agents geändert werden. Nach dem Editieren wird die Liste mit den Nummern und dem entsprechenden Status automatisch erneut geladen und die aktuelle Information wird angezeigt. Ø addStatus(): Wenn der Administrator einen neuen Agenten in den Callcenter eintragen will, ruft er diese Methode auf. Die Information dieses Agenten wird nur dann in der Datenbank gespeichert, wenn die eingegebene Telefonnummer eindeutig ist. Nach erfolgreicher Speicherung wird die neue Liste der Agenten automatisch angezeigt. Ø deleteStatus(): Diese Funktion wird ausgeführt, wenn einen Eintrag gelöscht werden soll. In der gleich danach aktualisierten Liste ist der gelöschte Eintrag nicht mehr zu sehen. Nach dem Datenbank-Schema führt das Löschen eines Agents zum Entfernen allen seinen Schichten aus der Shift-Tabelle. Abbildung 15: Status Panel Entwurf und Implementierung eines Callcenters 38 Der Administrator hat hier auch die Möglichkeit, die Liste manuell erneut zu laden, damit er sehen kann, wenn einer der Agenten seinen Status geändert hat. Dafür wird erneut die getStatus()-Methode aufgerufen. Shift Management Für die Anzeige der Arbeitschichten der Agenten ist das Shift Panel (Abbildung 16) verantwortlich. Die Funktion, die diese Daten auflistet ist getShift(). Sie liefert alle Einträge aus der Shift-Tabelle. Eine Bearbeitung der Daten ist mit den folgenden Methoden möglich: Ø editShift(): Durch den Aufruf dieser Funktion kann der Administrator die Schichtnummer eines ausgewählten Agenten ändern. Dabei kann die Nummer nur auf einen schon in der Datenbank existierenden Wert gesetzt werden. Diese Veränderung ist gleich nach erfolgreicher Ausführung der Operation in der Liste zu sehen. Ø addShift(): Für die neue Zuteilung von Schichten an den Agenten wird diese Methode aufgerufen. Der Administrator kann den Agenten, für den er eine Arbeitschicht einfügen will, aus einem Register der im Callcenter eingetragenen Telefonnummern wählen. Dann gibt er den Tag als Datum oder die ersten drei Buchstaben des Wochentags ein. Die dazugehörige Schichtnummer kann er auch aus der Aufzählung aller in der WorkTime-Tabelle enthaltenen Nummern entnehmen. Vor der Speicherung der Daten in der Datenbank wird natürlich überprüft, ob am angegebenen Tag dem ausgewählten Agenten keine andere Schichtnummer schon zugeteilt wurde. Nach einer erfolgreichen Eintragung der neuen Arbeitschicht wird sie in der Liste aufgenommen. Abbildung 16: Shift Panel Entwurf und Implementierung eines Callcenters 39 Ø deleteSingleShift(): Diese Methode wird für das Löschen einer ausgewählten Arbeitschicht verwendet. In der automatisch neu geladenen Liste existiert der gelöschte Eintrag nicht mehr. Weil das Löschen eines Agenten oder einer Schicht aus der Datenbank, wie schon oben beschrieben, zu einen Löschvorgang auch in der Shift-Tabelle führt, hat der Administrator auch in diesem Panel die Möglichkeit, die Arbeitschichten-Liste manuell neu zu laden, damit er den aktuellen Zustand dieser Liste sehen kann. Dafür steht der Reload-Knopf zur Verfügung. 3.4.2 Agentenschnittstelle Jeder Agent des Callcenters kann mittels einem sogenannten Agent Panel (Abbildung 17) mit dem Web-Service kommunizieren. Dieser Panel ist im Venice Simple Client integriert. Er bietet dem Agent Möglichkeiten, seinen Verfügbarkeitsstatus zu ändern, seine Arbeitschichten zu sehen und mit anderen Agenten zu telefonieren. Die dafür angebotenen Funktionen sind: Ø getWorkPlan(): Diese Methode liefert den Arbeitsplan des Agenten. Sie bekommt als Parameter die Telefonnummer des Agenten und benutzt sie, um so von der Shift-Tabelle nur diese Einträge zu wählen, die diese Nummer enthalten. Ø getOwnStatus(): Wenn der Agent den AgentPanel öffnet, sieht er links oben eine CheckBox, die seinen Verfügbarkeitsstatus anzeigt. Abhängig von seinem Status in der Datenbank ist dieses Kästchen markiert, wenn in der Status-Tabelle der Wert „A“ für „available“ steht und nicht markiert, wenn dort der Wert „N“ für „not available“ eingetragen ist. Die getOwnStatus()-Funktion wird für die richtige Markierung dieser CheckBox aufgerufen. Ø setStatus(): Seinen Status kann der Agent durch Aufruf der setStatus()-Funktion ändern. Eine Änderung ist aber nicht immer erlaubt. Das Umschalten des Status von „not available“ auf „available“ ist immer möglich. Wenn der Agent aber umgekehrt seinen Verfügbarkeitsstatus von „available“ auf „not available“ setzen will, wird zuerst überprüft, ob seine Schicht zu Ende ist. Wenn das der Fall ist, darf er die gewünschte Status-Änderung durchführen. Ist die Schicht dagegen noch nicht abgelaufen, wird es überprüft ob es mindestens einen anderen Agent gibt, der dieselbe Schichtnummer an diesem Tag besitzt und „available“ ist. Wenn kein solcher Agent existiert, bedeutet dies, dass er an seinem Arbeitsplatz bleiben soll, damit das Callcenter noch besetzt ist. Deswegen darf er auch seinen Status nicht auf „not available“ setzen. Ø getStatus(): Der Agent sieht neben der Liste mit seinen Arbeitsschichten auch eine Liste mit allen Agenten des Callcenters. Aus dieser Liste kann er einen seiner Kollegen auswählen und mit ihm telefonieren. Damit er auch weißt ob dieser Kollege momentan an seinem Arbeitsplatz ist wird auch der Status angezeigt. Diese Liste wird mithilfe der getStatus()Funktion angezeigt. Entwurf und Implementierung eines Callcenters 40 Wenn der Agent einen Eintrag aus der Kollegen-Liste auswählt, muss er den Call-Button in der unteren rechten Ecke drücken, um ihn anzurufen. Es kann passieren, dass der Kollege mit dem er sprächen will im Moment nicht verfügbar ist (d.h. seinen Status ist auf „N“ gesetzt). Aus diesem Grund hat der Agent die Möglichkeit, die Liste mittels eines Reload-Buttons erneut zu laden. So kann er feststellen, wenn der gewünschte Gesprächspartner an seinen Arbeitsplatz zurückkommt (d.h. seinen Status auf „A“ gesetzt hat). Abbildung 17: Agent Panel In diesem Unterkapitel wurde beschrieben, wie die Agenten (die Mitarbeiter des Callcenters) und der Callcenter-Administrator mit dem Callcenter-Web-Service interagieren. Im folgenden Unterkapitel wird erläutert, wie die Kommunikation zwischen einem Client, der das Callcenter anrufen will, und dem Service abläuft. 3.5 Callcenter-Funktionsprinzip Das Callcenter ist ein Leistungsmerkmal von Venice und gehört zur Gruppe der Dienste, die eine Unterstützung durch den VoIP-Web-Service brauchen (siehe Kapitel 2.4.4). Aus diesem Grund wird die Kommunikation zwischen einem Client, der das Callcenter anruft, und dem Callcenter indirekt über den VoIP-Basisdienst durchgeführt (Abbildung 18). Entwurf und Implementierung eines Callcenters 41 SSO Agent 1 makeCall Client Agent 2 VoIP Service Call denied incoming Call . . . Legend: Access Level of Functionality role = user role = voip Agent 3 denyCall() supp_execute() forwardCall() Agent n Callcenter Service role = admin Admin Abbildung 18: Callcenter Supplementary Service Der Client wählt die Nummer des Callcenters („makeCall“). Weil er ein einfacher Benutzer ist, kommuniziert er mit dem öffentlichen Teil des VoIP-Dienstes. Der VoIP-Service ruft nach der Analyse der Telefonnummer die supp_execute()-Funktion des Callcenter-Services auf. Der CallcenterService regelt dann, zu welchem Agent der Anruf weitergeleitet werden soll. Wenn kein Agent gefunden werden kann, teilet der Callcenter dem VoIP-Service mit, dass das Gespräch abgelehnt wird und gibt die Ursache für die Ablehnung („denyCall()“) an. Der VoIP-Service übergibt dann dem Client die Information weiter („Call denied“). Wird dagegen vom Callcenter ein Agent ausgewählt, wird das dem VoIP-Service mitgeteilt („forwardCall()“) und er leitet das Gespräch intern („role = voip“) zu diesem Agenten weiter. Der Agent wird dann über das ankommende Telefonat benachrichtigt („incoming Call“). Wenn der Callcenter eine Warteschlange und/oder einen Anrufbeantworter als weitere Leistungsmerkmale besitzt, können sie auch als Agenten betrachtet werden. Was genau nach dem Aufruf der supp_execute()-Methode des Callcenter Services passiert, zeigt das in Abbildung 19 dargestellte Flussdiagramm. Die Ausführung von supp_execute() beginnt mit Bestimmung des Zeitpunkts des Anrufs (Get call time). Anhand dieser Zeit werden aus der WorkTime-Tabelle der Callcenter-Datenbank die Nummern der Schichten ausgewählt, die zur Anrufszeit aktiv sind (Find active shifts). Bei der Auswahl wird die aufgenommene Zeit mit den Start- und Endzeitwerten aller Schichten verglichen. Wenn die Anrufzeit zwischen diesen beiden Werten einer Schicht liegt, wird ihre Nummer ausgewählt Entwurf und Implementierung eines Callcenters 42 und in einem Vektor gespeichert. Nach dem Durchlauf aller Schichten aus der Tabelle wird die Länge des Vektors überprüft (aktive shifts). Falls der Vektor leer ist, bedeutet dies, dass das Callcenter momentan geschlossen ist. Folglich wird abgefragt, ob das Callcenter einen Anrufbeantworter zur Verfügung stellt (answering machine). Wenn die Antwort negativ ist, wird das Telefonat abgelehnt (Deny call). Der Anrufer wird informiert, dass das Callcenter geschlossen ist. Bei einer positiven Antwort wird das Gespräch zum Anrufbeantworter weitergeleitet (Forward call to am). Der Client kann eine Nachricht hinterlassen. Enthält der Schichten-Vektor mindestens eine Schichtnummer, werden aus der Shift-Tabelle der Datenbank alle Agenten ausgesucht, die am aktuellen Tag eine der im Vektor stehende Schichten haben (Find working agents). In der Shift-Tabelle können, wie schon bekannt ist, mehrere Einträge für einen Agent existieren. Einige dieser Einträge können als Tag ein exaktes Datum enthalten, andere nur den Namen eines Wochentags. Damit nur die richtigen Einträge berücksichtigt werden, wird die Suche wie folgt gestaltet. Zuerst werden die Einträge ausgewählt, die das aktuelle Datum und eine der Schichtnummern aus dem Schichten-Vektor beinhalten. Danach wird der aktuelle Wochentagsname bestimmt und die Einträge ausgesucht, wo diese Namen und eine der Schichtennummern aus dem Schichten-Vektor auftaucht. Für einen Agenten können Einträge von den beiden Arten existieren. Z.B. kann ein Agent Montags üblicherweise Schicht 2 haben, aber für den aktuellen Tag, der auch einen Montag sein kann, wurde für ihn Schicht 3 eingetragen. Diese Schichten können sich so zeitlich überlappen. Wenn der Anruf in einem Zeitpunkt kommt, in dem beide Schichten aktiv sind, werden beide Nummern in den Schichten-Vektor aufgenommen. Beim ersten Durchsuchen der Tabelle wird dann den zweiten Eintrag (der Schichtnummer 3 enthält) ausgewählt. Der erste muss aber nicht während des zweiten Suchvorgangs ausgewählt werden, damit der Agent nicht zweimal in dem Vektor mit den arbeitenden Agenten aufgenommen wird. Damit solche Fehler nicht passieren können, werden die Einträge, die beim zweiten Durchsuchen ausgewählt werden, nur auf solche beschränkt, die keine Telefonnummer enthalten, die schon in den gefundenen Einträgen aus dem ersten Suchlauf auftauchen. Es kann auch vorkommen, dass einem anderen Agenten die Montags-Schicht 3 zugeteilt ist, er aber am aktuellen Tag in Schicht 5 arbeiten muss, die später als der Anrufzeitpunkt beginnt, also gar nicht in dem Schichten-Vektor aufgenommen wird. In diesem Fall darf dieser Agent nicht als Arbeitender ausgewählt werden. Das zweite Durchsuchen der Shift-Tabelle wird aber den ersten Eintrag (der Schicht 3 enthält) auswählen, weil diese Schichtnummer im Schichten-Vektor enthalten sein wird. Damit solche Fehler nicht vorkommen, überprüft man beim zweiten Suchlauf zusätzlich, ob dem ausgewählten Agenten nicht bereits eine andere Schicht für das aktuelle Datum zugeteilt wurde. Aus den gefundenen Einträgen werden nur die Telefonnummer der arbeitenden Agenten in einen Vektor aufgenommen. Als nächstes wird die Länge dieses Vektors abgefragt (working agents). Eine Länge von Null heißt, dass es keine Agenten gibt, die im Moment des Anrufs arbeiten. Das kann z.B. an Feiertagen der Fall sein. In dieser Situation wird wieder nach einem Anrufbeantworter gefragt Entwurf und Implementierung eines Callcenters 43 (answering machine) und entsprechend gehandelt. Im anderen Fall, wenn der Vektor mindestens einen Agent enthält, müssen aus den arbeitenden Agenten nur diese ausgefiltert werden, die im Moment auch verfügbar („available“) sind (Find available agents). Dafür wird der Anwesenheitsstatus der gefundenen arbeitenden Agenten aus der Status-Tabelle abgefragt (available agents). Für jede Telefonnummer aus dem Vektor wird der entsprechende Eintrag in der Status-Tabelle gesucht. Jedes Mal, wenn ein verfügbaren Agent gefunden wird, wird seine Nummer in einem neuen Vektor gespeichert. Nach Überprüfung des jeweiligen Status aller arbeitenden Agenten wird der nächste Schritt vom Wert der Vektorlänge bestimmt. Wenn dieser Wert Null ist, wird erneut nach dem Anrufbeantworter gefragt (answering machine). Im Normalfall muss sich aber immer mindestens einer der arbeitenden Agenten an seinem Arbeitsplatz befinden. Der Agent selbst kann seinen Status auf „nicht Verfügbar“ („not available“) nämlich nur dann setzen, wenn mindestens ein anderer Mitarbeiter verfügbar ist. Die einzige Möglichkeit, alle arbeitende Agenten als nicht verfügbar zu markieren, wird nur dem Administrator angeboten. Der Wert des Zählers müsste also größer als Null sein. Dann werden alle verfügbare Agenten aufsteigend nach der Zeit ihrer letzten Gesprächsweiterleitung sortiert (Sort agents), die vom Dienst bei jedem Telefonat gespeichert wird. Solange die sortierte Liste nicht leer ist, werden die Telefonnummern nacheinander ausgewählt (Choose agent) bis einer der Agenten das Gespräch annimmt. Das Ziel ist, das ankommende Gespräch immer zu dem Agent weiterzuleiten, der am längsten nicht mehr telefoniert hat. Nachdem ein Agent ausgewählt wurde, wird abgefragt, ob er im Moment ein Gespräch führt, d.h. ob sein Anschluss besetzt ist (is busy). Wenn das der Fall ist, wird der nächste Agent aus der Liste geprüft, wenn nicht, wird das Telefonat zu ihm weitergeleitet (Forward call to agent) und der Wert für die letzte Weiterleitung zu ihm gespeichert. Die erfolgreiche Ausführung der forwardCall()-Funktion hängt aber nicht nur davon ab ob der ausgewählte Agent „busy“ ist, sondern auch davon, ob er beim ServiceProvider registriert ist. Ist der Agent dem Dienstanbieter bekannt, so wird eine Verbindung zwischen ihm und dem Anrufer aufgebaut. Ist er dagegen unbekannt, wird der Aufruf von forwardCall() eine SOAP-Fehlermeldung produzieren. Der Callcenter fängt diese Ausnahme ab und speichert die Nummer des Agenten, der den Ausnahmezustand verursacht hat, und den Zeitpunkt des Auftretens ab. Danach wird mit Überprüfung des nächsten Agenten aus der sortierte Liste fortgefahren. Die gespeicherten Einträge der auftretenden Ausnahmen werden für eine festgelegte Zeitspanne gespeichert und vor Aufruf von forwardCall() durchgegangen (exists). Somit kann eine Weiterleitung des Gesprächs zu einem Agenten, der nicht besetzt, aber auch nicht registriert ist, frühzeitig verhindert werden. Wird der Agent vor Ablauf der Zeitspanne beim Dienstanbieter registriert, kann er als Gesprächspartner beim nächsten Aufruf der supp_execute()-Funktion wieder ausgewählt werden. Entwurf und Implementierung eines Callcenters Abbildung 19: Flussdiagramm der supp_execute()-Funktion 44 Entwurf und Implementierung eines Callcenters 45 Wenn der Callcenter-Service die ganze sortierte Liste der verfügbaren Agenten durchläuft und keinen findet, der sowohl nicht besetzt, als auch registriert ist, d.h. der das Gespräch annehmen kann, fragt er nach einer Warteschlange (queue). Wird keine solche zur Verfügung gestellt, so wird das ankommende Gespräch zum Anrufbeantworter geschickt. Wenn eine Warteschlange existiert, wird der Anrufer an sie weitergeleitet. Dort wird er von einer aufgezeichneten Stimme darum gebeten, solange zu warten, bis ein Mitarbeiter frei geworden ist. Zusammenfassung und Ausblick 46 Kapitel 4: Zusammenfassung und Ausblick In der vorliegenden Projektarbeit wurde ein Inbound-Callcenter entworfen. Das Callcenter sollte als Leistungsmerkmal in einem Web-Service-basierten VoIP-Framework entwickelt werden. Zu diesem Zweck wurden zunächst die grundlegenden Begriffe Callcenter, VoIP und Web-Services erläutert und die Funktionsweise ihrer Technologien vorgestellt. Bei einem Callcenter handelt es sich um eine Organisationseinheit oder ein Unternehmen, in dem eingehende (inbound) oder ausgehende (outbound) Telefongespräche ähnlichen Charakters auf Telefonarbeitsplätze verteilt werden. Callcenter werden in vielen Arbeitsbereichen eingesetzt, bei denen eine telefonische Beratung, Unterstützung oder Verkauf möglich ist. Anschließend wurde erklärt, wie die Internettelefonie, oder kurz VoIP, funktioniert und welche ihre Vor- und Nachteile gegenüber dem klassischen Telefonnetz sind. Die VoIP-Technologie hat in den letzten Jahren große Fortschritte gemacht und die Qualität der Gespräche über IP ist mittlerweile mit der Qualität des herkömmlichen Netzes vergleichbar geworden. Die Web-Services-Technologie spielt in der vorliegenden Arbeit auch eine große Rolle. Ein WebService ist eine Softwarekomponente, die lose über das Internet mit anderen Softwarekomponenten interagiert, um gemeinsam Aufgaben zu erfüllen. Damit eine plattform-, programmiersprachen- und protokollunabhängige Kommunikation zwischen den Web-Services ermöglicht wird, verwendet diese Technologie die XML-basierten Standards SOAP, WSDL und UDDI. Das UDDI-Verzeichnis dient der Registrierung und dem Suchen von Web-Services. WSDL beschreibt die Schnittstelle des Web-Services und schreibt damit vor, wie der Service-Anwender mit dem WebService kommunizieren kann. Für die Übertragung der Daten zwischen dem Anbieter und dem Nutzer des entsprechenden Services ist dann SOAP über HTTP verantwortlich. Im letzten Teil des Grundlagen-Kapitels wurde das Framework Venice vorgestellt, wofür das Callcenter entwickelt wurde. Venice kombiniert VoIP mit Web-Services und stellt eine neue Architektur dar, die viele Vorteile für die Benutzer und Entwickler des VoIP-Systems anbietet. Wie der Callcenter-Service entworfen und implementiert wurde, ist im dritten Kapitel dieser Ausarbeitung präsentiert worden. Da das Callcenter als Web-Service realisiert wurde, kann es problemlos mit anderen Softwaresystemen interagieren und von verschiedenen VoIP-Anbietern verwendet werden. Das Callcenter kontrolliert die ankommenden Anrufe so, dass jedes Gespräch an den Agenten weitergeleitet wird, der zum entsprechenden Zeitpunkt am längsten nicht telefoniert hat. Damit versucht der Dienst eine möglichst gleichmäßige Verteilung der Anrufe zu erreichen. Die Einsatzplanung des Personals von Hand ist eine Aufgabe, die viel Zeit in Anspruch nimmt. Die Entwicklung eines Dienstes, der diese aufwändige Aufgabe löst, wäre eine hilfreiche Erweiterung des implementierten Callcenter-Services. Dafür können Statistiken über die Anzahl der eingehenden Gespräche und die Wartezeit der Anrufe in der Warteschlange gesammelt werden. Mit diesen Zusammenfassung und Ausblick 47 Statistiken könnten dann Prognosen für die Zahl der zu erwartenden Anrufe gemacht werden. Auf Basis dieser Vorhersagen könnten effiziente Personal- und Schicht-Pläne erstellt werden. Eine andere mögliche Erweiterung des existierenden Callcenters wäre die Implementierung eines IVR-Mechanismus, der die Agenten von Routineauskünften entlasten würde. VoIP ist eine erfolgversprechende Technologie, die in den nächsten Jahren die klassische Telefonie völlig ablösen kann. Dafür müssen die VoIP-Systeme aber die bekannten und üblichen Leistungsmerkmale mit einer besseren Qualität und auch neue interessante Dienste anbieten. Das im Rahmen dieser Projektarbeit erfolgreich entwickelte Callcenter ist ein solches Leistungsmerkmal, das in Großunternehmen und Verkaufshäuser einwandfrei eingesetzt werden kann. Literaturverzeichnis 48 Literaturverzeichnis [ABB+03] E. Armstrong, J. Ball, S. Bodoff, D. Bode Carson, I. Evans, M. Fisher, S. Fordin, D. Green, K. Haase, E. Jendrock : The Java™ Web Services Tutorial, 17 December 2003 [Braa05] J. de Braaf: Java Web Services, Ausarbeitung im Rahmen des Softwaretechnik Seminars, WS 2004/05 [CallCenter] Call Center - Ein Leitfaden für kleine und mittlere Unternehmen, http://www.cca.nrw.de/docs/callcenterleitfaden_bmwi.pdf [CaCe05] Callcenter aus Wikipedia, der freien Enzyklopädie: http://de.wikipedia.org/wiki/Callcenter, Stand 19. Aug 2005 [ChJe02] D. A. Chappel, T. Jewell : Java Web Services, O’Reilly, 2002 [CCM+01] E. Christensen, F. Cubera, G. Meredith, T. Berners-Lee, R. Fielding, S. Weerawarana: Web Service Description Language (WSDL) 1.1, http://www.w3c.org/TR/wsdl, 2001 [Dusc02] E. Dusch : Internet Telephonie – VoIP. ITA. 7, 2002 [Fink04] F.- J. Fink : Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung, Projektarbeit im WS 2003/04 [HaLö04] T. Hauser, U. M. Löwer : Web Services – Die Standards, Galileo Computing, 2004 [HGM05] M. Hillenbrand, J. Götze, P. Müller: Voice over IP – Considerations for a Next Generation Architecture, In Proceedings of 31st Euromicro Conference, (Porto, Portugal), August 30th - September 3rd 2005 [HGMM05] M. Hillenbrand, J. Götze, J. Müller, P. Müller: Rollen-basiertes AAA zur Dienstnutzung in Föderationen, In Proceedings of 19. DFN Arbeitstagung (Düsseldorf, Deutschland), Mai 2005 [Hi-JGPE] M. Hillenbrand : Dokumentation der Java-GPE http://www.markus-hillenbrand.de/javagpe [HiZh04] M. Hillenbrand, G. Zhang: A Web Service Based Framework for Voice over IP, In Proceedings of the 30 th Euromicro Conference 2004 (Rennes, France), August 2004 [HMM04] M. Hillenbrand, P. Müller, H. Müller: Voice over IP als Web Service, In Proceedings of 18. DNF Arbeitstagung (Düsseldorf, Deutschland), Juni 2004. [HMMi04] M. Hillenbrand, P. Müller, K. Mihajloski: A Software Deployment Service for Autonomous Computing Environments. Proceedings of International Conference on Intelligent Agents, Web Technology and Internet Commerce - IAWTIC'2004 (Gold Coast, Australia), 2004. [HSSR02] M. Handley, H. Schulzrinne, E. Scholer, J. Rosenberg: RFC 3261 – SIP: Session initiation protocol, April 2002 Literaturverzeichnis [HTTP05] 49 Hypertext Transfer Protocol aus Wikipedia, der freien Enzyklopädie: http://de.wikipedia.org/wiki/http, Stand 30. Nov. 2005 [IPT05] IP-Telefonie aus Wikipedia, der freien Enzyklopädie: http://de.wikibooks.org/wiki/IP-Telefonie, Stand 23.Aug 2005 [ITU-H.323] ITU, Recommendation H.323: Packet-based multimedia communications systems, Juli 2003, http://www.itu.int/rec/recommendation.asp?type=folders&lang=e&parent=TREC-H.323 [Knut02] M. Knuth: Web Services – Einführung und Übersicht, Software & Support Verlag, 2002 [Nöll05] J. Nölle: Voice over IP (VoIP) – Eine Einführung, verfügbar im World Wide Web: http://www.voip-info.de/wissen/_Artikel_Allgemein_32.php [Paap03] S. Paape: Spezifikation von Webservices (WSDL/WSFL), Seminararbeit in Programmierung verteilter Systeme, Christian-Albrechts-Universität zu Kiel, 2003 [RSL02] S. Rupp, G. Sirgmund, W. Lautenschlager: SIP – Multimediale Dienste im Internet – Grundlagen, Architektur, Anwendungen, dpunkt.verlag 2002 [RuSi04] S. Rupp, G. Siegmund: Java in der Telekommunikation – Grundlagen, Konzepte, Anwendungen, dpunkt.verlag 2004 [SunJ05] http://java.sun.com/j2se [SunWS05] http://java.sun.com/webservices/jwsdp/index.jsp [T-LAN] T-LAN Glossar, http://www.t-lan.de/GLOSSAR/ [Tomi06] Damir Tomicic, IBM, Microsoft and SAP Close Down UDDI Business Registry, http://tomicic.de/DevelopmentIBMMicrosoftAndSAPCloseDownUDDIBusinessRegis try.aspx [WüBu02] E. Wüstner, P. Buxmann: SOAP für Web Services Abbildungsverzeichnis 50 Abbildungsverzeichnis Abbildung 1:Signalverarbeitung bei VoIP .......................................................................................... 8 Abbildung 2: Gateway als Vermittler zwischen VoIP-Netz und Telefonnetz....................................... 9 Abbildung 3: VoIP Protokoll Architektur ......................................................................................... 10 Abbildung 4: Protokoll-Stack eines Web-Service ............................................................................. 13 Abbildung 5: Service-orientierte Architektur (SOA) ......................................................................... 14 Abbildung 6: Beispiel für XML Schema........................................................................................... 16 Abbildung 7: Struktur einer SOAP-Nachricht ................................................................................... 18 Abbildung 8: Struktur einer WSDL-Datei......................................................................................... 21 Abbildung 9: Datenstrukturen einer UDDI-Registrierungsstelle nach [Braa05] ................................. 22 Abbildung 10: Architektur des Venice-Frameworks [HGM05] ......................................................... 25 Abbildung 11: Supplementary Services in Venice nach [HGM05] .................................................... 29 Abbildung 12: Datenbankschema des Callcenter Services................................................................. 33 Abbildung 13: Auszug des XML-Schemas des Callcenter-Dienstes .................................................. 34 Abbildung 14:Work Time Panel ....................................................................................................... 36 Abbildung 15: Status Panel .............................................................................................................. 37 Abbildung 16: Shift Panel ................................................................................................................ 38 Abbildung 17: Agent Panel .............................................................................................................. 40 Abbildung 18: Callcenter Supplementary Service ............................................................................. 41 Abbildung 19: Flussdiagramm der supp_execute()-Funktion............................................................. 44 Abkürzungen 51 Abkürzungen ACD Automatic Call Distribution API Application Programming Interface arpa Address and Routing Parameters Area Axis Apache Extensible Interaction System CORBA Common Object Request Broker Architecture CTI Computer Telephony Integration DCOM Distributed Common Object Model DOS Denial of Service DTD Document Type Definition ENUM Electronic Numbering FIM Feature Interaction Manager GUI Graphical User Interface HTTP Hypertext Transfer Protocol IB Information Brokering IETF Internet Engineering Task Force ISDN Integrated Services Digital Network IT Information Technology ITU International Telecommunication Union IVR Interactive Voice Response Java-GPE Java GUI Programming Extensions MAB Metering, Accounting, and Billing ORDBMS Objectrelational Database Management System PAT Port Address Translation PSTN Public Switched Telephone Network QoS Quality of Service RegTP Regulierungsbehörde für Telekommunikation und Post RMI Remote Method Invocation RPC Remote Procedure Calls RTCP Real Time Control Protocol RTP Real Time Protocol RTTP Real Time Transport Protocol SDS Software Deployment SIP Session Initiation Protocol SMTP Simple Mail Transport Protoco Abkürzungen 52 SOA Service-oriented Architecture SOAP Simple Object Access Protocol SPIT Spam over Internet Telephony SQL Structured Query Language SSO Single Sign-on ST Service Token TCP Transmission Control Protocol TGT Ticket Granting Token UBR Universal Business Register UDDI Universal Description, Discovery and Integration UDP User Datagram Protocol URI Uniform Resource Identifier UUID Universally Unique Identifier VoIP Voice over IP WSDL Web Service Description Language WWW World Wide Web XML Extensible Markup Language XSD XML Schema Definition