tag.go 5.6 KB

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