www.pudn.com > dialogic_IVR.rar > apiuse.h


#ifndef __APIUSE_H__ 
#define __APIUSE_H__ 
 
#define _CALL_DEBUG		"话务统计"	 
 
#include "msgtype.h" 
#pragma pack(push,1) 
 
#ifndef	 US 
#define  US   USHORT 
#endif 
 
#ifndef  UC 
#define  UC   UCHAR 
#endif 
 
#ifndef	 UL 
#define  UL   ULONG 
#endif 
 
#define  UC_NO_USE  0xFF 
#define  US_NO_USE  0xFFFF 
#define  UL_NO_USE  0xFFFFFFFF 
 
#define  UC_ERROR   0xFF 
#define  US_ERROR   0xFFFF 
#define  UL_ERROR   0xFFFFFFFF 
 
//变量名: ulSecurity      
//定义系统用户的权限 
#define	RIGHT_BUSYIDLE			0x00000001			//  示忙/示闲 
#define	RIGHT_MUTEONOFF			0x00000002			//	静音/非静音 
#define	RIGHT_HOLDFETCH			0x00000004			//	保持/取保持 
#define	RIGHT_CONNECTHOLD		0x00000008			//	连接保持 
 
#define	RIGHT_CALLOUT			0x00000010			//	普通呼出 
#define	RIGHT_INTERCALL			0x00000020			//	内部呼叫 
#define	RIGHT_TRANSFER			0x00000040			//	内部转移 
#define	RIGHT_TRANSITTALK		0x00000080			//	接转接来话 
 
#define	RIGHT_TRITALK			0x00000100			//	三方通话 
#define	RIGHT_TRANSITOUT		0x00000200			//	转出 
#define	RIGHT_SSPTRANSIVR		0x00000400			//	人工转移自动 
#define	RIGHT_DENYTALK			0x00000800			//	不接来话 
 
#define	RIGHT_SUPERVISEINSERT	0x00001000			//	监听/监听插入 
#define	RIGHT_INTERCEPT			0x00002000			//	拦截 
#define	RIGHT_FORCEOUTBUSYIDLE	0x00004000			//	强制签出/强制示忙/强制示闲 
#define	RIGHT_SPYRECORDPLAY		0x00008000			//	质检录音/质检放音 
 
#define	RIGHT_SPYMONITOR		0x00010000			//	质检监视 
#define	RIGHT_ASSESSMANAGER		0x00020000			//	考评管理员 
#define	RIGHT_ASSESS			0x00040000			//	普通考评员 
#define	RIGHT_ALARM				0x00080000			//	告警台 
 
#define	RIGHT_REPORT			0x00100000			//	报表处理员 
#define	RIGHT_SERVICEEXPERT		0x00200000			//	话务专家员 
#define	RIGHT_MONITOR			0x00400000			//	监控台 
#define	RIGHT_SYSTEM			0x00800000			//	数管员 
 
#define	RIGHT_REPORTMANAGER		0x01000000			//	报表管理员 
#define	RIGHT_HOMECALLOUT		0x02000000			//	国内长途呼出 
#define	RIGHT_ABOARDCALLOUT		0x04000000			//	国际长途呼出 
 
const  SHORT		DBCCC_MAXLEN_USERNAME	=  20;	//最大用户名长度 
const  SHORT		DBCCC_MAXLEN_PASSWORD   =  8;	//最大口令长度 
const	UCHAR		MAX_FILENAME_LEN        = 40;	//文件名长度 
const	CHAR		MAX_VERSION_LEN         = 20;	//版本信息长度 
const	UCHAR	    MAXLEN_EXTEN			= 24;	//最大电话号码长度 
const	UCHAR		MAX_PILOT_LEN			= MAXLEN_EXTEN;	//导引号码长度 
const	SHORT		MAX_PEOPLE_NAME_LENGTH	= 20;		//代理人姓名长度 
const	SHORT		AGENT_NAME_LENGTH		= MAX_PEOPLE_NAME_LENGTH;		//代理人姓名长度 
const	SHORT		MAX_SKILL_NAME_LENGTH	= 20;		//技能名称长度 
const	SHORT		MAX_DN_LENGTH			= 2*MAXLEN_EXTEN;	//DN最大长度 
const	SHORT		MAX_IVR_INNO_LENGTH		= MAXLEN_EXTEN;	//最大接入码长度 
const	SHORT		MAX_SYSINNO_NUM			= 200;		//系统接入码数目 
const	SHORT		MAX_VALUE_LENGTH		= 1024;		//配置项目长度 
const	SHORT		MAX_WORKGROUP_NAME_LENGTH = 100;	//班组名称长度 
const	SHORT		ERROR_NOTE_LENGTH		= 200;		//系统错误说明长度 
const   SHORT       MAX_SKILL_STRING_LENGTH = 200;		//技能队列描述长度 
const	SHORT		MAX_SKILLINFO_LEN		= MAX_SKILL_STRING_LENGTH;		//技能队列描述长度 
const	SHORT		MAX_INNO_INFO_LEN		= 200;		//接入码对应功能描述长度 
const   SHORT		MAX_SERVICE_DESCRIPTION_LEN = 100;  //业务描述字符 
const	SHORT		MAX_HISTORY_ITEMS		= 5;		//一次取得的最大历史记录条数 
const	SHORT		MAX_HISTORY_LENGTH		= 1024;		//一条历史记录长度 
const	SHORT		MAX_CLASS_NAME_LENGTH	= 20;		//级别名称长度 
const	SHORT		MAX_SERIALNO_LENGTH		= 20;		//最大流水号码长度 
const	SHORT		MAX_ANI_LENGTH			= MAXLEN_EXTEN;	//呼叫主叫长度 
const	SHORT		MAX_DNIS_LENGTH			= MAXLEN_EXTEN;	//呼叫被叫长度 
const	SHORT		MAX_SECTIONNAME_LENGTH 	= 32;			//Section长度 
const	SHORT		MAX_KEYNAME_LENGTH		= 32;			//Key长度 
const	SHORT		MAX_VALUENAME_LENGTH	= 1024;			//Value缺省长度 
const	SHORT		MAX_CUSTOMER_ID_LENGTH	= 15;	//用户标识长度 
const	SHORT		MAX_COMPANY_LENGTH		= 40;	//公司名字长度 
const	SHORT		MAX_ADDRESS_LENGTH		= 40;	//地址名字长度 
const	SHORT		MAX_AREA_LENGTH			= 20;	//专业 
const	SHORT		MAX_LANGUAGE_LENGTH		= 10;	//语言 
const	SHORT		MAX_DESCRIPTION_LENGTH	= 100;	//用户简要介绍 
const	USHORT		MAX_CALLDATA_LEN		= 1024;	//呼叫数据长度 
const	UCHAR		MAXLEN_PILOTNBR         = MAXLEN_EXTEN; 
const	SHORT		MAX_PACKET_LEN			= 1024*5;	//一个包最大长度 
const	UCHAR		MAX_COMPUTER_NAME_SIZE	= 30; 
const   USHORT      MAX_AGENT_KEEPCALL_NUMS  = 100;  //一个话务员最大的保持呼叫数 
const				MAX_CCC_DATA            = 36000; 
 
const	SHORT		MAX_SKILL_NUM			= 300;		//最大的技能项目 
const	SHORT		MAX_NODE_NUM			= 1000;		//最大的节点数目 
const	SHORT		MAX_TREE_NUM			= 500;		//最大技能树个数 
const	SHORT		MAX_SERVICE_NUM			= 300;		//最大的业务类型 
const	SHORT		MAX_LEAF_NUM			= 1000;		//最大的叶子节点数目 
const	SHORT		MAX_WORKGROUP_NUM		= 500;		//最大工作组数目 
const	SHORT		MAX_SKILL_GROUP			= 300;		//最大的技能分组 
const	SHORT		MAX_DN_NUM				= 500;		//最大的DN数目 
const	SHORT		MAX_PROXY_NUM			= 100;		//最大的代理服务器数目 
const   SHORT		MAX_CCC_NUM				= 1500;		//最大的CCC数目 
const	SHORT		MAX_NODES_COUNT			= MAX_PROXY_NUM + MAX_CCC_NUM; 
const	SHORT		MAX_IVR_SERVICE_NUM		= 500;		//最大IVR业务流程数目 
const	SHORT		MAX_IVR_INNO_NUM		= 500;		//最大IVR接入码数目 
const	SHORT		MAX_DNIS_NUM			= 300;		//最大被叫数目 
const	SHORT		MAX_SECT_NUM			= 5;		//一天中的最大分段数 
const	SHORT		MAX_HOLIDAY_NUM			= 50;		//最大假期数目 
const	SHORT		MAX_ACCESS_NUM			= 16;		//接入码个数 
const	SHORT		MAX_CONFERENCE_NUM	    = 1000; 
const	SHORT		WORKGROUP_AGENT_NUM		= 100; 
const	SHORT		MAX_USER_CLASS_NUM		= 15; 
const	SHORT		MAX_OUTBOUND_NUM		= 100;	//一次取回的呼出呼叫数目 
const	USHORT		MAX_CBK_NUM				= 4096;	 
const	USHORT		MAX_ANI_NUM_ONE_PACKAGE = 500;	//数据库一次返回的最大主叫号码数目 
const	UCHAR       DRV_MAX_GET_NUM         = 24;  //最大收号长度 
 
const	UCHAR		MAX_START_DIGIT_BCD_LEN	=	9 ; 
const	UCHAR		MAX_STOP_DIGIT_BCD_LEN	=	9 ; 
const	UCHAR		E1_MAX_FILENAME_LEN		=	40; 
const	UCHAR		MAX_E1_SENTENCE_LENGTH	=	215; 
const	USHORT		MAX_REPORT_BUFF_SIZE	= 2000;	//最大报音缓冲区 
const   USHORT		MAX_QC_SKILL_GROUP_SIZE   = 50;//最大质检员能处理的技能组个数 
const   USHORT		MAX_QC_CALLQUEUE_SIZE     = 50;//最大质检员能处理的呼叫队列个数 
 
 
enum ACK_cause 
{ 
    AGENT_FAULT=0,        //无效话务员 
	CALL_FAULT,           //无效的呼叫 
	STATE_FAULT,          //状态错误 
	CONNECT_FAIL,         //连接错误 
	GET_HOLD_FAIL,        //取保持错误 
	HOLD_FAIL,            //保持错误 
	TIMEOUT,              //超时 
	OCCUPY_FAIL,          //占用话务员错误 
	USER_DISCONNECT ,     //用户挂机 
	NO_CONF,              //申请不到会场 
	NO_RIGHT,             //没有权限 
	ICD_ACCESS_CODE,      //ICD系统接入码 
	RESOURCE_UNAVAIL,     //资源不可用 
    NO_SUCH_NUMBER,       //空号 
    CALLED_BUSY           //被叫忙 
}; 
 
//呼出类型 
enum CCC_CALL_OUT_MODE 
{ 
	NORMAL_CALL_OUT,		//普通呼出 
	FORCE_INSERT_CALL_OUT,	//强插 
    PRI_CALL_OUT            //PRI呼出 
}; 
 
