donderdag 5 augustus 2010

Ingrediënten van onze "CTI" toepassing

(Waarschuwing: enige technische kennis vereist...)

- Panasonic telefooncentrale met netwerk ondersteuning
- TAPI-drivers en software applicatielaag met COM API (RanCom)
- CRM-pakket met COM API
- Visual C# client applicatie
- WSH, Batch en Perl-scripts, server/client TCP Sockets, fork'ing
- Interactie tussen bovenstaande...

Rustig draait het WSH-script op de achtergrond van de server. De COM objecten zijn geladen, RanCom heeft de verbinding met de TAPI applicatielaag gemaakt en de callback handlers staan klaar. De Win32::OLE Perl-module had hier vandaag geen zin in, zelfs niet met WithEvents.
Dan verschijnen er signalen op de telefoonlijn... de callback handler in het WSH-script ziet het, het is een inkomende lijn. Snel stuurt hij het Caller ID naar een Batch-script.

Ondertussen staat in het CTI-server Perl-script de IO::Socket::INET listen socket te wachten. Mooi lichtgewicht, geen overhead van een HTTP of SOAP-server, gewoon good old sockets, en waarom ook niet? Plots verschijnt er een connectie, daar is het Batch-script met het Caller ID: "CALL IN 0736271240\r\n". De CTI-server weet wat hem te doen staat.
De ingelogde clients worden bij elkaar gezocht en asynchroon op de hoogte gebracht van het inkomende telefoontje. Geen ge-fork, eenvoudige `system(1, ...)` calls doen hun werk. System calls naar een Perl-script dat een socket opent met de C# applicatie op de client en het Caller ID doorstuurt.

Een keurig lichtgeel tooltip ballonnetje verschijnt in de system tray van de client: "Inkomende telefoon van Holiday Media". De C# applicatie had vlug via de COM API van het CRM-pakket opgezocht wie er schuil gaat achter het Caller ID. Ik klik erop en de contactkaart verschijnt in het CRM-pakket. En op dat ogenblik rinkelt de telefoon op mijn bureau. Op het LCD-venstertje herken ik ons eigen telefoonnummer, ik had al zo'n voorgevoel. Test geslaagd!

Even later klik ik op een telefoonnummer in het CMR-pakket. Het telefoontoestel op mijn bureau begint het nummer te bellen. Wederom een geslaagde test, wat heb ik veel geleerd met dit projectje...

CTI: Computer telephony integration
CRM: Customer relationship management
COM: Component Object Model
API: Application programming interface
TAPI: Telephony Application Programming Interface
WSH: Windows Scripting Host
C#: C Sharp (programming language)