tag.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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 string `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, _ := json.Marshal(req)
  55. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", GetCropTagURL, accessToken), string(jsonData))
  56. if err != nil {
  57. return nil, err
  58. }
  59. var result GetCropTagListResponse
  60. err = util.DecodeWithError(response, &result, "GetCropTagList")
  61. if err != nil {
  62. return nil, err
  63. }
  64. return result.TagGroup, nil
  65. }
  66. // AddCropTagRequest 添加企业标签请求
  67. type AddCropTagRequest struct {
  68. GroupID string `json:"group_id"`
  69. GroupName string `json:"group_name"`
  70. Order int `json:"order"`
  71. Tag []AddCropTagItem `json:"tag"`
  72. AgentID int `json:"agentid"`
  73. }
  74. // AddCropTagItem 添加企业标签子项
  75. type AddCropTagItem struct {
  76. Name string `json:"name"`
  77. Order int `json:"order"`
  78. }
  79. // AddCropTagResponse 添加企业标签响应
  80. type AddCropTagResponse struct {
  81. util.CommonError
  82. TagGroup TagGroup `json:"tag_group"`
  83. }
  84. // AddCropTag 添加企业客户标签
  85. // @see https://developer.work.weixin.qq.com/document/path/92117
  86. func (r *Client) AddCropTag(req AddCropTagRequest) (*TagGroup, error) {
  87. var accessToken string
  88. accessToken, err := r.GetAccessToken()
  89. if err != nil {
  90. return nil, err
  91. }
  92. var response []byte
  93. jsonData, _ := json.Marshal(req)
  94. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", AddCropTagURL, accessToken), string(jsonData))
  95. if err != nil {
  96. return nil, err
  97. }
  98. var result AddCropTagResponse
  99. err = util.DecodeWithError(response, &result, "AddCropTag")
  100. if err != nil {
  101. return nil, err
  102. }
  103. return &result.TagGroup, nil
  104. }
  105. // EditCropTagRequest 编辑客户企业标签请求
  106. type EditCropTagRequest struct {
  107. ID string `json:"id"`
  108. Name string `json:"name"`
  109. Order int `json:"order"`
  110. AgentID string `json:"agent_id"`
  111. }
  112. // EditCropTag 修改企业客户标签
  113. // @see https://developer.work.weixin.qq.com/document/path/92117
  114. func (r *Client) EditCropTag(req EditCropTagRequest) error {
  115. accessToken, err := r.GetAccessToken()
  116. if err != nil {
  117. return err
  118. }
  119. var response []byte
  120. jsonData, _ := json.Marshal(req)
  121. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", EditCropTagURL, accessToken), string(jsonData))
  122. if err != nil {
  123. return err
  124. }
  125. return util.DecodeWithCommonError(response, "EditCropTag")
  126. }
  127. // DeleteCropTagRequest 删除企业标签请求
  128. type DeleteCropTagRequest struct {
  129. TagID []string `json:"tag_id"`
  130. GroupID []string `json:"group_id"`
  131. AgentID string `json:"agent_id"`
  132. }
  133. // DeleteCropTag 删除企业客户标签
  134. // @see https://developer.work.weixin.qq.com/document/path/92117
  135. func (r *Client) DeleteCropTag(req DeleteCropTagRequest) error {
  136. accessToken, err := r.GetAccessToken()
  137. if err != nil {
  138. return err
  139. }
  140. var response []byte
  141. jsonData, _ := json.Marshal(req)
  142. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", DelCropTagURL, accessToken), string(jsonData))
  143. if err != nil {
  144. return err
  145. }
  146. return util.DecodeWithCommonError(response, "DeleteCropTag")
  147. }
  148. // MarkTagRequest 给客户打标签请求
  149. // 相关文档地址:https://developer.work.weixin.qq.com/document/path/92118
  150. type MarkTagRequest struct {
  151. UserID string `json:"userid"`
  152. ExternalUserID string `json:"external_userid"`
  153. AddTag []string `json:"add_tag"`
  154. RemoveTag []string `json:"remove_tag"`
  155. }
  156. // MarkTag 为客户打上标签
  157. // @see https://developer.work.weixin.qq.com/document/path/92118
  158. func (r *Client) MarkTag(request MarkTagRequest) error {
  159. accessToken, err := r.GetAccessToken()
  160. if err != nil {
  161. return err
  162. }
  163. var response []byte
  164. jsonData, _ := json.Marshal(request)
  165. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", MarkCropTagURL, accessToken), string(jsonData))
  166. if err != nil {
  167. return err
  168. }
  169. return util.DecodeWithCommonError(response, "MarkTag")
  170. }