enum CCC_REPORT_VOICE_TYPE 
{ 
	SECRET_NUMBER_VOICE = 10,	//保密电话 
	NULL_NUMBER_VOICE	= 11,	//空号 
}; 
 
//设置监视的类型 
enum MI_TYPE 
{ 
	MI_TRUNKNO = 0,			//按中继监视 
	MI_CALLER,				//按主叫监视 
	MI_CALLED				//按被叫监视 
}; 
 
//所有设备类型定义 
enum	ICD_DEVICETYPE 
{ 
	NotKnowType = 0, 
	QueueType = 1, 
	AgentType, 
	IvrType, 
	ConferenceType, 
	CallPartyType, 
	AgentQueueType 
}; 
 
enum CONNECT_BY_TYPE 
{ 
	BY_DIRECT = 0, 
	BY_CONFERENCE 
}; 
 
enum CALL_DIRECT_MODE	//离开设备原因 
{ 
	NORMAL_DIRECT = 0 ,	//正常离开 
	KEEP_DIRECT,		//保持 
	WAIT_DIRECT,		//等待 
	RELEASE_DIRECT		//释放 
}; 
 
//******************************************* 
//CccNotifyConfigChaned ucType 
//******************************************* 
enum CONFIG_NOTIFY_TYPE 
{ 
	NOTIFY_IVR			= 0, 
	NOTIFY_PROXY		   , 
	NOTIFY_LOGDBSERVER	   , 
	NOTIFY_ROTINGDBSERVER  , 
	NOTIFY_OUTBOUNDDBSERVER 
}; 
 
enum	MONITOR_TALK_FLAG 
{	 
	NOT_ALLOWED_TALK = 0, 
	ALLOWED_TALK	 = 1 
}; 
 
enum RELOCATION_DIRECTION 
{ 
	SEEK_FORWARD,   //  0: ---->  向前 
	SEEK_BACKWARD   //  1: <----  向后 
}; 
 
enum RELOCATION_SEEK_FROM 
{ 
   SEEK_FROM_HEAD=0,	//文件头 
   SEEK_FROM_CURRENT,	//文件当前位置 
   SEEK_FROM_TAIL		//文件尾 
}; 
 
enum CallFlag 
{ 
	CALL_IN =0	,		//呼入 
    CALL_OUT			//呼出 
} ; 
 
enum ACD_Call_Feature_Type	//排队机呼叫特征 
{ 
	ACD_SP_CALL_NORMAL =0,	//  普通呼叫 
	ACD_SP_CALL_SPECIAL	,	//  SPECIAL CALL , USED BY CONFERENCE CALL 
	ACD_KE11_CALL,			//  KE=11, USED BY  VMS CALL--GET VOICE INFORMATION 
	ACD_KE15_CALL,			//  KE=15, USED BY  VMS CALL--DELETE VOICE INFORMATION 
	ACD_BP_CALL	,			//  BP,USED BY VMS CALL--SEND INFORMATION TO BP  
	ACD_SP_CALL_LONG,		//长途呼叫 
	ACD_OP_CALL_OUT,		//=6座席呼出类型 
}; 
 
 
enum Call_Feature_Type	//CCS内部呼叫特征,目前与排队机呼叫特征不一致的是OP_CALL_OUT 
{ 
	SP_CALL_NORMAL =0,	//  普通呼叫 
	SP_CALL_SPECIAL	,	//  SPECIAL CALL , USED BY CONFERENCE CALL 
	KE11_CALL,			//  KE=11, USED BY  VMS CALL--GET VOICE INFORMATION 
	KE15_CALL,			//  KE=15, USED BY  VMS CALL--DELETE VOICE INFORMATION 
	BP_CALL	,			//  BP,USED BY VMS CALL--SEND INFORMATION TO BP  
	SP_CALL_LONG,		//长途呼叫 
	INTER_CALL,			//内部呼叫 
	SP_CALL_OUT,         //呼出 
	OP_CALL_OUT,		 //座席呼出类型,可以支持强插在发送到SIP模块后要转换成6 
						 //而在呼叫对象中转换为用SP_CALL_OUT 
} ; 
 
 
enum AGENT_TYPE		//座席类型 
{ 
	EXTENSION_TYPE = 0,	//分机类型 
	USERLINE_TYPE,		//用户线类型 
	BDAGENT_TYPE		//1B+1D座席类型 
}; 
 
enum AGENT_STATE	//座席状态 
{ 
	NOT_LOGINED = 0,	//未签入 
	IDLE        ,		//空闲状态 
	PREOCCUPY   ,		//预占用状态 
	OCCUPY      ,		//占用状态 
	ANSWERING ,			//应答状态 
	TALKING   ,			//通话状态 
	WORKING,			//工作状态 
	SETBUSY				//忙状态 
}; 
 
enum IVR_TYPE { 
   IVR_RCP, 
   IVR_SPP,  
}; 
enum AGENT_OP_STATUS	//座席状态 
{ 
//话务员主要状态的变化	 
	ops_null=0, //坐席签出 
	ops_login, //坐席签入 
	ops_idle, //空闲 
	ops_busy, //示忙 
	ops_active, //通话态 
	ops_wait_answer,//给话务员分来话后等话务员应答 
	ops_wait_connect,//话务员应答或话务员呼出成功后等待连接成功的消息  
	ops_release,    //话务员拆线 
	ops_disconnect, //请求释放 
	ops_wait_alerting,//呼出时等被叫振铃 
	ops_tri_tlak = 10,//三方通话 
 
    ops_fail, //坐席通道坏或坐席死机 
    ops_ok  , //坐席通道或坐席已恢复 
	ops_hungup ,//人工转自动,话务员处于挂起状态 
 
//话务员是否被监听或插入 
	ops_supervise_insert, //被监听或插入 
	ops_stop_supervise_insert, //停止被监听或插入 
 
//话务员是否被录音 
	ops_record_begin,//被录音 
    ops_record_stop ,//停止被录音 
 
//话务员是否被监视 
	ops_monitor,//被监视 
    ops_stop_monitor,//停止被监视 
 
/////////////// 
	ops_monitor_supervisor_other = 20,//监听或插入 
    ops_stop_monitor_supervisor_other,//停止监听或插入 
 
	ops_playvoice,//放音 
    ops_stop_playvoice,//停止放音 
 
	ops_surveillant,//监视 
    ops_stop_surveillant =25 ,//停止监视 
	ops_rest,			//座席休假(休息) 
	ops_work,		//工作状态 
	ops_monitor_insert_call //监听插入呼叫 
}; 
 
enum	TIMEOUT_PROCESS_STYLE	//Timeout or Transfer Type 
{ 
	RELEASE_STYLE = 0, 
	TRANSFER_STYLE 
}; 
 
//告警类型 
enum	ALARM_TYPE 
{ 
	ResourceAlarm = 3, 
	IvrRcpDisconnectAlarm, 
	SSPDead, //排队机死机 
	ProxyDisconnetAlarm 
}; 
 
//告警级别 
enum	ALARM_LEVEL 
{ 
	Note = 0, 
	General, 
	Important, 
	Critical 
}; 
 
enum  voice_resource	//放音资源类型 
{ 
   SPT_RESOURCE=0,	//SPT放音 
   VP_RESOURCE,		//VP放音 
   SIG_RESOURCE,	//SIG信号音 
   NO_VOICE			//没有语音 
}; 
 
 
enum Play_Type		//放音类型 
{ 
   PLAY_NOTE=0,		// 放提示音 
   PLAY_LOCAL_FILE,	// 没用,仅为与A型机INtess业务兼容 
   PLAY_SPEC_FILE,	// 放指定文件 
   PLAY_TEM_FILE,	// 放临时文件 
   PLAY_COMBINE,	// 放合成音 
   PLAY_QC_FILE		//播放质检录音 
}; 
 
enum PLAY_COLLECT 
{  
	PLAY_VOICE = 0 ,		//放音 
	GET_USERINFORMATION		//收号 
}; 
 
 
enum	ACD_TRUNK_TYPE 
{ 
	INBOUND_TRUNK = 0,	//入中继 
	OUTBOUND_TRUNK,		//出中继 
	BIDIRECT_TRUNK		//双向中继 
}; 
 
 
//呼叫拆线原因 
enum  SP_Disconnect_Cause 
{ 
	SP_Normal_Clearing_Cause = 0		,    /* 呼叫正常拆除 */ 
	SP_No_Resource_Cause				,	 /* 资源已占满 */ 
	SP_Timeout_Cause					,	 /* 超时 */ 
	SP_Fault_Cause					,	 /* 呼叫异常拆除,*/ //呼出失败 A4 B4 
	SP_No_Such_Number				,	 /* 空号 ,B5或A5	*/ 
	SP_Vms_Unavail					,	 /* 邮箱已满或暂停使用,向对端发B4*/ 
	SP_Not_Permit                ,      // 不允许呼入邮箱 
	SP_FAIL_CONNECT, 
    SP_CALLED_BUSY  = 47, 
 
	// CCS 
	SP_CCS_SIPEx_UIM_SCP_USER_Disconnect_Response	=	56, 
	SP_CCS_SIP_WaitRelease			=	57, 
	SP_CCS_SIP_VPRelease, 
	SP_CCS_SIP_NormalRelease, 
	SP_CCS_SIP_CcsNormalRelease, 
	SP_CCS_SIP_UIMDisconTimeout, 
	SP_CCS_SIP_SpecialTimeout, 
	SP_CCS_SIP_EnterIdle, 
 
	SP_CCS_IVR_Disconnect1			=	64, 
	SP_CCS_IVR_Disconnect2, 
	SP_CCS_IVR_Disconnect3, 
	SP_CCS_IVR_Disconnect4			=	67, 
	SP_CCS_IVR_Disconnect5, 
	SP_CCS_IVR_Disconnect6, 
	SP_CCS_IVR_Disconnect7, 
	SP_CCS_IVR_Disconnect8, 
	SP_CCS_IVR_Disconnect9, 
	SP_CCS_IVR_Disconnect10, 
	SP_CCS_IVR_Disconnect11, 
	SP_CCS_IVR_Disconnect12, 
	SP_CCS_IVR_Disconnect13, 
	SP_CCS_IVR_Disconnect14			=	77, 
	SP_CCS_IVR_Disconnect15, 
	SP_CCS_IVR_Disconnect16, 
	SP_CCS_IVR_Disconnect17, 
	SP_CCS_IVR_Disconnect18, 
	SP_CCS_IVR_Disconnect19, 
	SP_CCS_IVR_Disconnect20, 
	SP_CCS_IVR_Disconnect21, 
	SP_CCS_IVR_Disconnect22, 
	SP_CCS_IVR_Disconnect23, 
	SP_CCS_MC_Disconnect1			=	87, 
	SP_CCS_MC_Disconnect2, 
	SP_CCS_MC_Disconnect3, 
	SP_CCS_MC_Disconnect4, 
	SP_CCS_MC_Disconnect5, 
	SP_CCS_MC_Disconnect6, 
	SP_CCS_MC_Disconnect7, 
	SP_CCS_MC_Disconnect8, 
	SP_CCS_MC_Disconnect9, 
	SP_CCS_MC_Disconnect10, 
	SP_CCS_MC_Disconnect11			=	97, 
	SP_CCS_MC_Disconnect12, 
	SP_CCS_MC_Disconnect13, 
	SP_CCS_MC_Disconnect14, 
	SP_CCS_MC_Disconnect15, 
	SP_CCS_MC_Disconnect16, 
	SP_CCS_MC_Disconnect17, 
	SP_CCS_MC_Disconnect18, 
	SP_CCS_MC_Disconnect19, 
	SP_CCS_MC_Disconnect20, 
	SP_CCS_MC_Disconnect21			=	107, 
	SP_CCS_MC_Disconnect22, 
	SP_CCS_MC_Disconnect23, 
	SP_CCS_MC_Disconnect24, 
	SP_CCS_MC_Disconnect25, 
 
