Skip to content

Commit 3cb741a

Browse files
authored
企业微信客户群进群方式配置(#631) (#632)
1 parent da38592 commit 3cb741a

File tree

2 files changed

+289
-0
lines changed

2 files changed

+289
-0
lines changed

work/externalcontact/groupchat.go

+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
package externalcontact
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/silenceper/wechat/v2/util"
7+
)
8+
9+
// OpengIDToChatIDURL 客户群opengid转换URL
10+
const OpengIDToChatIDURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/opengid_to_chatid"
11+
12+
type (
13+
//GroupChatListRequest 获取客户群列表的请求参数
14+
GroupChatListRequest struct {
15+
StatusFilter int `json:"status_filter"` // 非必填 客户群跟进状态过滤。0 - 所有列表(即不过滤) 1 - 离职待继承 2 - 离职继承中 3 - 离职继承完成
16+
OwnerFilter OwnerFilter `json:"owner_filter"` //非必填 群主过滤。如果不填,表示获取应用可见范围内全部群主的数据(但是不建议这么用,如果可见范围人数超过1000人,为了防止数据包过大,会报错 81017)
17+
Cursor string `json:"cursor"` //非必填 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用不填
18+
Limit int `json:"limit"` //必填 分页,预期请求的数据量,取值范围 1 ~ 1000
19+
}
20+
21+
//GroupChatList 客户群列表
22+
GroupChatList struct {
23+
ChatID string `json:"chat_id"`
24+
Status int `json:"status"`
25+
}
26+
//GroupChatListResponse 获取客户群列表的返回值
27+
GroupChatListResponse struct {
28+
util.CommonError
29+
GroupChatList []GroupChatList `json:"group_chat_list"`
30+
NextCursor string `json:"next_cursor"` //游标
31+
}
32+
)
33+
34+
// GetGroupChatList 获取客户群列表
35+
// @see https://developer.work.weixin.qq.com/document/path/92120
36+
func (r *Client) GetGroupChatList(req *GroupChatListRequest) (*GroupChatListResponse, error) {
37+
accessToken, err := r.GetAccessToken()
38+
if err != nil {
39+
return nil, err
40+
}
41+
var response []byte
42+
response, err = util.PostJSON(fmt.Sprintf("%s/list?access_token=%s", GroupChatURL, accessToken), req)
43+
if err != nil {
44+
return nil, err
45+
}
46+
result := &GroupChatListResponse{}
47+
if err = util.DecodeWithError(response, result, "GetGroupChatList"); err != nil {
48+
return nil, err
49+
}
50+
return result, nil
51+
}
52+
53+
type (
54+
//GroupChatDetailRequest 客户群详情 请求参数
55+
GroupChatDetailRequest struct {
56+
ChatID string `json:"chat_id"`
57+
NeedName int `json:"need_name"`
58+
}
59+
//Invitor 邀请者
60+
Invitor struct {
61+
UserID string `json:"userid"` //邀请者的userid
62+
}
63+
//GroupChatMember 群成员
64+
GroupChatMember struct {
65+
UserID string `json:"userid"` //群成员id
66+
Type int `json:"type"` //成员类型。 1 - 企业成员 2 - 外部联系人
67+
JoinTime int `json:"join_time"` //入群时间
68+
JoinScene int `json:"join_scene"` //入群方式 1 - 由群成员邀请入群(直接邀请入群) 2 - 由群成员邀请入群(通过邀请链接入群) 3 - 通过扫描群二维码入群
69+
Invitor Invitor `json:"invitor,omitempty"` //邀请者。目前仅当是由本企业内部成员邀请入群时会返回该值
70+
GroupNickname string `json:"group_nickname"` //在群里的昵称
71+
Name string `json:"name"` //名字。仅当 need_name = 1 时返回 如果是微信用户,则返回其在微信中设置的名字 如果是企业微信联系人,则返回其设置对外展示的别名或实名
72+
UnionID string `json:"unionid,omitempty"` //外部联系人在微信开放平台的唯一身份标识(微信unionid),通过此字段企业可将外部联系人与公众号/小程序用户关联起来。仅当群成员类型是微信用户(包括企业成员未添加好友),且企业绑定了微信开发者ID有此字段(查看绑定方法)。第三方不可获取,上游企业不可获取下游企业客户的unionid字段
73+
}
74+
//GroupChatAdmin 群管理员
75+
GroupChatAdmin struct {
76+
UserID string `json:"userid"` //群管理员userid
77+
}
78+
//GroupChat 客户群详情
79+
GroupChat struct {
80+
ChatID string `json:"chat_id"` //客户群ID
81+
Name string `json:"name"` //群名
82+
Owner string `json:"owner"` //群主ID
83+
CreateTime int `json:"create_time"` //群的创建时间
84+
Notice string `json:"notice"` //群公告
85+
MemberList []GroupChatMember `json:"member_list"` //群成员列表
86+
AdminList []GroupChatAdmin `json:"admin_list"` //群管理员列表
87+
}
88+
//GroupChatDetailResponse 客户群详情 返回值
89+
GroupChatDetailResponse struct {
90+
util.CommonError
91+
GroupChat GroupChat `json:"group_chat"` //客户群详情
92+
}
93+
)
94+
95+
// GetGroupChatDetail 获取客户群详情
96+
// @see https://developer.work.weixin.qq.com/document/path/92122
97+
func (r *Client) GetGroupChatDetail(req *GroupChatDetailRequest) (*GroupChatDetailResponse, error) {
98+
accessToken, err := r.GetAccessToken()
99+
if err != nil {
100+
return nil, err
101+
}
102+
var response []byte
103+
response, err = util.PostJSON(fmt.Sprintf("%s/get?access_token=%s", GroupChatURL, accessToken), req)
104+
if err != nil {
105+
return nil, err
106+
}
107+
result := &GroupChatDetailResponse{}
108+
if err = util.DecodeWithError(response, result, "GetGroupChatDetail"); err != nil {
109+
return nil, err
110+
}
111+
return result, nil
112+
}
113+
114+
type (
115+
//OpengIDToChatIDRequest 客户群opengid转换 请求参数
116+
OpengIDToChatIDRequest struct {
117+
OpengID string `json:"opengid"`
118+
}
119+
//OpengIDToChatIDResponse 客户群opengid转换 返回值
120+
OpengIDToChatIDResponse struct {
121+
util.CommonError
122+
ChatID string `json:"chat_id"` //客户群ID
123+
}
124+
)
125+
126+
// OpengIDToChatID 客户群opengid转换
127+
// @see https://developer.work.weixin.qq.com/document/path/94828
128+
func (r *Client) OpengIDToChatID(req *OpengIDToChatIDRequest) (*OpengIDToChatIDResponse, error) {
129+
accessToken, err := r.GetAccessToken()
130+
if err != nil {
131+
return nil, err
132+
}
133+
var response []byte
134+
response, err = util.PostJSON(fmt.Sprintf("%s?access_token=%s", OpengIDToChatIDURL, accessToken), req)
135+
if err != nil {
136+
return nil, err
137+
}
138+
result := &OpengIDToChatIDResponse{}
139+
if err = util.DecodeWithError(response, result, "GetGroupChatDetail"); err != nil {
140+
return nil, err
141+
}
142+
return result, nil
143+
}

