设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2374|回复: 0

有关AnyChat业务排队数据持久化的问题

[复制链接]

242

主题

2960

帖子

8945

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8945
发表于 2015-7-27 20:49:17 | 显示全部楼层 |阅读模式
    AnyChat自V5.3版本开始便提供业务排队功能(参考:AnyChat提供业务排队整体解决方案),业务队列不仅提供了客户端的API接口,还提供了服务器端的API接口。通过客户端的API接口可以实现业务排队的基本功能,如客户排队、坐席服务等;通过服务器端的API接口可以实现营业厅、队列的创建,营业厅、队列实时状态的获取等。本篇主要讲解服务器端API接口的使用及数据持久化。

一、API接口定义(Java)
  1. // 获取业务对象列表
  2. public static native int[] ObjectGetIdList(int dwObjectType);
  3. // 获取业务对象参数值(整型)
  4. public static native int ObjectGetIntValue(int dwObjectType, int dwObjectId, int dwInfoName);
  5. // 获取业务对象参数值(字符串)
  6. public static native String ObjectGetStringValue(int dwObjectType, int dwObjectId, int dwInfoName);
  7. // 业务对象参数设置(整形)
  8. public static native int ObjectSetIntValue(int dwObjectType, int dwObjectId, int dwInfoName, int dwValue);
  9. // 业务对象参数设置(字符串)
  10. public static native int ObjectSetStringValue(int dwObjectType, int dwObjectId, int dwInfoName, String lpStrValue);
  11. // 业务对象参数控制
  12. 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接口在服务器端创建相关的营业厅、队列对象,这样客户端便可以从服务器请求(同步)营业厅、队列的数据了。
  1. // 初始化业务队列
  2. private static void InitBusinessQueue() {
  3.         // 服务器端创建一个营业厅对象,并设置属性
  4.         int dwAreaId = 10001;
  5.         AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, 0, 0, 0, 0, "");
  6.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "科韵路营业厅");
  7.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "位于广州市科韵路,服务超级棒!");
  8.         
  9.         // 创建队列对象
  10.         int dwQueueId = 101;
  11.         AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, dwAreaId, 0, 0, 0, "");
  12.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "个人业务队列");
  13.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "开户、挂失、转帐");
  14.         // 设置队列优先级
  15.         int dwPriority = 0;
  16.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_PRIORITY, dwPriority);
  17.         // 设置队列业务类型
  18.         int dwQueueAbility = QUEUE_ABILITY_TYPE_PERSONAL;
  19.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_ATTRIBUTE, dwQueueAbility);
  20.         // 设置队列整型标签值(上层业务自定义用途)
  21.         int dwQueueIntTag = 2;
  22.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_INTTAG, dwQueueIntTag);

  23.         dwQueueId = 102;
  24.         AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, dwAreaId, 0, 0, 0, "");
  25.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "个人业务队列(VIP)");
  26.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "开户、挂失、转帐");
  27.         // 设置队列优先级
  28.         dwPriority = 10;
  29.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_PRIORITY, dwPriority);
  30.         // 设置队列业务类型
  31.         dwQueueAbility = QUEUE_ABILITY_TYPE_PERSONAL;
  32.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_ATTRIBUTE, dwQueueAbility);
  33.         // 设置队列整型标签值(上层业务自定义用途)
  34.         dwQueueIntTag = 2;
  35.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_INTTAG, dwQueueIntTag);
  36.         
  37.         dwQueueId = 103;
  38.         AnyChatServerSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_CREATE, dwAreaId, 0, 0, 0, "");
  39.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME, "对公业务队列");
  40.         AnyChatServerSDK.ObjectSetStringValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_DESCRIPTION, "支票、回单、基本户");
  41.         // 设置队列优先级
  42.         dwPriority = 0;
  43.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_PRIORITY, dwPriority);
  44.         // 设置队列业务类型
  45.         dwQueueAbility = QUEUE_ABILITY_TYPE_COMPANY;
  46.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_ATTRIBUTE, dwQueueAbility);
  47.         // 设置队列整型标签值(上层业务自定义用途)
  48.         dwQueueIntTag = 3;
  49.         AnyChatServerSDK.ObjectSetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_INTTAG, dwQueueIntTag);
  50. }
复制代码
上述示例代码创建了一个营业厅,并设置营业厅的属性(名称、描述等),还创建了三个队列,并设置队列的属性(名称、描述、业务能力、优先级等)。完整的示例代码请参考业务服务器源代码。

三、状态数据持久化
    由于AnyChat是数据库无关性的,所以状态数据持久化的工作需要上层应用来实现,AnyChat提供了API接口来实时获取营业厅、队列的状态信息,业务服务器可以定时(如每分钟)采样,然后将采样的数据保存到数据库中便可以实现数据持久化的工作。
  1. int dwAreaId = 10001;
  2. // 获取服务区域客服用户数
  3. int dwAreaAgentCount = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_AREA_INFO_AGENTCOUNT);
  4. // 获取服务区域内访客的用户数(没有排入队列的用户)
  5. int dwAreaGuestCount = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_AREA_INFO_GUESTCOUNT);
  6. // 获取服务区域内排队的用户数
  7. int dwAreaQueueUsers = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, dwAreaId, AnyChatObjectDefine.ANYCHAT_AREA_INFO_QUEUEUSERCOUNT);

  8. int dwQueueId = 101;
  9. // 获取指定队列长度(有多少人在排队)
  10. int dwQueueLength = AnyChatServerSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwQueueId, AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_LENGTH);
复制代码
通过状态数据持久化,上层应用系统可以实现业务数据统计功能,以直观的图表向管理人员展现实时状态信息,同时还可以让客服部门了解排队人数随时间的分布情况,以便确认某些时间段增加客服或者减少客服,达到资源的最优分配。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2021-4-13 19:17 , Processed in 0.136690 second(s), 23 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表