	SP_CCS_OP_Disconnect1			=	113, 
	SP_CCS_OP_Disconnect2, 
	SP_CCS_OP_Disconnect3, 
	SP_CCS_OP_Disconnect4, 
	SP_CCS_OP_Disconnect5			=	117, 
	SP_CCS_OP_Disconnect6, 
	SP_CCS_OP_Disconnect7, 
	SP_CCS_OP_Disconnect8, 
	SP_CCS_OP_Disconnect9, 
	SP_CCS_OP_Disconnect10, 
	SP_CCS_OP_Disconnect11, 
	SP_CCS_OP_Disconnect12, 
	SP_CCS_OP_Disconnect13, 
	SP_CCS_OP_Disconnect14, 
	SP_CCS_OP_Disconnect15			=	127, 
	SP_CCS_OP_Disconnect16, 
	SP_CCS_OP_Disconnect17, 
	SP_CCS_OP_Disconnect18, 
	SP_CCS_OP_Disconnect19, 
	SP_CCS_OP_Disconnect20, 
	SP_CCS_OP_Disconnect21, 
	SP_CCS_OP_Disconnect22, 
	SP_CCS_OP_Disconnect23, 
	SP_CCS_OP_Disconnect24, 
	SP_CCS_OP_Disconnect25			=	137, 
	SP_CCS_OP_Disconnect26, 
	SP_CCS_OP_Disconnect27, 
	SP_CCS_OP_Disconnect28, 
	SP_CCS_OP_Disconnect29, 
	SP_CCS_OP_Disconnect30, 
	SP_CCS_OP_Disconnect31, 
	SP_CCS_OP_Disconnect32, 
	SP_CCS_OP_Disconnect33, 
	SP_CCS_OP_Disconnect34, 
	SP_CCS_OP_Disconnect35			=	147, 
	SP_CCS_OP_Disconnect36, 
	SP_CCS_OP_Disconnect37, 
	SP_CCS_OP_Disconnect38, 
	SP_CCS_OP_Disconnect39, 
	SP_CCS_OP_Disconnect40, 
	SP_CCS_OP_Disconnect41, 
	SP_CCS_OP_Disconnect42, 
	SP_CCS_OP_Disconnect43, 
	SP_CCS_OP_Disconnect44, 
	SP_CCS_OP_Disconnect45			=	157, 
	SP_CCS_OP_Disconnect46, 
	SP_CCS_OP_Disconnect47, 
	SP_CCS_OP_Disconnect48, 
	SP_CCS_OP_Disconnect49, 
	SP_CCS_OP_Disconnect50, 
	SP_CCS_OP_Disconnect51,	 
	SP_CCS_OP_Disconnect52, 
	SP_CCS_OP_Disconnect53, 
	SP_CCS_OP_Disconnect54, 
	SP_CCS_OP_Disconnect55			=	167, 
	SP_CCS_OP_Disconnect56, 
	SP_CCS_OP_Disconnect57, 
	SP_CCS_OP_Disconnect58, 
	SP_CCS_OP_Disconnect59, 
	SP_CCS_OP_Disconnect60, 
	SP_CCS_OP_Disconnect61, 
	SP_CCS_OP_Disconnect62, 
	SP_CCS_OP_Disconnect63, 
	SP_CCS_OP_Disconnect64, 
	SP_CCS_OP_Disconnect65			=	177, 
	SP_CCS_OP_Disconnect66, 
	SP_CCS_OP_Disconnect67, 
	SP_CCS_OP_Disconnect68, 
	SP_CCS_OP_Disconnect69, 
	SP_CCS_OP_Disconnect70, 
	SP_CCS_OP_Disconnect71, 
	SP_CCS_OP_Disconnect72, 
	SP_CCS_OP_Disconnect73, 
	SP_CCS_OP_Disconnect74, 
 
	SP_CCS_SIP_Disconnect1			=	188, 
	SP_CCS_SIP_Disconnect2, 
	SP_CCS_SIP_Disconnect3, 
	SP_CCS_SIP_Disconnect4, 
	SP_CCS_SIP_Disconnect5, 
	SP_CCS_SIP_Disconnect6, 
	SP_CCS_SIP_Disconnect7, 
	SP_CCS_SIP_Disconnect8, 
	SP_CCS_SIP_Disconnect9, 
	SP_CCS_SIP_Disconnect10			=	197, 
	SP_CCS_SIP_Disconnect11, 
	SP_CCS_SIP_Disconnect12, 
	SP_CCS_SIP_Disconnect13, 
	SP_CCS_SIP_Disconnect14, 
	SP_CCS_SIP_Disconnect15, 
	SP_CCS_SIP_Disconnect16, 
	SP_CCS_SIP_Disconnect17, 
	SP_CCS_SIP_Disconnect18, 
	SP_CCS_SIP_Disconnect19, 
	SP_CCS_SIP_Disconnect20			=	207, 
	SP_CCS_SIP_Disconnect21, 
	SP_CCS_SIP_Disconnect22, 
	SP_CCS_SIP_Disconnect23, 
	SP_CCS_SIP_Disconnect24, 
	SP_CCS_SIP_Disconnect25, 
	SP_CCS_SIP_Disconnect26, 
	SP_CCS_SIP_Disconnect27, 
	SP_CCS_SIP_Disconnect28, 
	SP_CCS_SIP_Disconnect29, 
 
	SP_CCS_Callout_Disconnect1		=	217, 
	SP_CCS_Callout_Disconnect2, 
	SP_CCS_Sipex_Disconnect1		=	219, 
	SP_CCS_Sipex_Disconnect2, 
	SP_CCS_Sipex_Disconnect3, 
	SP_CCS_Sipex_Disconnect4, 
	SP_CCS_Sipex_Disconnect5, 
	SP_CCS_Sipex_Disconnect6, 
	SP_CCS_Sipex_Disconnect7, 
 
	SP_CCS_SIP_EnterIdle1			= 227, 
	SP_CCS_SIP_EnterIdle2, 
	SP_CCS_OP_Disconnect75, 
	ACD_Restart_Disconnect, 
	ACD_HANDINHANDBREAK_Disconnect 
} ; 
 
//*************************************************************************8 
//		 
 
enum	ICD_CCS_ERROR_CODE 
{ 
 	CCS_OK					 = 0,		//正确返回 
	CCS_GENERAL_ERROR		 ,			//一般性错误 
	 
	CCS_INIFILE_NOT_EXIST	 ,			//CCS.INI文件不存在 
	CCS_INIFILE_HAVE_PROBLEM ,			//加载配置文件出现错误 
 
	CCS_ADD_QUEUE_ERROR		 , 
	CCS_CANT_FIND_QUEUE_OBJECT, 
	CCS_ADD_IVR_ERROR		 , 
	CCS_CANT_FIND_IVR_OBJECT , 
	CCS_ADD_AGENT_ERROR		 , 
	CCS_CANT_FIND_AGENT_OBJECT, 
	CCS_DELETE_AGENT_ERROR	 , 
	 
	CCS_NO_THIS_DNISDN		 ,			//路由失败 
	CCS_CANT_FIND_QUEUE		 , 
	CCS_CALLOUT_FAIL		 ,			//强制呼出错误 
	CCS_NO_THIS_ANI			 ,			//没有该主叫 
 
	CCS_CBK_ERROR			 , 
	CCS_DEVICEID_NOT_EXIST	 ,			//DEVICE_ID不存在 
	CCS_CALLID_NOT_EXIST	 ,			//CALLID不存在 
	CCS_NO_PRECALL			 ,			//没有呼损待取 
	CCS_NO_THIS_NODE		 ,			//没有该技能树节点 
	CCS_ROUTINGTOJOIN		 , 
	CCS_DISCONNECT			 ,			//连接以断 
	CCS_NOPROXY				 ,			//没有代理 
	CCS_CALLOUT_ROUTED		 , 
	 
	CCC_APCNOTINIT			= 99,	//APC卡没有初始化 
	CCC_INTERNAL_ERROR		 = 100,	//内部错误 
	CCC_INVALID_PARAMETER    ,		//参数错误 
	CCC_LINK_UNAVAIL         ,		//通讯层暂时忙 
	CCC_RESOURCES_UNAVAIL    ,		//相应资源不可用或故障 
	CCC_TIMED_OUT            ,		//API调用超时 
	CCS_USERLIST_NULL		 ,		//没有预拨号呼叫 
 
	CCC_TOO_MUCH_THREAD      ,		//太多线程(大于50)同时调用API 
	CCC_INSUFFICIENT_SPACE   ,		//空间不够 
	CCC_FAIL				 ,		//一般性错误 
	CCC_LINK_DISCONNECT		 ,		//连接已断 
	CCC_NOT_LOGIN			 ,		//没有向CCS登录 110 
	CCC_AUTHORITY_FAIL		 ,		//权限错误 
	CCC_USERPROFILEERROR	 ,		//用户信息文件错误 
	CCC_USERPROFILENOTFOUND	 ,		//用户信息文件没有找到 
	CCC_USERNUMBERFULL		 ,		//系统用户数已满 
	CCC_USERALREADYEXIST	 ,		//用户已经存在 
	CCC_USERNOTFOUND		 ,		//用户没有找到 
	CCC_FILEOPENERROR		 ,		//文件打开错误 
 
	CCS_CK_STATE_FAULT      , //控制块状态错误 
	CCS_CK_HANDLE_NOT_MATCH , //控制块HANDLE不匹配 
 
    CCS_AGENT_FAULT         , //无效话务员 120 
	CCS_CALL_FAULT          , //无效的呼叫 
	CCS_SKILL_FAULT         , //无效的队列 
	CCS_AGENT_STATE_FAULT   , //话务员状态错误 
	CCS_CONNECT_FAIL        , //资源连接错误 
	CCS_GET_HOLD_FAIL       , //取保持错误 
	CCS_HOLD_FAIL           , //保持错误 
	CCS_TIMEOUT             , //接续超时 
	CCS_OCCUPY_FAIL         , //占用话务员错误 
	CCS_POINT_NULL          , //调用空指针 
	CCS_SPY_WAIT_TIMEROUT	, //质检等待SCP或OC超时 130 
 