work/externalcontact/join_way.go

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package externalcontact
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/silenceper/wechat/v2/util"
7+
)
8+
9+
// GroupChatURL 客户群
10+
const GroupChatURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat"
11+
12+
type (
13+
// AddJoinWayRequest 添加群配置请求参数
14+
AddJoinWayRequest struct {
15+
Scene int `json:"scene"` // 必填 1 - 群的小程序插件,2 - 群的二维码插件
16+
Remark string `json:"remark"` //非必填 联系方式的备注信息,用于助记,超过30个字符将被截断
17+
AutoCreateRoom int `json:"auto_create_room"` //非必填 当群满了后,是否自动新建群。0-否;1-是。 默认为1
18+
RoomBaseName string `json:"room_base_name"` //非必填 自动建群的群名前缀,当auto_create_room为1时有效。最长40个utf8字符
19+
RoomBaseID int `json:"room_base_id"` //非必填 自动建群的群起始序号,当auto_create_room为1时有效
20+
ChatIDList []string `json:"chat_id_list"` //必填 使用该配置的客户群ID列表,支持5个。见客户群ID获取方法
21+
State string `json:"state"` //非必填 企业自定义的state参数,用于区分不同的入群渠道。不超过30个UTF-8字符
22+
}
23+
24+
// AddJoinWayResponse 添加群配置返回值
25+
AddJoinWayResponse struct {
26+
util.CommonError
27+
ConfigID string `json:"config_id"`
28+
}
29+
)
30+
31+
// AddJoinWay 加入群聊
32+
// @see https://developer.work.weixin.qq.com/document/path/92229
33+
func (r *Client) AddJoinWay(req *AddJoinWayRequest) (*AddJoinWayResponse, error) {
34+
var (
35+
accessToken string
36+
err error
37+
response []byte
38+
)
39+
if accessToken, err = r.GetAccessToken(); err != nil {
40+
return nil, err
41+
}
42+
response, err = util.PostJSON(fmt.Sprintf("%s/add_join_way?access_token=%s", GroupChatURL, accessToken), req)
43+
if err != nil {
44+
return nil, err
45+
}
46+
result := &AddJoinWayResponse{}
47+
if err = util.DecodeWithError(response, result, "AddJoinWay"); err != nil {
48+
return nil, err
49+
}
50+
return result, nil
51+
}
52+
53+
type (
54+
//JoinWayConfigRequest 获取或删除群配置的请求参数
55+
JoinWayConfigRequest struct {
56+
ConfigID string `json:"config_id"`
57+
}
58+
59+
//JoinWay 群配置
60+
JoinWay struct {
61+
ConfigID string `json:"config_id"`
62+
Scene int `json:"scene"`
63+
Remark string `json:"remark"`
64+
AutoCreateRoom int `json:"auto_create_room"`
65+
RoomBaseName string `json:"room_base_name"`
66+
RoomBaseID int `json:"room_base_id"`
67+
ChatIDList []string `json:"chat_id_list"`
68+
QrCode string `json:"qr_code"`
69+
State string `json:"state"`
70+
}
71+
//GetJoinWayResponse 获取群配置的返回值
72+
GetJoinWayResponse struct {
73+
util.CommonError
74+
JoinWay JoinWay `json:"join_way"`
75+
}
76+
)
77+
78+
// GetJoinWay 获取客户群进群方式配置
79+
// @see https://developer.work.weixin.qq.com/document/path/92229
80+
func (r *Client) GetJoinWay(req *JoinWayConfigRequest) (*GetJoinWayResponse, error) {
81+
var (
82+
accessToken string
83+
err error
84+
response []byte
85+
)
86+
if accessToken, err = r.GetAccessToken(); err != nil {
87+
return nil, err
88+
}
89+
response, err = util.PostJSON(fmt.Sprintf("%s/get_join_way?access_token=%s", GroupChatURL, accessToken), req)
90+
if err != nil {
91+
return nil, err
92+
}
93+
result := &GetJoinWayResponse{}
94+
if err = util.DecodeWithError(response, result, "GetJoinWay"); err != nil {
95+
return nil, err
96+
}
97+
return result, nil
98+
}
99+
100+
// UpdateJoinWayRequest 更新群配置的请求参数
101+
type UpdateJoinWayRequest struct {
102+
ConfigID string `json:"config_id"`
103+
Scene int `json:"scene"` // 必填 1 - 群的小程序插件,2 - 群的二维码插件
104+
Remark string `json:"remark"` //非必填 联系方式的备注信息,用于助记,超过30个字符将被截断
105+
AutoCreateRoom int `json:"auto_create_room"` //非必填 当群满了后,是否自动新建群。0-否;1-是。 默认为1
106+
RoomBaseName string `json:"room_base_name"` //非必填 自动建群的群名前缀,当auto_create_room为1时有效。最长40个utf8字符
107+
RoomBaseID int `json:"room_base_id"` //非必填 自动建群的群起始序号,当auto_create_room为1时有效
108+
ChatIDList []string `json:"chat_id_list"` //必填 使用该配置的客户群ID列表,支持5个。见客户群ID获取方法
109+
State string `json:"state"` //非必填 企业自定义的state参数,用于区分不同的入群渠道。不超过30个UTF-8字符
110+
}
111+
112+
// UpdateJoinWay 更新客户群进群方式配置
113+
// @see https://developer.work.weixin.qq.com/document/path/92229
114+
func (r *Client) UpdateJoinWay(req *UpdateJoinWayRequest) error {
115+
var (
116+
accessToken string
117+
err error
118+
response []byte
119+
)
120+
if accessToken, err = r.GetAccessToken(); err != nil {
121+
return err
122+
}
123+
response, err = util.PostJSON(fmt.Sprintf("%s/update_join_way?access_token=%s", GroupChatURL, accessToken), req)
124+
if err != nil {
125+
return err
126+
}
127+
return util.DecodeWithCommonError(response, "UpdateJoinWay")
128+
}
129+
130+
// DelJoinWay 删除客户群进群方式配置
131+
// @see https://developer.work.weixin.qq.com/document/path/92229
132+
func (r *Client) DelJoinWay(req *JoinWayConfigRequest) error {
133+
var (
134+
accessToken string
135+
err error
136+
response []byte
137+
)
138+
if accessToken, err = r.GetAccessToken(); err != nil {
139+
return err
140+
}
141+
response, err = util.PostJSON(fmt.Sprintf("%s/del_join_way?access_token=%s", GroupChatURL, accessToken), req)
142+
if err != nil {
143+
return err
144+
}
145+
return util.DecodeWithCommonError(response, "DelJoinWay")
146+
}

0 commit comments

Comments
 (0)