public interface IClientOutter
{
#region 业务类
/// <summary>
/// 示忙/示闲
/// 示忙功能:实现坐席向服务器请求示忙,成功后不再处理新的业务
/// 示闲功能:实现坐席向服务器请求示闲,成功后继续处理新业务
/// 坐席过在通话中,肯定是忙的状态。此函数是坐席没有通话时(电话通道未使用)
/// 的时候, 可以报告自己的状态。如坐席人员可能暂时离开位置,这个时候不能接听电
/// 话,则可以使用此函数告诉服务器,自己忙碌。CTI 服务器则在该坐席重新设置状态为
/// 空闲之前,CTI 服务器不会将业务转接到该坐席
/// 事件响应 OnEventBusy 服务器告知坐席请求的示闲或者示忙状态的成功与否
/// </summary>
/// <param name="user">当前用户</param>
/// <param name="intType">1示忙,0示闲</param>
/// <returns>1成功,0失败,-1已是忙线状态无需再示</returns>
int RequestBusy(UserData user, int intType);
/// <summary>
/// 保持/取保持
/// 保持功能:实现坐席通话中让对方听取等待音乐而暂时中断通话。
/// 取保持功能:实现坐席恢复暂时中断的通话。
/// 事件响应 EventDelegate 服务器告知坐席请求的保持或取保状态的成功与否
/// </summary>
/// <param name="strCurrUserID">当前用户</param>
/// <param name="intType">1 保持;0 取保持</param>
/// <returns>1 发送请求成功;0发送请求失败;</returns>
int RequestKeepNo(UserData user, int intType);
/// <summary>
/// 向服务器请求其他坐席状态信息(如要进行内呼或者通话中转接给别的坐席)
/// 只能在正常登录系统后(Initialize 返回LogonResult.Succeed)调用该函数。
/// 事件响应 OnAgentState 函数将得到反馈结果(服务器受理成功或失败, 结果等)
/// </summary>
/// <param name="user"></param>
/// <param name="TargetUser"></param>
/// <returns>1发送请求成功;0 发送请求失败</returns>
int RequestAgentState(UserData user, UserData TargetUser);
/// <summary>
/// 内呼方法(坐席间呼叫)
/// 事件响应 OnEventCallUser 函数将得到反馈结果(服务器受理成功或失败, 结果等)
/// </summary>
/// <param name="user">内呼用户</param>
/// <param name="TargetUser">被内呼用户</param>
/// <returns>1发送请求成功;0 发送请求失败</returns>
int RequestCallUser(UserData user, UserData TargetUser);
/// <summary>
/// 外呼方法(坐席进行呼出)
/// 事件响应 OnEventCallOut 函数将得到反馈结果(服务器受理成功或失败, 结果等)
/// </summary>
/// <param name="user">当前用户</param>
/// <param name="strTelArray">外呼号码</param>
/// <returns>1发送请求成功;0 发送请求失败</returns>
int RequestCallOut(UserData user, string strTelArray);
/// <summary>
/// 转接
/// </summary>
/// <param name="user">当前用户</param>
/// <param name="TargetUser">转接对象用户</param>
/// <returns>1发送请求成功;0 发送请求失败</returns>
int RequestDivert(UserData user, UserData TargetUser);
/// <summary>
/// 切来电,将来电转接到自己的线路(来电排队到A坐席,A不在工位,可通过此方法将来电转接到自己的线路)
/// 事件响应 OnEventCutCaller 函数将得到反馈结果(服务器受理成功或失败, 结果等)。
/// </summary>
/// <param name="user">当前用户</param>
/// <param name="TargetUser">目标用户,当此用户为NULL时;CTI将按队列进行切</param>
/// <returns>1 发送请求成功;0发送请求失败</returns>
int RequestCutCaller(UserData user, UserData TargetUser);
/// <summary>
/// 呼叫转移、取消呼叫转移;将来电转接到一个目标号码(坐席下班,或者去开会时;可将来电转接到自己的手机或者其它号码)
/// 事件响应 OnEventCallTransfer 函数将得到反馈结果(服务器受理成功或失败, 结果等)。
/// </summary>
/// <param name="user">当前用户</param>
/// <param name="TargetTelNumber">目标号码(手机号、或者固话号码)</param>
/// <param name="intType">1申请转移,0取消转移</param>
/// <returns>1 发送请求成功;0发送请求失败</returns>
int RequestCallTransfer(UserData user, string TargetTelNumber, int intType);
#endregion
#region 管理类
/// <summary>
/// 监听
/// 事件响应 OnEventMonitor 函数将得到反馈结果(服务器受理成功或失败, 结果等)。
/// </summary>
/// <param name="strCurrUserID">当前用户</param>
/// <param name="strTargetUserID">被监听者用户ID</param>
/// <returns>1 发送请求成功;0发送请求失败;</returns>
int RequestMonitor(string strCurrUserID, string strTargetUserID);
#endregion
#region 通知事件
/// <summary>
/// 服务器告知坐席请求的示闲或者示忙状态的成功与否
/// </summary>
event EventDelegate<int, bool> OnEventBusy;
/// <summary>
/// 服务器告知坐席请求的保持或取保状态的成功与否
/// </summary>
event EventDelegate<int, bool> OnEventKeepNo;
/// <summary>
/// 服务告知坐席请求的坐席状态
/// </summary>
event EventDelegate<UserData> OnEventAgentState;
/// <summary>
/// 内呼返回结果事件;在发送内呼请求后,可通过此事件来获取内呼结果
/// </summary>
event EventDelegate<Information> OnEventCallUser;
/// <summary>
/// 外呼返回结果事件;在发送外呼请求后,可通过此事件来获取外呼结果
/// </summary>
event EventDelegate<Information> OnEventCallOut;
/// <summary>
/// 转接来电
/// </summary>
event EventDelegate<Information> OnEventDivert;
/// <summary>
/// 切来电,将来电转接到自己的线路;在发送请求后,可通过此事件来获取结果
/// </summary>
event EventDelegate<Information> OnEventCutCaller;
/// <summary>
/// 请求、取消呼叫转移事件(将来电转接到一个目标号码(坐席下班,或者去开会时;可将来电转接到自己的手机或者其它号码))
/// </summary>
event EventDelegate<int, bool> OnEventCallTransfer;
/// <summary>
/// 监听返回结果事件;在发送监听请求后,可通过此事件来获取监听结果
/// </summary>
event EventDelegate<CallStatusEnum> OnEventMonitor;
/// <summary>
/// 来电信息信息事件,通过此事件可以获取更多的来电信息
/// </summary>
event EventDelegate<string, int> OnEventInComingTel;
/// <summary>
/// 摘机通知事件,坐席摘机后,进行通知
/// </summary>
event EventDelegate<string,int> OnEventOffHook;
/// <summary>
/// 挂机通知事件,坐席挂机后,进行通知
/// </summary>
event EventDelegate<string,int> OnEventHangUp;
/// <summary>
/// 来电振铃,坐席话机来电振铃,进行通知
/// </summary>
event EventDelegate<string,int> OnEventRinging;
/// <summary>
/// 通话中,坐席通话中,进行通知
/// </summary>
event EventDelegate<string,int> OnEventCalling;
/// <summary>
/// 该接口用户实现坐席CTI状态维护
/// </summary>
IUserOutter userOutter { get; set; }
#endregion
/// <summary>
///
/// </summary>
Socket CurrSocket { get; set; }
/// <summary>
/// 收到服务器应答消息
/// </summary>
/// <param name="data"></param>
void SystemAnswerMessage(byte[] data);
}