	CCC_ALREADY_LOGIN		, //该工号的SPY已经登录了	 
	CCC_PASSWORD_ERROR		, //用户的口令错误 
	CCC_RECEIVING_DATA		, //CCS正在接收数据,不能发送CCS.INI文件 
	CCC_INI_IS_LOCKED		, //初始化文件被其它的进程加锁了 
	CCC_PACKET_ERROR		, //数据包失序 
	CCC_MEMORY_EXCEPTION	, //操作中内存错误 
	CCC_AGENT_RECORD_ENDED	, //座席录音终止 137 
	CCC_AGENT_PLAY_ENDED	, //座席放音终止 138 
	CCC_USER_DISCONNECT     , //用户挂机 
	CCC_NO_CONFERENCE       , //没有会场 
	CCC_ICD_ACCESS_CODE     , //呼出ICD系统接入码 
 
	CCC_PROXY_EXEC_SQL_FAIL	, //执行存储过程失败 
     
    CCC_NO_SUCH_DNIS,         //呼出的是空号 
    CCC_CALLED_BUSY,          //被叫忙 
 
	MAX_ERROR_NUM	//!!!!!!!! 需要增加时, 在此项目之前增加 
}; 
 
 
//*************************************************************************************** 
//事件CCC_MASTER_CHANGED_EVENT 
// ______________________________ 
// | MESSAGE_HEAD				| 
// |----------------------------| 
// | DBCCC_EVENT_HEAD			| 
// |----------------------------| 
// | ULONG						| 
// |____________________________| 
 
//事件CCC_NOTIFY_CONFIG_CHANGED_EVENT 
// ______________________________ 
// | MESSAGE_HEAD				| 
// |----------------------------| 
// | DBCCC_EVENT_HEAD			| 
// |----------------------------| 
// | USHORT						| 
// |____________________________| 
 
//事件CCC_CALL_ENTER_EVENT 
//事件CCC_REQUEST_ROUTE_EVENT 
// ______________________________ 
// | MESSAGE_HEAD				| 
// |----------------------------| 
// | DBCCC_EVENT_HEAD			| 
// |----------------------------| 
// | E_CALL_INFO				| 
// |____________________________| 
 
//事件CCC_CONNECT_EVENT 
//事件CCC_ALERTING_EVENT 
//事件CCC_ADD_CALL_CONFERENCE_EVENT 
//事件CCC_DEL_CALL_CONFERENCE_EVENT 
//事件CCC_HOLD_EVENT 
//事件CCC_ROUTED_EVENT 
// ______________________________ 
// | MESSAGE_HEAD				| 
// |----------------------------| 
// | DBCCC_EVENT_HEAD			| 
// |----------------------------| 
// | E_CALL_INFO				| 
// |----------------------------| 
// | CALL_PARTY_INFO[]			| 
// |____________________________| 
 
//事件CCC_ALL_BUSY_EVENT 
//事件CCC_WAIT_OUTBOUND_EVENT 
//事件CCC_CONFIG_RELOAD_EVENT 
// ______________________________ 
// | MESSAGE_HEAD				| 
// |----------------------------| 
// | DBCCC_EVENT_HEAD			| 
// |____________________________| 
 
//事件CCC_ABANDONED_EVENT 
//事件CCC_RELEASE_EVENT 
//事件CCC_CALLID_DISCONNECTED_EVENT 
//事件CCC_DISCONNECTED_EVENT 
//事件CCC_REJECTED_EVENT 
//事件CCC_REQUEST_ROUTE_EVENT 
//事件CCC_ROUTE_FAIL_EVENT 
// ______________________________ 
// | MESSAGE_HEAD				| 
// |----------------------------| 
// | DBCCC_EVENT_HEAD			| 
// |----------------------------| 
// | E_CALL_INFO				| 
// |____________________________| 
 
//事件CCC_ADD_DEVICE_CONFERENCE_EVENT 
//事件CCC_DEL_DEVICE_CONFERENCE_EVENT 
//事件CCC_MUTEON_EVENT 
//事件CCC_MUTEOFF_EVENT 
//事件CCC_BUSY_EVENT 
//事件CCC_IDLE_EVENT 
// ______________________________ 
// | MESSAGE_HEAD				| 
// |----------------------------| 
// | DBCCC_EVENT_HEAD			| 
// |----------------------------| 
// | E_DEVICE_INFO				| 
// |----------------------------| 
// | CALL_PARTY_INFO[]			| 
// |____________________________| 
//########################################################################## 
//增加新的事件必须保持取值的连续性1,2,3,...,100,101,102 
//########################################################################## 
#define EVENT_BASE		0 
enum CCC_EVENT 
{ 
	//************************************************************************ 
	//				系统事件,系统队列的顺序不得改变 
	//************************************************************************ 
	CCC_SYSTEM_EVENT = EVENT_BASE, 
	CCC_CONFIG_RELOAD_EVENT,					//CCS系统配置重新加载事件 
	CCC_MASTER_CHANGED_EVENT,					//主备倒换事件 
	CCC_NOTIFY_CONFIG_CHANGED_EVENT,			//配置改变事件 
	CCC_ALARM_EVENT,							//告警事件 
 
	//************************************************************************ 
	//				协议事件 
	//************************************************************************ 
	CCC_IVR_PROTOCOL_EVENT,						//IVR协议事件( IVR->UIM ) 
	CCC_QC_PROTOCOL_EVENT,						//质检台协议事件( QC->UIM ) 
 
	//***************************** 
	//与接续相关的事件 
	//***************************** 
	CCC_SSPBEGIN_EVENT, 
	CCC_STATIONLOGIN_EVENT, 
	CCC_STATIONLOGINACK_EVENT, 
	CCC_SETUP_EVENT				= 10,	 
	CCC_SETUPACK_EVENT, 
	CCC_ALERTING_EVENT, 
	CCC_SSPNOTIFY_EVENT        , 
	CCC_ANSWER_EVENT	, 
	CCC_ANSWERACK_EVENT	, 
	CCC_CALLEDOFFHOOK_EVENT	   	, 
	CCC_DISCONNECT_EVENT	, 
	CCC_DISCONNECT_ACK_EVENT, 
	CCC_REDIRECT_EVENT      , 
	CCC_COMBINE_EVENT       = 20, 
 
	//******************************* 
	//资源控制事件消息 
	//****************************** 
	CCC_RESOURCE_CONNECT_EVENT, 
	CCC_RESOURCE_CONNECT_RESULT_EVENT	  , 
	CCC_RESOURCE_DISCONNECT_EVENT, 
	CCC_COLLECTDIGIT_EVENT	, 
	CCC_USERINFORMATION_EVENT, 
	CCC_PLAY_DRV_EVENT, 
	CCC_RECORD_EVENT   , 
	CCC_PLAY_RECORD_RESULT_EVENT   , 
	CCC_STOP_PLAY_RECORD_EVENT	  , 
	CCC_STOP_PLAY_RECORD_ACK_EVENT = 30, 
	CCC_FIND_VOICE_FILE_EVENT     , 
	CCC_FIND_RESULT_EVENT        , 
	CCC_RENAME_VOICE_FILE_EVENT  , 
	CCC_RENAME_FILE_EVENT        , 
	CCC_DEL_VOICE_FILE_EVENT     , 
	CCC_DEL_RESULT_EVENT          , 
	CCC_GET_FILE_INFO_EVENT      , 
	CCC_GET_FILE_INFORMATION_RESULT_EVENT  , 
	CCC_FORE_FAST_PLAY_EVENT    , 
	CCC_BACK_FAST_PLAY_EVENT   = 40, 
	CCC_PAUSE_EVENT, 
	CCC_CONTINUE_EVENT    ,  
	CCC_RELOCATION_EVENT  ,  
	CCC_VP_TS_REQUEST_EVENT, 
	CCC_VP_RELEASE_EVENT ,  
	CCC_VP_TS_RESULT_EVENT, 
	CCC_VP_PLAY_EVENT, 
	CCC_VP_RECORD_EVENT, 
	CCC_PLAY_RECORD_ACK_EVENT, 
	CCC_SEND_FAX_EVENT	= 50, 
	CCC_RECEIVE_FAX_EVENT,   
	CCC_BEGIN_SEND_RECEIVER_FAX_ACK_EVENT, 
	CCC_SEND_RECEIVE_FAX_RESULT_EVENT, 
	CCC_STOP_SEND_RECEIVE_FAX_EVENT,   
	CCC_STOP_SEND_RECEIVE_FAX_ACK_EVENT, 
	CCC_SEND_EVENT_TO_VP_EVENT ,    
	CCC_VP_SEND_EVENT_TO_QC_EVENT,   
 
	//************************************************************************ 
	//呼叫轨迹事件 
	//************************************************************************ 
	CCC_IN_CALL_EVENT,				 //呼叫进入CCS 
    CCC_OUT_CALL_EVENT  ,			 //呼出 
	CCC_END_CALL_EVENT = 60,		 //呼叫终止 
	CCC_CONNECT_EVENT	,			 //通话开始 
	CCC_ABANDONED_EVENT	,			 //排队或给AGENT alerting时断连  
	CCC_TALERTING_EVENT	,			 //呼出时被叫振铃 
	CCC_CALLID_DISCONNECTED_EVENT,   //用户先挂机     
	CCC_DISCONNECTED_EVENT,			 //话务员先挂机 
	CCC_REJECTED_EVENT	,			 //呼叫转移到某话务员上时工号非法或忙,被驳回 
    CCC_ROUTED_EVENT	,			 //呼叫路由到某设备上 
	CCC_EXCEPTION_RELEASE_EVENT	,	 // 意外情况拆呼叫(如超时等)   
	CCC_IVR_DISCONNECT_EVENT,		 //IVR->UIM 
	CCC_ROUTE_SUCCESS_EVENT	= 70 ,	 //路由成功事件 
	CCC_REQUEST_ROUTE_EVENT,		 //请求路由事件 
	CCC_ROUTE_FAIL_EVENT,			 //路由失败事件 
	CCC_WAIT_OUTBOUND_EVENT,		 //等待取呼出事件 
 
	//*********************************************** 
	//会议电话事件 
	//************************************************ 
	CCC_ADD_DEVICE_CONFERENCE_EVENT,			//会场中加入一设备事件 
	CCC_DEL_DEVICE_CONFERENCE_EVENT,			//会场中减少一设备事件 
	CCC_ADD_CALL_CONFERENCE_EVENT,				//会场中加入一呼叫事件 
	CCC_DEL_CALL_CONFERENCE_EVENT,				//会场中减少一呼叫事件 
 
	//******************************** 
	//与呼叫相关的人工接续事件 
	//******************************** 
	CCC_AGENT_RECORD_EVENT , 
	CCC_AGENT_PLAY_EVENT, 
	CCC_MUTEON_EVENT  = 80, 
	CCC_MUTEOFF_EVENT  , 
	CCC_OP_ANSWER_EVENT    , 
	CCC_RELEASE_EVENT    ,                 
	CCC_HOLD_EVENT, 
	CCC_REPORT_EVENT, 
	CCC_TRANSFER_EVENT , 
	CCC_TRANSIT_OUT_EVENT , 
	CCC_OP_REDIRECT_EVENT , 
 
	//*************************** 
	//其它事件 
	//*************************** 
	CCC_ALL_BUSY_EVENT,					//表示全忙 
	CCC_MONITOR_ALARM_EVENT = 90,		//系统告警事件 
	CCC_MSG_SSP_SCP_RESUM_EVENT,		//呼叫控制从挂起态恢复 
	CCC_MSG_SSP_SCP_CALLID_INFO_EVENT,  //ivr->SCP 
	CCC_REQUEST_RESPONSE_EVENT,			//保留未用 
	CCC_ANSWERREQUEST_EVENT,			//请求应答 
 
