|
AnyChat自V5.3版本开始便提供业务排队功能(参考:AnyChat提供业务排队整体解决方案),业务队列不仅提供了客户端的API接口,还提供了服务器端的API接口。通过客户端的API接口可以实现业务排队的基本功能,如客户排队、坐席服务等;通过服务器端的API接口可以实现营业厅、队列的创建,营业厅、队列实时状态的获取等。本篇主要讲解服务器端API接口的使用及数据持久化。
一、API接口定义(Java)- // 获取业务对象列表
- public static native int[] ObjectGetIdList(int dwObjectType);
- // 获取业务对象参数值(整型)
- public static native int ObjectGetIntValue(int dwObjectType, int dwObjectId, int dwInfoName);
- // 获取业务对象参数值(字符串)
- public static native String ObjectGetStringValue(int dwObjectType, int dwObjectId, int dwInfoName);
- // 业务对象参数设置(整形)
- public static native int ObjectSetIntValue(int dwObjectType, int dwObjectId, int dwInfoName, int dwValue);
- // 业务对象参数设置(字符串)
- public static native int ObjectSetStringValue(int dwObjectType, int dwObjectId, int dwInfoName, String lpStrValue);
- // 业务对象参数控制
- public static native int ObjectControl(int dwObjectType, int dwObjectId, int dwCtrlCode, int dwParam1, int dwParam2, int dwParam3, int dwParam4, String lpStrValue);
复制代码 根据业务队列的API定义可以看出其设计思路:将营业厅、队列等抽象为对象,通过抽象的API来操作对象的属性、方法及事件。其它语言(包括C++、C#等)的服务器端API接口定义请参考对应的SDK头文件。
二、基础数据持久化
基础数据包括营业厅相关属性、队列相关属性,由于AnyChat是数据库无关性的,所以需要上层应用利用数据库进行持久化,来实现相关属性的后台配置。在业务服务器启动时读取数据库的相关数据,通过API接口在服务器端创建相关的营业厅、队列对象,这样客户端便可以从服务器请求(同步)营业厅、队列的数据了。- // 初始化业务队列
- private static void InitBusinessQueue() {
- // 服务器端创建一个营业厅对象,并设置属性
- int dwAreaId = 10001;
- AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, 0, 0, 0, 0, "");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "科韵路营业厅");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "位于广州市科韵路,服务超级棒!");
-
- // 创建队列对象
- int dwQueueId = 101;
- AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, dwAreaId, 0, 0, 0, "");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "个人业务队列");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "开户、挂失、转帐");
- // 设置队列优先级
- int dwPriority = 0;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_PRIORITY, dwPriority);
- // 设置队列业务类型
- int dwQueueAbility = QUEUE_ABILITY_TYPE_PERSONAL;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_ATTRIBUTE, dwQueueAbility);
- // 设置队列整型标签值(上层业务自定义用途)
- int dwQueueIntTag = 2;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_INTTAG, dwQueueIntTag);
- dwQueueId = 102;
- AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, dwAreaId, 0, 0, 0, "");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "个人业务队列(VIP)");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "开户、挂失、转帐");
- // 设置队列优先级
- dwPriority = 10;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_PRIORITY, dwPriority);
- // 设置队列业务类型
- dwQueueAbility = QUEUE_ABILITY_TYPE_PERSONAL;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_ATTRIBUTE, dwQueueAbility);
- // 设置队列整型标签值(上层业务自定义用途)
- dwQueueIntTag = 2;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_INTTAG, dwQueueIntTag);
-
- dwQueueId = 103;
- AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, dwAreaId, 0, 0, 0, "");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "对公业务队列");
- AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "支票、回单、基本户");
- // 设置队列优先级
- dwPriority = 0;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_PRIORITY, dwPriority);
- // 设置队列业务类型
- dwQueueAbility = QUEUE_ABILITY_TYPE_COMPANY;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_ATTRIBUTE, dwQueueAbility);
- // 设置队列整型标签值(上层业务自定义用途)
- dwQueueIntTag = 3;
- AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_INTTAG, dwQueueIntTag);
- }
复制代码 上述示例代码创建了一个营业厅,并设置营业厅的属性(名称、描述等),还创建了三个队列,并设置队列的属性(名称、描述、业务能力、优先级等)。完整的示例代码请参考业务服务器源代码。
三、状态数据持久化
由于AnyChat是数据库无关性的,所以状态数据持久化的工作需要上层应用来实现,AnyChat提供了API接口来实时获取营业厅、队列的状态信息,业务服务器可以定时(如每分钟)采样,然后将采样的数据保存到数据库中便可以实现数据持久化的工作。- int dwAreaId = 10001;
- // 获取服务区域客服用户数
- int dwAreaAgentCount = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_AREA_INFO_AGENTCOUNT);
- // 获取服务区域内访客的用户数(没有排入队列的用户)
- int dwAreaGuestCount = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_AREA_INFO_GUESTCOUNT);
- // 获取服务区域内排队的用户数
- int dwAreaQueueUsers = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_AREA_INFO_QUEUEUSERCOUNT);
- int dwQueueId = 101;
- // 获取指定队列长度(有多少人在排队)
- int dwQueueLength = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_LENGTH);
复制代码 通过状态数据持久化,上层应用系统可以实现业务数据统计功能,以直观的图表向管理人员展现实时状态信息,同时还可以让客服部门了解排队人数随时间的分布情况,以便确认某些时间段增加客服或者减少客服,达到资源的最优分配。 |
|