tag.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package externalcontact
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. // getCropTagURL 获取标签列表
  9. getCropTagURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list"
  10. // addCropTagURL 添加标签
  11. addCropTagURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_corp_tag"
  12. // editCropTagURL 修改标签
  13. editCropTagURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/edit_corp_tag"
  14. // delCropTagURL 删除标签
  15. delCropTagURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_corp_tag"
  16. // markCropTagURL 为客户打上、删除标签
  17. markCropTagURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag"
  18. )
  19. // GetCropTagRequest 获取企业标签请求
  20. type GetCropTagRequest struct {
  21. TagID []string `json:"tag_id"`
  22. GroupID []string `json:"group_id"`
  23. }
  24. // GetCropTagListResponse 获取企业标签列表响应
  25. type GetCropTagListResponse struct {
  26. util.CommonError
  27. TagGroup []TagGroup `json:"tag_group"`
  28. }
  29. // TagGroup 企业标签组
  30. type TagGroup struct {
  31. GroupID string `json:"group_id"`
  32. GroupName string `json:"group_name"`
  33. CreateTime int `json:"create_time"`
  34. GroupOrder int `json:"group_order"`
  35. Deleted bool `json:"deleted"`
  36. Tag []TagGroupTagItem `json:"tag"`
  37. }
  38. // TagGroupTagItem 企业标签内的子项
  39. type TagGroupTagItem struct {
  40. ID string `json:"id"`
  41. Name string `json:"name"`
  42. CreateTime int `json:"create_time"`
  43. Order int `json:"order"`
  44. Deleted bool `json:"deleted"`
  45. }
  46. // GetCropTagList 获取企业标签库
  47. // @see https://developer.work.weixin.qq.com/document/path/92117
  48. func (r *Client) GetCropTagList(req GetCropTagRequest) ([]TagGroup, error) {
  49. accessToken, err := r.GetAccessToken()
  50. if err != nil {
  51. return nil, err
  52. }
  53. var response []byte
  54. jsonData, err := json.Marshal(req)
  55. if err != nil {
  56. return nil, err
  57. }
  58. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", getCropTagURL, accessToken), string(jsonData))
  59. if err != nil {
  60. return nil, err
  61. }
  62. var result GetCropTagListResponse
  63. err = util.DecodeWithError(response, &result, "GetCropTagList")
  64. if err != nil {
  65. return nil, err
  66. }
  67. return result.TagGroup, nil
  68. }
  69. // AddCropTagRequest 添加企业标签请求
  70. type AddCropTagRequest struct {
  71. GroupID string `json:"group_id,omitempty"`
  72. GroupName string `json:"group_name"`
  73. Order int `json:"order"`
  74. Tag []AddCropTagItem `json:"tag"`
  75. AgentID int `json:"agentid"`
  76. }
  77. // AddCropTagItem 添加企业标签子项
  78. type AddCropTagItem struct {
  79. Name string `json:"name"`
  80. Order int `json:"order"`
  81. }
  82. // AddCropTagResponse 添加企业标签响应
  83. type AddCropTagResponse struct {
  84. util.CommonError
  85. TagGroup TagGroup `json:"tag_group"`
  86. }
  87. // AddCropTag 添加企业客户标签
  88. // @see https://developer.work.weixin.qq.com/document/path/92117
  89. func (r *Client) AddCropTag(req AddCropTagRequest) (*TagGroup, error) {
  90. var accessToken string
  91. accessToken, err := r.GetAccessToken()
  92. if err != nil {
  93. return nil, err
  94. }
  95. var response []byte
  96. jsonData, err := json.Marshal(req)
  97. if err != nil {
  98. return nil, err
  99. }
  100. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", addCropTagURL, accessToken), string(jsonData))
  101. if err != nil {
  102. return nil, err
  103. }
  104. var result AddCropTagResponse
  105. err = util.DecodeWithError(response, &result, "AddCropTag")
  106. if err != nil {
  107. return nil, err
  108. }
  109. return &result.TagGroup, nil
  110. }
  111. // EditCropTagRequest 编辑客户企业标签请求
  112. type EditCropTagRequest struct {
  113. ID string `json:"id"`
  114. Name string `json:"name"`
  115. Order int `json:"order"`
  116. AgentID string `json:"agent_id"`
  117. }
  118. // EditCropTag 修改企业客户标签
  119. // @see https://developer.work.weixin.qq.com/document/path/92117
  120. func (r *Client) EditCropTag(req EditCropTagRequest) error {
  121. accessToken, err := r.GetAccessToken()
  122. if err != nil {
  123. return err
  124. }
  125. var response []byte
  126. jsonData, err := json.Marshal(req)
  127. if err != nil {
  128. return err
  129. }
  130. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", editCropTagURL, accessToken), string(jsonData))
  131. if err != nil {
  132. return err
  133. }
  134. return util.DecodeWithCommonError(response, "EditCropTag")
  135. }
  136. // DeleteCropTagRequest 删除企业标签请求
  137. type DeleteCropTagRequest struct {
  138. TagID []string `json:"tag_id"`
  139. GroupID []string `json:"group_id"`
  140. AgentID string `json:"agent_id"`
  141. }
  142. // DeleteCropTag 删除企业客户标签
  143. // @see https://developer.work.weixin.qq.com/document/path/92117
  144. func (r *Client) DeleteCropTag(req DeleteCropTagRequest) error {
  145. accessToken, err := r.GetAccessToken()
  146. if err != nil {
  147. return err
  148. }
  149. var response []byte
  150. jsonData, err := json.Marshal(req)
  151. if err != nil {
  152. return err
  153. }
  154. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", delCropTagURL, accessToken), string(jsonData))
  155. if err != nil {
  156. return err
  157. }
  158. return util.DecodeWithCommonError(response, "DeleteCropTag")
  159. }
  160. // MarkTagRequest 给客户打标签请求
  161. // 相关文档地址:https://developer.work.weixin.qq.com/document/path/92118
  162. type MarkTagRequest struct {
  163. UserID string `json:"userid"`
  164. ExternalUserID string `json:"external_userid"`
  165. AddTag []string `json:"add_tag"`
  166. RemoveTag []string `json:"remove_tag"`
  167. }
  168. // MarkTag 为客户打上标签
  169. // @see https://developer.work.weixin.qq.com/document/path/92118
  170. func (r *Client) MarkTag(request MarkTagRequest) error {
  171. accessToken, err := r.GetAccessToken()
  172. if err != nil {
  173. return err
  174. }
  175. var response []byte
  176. jsonData, err := json.Marshal(request)
  177. if err != nil {
  178. return err
  179. }
  180. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", markCropTagURL, accessToken), string(jsonData))
  181. if err != nil {
  182. return err
  183. }
  184. return util.DecodeWithCommonError(response, "MarkTag")
  185. }