	CCS_NULL_EVENT, 
 
	//***************************************************************************** 
	//CCC_REQUEST_RESPONSE_EVENT响应事件的子事件 
	//***************************************************************************** 
	CCC_DO_NOT_DISTURB_RESPONSE_EVENT,   //示忙返回 
	CCC_IDLE_RESPONSE_EVENT ,            //示闲返回  
	CCC_MUTE_OFF_RESPONSE_EVENT,         //静音返回 
	CCC_MUTE_ON_RESPONSE_EVENT,          //关掉静音返回  
	CCC_ANSWER_RESPONSE_EVENT = 100,     //应答返回,  成功表示开始通话,失败不返回  
	CCC_REDIRECT_RESPONSE_EVENT,         //保留未用 
	CCC_CONF_JOIN_RESPONSE_EVENT,        //三方电话返回事件 
	CCC_REPORT_RESPONSE_EVENT,           //报音返回事件 
	CCC_INSERT_RESPONSE_EVENT,           //插入返回事件 
	CCC_SUPERVISE_RESPONSE_EVENT,        //监听返回事件 
	CCC_TRANSFER_OUT_RESPONSE_EVENT,     //转出和内部转移都返回该事件 
  	CCC_MAKE_CALL_RESPONSE_EVENT ,       //呼叫返回事件 呼出和内部呼叫返回该事件 
	CCC_CALL_OUT_RESPONSE_EVENT,         //保留未用 
	CCC_RETRIEVE_RESPONSE_EVENT,         //取保持返回 事件 
	CCC_HOLD_RESPONSE_EVENT = 110,       //保持返回事件  
	CCC_RELEASE_RESPONSE_EVENT,          //释放返回事件 对应CCC_RELEASE_REQUEST_EVENT 
	CCC_CONNECT_HOLD_RESPONSE_EVENT,     //连接保持来话返回事件 
	CCC_INTERCEPT_RESPONSE_EVENT,        //拦截返回事件  
	CCC_INTERNAL_TRANSFER_RESPONSE_EVENT,//此事件保留未用     
	CCC_LOGIN_RESPONSE_EVENT,			 //签入返回事件 
	CCC_LOGOUT_RESPONSE_EVENT,           //签出返回事件 
    CCC_AGENT_FORCEOUT_EVENT,            //强制签出返回事件 
	CCC_AGENT_FORCEIDLE_EVENT,			 //强制示闲返回事件 
	CCC_AGENT_FORCEBUSY_EVENT,           //强制示忙返回事件 
	 
	CCC_CCS_DISCONNECTED = 120, 
	CCC_NO_OUTBOUND_EVENT, 
	CCC_NOTIFY_BULLETIN_EVENT, 
	CCC_MESSAGE_EVENT, 
     
	CCC_TRANSIVR_RESPONSE_EVENT,	//人工转自动返回事件 
	CCC_LONGNOANSWER_EVENT,			//久不应答事件,当坐席分配一来话超时不应答,收 
	                                //到此事件,同时坐席被示忙。 
	CCC_CALLER_DISCONNECTED_EVENT,  //用户挂机      
	CCC_RELEASE_REQUEST_EVENT,      //请求释放事件 
	CCC_DESK_ALLBUSY_EVENT,			//表示全忙,给每个话务员发 1B+1D事件 
	CCC_ANSWER_REQUEST_EVENT,		//请求应答 
 
	CCC_OUTBOUND_RESULT_EVENT, 
	CCC_CALLER_TELNUM_EVENT, 
	CCC_CALLED_TELNUM_EVENT, 
	CCC_BOOK_OUTBOUND_TIMEOUT_EVENT,	//呼出超时事件 
	CCC_INTERNAL_HELP_RESPONSE_EVENT,   //内部求助返回事件 
	CCC_PRE_ROUTE_EVENT,                //路由前事件 
	CCC_PRE_DISCONNECT_EVENT,           //释放前事件 
	CCC_USER_DISCONNECT_EVENT,          //呼叫释放事件 
	CCC_AGENT_REST_TIMEOUT_EVENT,       //座席休息时间到事件 
	CCC_AGENT_REST_START_EVENT,			//座席休息开始事件 
	CCC_AGENT_SET_BUSY_START_EVENT,		//座席示忙开始事件 
	//########################################################################### 
	//对事件的定义都在上面 
	CCC_END_OF_EVENT							//Just for count number of event 
	//对事件的定义都在上面 
	//########################################################################### 
}; 
 
#define MAX_EVENT_NUM  ( CCC_END_OF_EVENT - EVENT_BASE ) 
 
typedef	struct tagCALLID 
{ 
    ULONG        ulTime;		//	呼叫进入时间 
	USHORT       usDsn;			//	呼叫进入的任务号 
	UCHAR        ucHandle;		//	呼叫进入一个任务的次数 
	UCHAR        ucServer;		//	唯一标识一个服务器的标识 
	friend int operator==( tagCALLID& id1, tagCALLID& id2 ); 
}CALLID, *LPCALLID;				//呼叫标识 
 
const CALLID CALLID_NO_USE = { 0xffffffff, 0xffff, 0xff, 0xff }; 
 
typedef CALLID  DBCCC_CALLID; 
 
typedef	struct tagDEVICE_ID 
{ 
	UCHAR	 ucDeviceType;		//	设备类型	enum ICD_DEVICETYPE 
	USHORT   usDeviceNo;		//	设备号码 
	friend int operator==( tagDEVICE_ID& Id1, tagDEVICE_ID& Id2 ); 
}DEVICE_ID, *LPDEVICE_ID;			//设备标识 
const	DEVICE_ID	DEVICE_ID_NO_USE		= { 0xff, 0xffff }; 
 
typedef struct 
{ 
	USHORT		usSend;			 
	USHORT		usReceive;		 
	USHORT		ucMsgType;	//	消息类型	enum ICDCCS_MSGTYPE 
	UCHAR       ucMid; 
}MESSAGE_HEAD; 
 
 
//********************************************************* 
//   API的事件消息结构如下: 
//	______________________ 
//  |    MESSAGE_HEAD    | 
//  |--------------------| 
//  | DBCCC_EVENT_HEAD   | 
//  |--------------------| 
//  |    (EVENT_DATA)    | 
//  |____________________| 
//**********************************************************     
 
typedef struct tagEVENT_TIME 
{ 
    USHORT wYear;		 
    UCHAR  wMonth;  
    UCHAR  wDayOfWeek; //Specifies the current day of the week; Sunday = 0, Monday = 1, and so on.  
    UCHAR  wDay;  
    UCHAR  wHour;  
    UCHAR  wMinute;  
    UCHAR  wSecond;  
    USHORT wMilliseconds; //Specifies the current millisecond 
}EVENT_TIME, *LPEVENT_TIME;		//事件时间结构,指示发生此事件的时间 
 
typedef struct tagDBCCC_EVENT_HEAD 
{ 
    EVENT_TIME            ulTime;		//事件产生时间 
    USHORT                usEventType;	//事件类型。enum CCC_EVENT 
    USHORT				  usSize;		//与事件相关的数据长度 
}DBCCC_EVENT_HEAD, *LPDBCCC_EVENT_HEAD;	//事件头 
 
typedef struct tagE_CALL_INFO 
{ 
	CALLID		CallID; 
	UCHAR		ucDirect;					//呼入/呼出标志, enum CallFlag 
	UCHAR		ucModuleNo;					// 
	USHORT		usTrunkNo;					//呼叫中继号 
	char		Caller[ MAXLEN_EXTEN + 1 ]; //主叫号码 
	char		Called[ MAXLEN_EXTEN + 1 ]; //被叫号码 
	DEVICE_ID	DeviceID;					//与呼叫相关的设备的标识 
	USHORT		CallPartyNum;				//该结构后面跟的CALL_PARTY_INFO结构个数 
}E_CALL_INFO; 
 
typedef struct tagE_DEVICE_INFO 
{ 
	DEVICE_ID	SrcDeviceID;			//产生事件的设备ID 
	DEVICE_ID	DestDeviceID;			//与此相关的设备ID 
	USHORT		CallPartyNum;			//该结构后面跟的CALL_PARTY_INFO结构个数。 
}E_DEVICE_INFO; 
 
typedef struct 
{ 
	MESSAGE_HEAD		MsgHead; 
	DBCCC_EVENT_HEAD	Event; 
	E_CALL_INFO			CallInfo; 
}EVENT_CALL_INFO_MSG; 
 
typedef struct 
{ 
	MESSAGE_HEAD		MsgHead; 
	DBCCC_EVENT_HEAD	Event; 
	E_DEVICE_INFO		DeviceInfo; 
}EVENT_DEVICE_INFO_MSG; 
 
typedef struct 
{ 
	MESSAGE_HEAD		MsgHead; 
	DBCCC_EVENT_HEAD	Event; 
	ULONG				ulTaskID; 
	USHORT				usResult;		//结果 
	UCHAR				ucCause;		//原因 
}EVENT_SPY_RESULT_MSG; 
 
 
typedef	struct	tagSKILL_ID 
{ 
	USHORT	usSkillID;			//技能的ID编号 
	UCHAR	ucSkillLevel;		//对应的技能的水平需求 
}SKILL_ID, *LPSKILL_ID;			//技能ID 
 
typedef struct	tagSKILL_STRUCT 
{ 
	USHORT	usID;								//技能ID 
	CHAR	cName[MAX_SKILL_NAME_LENGTH + 1];	//具体技能表示 
}SKILL_STRUCT, *LPSKILL_STRUCT;					//每一个技能的描述结构 
//说明: 存放每一个技能的名称及其内部编号 
 
typedef	struct	tagNODE_STRUCT 
{ 
	USHORT	usParentNo;							//父节点编号 
	USHORT	usChildNo;							//本节点编号 
	USHORT	usSkillID;							//技能标识 
	USHORT	usServiceNo;						//业务类型号 
}NODE_STRUCT, *LPNODE_STRUCT; 
//说明: 技能树结构每个节点结构, 用于存储技能树 
 
typedef	struct	tagCLASS_STRUCT 
{ 
	USHORT	usID;								//级别标识 
	CHAR	cName[MAX_CLASS_NAME_LENGTH + 1];	//级别名称 
}CLASS_STRUCT, LPCLASS_STRUCT;					//用户级别 
//系统定义了的用户级别名称 
 
typedef struct	tagAGENT_STRUCT 
{ 
	USHORT	usNo;								//代理人工号 
	CHAR	cName[AGENT_NAME_LENGTH + 1];		//代理人姓名 
	ULONG   ulRights;							//权限 
	USHORT	usSkillGroupID;						//技能组ID 
	USHORT	usWorkGroupID;						//所属班组号 
}AGENT_STRUCT, *LPAGENT_STRUCT;					//描述每一个代理人的结构 
//说明:存放每个座席的基本情况的一个结构 
 
