🎨 #2295 【企业微信】批量获取外部客户详情接口支持多个userId

This commit is contained in:
xingyao 2021-09-05 22:17:30 +08:00 committed by GitHub
parent b06cc90f94
commit ba99224d13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 39 deletions

View File

@ -153,6 +153,7 @@ public interface WxCpExternalContactService {
/** /**
* 企业和服务商可通过此接口将微信外部联系人的userid转为微信openid用于调用支付相关接口暂不支持企业微信外部联系人ExternalUserid为wo开头的userid转openid * 企业和服务商可通过此接口将微信外部联系人的userid转为微信openid用于调用支付相关接口暂不支持企业微信外部联系人ExternalUserid为wo开头的userid转openid
*
* @param externalUserid 微信外部联系人的userid * @param externalUserid 微信外部联系人的userid
* @return 该企业的外部联系人openid * @return 该企业的外部联系人openid
* @throws WxErrorException . * @throws WxErrorException .
@ -197,13 +198,13 @@ public interface WxCpExternalContactService {
* 第三方/自建应用调用时返回的跟进人follow_user仅包含应用可见范围之内的成员 * 第三方/自建应用调用时返回的跟进人follow_user仅包含应用可见范围之内的成员
* </pre> * </pre>
* *
* @param userId 企业成员的userid注意不是外部联系人的帐号 * @param userIdList 企业成员的userid列表注意不是外部联系人的帐号
* @param cursor the cursor * @param cursor the cursor
* @param limit the limit * @param limit the limit
* @return wx cp user external contact batch info * @return wx cp user external contact batch info
* @throws WxErrorException . * @throws WxErrorException .
*/ */
WxCpExternalContactBatchInfo getContactDetailBatch(String userId, String cursor, WxCpExternalContactBatchInfo getContactDetailBatch(String[] userIdList, String cursor,
Integer limit) Integer limit)
throws WxErrorException; throws WxErrorException;
@ -273,24 +274,25 @@ public interface WxCpExternalContactService {
* @param takeOverUserid the take over userid * @param takeOverUserid the take over userid
* @return wx cp base resp * @return wx cp base resp
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
* @deprecated 此后续将不再更新维护,建议使用 {@link #transferCustomer(WxCpUserTransferCustomerReq)} * @deprecated 此后续将不再更新维护, 建议使用 {@link #transferCustomer(WxCpUserTransferCustomerReq)}
*/ */
@Deprecated @Deprecated
WxCpBaseResp transferExternalContact(String externalUserid, String handOverUserid, String takeOverUserid) throws WxErrorException; WxCpBaseResp transferExternalContact(String externalUserid, String handOverUserid, String takeOverUserid) throws WxErrorException;
/** /**
* 企业可通过此接口转接在职成员的客户给其他成员 * 企业可通过此接口转接在职成员的客户给其他成员
* <per> * <per>
* external_userid必须是handover_userid的客户即配置了客户联系功能的成员所添加的联系人 * external_userid必须是handover_userid的客户即配置了客户联系功能的成员所添加的联系人
* 在职成员的每位客户最多被分配2次客户被转接成功后将有90个自然日的服务关系保护期保护期内的客户无法再次被分配 * 在职成员的每位客户最多被分配2次客户被转接成功后将有90个自然日的服务关系保护期保护期内的客户无法再次被分配
* * <p>
* 权限说明 * 权限说明
* * 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取 * * 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取
* 第三方应用需拥有企业客户权限->客户联系->在职继承权限 * 第三方应用需拥有企业客户权限->客户联系->在职继承权限
* 接替成员必须在此第三方应用或自建应用的可见范围内 * 接替成员必须在此第三方应用或自建应用的可见范围内
* 接替成员需要配置了客户联系功能 * 接替成员需要配置了客户联系功能
* 接替成员需要在企业微信激活且已经过实名认证 * 接替成员需要在企业微信激活且已经过实名认证
* </per> * </per>
*
* @param req 转接在职成员的客户给其他成员请求实体 * @param req 转接在职成员的客户给其他成员请求实体
* @return wx cp base resp * @return wx cp base resp
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
@ -300,35 +302,37 @@ public interface WxCpExternalContactService {
/** /**
* 企业和第三方可通过此接口查询在职成员的客户转接情况 * 企业和第三方可通过此接口查询在职成员的客户转接情况
* <per> * <per>
* 权限说明 * 权限说明
* * <p>
* 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取 * 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取
* 第三方应用需拥有企业客户权限->客户联系->在职继承权限 * 第三方应用需拥有企业客户权限->客户联系->在职继承权限
* 接替成员必须在此第三方应用或自建应用的可见范围内 * 接替成员必须在此第三方应用或自建应用的可见范围内
* </per> * </per>
*
* @param handOverUserid 原添加成员的userid * @param handOverUserid 原添加成员的userid
* @param takeOverUserid 接替成员的userid * @param takeOverUserid 接替成员的userid
* @param cursor 分页查询的cursor每个分页返回的数据不会超过1000条不填或为空表示获取第一个分页 * @param cursor 分页查询的cursor每个分页返回的数据不会超过1000条不填或为空表示获取第一个分页
* @return 客户转接接口实体 * @return 客户转接接口实体
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
*/ */
WxCpUserTransferResultResp transferResult(@NotNull String handOverUserid, @NotNull String takeOverUserid, String cursor) throws WxErrorException; WxCpUserTransferResultResp transferResult(@NotNull String handOverUserid, @NotNull String takeOverUserid, String cursor) throws WxErrorException;
/** /**
* 企业可通过此接口分配离职成员的客户给其他成员 * 企业可通过此接口分配离职成员的客户给其他成员
* <per> * <per>
* handover_userid必须是已离职用户 * handover_userid必须是已离职用户
* external_userid必须是handover_userid的客户即配置了客户联系功能的成员所添加的联系人 * external_userid必须是handover_userid的客户即配置了客户联系功能的成员所添加的联系人
* 在职成员的每位客户最多被分配2次客户被转接成功后将有90个自然日的服务关系保护期保护期内的客户无法再次被分配 * 在职成员的每位客户最多被分配2次客户被转接成功后将有90个自然日的服务关系保护期保护期内的客户无法再次被分配
* * <p>
* 权限说明 * 权限说明
* * <p>
* 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取 * 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取
* 第三方应用需拥有企业客户权限->客户联系->离职分配权限 * 第三方应用需拥有企业客户权限->客户联系->离职分配权限
* 接替成员必须在此第三方应用或自建应用的可见范围内 * 接替成员必须在此第三方应用或自建应用的可见范围内
* 接替成员需要配置了客户联系功能 * 接替成员需要配置了客户联系功能
* 接替成员需要在企业微信激活且已经过实名认证 * 接替成员需要在企业微信激活且已经过实名认证
* </per> * </per>
*
* @param req 转接在职成员的客户给其他成员请求实体 * @param req 转接在职成员的客户给其他成员请求实体
* @return wx cp base resp * @return wx cp base resp
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
@ -339,18 +343,19 @@ public interface WxCpExternalContactService {
* 企业和第三方可通过此接口查询离职成员的客户分配情况 * 企业和第三方可通过此接口查询离职成员的客户分配情况
* <per> * <per>
* 权限说明 * 权限说明
* * <p>
* 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取 * 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取
* 第三方应用需拥有企业客户权限->客户联系->在职继承权限 * 第三方应用需拥有企业客户权限->客户联系->在职继承权限
* 接替成员必须在此第三方应用或自建应用的可见范围内 * 接替成员必须在此第三方应用或自建应用的可见范围内
* </per> * </per>
*
* @param handOverUserid 原添加成员的userid * @param handOverUserid 原添加成员的userid
* @param takeOverUserid 接替成员的userid * @param takeOverUserid 接替成员的userid
* @param cursor 分页查询的cursor每个分页返回的数据不会超过1000条不填或为空表示获取第一个分页 * @param cursor 分页查询的cursor每个分页返回的数据不会超过1000条不填或为空表示获取第一个分页
* @return 客户转接接口实体 * @return 客户转接接口实体
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
*/ */
WxCpUserTransferResultResp resignedTransferResult(@NotNull String handOverUserid, @NotNull String takeOverUserid, String cursor) throws WxErrorException; WxCpUserTransferResultResp resignedTransferResult(@NotNull String handOverUserid, @NotNull String takeOverUserid, String cursor) throws WxErrorException;
/** /**
* <pre> * <pre>
@ -360,7 +365,6 @@ public interface WxCpExternalContactService {
* 微信文档https://work.weixin.qq.com/api/doc/90000/90135/92119 * 微信文档https://work.weixin.qq.com/api/doc/90000/90135/92119
* </pre> * </pre>
* *
* @deprecated 请使用 {@link WxCpExternalContactService#listGroupChat(Integer, String, int, String[])}
* @param pageIndex the page index * @param pageIndex the page index
* @param pageSize the page size * @param pageSize the page size
* @param status the status * @param status the status
@ -368,6 +372,7 @@ public interface WxCpExternalContactService {
* @param partyIds the party ids * @param partyIds the party ids
* @return the wx cp user external group chat list * @return the wx cp user external group chat list
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
* @deprecated 请使用 {@link WxCpExternalContactService#listGroupChat(Integer, String, int, String[])}
*/ */
@Deprecated @Deprecated
WxCpUserExternalGroupChatList listGroupChat(Integer pageIndex, Integer pageSize, int status, String[] userIds, String[] partyIds) throws WxErrorException; WxCpUserExternalGroupChatList listGroupChat(Integer pageIndex, Integer pageSize, int status, String[] userIds, String[] partyIds) throws WxErrorException;
@ -380,10 +385,10 @@ public interface WxCpExternalContactService {
* 微信文档https://work.weixin.qq.com/api/doc/90000/90135/92119 * 微信文档https://work.weixin.qq.com/api/doc/90000/90135/92119
* </pre> * </pre>
* *
* @param limit 分页预期请求的数据量取值范围 1 ~ 1000 * @param limit 分页预期请求的数据量取值范围 1 ~ 1000
* @param cursor 用于分页查询的游标字符串类型由上一次调用返回首次调用不填 * @param cursor 用于分页查询的游标字符串类型由上一次调用返回首次调用不填
* @param status 客户群跟进状态过滤0 - 所有列表(即不过滤) 1 - 离职待继承 2 - 离职继承中 3 - 离职继承完成 默认为0 * @param status 客户群跟进状态过滤0 - 所有列表(即不过滤) 1 - 离职待继承 2 - 离职继承中 3 - 离职继承完成 默认为0
* @param userIds 群主过滤如果不填表示获取应用可见范围内全部群主的数据但是不建议这么用如果可见范围人数超过1000人为了防止数据包过大会报错 81017;用户ID列表最多100个 * @param userIds 群主过滤如果不填表示获取应用可见范围内全部群主的数据但是不建议这么用如果可见范围人数超过1000人为了防止数据包过大会报错 81017;用户ID列表最多100个
* @return the wx cp user external group chat list * @return the wx cp user external group chat list
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
*/ */
@ -404,30 +409,30 @@ public interface WxCpExternalContactService {
WxCpUserExternalGroupChatInfo getGroupChat(String chatId, Integer needName) throws WxErrorException; WxCpUserExternalGroupChatInfo getGroupChat(String chatId, Integer needName) throws WxErrorException;
/** /**
*
* 企业可通过此接口将已离职成员为群主的群分配给另一个客服成员 * 企业可通过此接口将已离职成员为群主的群分配给另一个客服成员
* *
* <per> * <per>
* 注意 * 注意
* * <p>
* 群主离职了的客户群才可继承 * 群主离职了的客户群才可继承
* 继承给的新群主必须是配置了客户联系功能的成员 * 继承给的新群主必须是配置了客户联系功能的成员
* 继承给的新群主必须有设置实名 * 继承给的新群主必须有设置实名
* 继承给的新群主必须有激活企业微信 * 继承给的新群主必须有激活企业微信
* 同一个人的群限制每天最多分配300个给新群主 * 同一个人的群限制每天最多分配300个给新群主
* * <p>
* 权限说明: * 权限说明:
* * <p>
* 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取 * 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用accesstoken如何获取
* 第三方应用需拥有企业客户权限->客户联系->分配离职成员的客户群权限 * 第三方应用需拥有企业客户权限->客户联系->分配离职成员的客户群权限
* 对于第三方/自建应用群主必须在应用的可见范围 * 对于第三方/自建应用群主必须在应用的可见范围
* </per> * </per>
* @param chatIds 需要转群主的客户群ID列表取值范围 1 ~ 100 *
* @param newOwner 新群主ID * @param chatIds 需要转群主的客户群ID列表取值范围 1 ~ 100
* @param newOwner 新群主ID
* @return 分配结果主要是分配失败的群列表 * @return 分配结果主要是分配失败的群列表
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
*/ */
WxCpUserExternalGroupChatTransferResp transferGroupChat(String[] chatIds, String newOwner) throws WxErrorException; WxCpUserExternalGroupChatTransferResp transferGroupChat(String[] chatIds, String newOwner) throws WxErrorException;
/** /**
* <pre> * <pre>
@ -520,7 +525,7 @@ public interface WxCpExternalContactService {
* 同时传递tag_id和group_id时忽略tag_id仅以group_id作为过滤条件 * 同时传递tag_id和group_id时忽略tag_id仅以group_id作为过滤条件
* </pre> * </pre>
* *
* @param tagId the tag id * @param tagId the tag id
* @param groupId the tagGroup id * @param groupId the tagGroup id
* @return corp tag list * @return corp tag list
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception

View File

@ -148,7 +148,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
} }
@Override @Override
public WxCpExternalContactBatchInfo getContactDetailBatch(String userId, public WxCpExternalContactBatchInfo getContactDetailBatch(String[] userIdList,
String cursor, String cursor,
Integer limit) Integer limit)
throws WxErrorException { throws WxErrorException {
@ -157,7 +157,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
.getWxCpConfigStorage() .getWxCpConfigStorage()
.getApiUrl(GET_CONTACT_DETAIL_BATCH); .getApiUrl(GET_CONTACT_DETAIL_BATCH);
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
json.addProperty("userid", userId); json.add("userid_list", new Gson().toJsonTree(userIdList).getAsJsonArray());
if (StringUtils.isNotBlank(cursor)) { if (StringUtils.isNotBlank(cursor)) {
json.addProperty("cursor", cursor); json.addProperty("cursor", cursor);
} }

View File

@ -7,6 +7,7 @@ import me.chanjar.weixin.cp.api.ApiTestModule;
import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.WxCpBaseResp; import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.bean.external.*; import me.chanjar.weixin.cp.bean.external.*;
import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactBatchInfo;
import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo;
import me.chanjar.weixin.cp.bean.external.msg.Attachment; import me.chanjar.weixin.cp.bean.external.msg.Attachment;
import me.chanjar.weixin.cp.bean.external.msg.Image; import me.chanjar.weixin.cp.bean.external.msg.Image;
@ -115,6 +116,14 @@ public class WxCpExternalContactServiceImplTest {
assertNotNull(result); assertNotNull(result);
} }
@Test
public void testGetContactDetailBatch() throws WxErrorException {
String userId = this.configStorage.getUserId();
WxCpExternalContactBatchInfo result = this.wxCpService.getExternalContactService().getContactDetailBatch(new String[]{userId}, "", 100);
System.out.println(result);
assertNotNull(result);
}
@Test @Test
public void testGetCorpTagList() throws WxErrorException { public void testGetCorpTagList() throws WxErrorException {
String[] tag = {}; String[] tag = {};
@ -236,14 +245,14 @@ public class WxCpExternalContactServiceImplTest {
@Test @Test
public void testListGroupChat() throws WxErrorException { public void testListGroupChat() throws WxErrorException {
WxCpUserExternalGroupChatList result = this.wxCpService.getExternalContactService().listGroupChat(0, 100 ,0,new String[1],new String[1]); WxCpUserExternalGroupChatList result = this.wxCpService.getExternalContactService().listGroupChat(0, 100, 0, new String[1], new String[1]);
System.out.println(result); System.out.println(result);
assertNotNull(result); assertNotNull(result);
} }
@Test @Test
public void testListGroupChatV3() throws WxErrorException { public void testListGroupChatV3() throws WxErrorException {
WxCpUserExternalGroupChatList result = this.wxCpService.getExternalContactService().listGroupChat(100, "" ,0,new String[1]); WxCpUserExternalGroupChatList result = this.wxCpService.getExternalContactService().listGroupChat(100, "", 0, new String[1]);
System.out.println(result); System.out.println(result);
assertNotNull(result); assertNotNull(result);
} }
@ -301,7 +310,7 @@ public class WxCpExternalContactServiceImplTest {
.externalUserId("aaa") .externalUserId("aaa")
.remark("aa") .remark("aa")
.remarkCompany("aaa") .remarkCompany("aaa")
.remarkMobiles(new String[]{"111","222"}) .remarkMobiles(new String[]{"111", "222"})
.remarkPicMediaId("aaa") .remarkPicMediaId("aaa")
.build()); .build());
} }