🆕 #2642【企业微信】增加客户群加入群聊管理相关接口

This commit is contained in:
Jc826 2022-05-13 16:29:56 +08:00 committed by GitHub
parent 6177ca05b8
commit 458e7c3d24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 253 additions and 5 deletions

View File

@ -56,7 +56,6 @@ public interface WxCpExternalContactService {
* @throws WxErrorException the wx error exception
*/
WxCpContactWayInfo getContactWay(@NonNull String configId) throws WxErrorException;
/**
* 更新企业已配置的联系我方式
*
@ -171,6 +170,50 @@ public interface WxCpExternalContactService {
*/
String unionidToExternalUserid(@NotNull String unionid,String openid) throws WxErrorException;
/**
*
* 配置客户群进群方式
* 企业可以在管理后台-客户联系中配置加入群聊的二维码或者小程序按钮客户通过扫描二维码或点击小程序上的按钮即可加入特定的客户群
* 企业可通过此接口为具有客户联系功能的成员生成专属的二维码或者小程序按钮
* 如果配置的是小程序按钮需要开发者的小程序接入小程序插件
* 注意:
* 通过API添加的配置不会在管理端进行展示每个企业可通过API最多配置50万个加入群聊(联系我共用50万的额度)
* 文档地址https://developer.work.weixin.qq.com/document/path/92229
* @param wxCpGroupJoinWayInfo
* @return {@link WxCpGroupJoinWayResult}
* @throws WxErrorException
*/
WxCpGroupJoinWayResult addJoinWay(@NonNull WxCpGroupJoinWayInfo wxCpGroupJoinWayInfo) throws WxErrorException;
/**
*更新客户群进群方式配置
* 更新进群方式配置信息注意使用覆盖的方式更新
* 文档地址https://developer.work.weixin.qq.com/document/path/92229
* @param wxCpGroupJoinWayInfo
* @return
* @throws WxErrorException
*/
WxCpBaseResp updateJoinWay(@NonNull WxCpGroupJoinWayInfo wxCpGroupJoinWayInfo) throws WxErrorException;
/**
* 获取客户群进群方式配置
* 获取企业配置的群二维码或小程序按钮
* 文档地址https://developer.work.weixin.qq.com/document/path/92229
* @param configId
* @return
* @throws WxErrorException
*/
WxCpGroupJoinWayInfo getJoinWay(@NonNull String configId) throws WxErrorException;
/**
* 删除客户群进群方式配置
* 文档地址https://developer.work.weixin.qq.com/document/path/92229
* @param configId
* @return
* @throws WxErrorException
*/
WxCpBaseResp delJoinWay( @NonNull String configId) throws WxErrorException;
/**
* 代开发应用external_userid转换
* <pre>
@ -1025,4 +1068,5 @@ public interface WxCpExternalContactService {
* @param productId 商品id
*/
void deleteProductAlbum(String productId) throws WxErrorException;
}

View File

@ -882,5 +882,43 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
this.mainService.post(url, o.toString());
}
@Override
public WxCpGroupJoinWayResult addJoinWay(@NonNull WxCpGroupJoinWayInfo wxCpGroupJoinWayInfo) throws WxErrorException {
if (wxCpGroupJoinWayInfo.getJoinWay().getChatIdList() != null && wxCpGroupJoinWayInfo.getJoinWay().getChatIdList().size() > 5) {
throw new WxRuntimeException("使用该配置的客户群ID列表支持5个");
}
final String url = this.mainService.getWxCpConfigStorage().getApiUrl(ADD_JOIN_WAY);
String responseContent = this.mainService.post(url, wxCpGroupJoinWayInfo.getJoinWay().toJson());
return WxCpGroupJoinWayResult.fromJson(responseContent);
}
@Override
public WxCpBaseResp updateJoinWay(@NonNull WxCpGroupJoinWayInfo wxCpGroupJoinWayInfo) throws WxErrorException {
if (wxCpGroupJoinWayInfo.getJoinWay().getChatIdList() != null && wxCpGroupJoinWayInfo.getJoinWay().getChatIdList().size() > 5) {
throw new WxRuntimeException("使用该配置的客户群ID列表支持5个");
}
final String url = this.mainService.getWxCpConfigStorage().getApiUrl(UPDATE_JOIN_WAY);
String responseContent = this.mainService.post(url, wxCpGroupJoinWayInfo.getJoinWay().toJson());
return WxCpBaseResp.fromJson(responseContent);
}
@Override
public WxCpGroupJoinWayInfo getJoinWay(String configId) throws WxErrorException {
JsonObject json = new JsonObject();
json.addProperty("config_id", configId);
final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_JOIN_WAY);
String responseContent = this.mainService.post(url,json);
return WxCpGroupJoinWayInfo.fromJson(responseContent);
}
@Override
public WxCpBaseResp delJoinWay(@NonNull String configId) throws WxErrorException {
JsonObject json = new JsonObject();
json.addProperty("config_id", configId);
final String url = this.mainService.getWxCpConfigStorage().getApiUrl(DEL_JOIN_WAY);
String responseContent = this.mainService.post(url, json);
return WxCpBaseResp.fromJson(responseContent);
}
}

View File