typedef	struct	tagWORKGROUP_INFO 
{ 
	USHORT	usID;									//班组号 
	USHORT	usMonitorNo;							//班长工号 
	CHAR	cMonitorName[AGENT_NAME_LENGTH + 1];	//班长姓名 
	CHAR	cGroupName[MAX_WORKGROUP_NAME_LENGTH + 1];	//班组名称 
}WORKGROUP_INFO, *LPWORKGROUP_INFO; 
 
 
//***************************************************************** 
//用户信息结构 
//***************************************************************** 
typedef	struct tagCUSTOMER_INFO_STRUCT 
{ 
	CHAR	cKeyID[MAXLEN_EXTEN + 1];				//用户唯一标识 
	CHAR	cClass[MAX_CLASS_NAME_LENGTH + 1];		//用户级别(重要客户/...) 
	CHAR	cName[MAX_PEOPLE_NAME_LENGTH + 1];		//用户姓名 
	CHAR	cLanguage[MAX_LANGUAGE_LENGTH + 1];		//语言 
	CHAR	cCompany[MAX_COMPANY_LENGTH + 1];		//公司名称 
	CHAR	cAddress[MAX_ADDRESS_LENGTH + 1];		//地址 
	CHAR	cArea[MAX_AREA_LENGTH + 1];				//专业 
	CHAR	cDescription[MAX_DESCRIPTION_LENGTH + 1];//用户简要介绍 
	CHAR	cSerialNo[MAX_SERIALNO_LENGTH + 1];		//处理流水号 
	CHAR	cSkills[MAX_DESCRIPTION_LENGTH + 1];	//呼叫技能需求描述 
	USHORT	usWorkNo;								//处理座席工号 
}CUSTOMER_INFO_STRUCT, *LPCUSTOMER_INFO_STRUCT;		//一个特殊用户的信息结构 
 
 
//此结构暂时不支持 
typedef	struct	tagCUSTOMER_SKILL_STRUCT 
{ 
	CHAR	cANI[MAX_ANI_LENGTH + 1];				//主叫号码 
	CHAR	cSkillName1[MAX_SKILL_NAME_LENGTH +1];	//具体技能需求1 
	CHAR	cSkillName2[MAX_SKILL_NAME_LENGTH +1];	//具体技能需求2 
	CHAR	cSkillName3[MAX_SKILL_NAME_LENGTH + 1];	//具体技能需求3 
	CHAR	cSkillName4[MAX_SKILL_NAME_LENGTH + 1];	//具体技能需求4 
	CHAR	cSkillName5[MAX_SKILL_NAME_LENGTH + 1];	//具体技能需求5 
	USHORT	usAgentNo1;							//具体座席工号1 
	USHORT	usAgentNo2;							//具体座席工号2 
	USHORT	usAgentNo3;							//具体座席工号3 
	USHORT	usAgentNo4;							//具体座席工号4 
}CUSTOMER_SKILL_STRUCT, *LPCUSTOMER_SKILL_STRUCT;	//一个特殊用户的技能需求结构 
 
typedef struct tagDBCCC_SERVICE_STRUCT 
{ 
	USHORT	usNo;											//业务类型号 
	CHAR	strDescription[MAX_SERVICE_DESCRIPTION_LEN + 1];//业务描述 
}DBCCC_SERVICE_STRUCT, *LPDBCCC_SERVICE_STRUCT;	//业务类型结构 
 
typedef	struct	tagDBCCC_HISTORY_ITEM 
{ 
	USHORT	usID;							//业务标识 
	CHAR	pcData[MAX_HISTORY_LENGTH + 1];	//访问数据 
}DBCCC_HISTORY_ITEM, *LPDBCCC_HISTORY_ITEM;	//一项历史记录结构 
 
typedef struct tagDBCCC_CONFERENCE_INFO 
{ 
	USHORT     usConferenceNum;		//会场号 
	UCHAR      ucMaxJionNum;		//允许参加会议的最大加入数目 
	UCHAR      ucMaxAuditNum;		//允许的最大旁听人数目 
	UCHAR      ucVmsNum;			//放音数目 
	UCHAR      ucJionCallNum;		//加入的呼叫数目 
	UCHAR      ucAuditCallNum;		//旁听呼叫数目 
	UCHAR      ucJionAgentNum;		//参加的代理数目 
	UCHAR      ucAuditAgentNum;		//旁听的代理数目 
} DBCCC_CONFERENCE_INFO, *LPDBCCC_CONFERENCE_INFO; 
/************************************************************** 
此结构后依次为加入的CALLID组,旁听的CALLID组,加入的Agent设备号组, 
旁听的Agent设备号组 
***************************************************************/ 
 
 
typedef struct tagDBCCC_CALL_STATIC_INFO 
{ 
	ULONG   ulCallNumsInHour[24];                  //统计在每小时中的呼叫数目      
	ULONG   ulCallAbandonNumsInHour[24];           //统计在每小时中的呼损数目  
} DBCCC_CALL_STATIC_INFO, *LPDBCCC_CALL_STATIC_INFO; //呼叫在一天24小时内的话务统计数据 
 
 
typedef struct tagDBCCC_BUSY_CONFERENCE_INFO 
{ 
	USHORT usConferenceNums;						//占用会场数 
	USHORT pusConferenceNo[1];						//会场号 
} DBCCC_BUSY_CONFERENCE_INFO, *LPDBCCC_BUSY_CONFERENCE_INFO;//占用会场情况 
 
//******************************************************** 
typedef struct tagPRE_OUTBOUND_STRUCT 
{ 
	CHAR		cANI[MAX_ANI_LENGTH + 1];	//主叫号码 
	ULONG		ulTime;						//用户访问时间 
	DEVICE_ID	Device;						//待呼出呼叫产生呼损的目的设备 
	CHAR		cUserInfo[MAX_DESCRIPTION_LENGTH + 1];//用户简要信息 
}PRE_OUTBOUND_STRUCT, *LPPRE_OUTBOUND_STRUCT;	//一个待呼出呼叫的信息结构 
 
/******************************* OUTBOUND CALL	******************************/		 
typedef struct 
{ 
    UCHAR  ucYear;		//年,Current Year minus 1900, 2155 roll over 
    UCHAR  ucMonth;		//月 1-12 
    UCHAR  ucDay;		//日 1-31 
    UCHAR  ucHour;		//时 0-23 
    UCHAR  ucMinute;	//分 0-59 
    UCHAR  ucSecond;	//秒 0-59 
}CCS_TIMESTRUCT; 
 
 
typedef struct tagPOWER_OUTBOUND_STRUCT 
{ 
	CHAR			cCli[MAXLEN_EXTEN + 1]; //呼出主叫 
	CHAR			cANI[MAX_ANI_LENGTH + 1];	//客户主叫号码 
	CHAR			cCustomerName[MAX_PEOPLE_NAME_LENGTH + 1];	//用户姓名,可无 
	CHAR			cDescription[MAX_DESCRIPTION_LENGTH + 1];	//简要描述,可无 
	UCHAR			ucDeviceType;			//待呼出呼叫的目的设备类型 enum	ICD_DEVICETYPE 
	CHAR			cSkills[MAX_SKILL_STRING_LENGTH + 1];	 
	//如果ucDeviceType为QueueType, 则是技能组合; 技能用,隔开, 如"180,Chinese" 
	//如果ucDeviceType为IvrType, 则为接入码; 如"1681234" 
	//如果ucDeviceType为AgentType, 则为座席工号;工号用,隔开, 如"2,4:2"。其中, 前面的2,4表示预约的 
	// 坐席工号, :后面的2为业务类型。 
	//重要说明:使用AgentType类型时,呼叫被分配给座席后,如果座席是多技能的,则他不知道该呼叫 
	//是希望得到什么服务, 因此需要指定业务类型。 
	CCS_TIMESTRUCT	BookTime;				//预约时间 
	CCS_TIMESTRUCT	ReCallTime;				//期望回呼时间 
	CCS_TIMESTRUCT	EndTime;				//期望回呼结束时间 
}POWER_OUTBOUND_STRUCT, *LPPOWER_OUTBOUND_STRUCT;	//一个预约呼出呼叫的信息结构 
 
 
typedef struct	tagDBCCC_SYSTEM_INFO 
{ 
	CHAR		VersionInfo[ MAX_VERSION_LEN + 1];		//当前CCS版本信息字符串 
	USHORT		usCallNum;							//当前系统中呼叫数目 
	USHORT		usCallInQueueNum;					//当前系统中排队呼叫数目 
	USHORT		usTalkingNum;						//当前系统中通话人数 
	USHORT		usTotalLoginAgent;					//当前系统中上班座席数目 
	USHORT		usBusyAgent;						//当前系统中示忙座席数目 
	USHORT		usIdleAgent;						//当前系统中空闲座席数目 
	USHORT		usSkillNum;							//当前系统中配置的技能数目 
	USHORT		usConnectNum;						//当前系统中连接数目 
}DBCCC_SYSTEM_INFO, *LPDBCCC_SYSTEM_INFO;			//CCS系统信息结构 
 
typedef struct tagAGENTSTATUS 
{ 
	UCHAR   ucStatus : 5;	// enum AGENT_OP_STATUS 5 bits 
	UCHAR   ucRecord : 1;	// 1:被录音 , 0:	1 bit 
	UCHAR   ucSuper  : 1;	// 1:被监听 , 0:  1 bit 
	UCHAR   ucMonitor: 1;	// 1:被监视 , 0:	1 bit 
} AGENTSTATUS, *LPAGENTSTATUS; 
 
typedef  struct tagDBCCC_AGENT_ABSTRACT 
{ 
	USHORT		usAgentDSN;				//座席电路号 
	UCHAR		ucAgentType;			//座席类型 enum AGENT_TYPE 
	USHORT		usAgentWorkNo;			//座席工号 
	USHORT      usWorkGroupID;			//座席所在工作组标识 
	AGENTSTATUS	ucAgentStatus;			//对应AGENT_OP_STATUS结构 
}DBCCC_AGENT_ABSTRACT, *LPDBCCC_AGENT_ABSTRACT;	//关于AGENT的摘要信息 
 
//**************************************************************************** 
//ICD网络中一个节点的信息 
//**************************************************************************** 
typedef  struct tagDBCCC_NET_INFO 
{ 
	USHORT		usConnectID;			//节点的网络连接号 
	UCHAR		ucType;					//节点的类型 0 为主CCS,1为副CCS,2为代理,3为IVR,4为Fep 
	ULONG		MsgIPAddr;				//该节点的接收消息的IP地址,对于CCC该值往往为代理的IP地址,其它均与ActualIPAddr相等. 
	ULONG		MsgProcID;				//该节点的接收消息的进程号,对于CCC该值往为代理的进程号,其它均与ActualProcID相等. 
	ULONG		ActualIPAddr;			//该节点真正的IP地址 
	ULONG		ActualProcID;			//该节点真正的进程ID 
}DBCCC_NET_INFO, *LPDBCCC_NET_INFO; 
 
