diff --git a/work/addresslist/tag.go b/work/addresslist/tag.go index fe12acd..3e976e3 100644 --- a/work/addresslist/tag.go +++ b/work/addresslist/tag.go @@ -13,6 +13,14 @@ const ( updateTagURL = "https://qyapi.weixin.qq.com/cgi-bin/tag/update?access_token=%s" // deleteTagURL 删除标签 deleteTagURL = "https://qyapi.weixin.qq.com/cgi-bin/tag/delete?access_token=%s&tagid=%d" + // getTagURL 获取标签成员 + getTagURL = "https://qyapi.weixin.qq.com/cgi-bin/tag/get?access_token=%s&tagid=%d" + // addTagUsersURL 增加标签成员 + addTagUsersURL = "https://qyapi.weixin.qq.com/cgi-bin/tag/addtagusers?access_token=%s" + // delTagUsersURL 删除标签成员 + delTagUsersURL = "https://qyapi.weixin.qq.com/cgi-bin/tag/deltagusers?access_token=%s" + // listTagURL 获取标签列表 + listTagURL = "https://qyapi.weixin.qq.com/cgi-bin/tag/list?access_token=%s" ) type ( @@ -90,3 +98,145 @@ func (r *Client) DeleteTag(tagID int) error { } return util.DecodeWithCommonError(response, "DeleteTag") } + +type ( + // GetTagResponse 获取标签成员响应 + GetTagResponse struct { + util.CommonError + TagName string `json:"tagname"` + UserList []GetTagUserList `json:"userlist"` + PartyList []int `json:"partylist"` + } + // GetTagUserList 标签中包含的成员列表 + GetTagUserList struct { + UserID string `json:"userid"` + Name string `json:"name"` + } +) + +// GetTag 获取标签成员 +// @see https://developer.work.weixin.qq.com/document/path/90213 +func (r *Client) GetTag(tagID int) (*GetTagResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.HTTPGet(fmt.Sprintf(getTagURL, accessToken, tagID)); err != nil { + return nil, err + } + result := &GetTagResponse{} + if err = util.DecodeWithError(response, result, "GetTag"); err != nil { + return nil, err + } + return result, nil +} + +type ( + // AddTagUsersRequest 增加标签成员请求 + AddTagUsersRequest struct { + TagID int `json:"tagid"` + UserList []string `json:"userlist"` + PartyList []int `json:"partylist"` + } + // AddTagUsersResponse 增加标签成员响应 + AddTagUsersResponse struct { + util.CommonError + InvalidList string `json:"invalidlist"` + InvalidParty []int `json:"invalidparty"` + } +) + +// AddTagUsers 增加标签成员 +// see https://developer.work.weixin.qq.com/document/path/90214 +func (r *Client) AddTagUsers(req *AddTagUsersRequest) (*AddTagUsersResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(addTagUsersURL, accessToken), req); err != nil { + return nil, err + } + result := &AddTagUsersResponse{} + if err = util.DecodeWithError(response, result, "AddTagUsers"); err != nil { + return nil, err + } + return result, nil +} + +type ( + // DelTagUsersRequest 删除标签成员请求 + DelTagUsersRequest struct { + TagID int `json:"tagid"` + UserList []string `json:"userlist"` + PartyList []int `json:"partylist"` + } + // DelTagUsersResponse 删除标签成员响应 + DelTagUsersResponse struct { + util.CommonError + InvalidList string `json:"invalidlist"` + InvalidParty []int `json:"invalidparty"` + } +) + +// DelTagUsers 删除标签成员 +// see https://developer.work.weixin.qq.com/document/path/90215 +func (r *Client) DelTagUsers(req *DelTagUsersRequest) (*DelTagUsersResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.PostJSON(fmt.Sprintf(delTagUsersURL, accessToken), req); err != nil { + return nil, err + } + result := &DelTagUsersResponse{} + if err = util.DecodeWithError(response, result, "DelTagUsers"); err != nil { + return nil, err + } + return result, nil +} + +type ( + // ListTagResponse 获取标签列表响应 + ListTagResponse struct { + util.CommonError + TagList []Tag `json:"taglist"` + } + // Tag 标签 + Tag struct { + TagID int `json:"tagid"` + TagName string `json:"tagname"` + } +) + +// ListTag 获取标签列表 +// @see https://developer.work.weixin.qq.com/document/path/90216 +func (r *Client) ListTag() (*ListTagResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var response []byte + if response, err = util.HTTPGet(fmt.Sprintf(listTagURL, accessToken)); err != nil { + return nil, err + } + result := &ListTagResponse{} + if err = util.DecodeWithError(response, result, "ListTag"); err != nil { + return nil, err + } + return result, nil +}