@ -0,0 +1,92 @@
package me.chanjar.weixin.cp.bean.external;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
import java.io.Serializable;
import java.util.List;
/**
*客户群加入群聊对象
* @author Jc
*/
@Data
@NoArgsConstructor
public class WxCpGroupJoinWayInfo implements Serializable {
private static final long serialVersionUID = 5621905029624794129L;
@SerializedName("join_way")
private JoinWay joinWay;
@Getter
@Setter
public static class JoinWay implements Serializable {
private static final long serialVersionUID = 5621905029624794122L;
/**
* 联系方式的配置id
*/
@SerializedName("config_id")
private String configId;
/**
* 场景
* 1 - 群的小程序插件
* 2 - 群的二维码插件
*/
@SerializedName("scene")
private Integer scene;
/**
* 联系方式的备注信息用于助记超过30个字符将被截断
*/
@SerializedName("remark")
private String remark;
/**
* 当群满了后是否自动新建群0-1- 默认为1
*/
@SerializedName("auto_create_room")
private Integer autoCreateRoom;
/**
* 自动建群的群名前缀当auto_create_room为1时有效最长40个utf8字符
*/
@SerializedName("room_base_name")
private String roomBaseName;
/**
* 自动建群的群起始序号当auto_create_room为1时有效
*/
@SerializedName("room_base_id")
private Integer roomBaseId;
/**
* 使用该配置的客户群ID列表支持5个
*/
@SerializedName("chat_id_list")
private List<String> chatIdList;
/**
* 联系二维码的URL仅在配置为群二维码时返回
*/
@SerializedName("qr_code")
private String qrCode;
/**
企业自定义的state参数用于区分不同的入群渠道不超过30个UTF-8字符
如果有设置此参数在调用获取客户群详情接口时会返回每个群成员对应的该参数值
*/
@SerializedName("state")
private Integer state;
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
public static WxCpGroupJoinWayInfo.JoinWay fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpGroupJoinWayInfo.JoinWay.class);
}
}
public static WxCpGroupJoinWayInfo fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpGroupJoinWayInfo.class);
}
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
}

View File

@ -0,0 +1,23 @@
package me.chanjar.weixin.cp.bean.external;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
/**
*客户群加入群聊配置处理结果
* @author Jc
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WxCpGroupJoinWayResult extends WxCpBaseResp {
private static final long serialVersionUID = 5621905029624794129L;
@SerializedName("config_id")
private String configId;
public static WxCpGroupJoinWayResult fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpGroupJoinWayResult.class);
}
}

View File

@ -263,6 +263,7 @@ public interface WxCpApiPathConsts {
String UPDATE_REMARK = "/cgi-bin/externalcontact/remark";
String LIST_EXTERNAL_CONTACT = "/cgi-bin/externalcontact/list?userid=";
String LIST_UNASSIGNED_CONTACT = "/cgi-bin/externalcontact/get_unassigned_list";
@Deprecated
String TRANSFER_UNASSIGNED_CONTACT = "/cgi-bin/externalcontact/transfer";
String TRANSFER_CUSTOMER = "/cgi-bin/externalcontact/transfer_customer";
@ -275,6 +276,10 @@ public interface WxCpApiPathConsts {
String GROUP_CHAT_TRANSFER = "/cgi-bin/externalcontact/groupchat/transfer";
String LIST_USER_BEHAVIOR_DATA = "/cgi-bin/externalcontact/get_user_behavior_data";
String LIST_GROUP_CHAT_DATA = "/cgi-bin/externalcontact/groupchat/statistic";
String ADD_JOIN_WAY = "/cgi-bin/externalcontact/groupchat/add_join_way";
String GET_JOIN_WAY = "/cgi-bin/externalcontact/groupchat/get_join_way";
String UPDATE_JOIN_WAY = "/cgi-bin/externalcontact/groupchat/update_join_way";
String DEL_JOIN_WAY = "/cgi-bin/externalcontact/groupchat/del_join_way";
String ADD_MSG_TEMPLATE = "/cgi-bin/externalcontact/add_msg_template";
String SEND_WELCOME_MSG = "/cgi-bin/externalcontact/send_welcome_msg";

View File

@ -12,14 +12,13 @@ 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.Image;
import me.chanjar.weixin.cp.bean.external.msg.Video;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import org.testng.collections.CollectionUtils;
import static org.testng.Assert.assertNotNull;
@ -337,4 +336,51 @@ public class WxCpExternalContactServiceImplTest {
assertNotNull(result);
}
@Test
public void testAddJoinWay() throws WxErrorException {
WxCpGroupJoinWayInfo.JoinWay joinWay = new WxCpGroupJoinWayInfo.JoinWay();
joinWay.setChatIdList(Arrays.asList("wrfpBaCwAAxR-iIqIUa5vvbpZQcAexJA"));
joinWay.setScene(2);
joinWay.setAutoCreateRoom(1);
joinWay.setRemark("CreateDate:" + DateFormatUtils.ISO_8601_EXTENDED_DATETIME_FORMAT.format(new Date()));
WxCpGroupJoinWayInfo info = new WxCpGroupJoinWayInfo();
info.setJoinWay(joinWay);
this.wxCpService.getExternalContactService().addJoinWay(info);
}
@Test
public void testUpdateJoinWay() throws WxErrorException {
final String configId = "";
WxCpGroupJoinWayInfo.JoinWay joinWay = new WxCpGroupJoinWayInfo.JoinWay();
joinWay.setConfigId(configId);
joinWay.setChatIdList(Arrays.asList("wrfpBaCwAAxR-iIqIUa5vvbpZQcAexJA"));
joinWay.setScene(2);
joinWay.setAutoCreateRoom(1);
joinWay.setRemark("CreateDate:" + DateFormatUtils.ISO_8601_EXTENDED_DATETIME_FORMAT.format(new Date()));
WxCpGroupJoinWayInfo info = new WxCpGroupJoinWayInfo();
info.setJoinWay(joinWay);
this.wxCpService.getExternalContactService().updateJoinWay(info);
}
@Test
public void testDelJoinWay() throws WxErrorException {
final String configId = "";
this.wxCpService.getExternalContactService().delJoinWay(configId);
}
@Test
public void testGetJoinWay() throws WxErrorException {
final String configId = "";
this.wxCpService.getExternalContactService().getJoinWay(configId);
}
}