//******************************************************************** 
//用于CccQuerySkillsBaseGroupID的返回消息 
//******************************************************************** 
typedef	struct tagDBCCC_SKILL_GROUP_STRUCT 
{ 
	USHORT		usID;						//内部标识 
	USHORT		usSkillNum;					//总的技能数目 
	USHORT		usDescriptionSize;			//随后跟的描述信息的长度 
}DBCCC_SKILL_GROUP_STRUCT, *LPDBCCC_SKILL_GROUP_STRUCT; 
//此结构后面跟着一系列SKILL_ID结构共usSkillNum个;随后是共usDescriptionSize字节个描述信息 
//	SKILL_ID	Skill[];					//具体技能标识 
//  UCHAR		Description[];				//技能描述 
 
 
typedef struct tagDBCCC_ACD_INFO 
{ 
       ULONG        cb;								  //结构长度	 
       UCHAR        szPilotNbr[MAXLEN_PILOTNBR + 1];  //ACD组的pilot number 
	   USHORT       usDeviceNo;                       //ACD组的设备序号 
       USHORT       usQueueSize;                      //当前等待在队列中的呼叫数目 
       ULONG        ulQueueTime;                      //队列中等待最久的呼叫的等待时间(秒数) 
       USHORT       usLoadFactor;                     //队列的负载因子,保留未用 
       ULONG        ulEstWaitTime;                    //Agent应答一个主叫之前的估计等待时间 
       USHORT       usLoggedOnAgents;                 //当前注册到该ACD组的Agent数目 
       USHORT       usAvailAgents;                    //该ACD组中当前可用的Agent数目 
	   UCHAR        ucTransferFlg;                    //转移标志	enum TIMEOUT_PROCESS_STYLE 
	   DEVICE_ID    TransferDevice;                   //转移设备 
	   CHAR         pSkillDescrip[ MAX_SKILL_STRING_LENGTH + 1];//技能描述, 类似“180,Chinese” 
} DBCCC_ACD_INFO, *LPDBCCC_ACD_INFO; 
 
 
typedef struct tagACD_SKILL_DESCRIPTION 
{ 
	   USHORT		usAcdID;		//队列标识 
	   CString      strDescription;//技能描述, 类似“180,Chinese” 
} ACD_SKILL_DESCRIPTION, *LPACD_SKILL_DESCRIPTION; 
 
 
typedef struct tagDBCCC_AGENT_INFO 
{ 
       ULONG        cb; 
	   AGENT_STRUCT	Agent;							//座席结构	 
       USHORT       szDeviceNo;                     //Agent的设备号 
       UCHAR        szPilotNbr[MAXLEN_PILOTNBR + 1];//Agent的引导号 
       USHORT       usPrevState;                    //前一个状态 enum AGENT_STATE 
       ULONG        ulPrevStateTime;                //前一个状态的时间 
       USHORT       usCurrentState;                 //当前状态 enum AGENT_STATE 
       ULONG        ulCurrentStateTime;             //当前状态的时间 
       ULONG        ulLogonTime;                    //注册的时间 
	   USHORT       usKeepNums;                     //保持的次数 
	   USHORT       usAnswerNums;                   //应答的次数 
	   USHORT       usConferenceNums;				//发起会议电话的次数,三方通话   
	   USHORT       usCallOutNums;					//呼出的次数 
	   USHORT       usTransferNums;					//转接的次数,内部转移 
	   USHORT       usTransferOutNums;				//转出的次数 
	   USHORT       usRedirectNums;					//重定向的次数 
	   USHORT       usInterCallNums;				//内部呼叫 
	   USHORT       usNoAnswerNums;					//久不应答次数 
	   USHORT       usBusyNums;						//示忙次数 
	   USHORT       usIdleTime;						//示闲次数 
	   USHORT       usRestNums;                     //请假次数 
	   USHORT       usRestOutNums;                  //超假次数 
       ULONG        ulRestTime;                     //请假时长 
	   ULONG        ulRestOutTime;                  //超假时长 
   	   USHORT       usAgentRelease;                 //话务员主动收线次数 
 
	   ULONG     	ulTotalTalkIngTimes;			//总的通话时长 
       CALLID       CallID[2];						//当前处理的呼叫标识 
	   UCHAR        ucTransferFlg;                  //转移标志	//enum	TIMEOUT_PROCESS_STYLE 
	   DEVICE_ID    TransferDevice;                 //转移设备	 
} DBCCC_AGENT_INFO, *LPDBCCC_AGENT_INFO;		//座席信息 
 
 
typedef struct tagDBCCC_CALL_INFO 
{ 
	  ULONG               cb;		 
	  CALLID	          CallID;								//呼叫标识 
	  CHAR				  cKeyID[ MAXLEN_EXTEN + 1];			//呼叫的唯一标识 
	  CHAR                cANI[ MAXLEN_EXTEN + 1];				//主叫 
	  CHAR                cDialedNumber[ MAXLEN_EXTEN + 1 ];	//被叫 
	  CHAR                ucMid;                                //模块号 
	  USHORT              usTrunkNo;                            //中继号 
	  UCHAR               ucPriority;                           //用户级别 
	  DEVICE_ID           CurrentDevice ;                       //正在处理的设备信息 
	  UCHAR               pucCallData[ MAX_CALLDATA_LEN ];		//呼叫数据 
	  USHORT              CallDataLen;                          //呼叫数据的有效长度 
	  CHAR                pcCallSkill[ MAX_SKILL_STRING_LENGTH ];//呼叫技能描述,类似“180,Chinese” 
	  USHORT              usPartyNum;                           //呼叫轨迹经过的设备数目 
	  UCHAR				  ucCallFeature;						//呼叫特征, enum Call_Feature_Type 
	  CHAR                cOrgCalledNo[ MAXLEN_EXTEN + 1 ];	    //原始被叫 
} DBCCC_CALL_INFO, *LPDBCCC_CALL_INFO;					//呼叫信息 
/***************************************************** 
此结构后是呼叫轨迹,用多个DBCCC_DEVICE_STRUCT表示 
*****************************************************/ 
 
 
typedef struct  
{ 
    ULONG       cb;								//结构字节数目 
	UCHAR       ucDeviceType;					//设备类型	enum ICD_DEVICETYPE 
	USHORT      usDeviceNo;						//设备编号 
	CHAR        ucPilotNo[ MAXLEN_PILOTNBR + 1];//设备引导号 
    UCHAR       ucTransferType;                //转移标志	enum TIMEOUT_PROCESS_STYLE 
    DEVICE_ID   TransferDevice;                //转移设备 
	USHORT      usCallNum;              //后面跟随的CALLID的数目(该设备)  
} CALL_PARTY_INFO; 
//呼叫一方信息(设备) 
 
 
typedef	struct tagDBCCC_DEVICE_STRUCT  
{ 
	ULONG   ulWaitBeginTime;	//等待开始时间 
	ULONG   ulWaitEndTime;		//等待结束时间 
	ULONG   ulAnswerBeginTime;	//应答开始时间 
	ULONG   ulAnswerEndTime;	//应答结束时间 
	ULONG   ulTalkBeginTime;	//谈话开始时间 
	ULONG   ulTalkEndTime;		//谈话结束时间 
	USHORT  usDeviceNo;			//设备编号 
	UCHAR   ucDeviceType;		//设备类型	enum ICD_DEVICETYPE 
	UCHAR   ucDoFuction;        //此设备的处理方式,enum CALL_DIRECT_MODE 
	UCHAR   ucLeaveReason;		//离开此设备原因, enum CALL_DIRECT_MODE 
}DBCCC_DEVICE_STRUCT, *LPDBCCC_DEVICE_STRUCT;	 
 
#define RESERVED_SIZE   9 
typedef struct tagDBCCC_USER_RECORD 
{ 
	USHORT		usWorkNo;								//用户工号 
	CHAR		szUserName[ DBCCC_MAXLEN_USERNAME + 1 ];//用户姓名 
	CHAR		szPassword[ DBCCC_MAXLEN_PASSWORD + 1 ];//用户口令 
	ULONG		ulSecurity;								//用户权限 
	UCHAR		ucReserved[RESERVED_SIZE];	//保留未用的区域 
}DBCCC_USER_RECORD, *LPDBCCC_USER_RECORD;	//用户描述结构 
 
/* 
typedef struct tagDBCCC_CALL_STATUS 
{ 
  	DBCCC_CALLID    CallID;							//呼叫标识 
	CHAR			CallerNo[ MAXLEN_EXTEN + 1 ];	//主叫号码 
	CHAR			CalledNo[ MAXLEN_EXTEN + 1 ];	//被叫号码 
	UCHAR			ucCallType;						//呼叫类型	//enum CallFlag 
	USHORT			usTrunkNo;						//中继号码 
	USHORT			usDid;							//交换设备号 
} DBCCC_CALL_STATUS, *LPDBCCC_CALL_STATUS; 
*/ 
 
typedef	struct tagDBCCC_AGENT_WORKGROUP_INFO 
{ 
	USHORT	usAgentNo;								//座席工号 
	USHORT	usAgentDsn;								//座席电路号 
	UCHAR	ucAgentStatus;							//座席状态	//struct AGENTSTATUS 
}DBCCC_AGENT_WORKGROUP_INFO, *LPDBCCC_AGENT_WORKGROUP_INFO; 
 
typedef struct	tagDBCCC_INNO_STRUCT 
{ 
	USHORT	usID;								//接入码标识(内部编号) 
	USHORT  usServiceNo;	                    //业务类型 
	BOOL	bHelpFlag;							//求助标志 
	CHAR	pcInNo[ MAX_IVR_INNO_LENGTH + 1];	//接入码 
	CHAR	pcDescription[MAX_INNO_INFO_LEN + 1];//对此接入码的功能性描述 
}DBCCC_INNO_STRUCT, *LPDBCCC_INNO_STRUCT;		//说明: IVR接入码结构 
 
typedef struct tagDBCCC_ALARM_DATA 
{ 
	CHAR			pcDeviceType[10];			//设备类型名称 
	CHAR			pcDeviceNo[10];				//设备标识号 
	USHORT			usAlarmType;				//告警类型	// enum ALARM_TYPE 
	USHORT			usAlarmLevel;				//告警级别	// enum ALARM_LEVEL 
	CHAR			pcAlarmInfo[200];			//告警信息 
	UCHAR			ucAlarmFlag;				//告警标志 1:Alarm, 0: NoAlarm 
}DBCCC_ALARM_DATA, *LPDBCCC_ALARM_DATA; 
 
 
enum PACKET_STATUS 
{ 
	PACKET_DATA, 
	PACKET_END 
}; 
 
typedef struct tagSFTP_PACKET 
{ 
	UCHAR  SerialNo;				//文件块包的序号 
	UCHAR  EndFlag;					//是否文件结束标志 
	USHORT PacketLen;				//数据区数据的长度 
	CHAR  Packet[ MAX_PACKET_LEN ];	//数据区 
}SFTP_PACKET, *LPSFTP_PACKET; 
 
typedef struct tagCONN_OBJ_INFO 
{ 
	UCHAR	ConnNodeNum;	//包含连接数目 
	UCHAR	byConf;			//是否通过会议电话enum CONNECT_BY_TYPE 
}CONN_OBJ_INFO, *LPCONN_OBJ_INFO; 
 
