El servidor TAPI (TAPI Service Provider) maneja directamente el evento de las llamadas en una central teléfonica, las lineas tienen q estar asignadas a cada equipo (PC) del call center, entonces tu aplicación puede sensar estos eventos haciendo uso de la libreria de windows tapi.dll (Telephony Application Programming Interface), el identificador de una llamada (hCall) está asignado a la información de la línea por la cual entro (hLine) estos valores son IntPtr, para obtener estos valores deberias crear tu propia Class Library donde defines clases que usen llamadas a los metodos de esta libreria TAPI con los tipicos [DllImport(...)] ademas de jugar con punteros de memoria para pasarlos a una estructura, etc.
// Ejemplo: método para abrir una linea que deseas sensar
[DllImport("Tapi32.dll", EntryPoint="lineOpenW", CharSet=CharSet.Auto, SetLastError=true)]
internal static extern LineErrReturn lineOpen(
IntPtr hLineApp,
uint dwDeviceID,
out IntPtr hLine,
uint dwAPIVersion,
uint dwExtVersion,
CTapi.LineCallBack dwCallbackInstance,
LineCallPrivilege dwPrivileges,
LineMediaMode dwMediaModes,
LineCallParams lpCallParams);
Por si necesitas referencias trabajo con sistemas IVR (Interactive Voice Response), Call Centers donde hago uso de esta libreria TAPI con .NET.
Desarrollar esta Class Library en .NET llevo cerca de 1 año, y aun seguimos modificandola.
La otra forma es comprar libreria de terceros!