diff --git a/CHANGE.md b/CHANGE.md
index bc129f93..3ad974da 100644
--- a/CHANGE.md
+++ b/CHANGE.md
@@ -615,4 +615,8 @@
+ weixin4j-mp:新增获取模板和删除模板接口
- + weixin4j-mp:新增自定义个性化菜单语言信息匹配项
\ No newline at end of file
+ + weixin4j-mp:新增自定义个性化菜单语言信息匹配项
+
+* 2016-01-23
+
+ + weixin4j-qy:新增获取客服列表接口
\ No newline at end of file
diff --git a/weixin4j-qy/CHANGE.md b/weixin4j-qy/CHANGE.md
index 5f512949..79464071 100644
--- a/weixin4j-qy/CHANGE.md
+++ b/weixin4j-qy/CHANGE.md
@@ -164,3 +164,7 @@
* 2015-12-31
+ version upgrade to 1.6.6
+
+* 2016-01-23
+
+ + 新增获取客服列表接口
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
index 55fdda5a..57caef22 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
@@ -44,6 +44,7 @@ import com.foxinmy.weixin4j.qy.token.WeixinTicketCreator;
import com.foxinmy.weixin4j.qy.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.qy.type.ChatType;
import com.foxinmy.weixin4j.qy.type.InviteType;
+import com.foxinmy.weixin4j.qy.type.KfType;
import com.foxinmy.weixin4j.qy.type.UserStatus;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.token.TokenStorager;
@@ -242,6 +243,22 @@ public class WeixinProxy {
return notifyApi.sendCustomeMessage(message);
}
+ /**
+ * 获取客服列表
+ *
+ * @param kfType
+ * 客服类型 为空时返回全部类型的客服
+ * @return 第一个元素为内部客服(internal),第二个参数为外部客服(external)
+ * @see com.foxinmy.weixin4j.qy.api.NotifyApi
+ * @see com.foxinmy.weixin4j.qy.model.IdParameter
+ * @see 客服列表
+ * @throws WeixinException
+ */
+ public IdParameter[] getKfList(KfType kfType) throws WeixinException {
+ return notifyApi.getKfList(kfType);
+ }
+
/**
* 自定义菜单(管理员须拥有应用的管理权限 并且应用必须设置在回调模式)
*
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java
index 6a60b777..95427376 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java
@@ -10,6 +10,8 @@ import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.qy.message.CustomeMessage;
import com.foxinmy.weixin4j.qy.message.NotifyMessage;
+import com.foxinmy.weixin4j.qy.model.IdParameter;
+import com.foxinmy.weixin4j.qy.type.KfType;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.tuple.NotifyTuple;
@@ -119,4 +121,31 @@ public class NotifyApi extends QyApi {
obj.toJSONString());
return response.getAsJsonResult();
}
+
+ /**
+ * 获取客服列表
+ *
+ * @param kfType
+ * 客服类型 为空时返回全部类型的客服
+ * @return 第一个元素为内部客服(internal),第二个参数为外部客服(external)
+ * @see com.foxinmy.weixin4j.qy.model.IdParameter
+ * @see 客服列表
+ * @throws WeixinException
+ */
+ public IdParameter[] getKfList(KfType kfType) throws WeixinException {
+ String message_kf_list_uri = getRequestUri("message_kf_list_uri");
+ if (kfType != null) {
+ message_kf_list_uri += "&type=" + kfType.name();
+ }
+ Token token = tokenHolder.getToken();
+ WeixinResponse response = weixinExecutor.get(String.format(
+ message_kf_list_uri, token.getAccessToken()));
+ JSONObject obj = response.getAsJson();
+ return new IdParameter[] {
+ obj.containsKey("internal") ? obj.getObject("internal",
+ IdParameter.class) : null,
+ obj.containsKey("external") ? obj.getObject("external",
+ IdParameter.class) : null };
+ }
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
index 312f18fa..3d9a7835 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
@@ -61,6 +61,8 @@ menu_get_uri={api_base_url}/menu/get?access_token=%s&agentid=%d
message_send_uri={api_base_url}/message/send?access_token=%s
# \u53d1\u9001\u5ba2\u670d\u6d88\u606f
message_kf_send_uri={api_base_url}/kf/send?access_token=%s
+# \u83b7\u53d6\u5ba2\u670d\u5217\u8868
+message_kf_list_uri={api_base_url}/kf/list?access_token=%s
# \u83b7\u53d6\u5fae\u4fe1IP\u5730\u5740
getcallbackip_uri={api_base_url}/getcallbackip?access_token=%s
# \u83b7\u53d6\u4f01\u4e1a\u53f7\u5e94\u7528\u4fe1\u606f
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactConfigurator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactConfigurator.java
index 359f7db5..62329037 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactConfigurator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactConfigurator.java
@@ -37,13 +37,13 @@ public class JSSDKContactConfigurator {
}
/**
- * 可选范围:部门ID列表(如果departmentIds为0则表示显示管理组下所有部门)
+ * 可选范围:部门ID列表(如果partyIds为0则表示显示管理组下所有部门)
*
* @param departmentIds
* @return
*/
- public JSSDKContactConfigurator departmentIds(Integer... departmentIds) {
- contactParameter.putDepartmentIds(departmentIds);
+ public JSSDKContactConfigurator partyIds(Integer... partyIds) {
+ contactParameter.putPartyIds(partyIds);
return this;
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactParameter.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactParameter.java
index 9e0a79f2..f2147485 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactParameter.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/jssdk/JSSDKContactParameter.java
@@ -65,8 +65,8 @@ public class JSSDKContactParameter extends IdParameter {
this.limitTypes = limitTypes;
}
- public void putLimitType(String type) {
- this.limitTypes.add(type);
+ public void putLimitType(String... limitTypes) {
+ this.limitTypes.addAll(Arrays.asList(limitTypes));
}
public List getSelectedUserIds() {
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java
index 8b8ce6d7..9a8ed9fe 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java
@@ -7,6 +7,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.alibaba.fastjson.annotation.JSONField;
import com.foxinmy.weixin4j.util.StringUtil;
/**
@@ -24,13 +25,16 @@ public class IdParameter implements Serializable {
private static final char SEPARATOR = '|';
+ @JSONField(name = "user")
private List userIds;
- private List departmentIds;
+ @JSONField(name = "party")
+ private List partyIds;
+ @JSONField(name = "tag")
private List tagIds;
public IdParameter() {
this.userIds = new ArrayList();
- this.departmentIds = new ArrayList();
+ this.partyIds = new ArrayList();
this.tagIds = new ArrayList();
}
@@ -45,36 +49,14 @@ public class IdParameter implements Serializable {
return this;
}
- /**
- * 设置成员ID列表,最多支持1000个
- *
- * @param userIds
- * @return
- */
- public IdParameter setUserIds(List userIds) {
- this.userIds = userIds;
- return this;
- }
-
/**
* 新增部门ID列表,最多支持100个
*
- * @param departmentIds
+ * @param partyIds
* @return
*/
- public IdParameter putDepartmentIds(Integer... departmentIds) {
- this.departmentIds.addAll(Arrays.asList(departmentIds));
- return this;
- }
-
- /**
- * 设置部门ID列表,最多支持100个
- *
- * @param departmentIds
- * @return
- */
- public IdParameter setDepartmentIds(List departmentIds) {
- this.departmentIds = departmentIds;
+ public IdParameter putPartyIds(Integer... partyIds) {
+ this.partyIds.addAll(Arrays.asList(partyIds));
return this;
}
@@ -89,19 +71,32 @@ public class IdParameter implements Serializable {
return this;
}
- /**
- * 设置标签ID列表
- *
- * @param tagIds
- * @return
- */
- public IdParameter setTagIds(List tagIds) {
+ public List getUserIds() {
+ return userIds;
+ }
+
+ public List getPartyIds() {
+ return partyIds;
+ }
+
+ public List getTagIds() {
+ return tagIds;
+ }
+
+ public void setUserIds(List userIds) {
+ this.userIds = userIds;
+ }
+
+ public void setPartyIds(List partyIds) {
+ this.partyIds = partyIds;
+ }
+
+ public void setTagIds(List tagIds) {
this.tagIds = tagIds;
- return this;
}
/**
- * 目标参数
+ * 生成某些接口需要的目标参数 如发送客服消息接口
*
* @return
*/
@@ -110,8 +105,8 @@ public class IdParameter implements Serializable {
if (userIds != null && !userIds.isEmpty()) {
parameterMap.put("touser", StringUtil.join(userIds, SEPARATOR));
}
- if (departmentIds != null && !departmentIds.isEmpty()) {
- parameterMap.put("toparty", StringUtil.join(departmentIds, SEPARATOR));
+ if (partyIds != null && !partyIds.isEmpty()) {
+ parameterMap.put("toparty", StringUtil.join(partyIds, SEPARATOR));
}
if (tagIds != null && !tagIds.isEmpty()) {
parameterMap.put("totag", StringUtil.join(tagIds, SEPARATOR));
@@ -121,7 +116,7 @@ public class IdParameter implements Serializable {
@Override
public String toString() {
- return "IdParameter [userIds=" + userIds + ", departmentIds="
- + departmentIds + ", tagIds=" + tagIds + "]";
+ return "IdParameter [userIds=" + userIds + ", partyIds=" + partyIds
+ + ", tagIds=" + tagIds + "]";
}
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/KfType.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/KfType.java
new file mode 100644
index 00000000..6542bea9
--- /dev/null
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/KfType.java
@@ -0,0 +1,21 @@
+package com.foxinmy.weixin4j.qy.type;
+
+/**
+ * 客服类型
+ *
+ * @className KfType
+ * @author jy
+ * @date 2016年1月23日
+ * @since JDK 1.7
+ * @see
+ */
+public enum KfType {
+ /**
+ * 内部客服
+ */
+ internal,
+ /**
+ * 外部客服
+ */
+ external
+}