typedef struct tagCONN_NODE_INFO 
{ 
	USHORT		source_dsn;		//发起方 
	UCHAR		source_type;	//发起方类型 
	UCHAR		source_mid;		//发起方模块号 
	USHORT		dest_dsn;		//目标方 
	UCHAR		dest_type;		//目标方类型 
	UCHAR		dest_mid;		//目标方模块号 
	UCHAR		mode;			// 
	UCHAR		byConf;			//enum CONNECT_BY_TYPE 
}CONN_NODE_INFO, *LPCONN_NODE_INFO; 
 
typedef struct 
{ 
    USHORT   usFirstAgentNo;	//排名第一工号 
	double   fFirstAgentScore;	//排名第一分数 
    USHORT   usSecondAgentNo;	//排名第二工号 
	double   fSecondAgentScore;	//排名第二分数 
    USHORT   usThirdAgentNo;	//排名第三工号 
	double   fThirdAgentScore;	//排名第三分数 
	USHORT   usSelfIndex;		//自己排名 
	double   fSelfScore;		//自己分数 
} AGENT_ANALY_INFO;		//座席考评排行榜结构 
 
 
typedef	struct	tagDBCCC_TRUNK_STRUCT 
{ 
	UCHAR		ucModuleNo;		//该中继所属模块号, 用于区分排队机模块 
	UCHAR		ucGroupNo;		//该中继所属中继群号,用于区分该模块下的中继群 
	UCHAR		ucDirection;	//该中继的群向,是入中继还是出中继,enum	ACD_TRUNK_TYPE 
	USHORT		usTrunkNo;		//该中继编号,在该模块中的编号 
	UCHAR		ucStatus;		//是可用中继还是不可用中继, 1: 可用,0:不可用 
}DBCCC_TRUNK_STRUCT, *LPDBCCC_TRUNK_STRUCT;	//每个中继续 
 
typedef struct tagVMS_SPT_PLAY 
{ 
	UCHAR		voice_resource;			// 放音资源类型 enum  voice_resource 
	UCHAR		play_type;				// 放音类型, enum Play_Type 
	UCHAR		filename[MAX_FILENAME_LEN]; 
}VMS_SPT_PLAY; 
 
typedef struct tagDRV_RESULT_STRUCT 
{ 
	UCHAR		user_info[DRV_MAX_GET_NUM];		//收号结果 
}DRV_RESULT_STRU; 
 
typedef union tagPLAY_DRV 
{ 
	VMS_SPT_PLAY		vp_spt_play;		// VP , SPT放音 
	DRV_RESULT_STRU		drv_result;			// 收号结果 
}PLAY_DRV; 
 
typedef struct tagPLAY_DRV_STRUCT 
{ 
	CHAR		IvrNo[ MAXLEN_EXTEN + 1 ];	//相应的流程接入码 
	UCHAR		flag;						//放音还是收号 enum PLAY_COLLECT 
	PLAY_DRV	play_drv; 
}PLAY_DRV_STRUCT; 
 
typedef struct 
{ 
	CALLID	CallId; 
	ULONG   Index; 
} KEEPINDEX; 
 
typedef struct tagEVENT_RESPONSE_ID 
{ 
	UCHAR	       ucReceiveTaskCount; 
	USHORT	       usReceiveTaskDsn; 
}EVENT_RESPONSE_ID; 
 
#define	TRACE_DESCRIPTION_LEN	50 
 
typedef struct tagFLOWTRACE_ITEM 
{ 
	CHAR	cCallerNo[MAXLEN_EXTEN + 1];	//主叫号码 
	CALLID	CallID;			//呼叫标识 
	CHAR	cTraceDes[TRACE_DESCRIPTION_LEN + 1];//轨迹分支描述 
}FLOWTRACE_ITEM, *LPFLOWTRACE_ITEM; 
 
typedef struct  
{ 
	USHORT      usLoginNums;	    //上班次数 
	ULONG        ulWorkTime;	    //工作时长 
	USHORT      usKeepNums;         //保持次数 
	USHORT      usAnswerNums;       //通话次数 
    USHORT      usConferenceNums;   //发起会议电话的次数,三方通话   
    USHORT      usCallOutNums;      //呼出的次数 
    USHORT      usTransferNums;     //转接的次数,内部转移 
    USHORT      usTransferOutNums;  //转出的次数 
    USHORT      usRedirectNums;     //重定向的次数 
    USHORT      usInterCallNums;    //内部呼叫 
    USHORT      usNoAnswerNums;     //久不应答次数 
    USHORT      usBusyNums;         //示忙次数 
    USHORT      usIdleTime;         //示闲次数 
	USHORT      usRestNums;         //请假次数 
	USHORT      usRestOutNums;      //超假次数 
	ULONG        ulRestTime;         //请假时长 
	USHORT      usAgentRelease;     //话务员主动收线次数 
	ULONG        ulRestOutTime;      //超假时长 
	ULONG        ulTotalTalkIngTimes;//总的通话时长 
	ULONG		ulBusyTime;		//示忙时长 
	USHORT		usSuperInsertNums;	//监听次数 
	ULONG		ulSuperInsertTime;	//监听时长 
	USHORT		usSwitchInsertNums; // 
	USHORT		usInterceptNums;	//拦截次数 
	USHORT		usTransIVRNums;	//人工转移自动次数 
	USHORT		usSuperTrunkNums;	//监听中继次数 
	ULONG		ulSuperTrunkTime;	//监听中继时长 
	USHORT		usInterHelpNums;	//内部求助次数 
	USHORT		usForceOutNums;		//强制签出别人次数 
	USHORT		usForceIdleNums;	//强制示闲别人次数 
	USHORT		usForceBusyNums;	//强制示忙别人次数 
	ULONG		ulWorkStatusTime;		//工作状态时长 
}STATISTICS_INFO; 
 
typedef	struct  tagAGENT_STATISTICS_INFO 
{ 
	AGENT_STRUCT	Agent;		//座席结构	 
	STATISTICS_INFO StatInfo;	//统计信息 
}AGENT_STATISTICS_INFO, *LPAGENT_STATISTICS_INFO; 
 
 
typedef struct tag_CMessageHead 
{ 
	UCHAR sender_node; //发送方节点号 
	UCHAR sender_port; //发送方端口号 
	UCHAR receiver_node; //接收方节点号 
	UCHAR receiver_port; //接收方端口号如IVR的PORT号为4等 
     UCHAR msg_type;//消息类型 
     //一个字节句柄以及两个字节的dsn唯一标识一个呼叫控制块  
     UCHAR sender_handle;// 发送方句柄 
     USHORT sender_dsn;// 发送方Dsn 
     UCHAR receiver_handle; // 接收方方句柄 
     USHORT receiver_dsn; // 接收方Dsn 
}CMessageHead, *LPCMessageHead; 
 
//呼入请求(排队机呼叫进入IVR的启动数据包) 
typedef struct  tag_SP_Setup_Msg:public CMessageHead 
{ 
	UCHAR call_feature;//呼叫特征,分为普通呼叫、特殊呼叫、 
                    //设置摘机通知、取消摘机通知、自动寻呼机通知。枚举值分别为0,1,2,3,4 
    UCHAR CLI_BCD[13];//主叫的BCD码 
    UCHAR CLD_BCD[13];//被叫的BCD码 
	UCHAR DID;// 
    USHORT trunk_dsn;//中继号 
	UCHAR Ext_Data[25];//呼叫附加信息 
}SP_Setup_Msg, *LPSP_Setup_Msg; 
 
//IVR发给排队机的呼入请求应答包 
typedef struct tag_SP_SetupAck_Msg:public CMessageHead 
{ 
    UC noteno;//IVR业务流程的节点号 
} SP_SetupAck_Msg, *LPSP_SetupAck_Msg; 
 
//IVR发振铃消息 
typedef  struct tag_SP_Alerting_Msg:public CMessageHead 
{ 
	UC audio; //一般填255 
} SP_Alerting_Msg, *LPSP_Alerting_Msg; 
//ivr应答 
typedef struct tag_SP_Answer_Msg:public CMessageHead 
{ 
	UC audio;//一般填255 
} SP_Answer_Msg , *LPSP_Answer_Msg; 
 
//定时握手消息 
typedef struct  tag_SP_ResetTimer_Msg:public CMessageHead 
{ 
    UC timer_id; //一般填255 
} SP_ResetTimer_Msg, *LPSP_ResetTimer_Msg;	 
 
//服务器发的CALLID 
typedef struct  tag_IVR_CallID_Msg:public CMessageHead  
{ 
	CALLID callID; //呼叫标识结构 
} IVR_CallID_Msg, *LPIVR_CallID_Msg; 
 
//IVR主动拆线 
typedef struct  tag_SP_Disconnect_Msg:public CMessageHead 
{ 
    UC discon_cause;	//拆线原因,分为:正常拆线、无资源拆线、超时拆线、呼出失败、挂机、空号、邮箱已满。枚举值分别为0,1,2,3,4,5,6。 
} SP_Disconnect_Msg, *LPSP_Disconnect_Msg; 
 
//BCD码转换为字符串 
void decodeBCD(const char* pSource, int len, char* str); 
//INT 向BCD转换 
int int2bcd(int i); 
 
 
//IVR发给ACD的呼叫释放消息 
 
typedef struct  tag_SP_Release_Msg:public CMessageHead 
{ 
	UC release_cause; //拆线原因,分为:正常拆线、无资源拆线、超时拆线、呼出失败、挂机、 
	                   //空号、邮箱已满,一般为挂机。枚举值分别为0,1,2,3,4,5,6。	 
	UC ext_data[100];//呼叫附加信息 
} SP_Release_Msg, *LPSP_Release_Msg; 
 
//IVR发给排队机的呼叫重定向消息 
typedef struct  tag_SP_Redirect_Msg:public CMessageHead    // SSP <===  SCP,重定向 
{ 
	UC CLD[MAXLEN_EXTEN]	; //重定向的目标号码 
	UC ext_data[100]; //呼叫附加信息 
}SP_Redirect_Msg, *LPSP_Redirect_Msg; 
 
//二次收号结果消息 
typedef struct tag_SP_DRV_RESULT_Msg:public CMessageHead 
{ 
	UCHAR		user_info[24];		//收号结果 
}SP_DRV_RESULT_Msg, *LPSP_DRV_RESULT_Msg; 
//IVR发给排队机的资源连接消息 
typedef struct  tag_SP_ResourceConnect_Msg:public CMessageHead 
{ 
    UC connect_party_type;    //  连接方类型,分为: 呼叫方、连net板的VP台、用户电路、会议电话、连中继的VP台、人工台。枚举值分别为0,1,2,3,4,7。 
	US connect_party_dsn;     /*  连接方Dsn。对于连接方为: 
	                              呼叫方:Dsn填排队机的控制块的Dsn; 
	                              会议电话:Dsn填申请到的会场号; 
	                              连中继的VP台:排队机配置的中继电路号+模块号*2048。*/ 
   	UC dest_party_type;       //目标方类型,分为: 呼叫方、连net板的VP台、用户电路、会议电话、连中继的VP台、人工台。 
   	US dest_party_dsn; 	      //目标方Dsn 
    UC connect_mode; 	  //连接类型,分为:只听、只说、双向。枚举值分别为1,2,3。 
 
} SP_ResourceConnect_Msg, *LPSP_ResourceConnect_Msg;	 
#pragma pack(pop) 
 
#endif