Siebel Communications Server Administration Guide > Developing a Communications Driver > Siebel Adaptive Communications API Reference >


The driver handle, ISC_DRIVER_HANDLE, is implemented in the communications driver. Driver handle methods are invoked to request the driver to create a service handle, among other things. The service handle represents the functionality of the communications system with which you are integrating.

When a call to a driver handle method is successful, it returns 0 (zero). ISC_RESULT represents the API result type defined for the Siebel Adaptive Communications API.


Request the driver to return the API version (Siebel Communications API, or SCAPI) for which the driver is implemented. The driver should return the SCAPI_VERSION defined in the header file.

ISCAPI long           APIVersion();


Request the driver to create the driver handle ISC_DRIVER_HANDLE, and to perform other initialization tasks, such as to connect to the CTI middleware.

ISCAPI ISC_RESULT   CreateISCDriverInstance
   /* in  */(const ISC_STRING               mediaTypeStr,
   /* in  */ const ISC_STRING               languageCode,
   /* in  */ const ISC_STRING               connectString,
   /* in  */ const struct ISC_KVParamList*  datasetParams,
   /* out */ ISC_DRIVER_HANDLE*             handle);


Releases memory that was initially allocated for the driver.

ISCAPI void   FreeSCStrParamList
   /* in  */(struct ISC_StrParamList        strList);

NOTE:  Each driver must implement this function, in order to free its own memory. If this function is not implemented, the driver will not be loaded.


Return a data structure for an implementation object, such as may be part of a communications driver implementation. This function may be useful for extending the functionality of an existing driver.

If your communications driver implementation aggregates another communications driver, such that you have an additional object that mediates communication with the driver handle and service handle, this method can return implementation objects such as the driver handle, service handle, or some other structure.

An aggregate communications driver implementation typically includes a Siebel-provided driver, such as the Siebel CTI Connect driver, and a separate driver called the aggregate communications driver that extends the main driver's functionality or replaces part of its functionality.

If you write an aggregate communications driver, it may be useful to invoke the aggregate driver for certain functions. The aggregate communications driver intercepts certain commands for its special operation and passes other commands on to the existing communications driver.

The aggregate driver must be added to the Communications Drivers and Profiles view, so that the driver can be properly initialized and used.

Writing an aggregate communications driver to work with an existing communications driver can save much time compared with writing a driver from scratch.

ISCAPI ISC_RESULT   GetImplementationObject
   /* in  */(ISC_HANDLE     key,
   /* out */ ISC_HANDLE*    impObj);


Release the driver handle that was created using CreateISCDriverInstance, release a CTI middleware connection, and so on.

ISCAPI ISC_RESULT   ReleaseISCDriverInstance
   /* in  */(ISC_DRIVER_HANDLE              handle);


Return the list of supported commands or events.

ISCAPI ISC_RESULT   RequestCommandEventList
   /* in  */(const ISC_STRING            mediaTypeStr,
   /* out */ struct ISC_StrParamList*    commandList,
   /* out */ struct ISC_StrParamList*    eventList);


Return the supported channel type.

ISCAPI ISC_RESULT   RequestMediaTypeList
   /* out */(struct ISC_StrParamList*     mediaTypeList);


Request the driver to create the service handle ISC_SERVICE_HANDLE, and pass the service type (such as teleset monitoring), user-defined parameters, and the pointer to the Siebel client handle. The driver handle creates the service handle, which in turn communicates with the Siebel application for each agent:

  • For Siebel-provided communications drivers, all parameter data is passed to the communications driver in the datasetParams parameter.
  • For a customer-implemented communications driver, additional data can be passed to the service handle using the paramString variable.

    ISCAPI ISC_RESULT   RequestService
       /* in  */(ISC_DRIVER_HANDLE                  handle,
       /* in  */ const struct ISC_CLIENT_INTERFACE  clntInterface,
       /* in  */ const ISC_STRING                   connectString,
       /* in  */ const struct ISC_KVParamList*      datasetParams,
       /* out */ ISC_SERVICE_HANDLE*                serviceHandle);

Siebel Communications Server Administration Guide