transfer.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. package externalcontact
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const (
  7. // transferCustomerURL 分配在职成员的客户
  8. transferCustomerURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/transfer_customer?access_token=%s"
  9. // transferResultURL 查询客户接替状态
  10. transferResultURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/transfer_result?access_token=%s"
  11. // groupChatOnJobTransferURL 分配在职成员的客户群
  12. groupChatOnJobTransferURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/onjob_transfer?access_token=%s"
  13. // getUnassignedListURL 获取待分配的离职成员列表
  14. getUnassignedListURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_unassigned_list?access_token=%s"
  15. // resignedTransferCustomerURL 分配离职成员的客户
  16. resignedTransferCustomerURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/resigned/transfer_customer?access_token=%s"
  17. // resignedTransferResultURL 查询离职客户接替状态
  18. resignedTransferResultURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/resigned/transfer_result?access_token=%s"
  19. // groupChatTransferURL 分配离职成员的客户群
  20. groupChatTransferURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/transfer?access_token=%s"
  21. )
  22. // TransferCustomerRequest 分配在职成员的客户请求
  23. type TransferCustomerRequest struct {
  24. HandoverUserID string `json:"handover_userid"`
  25. TakeoverUserID string `json:"takeover_userid"`
  26. ExternalUserID []string `json:"external_userid"`
  27. TransferSuccessMsg string `json:"transfer_success_msg"`
  28. }
  29. // TransferCustomerResponse 分配在职成员的客户请求响应
  30. type TransferCustomerResponse struct {
  31. util.CommonError
  32. Customer []TransferCustomerItem `json:"customer"`
  33. }
  34. // TransferCustomerItem 客户分配结果
  35. type TransferCustomerItem struct {
  36. ExternalUserID string `json:"external_userid"`
  37. ErrCode int `json:"errcode"`
  38. }
  39. // TransferCustomer 分配在职成员的客户
  40. // see https://developer.work.weixin.qq.com/document/path/92125
  41. func (r *Client) TransferCustomer(req *TransferCustomerRequest) (*TransferCustomerResponse, error) {
  42. var (
  43. accessToken string
  44. err error
  45. )
  46. if accessToken, err = r.GetAccessToken(); err != nil {
  47. return nil, err
  48. }
  49. var response []byte
  50. if response, err = util.PostJSON(fmt.Sprintf(transferCustomerURL, accessToken), req); err != nil {
  51. return nil, err
  52. }
  53. result := &TransferCustomerResponse{}
  54. if err = util.DecodeWithError(response, result, "TransferCustomer"); err != nil {
  55. return nil, err
  56. }
  57. return result, nil
  58. }
  59. // TransferResultRequest 查询客户接替状态请求
  60. type TransferResultRequest struct {
  61. HandoverUserID string `json:"handover_userid"`
  62. TakeoverUserID string `json:"takeover_userid"`
  63. Cursor string `json:"cursor"`
  64. }
  65. // TransferResultResponse 查询客户接替状态响应
  66. type TransferResultResponse struct {
  67. util.CommonError
  68. Customer []TransferResultItem `json:"customer"`
  69. NextCursor string `json:"next_cursor"`
  70. }
  71. // TransferResultItem 客户接替状态
  72. type TransferResultItem struct {
  73. ExternalUserID string `json:"external_userid"`
  74. Status int `json:"status"`
  75. TakeoverTime int64 `json:"takeover_time"`
  76. }
  77. // TransferResult 查询客户接替状态
  78. // see https://developer.work.weixin.qq.com/document/path/94088
  79. func (r *Client) TransferResult(req *TransferResultRequest) (*TransferResultResponse, error) {
  80. var (
  81. accessToken string
  82. err error
  83. )
  84. if accessToken, err = r.GetAccessToken(); err != nil {
  85. return nil, err
  86. }
  87. var response []byte
  88. if response, err = util.PostJSON(fmt.Sprintf(transferResultURL, accessToken), req); err != nil {
  89. return nil, err
  90. }
  91. result := &TransferResultResponse{}
  92. if err = util.DecodeWithError(response, result, "TransferResult"); err != nil {
  93. return nil, err
  94. }
  95. return result, nil
  96. }
  97. // GroupChatOnJobTransferRequest 分配在职成员的客户群请求
  98. type GroupChatOnJobTransferRequest struct {
  99. ChatIDList []string `json:"chat_id_list"`
  100. NewOwner string `json:"new_owner"`
  101. }
  102. // GroupChatOnJobTransferResponse 分配在职成员的客户群响应
  103. type GroupChatOnJobTransferResponse struct {
  104. util.CommonError
  105. FailedChatList []FailedChat `json:"failed_chat_list"`
  106. }
  107. // FailedChat 没能成功继承的群
  108. type FailedChat struct {
  109. ChatID string `json:"chat_id"`
  110. ErrCode int `json:"errcode"`
  111. ErrMsg string `json:"errmsg"`
  112. }
  113. // GroupChatOnJobTransfer 分配在职成员的客户群
  114. // see https://developer.work.weixin.qq.com/document/path/95703
  115. func (r *Client) GroupChatOnJobTransfer(req *GroupChatOnJobTransferRequest) (*GroupChatOnJobTransferResponse, error) {
  116. var (
  117. accessToken string
  118. err error
  119. )
  120. if accessToken, err = r.GetAccessToken(); err != nil {
  121. return nil, err
  122. }
  123. var response []byte
  124. if response, err = util.PostJSON(fmt.Sprintf(groupChatOnJobTransferURL, accessToken), req); err != nil {
  125. return nil, err
  126. }
  127. result := &GroupChatOnJobTransferResponse{}
  128. if err = util.DecodeWithError(response, result, "GroupChatOnJobTransfer"); err != nil {
  129. return nil, err
  130. }
  131. return result, nil
  132. }
  133. // GetUnassignedListRequest 获取待分配的离职成员列表请求
  134. type GetUnassignedListRequest struct {
  135. Cursor string `json:"cursor"`
  136. PageSize int `json:"page_size"`
  137. }
  138. // GetUnassignedListResponse 获取待分配的离职成员列表响应
  139. type GetUnassignedListResponse struct {
  140. util.CommonError
  141. Info []UnassignedListInfo `json:"info"`
  142. IsLast bool `json:"is_last"`
  143. NextCursor string `json:"next_cursor"`
  144. }
  145. // UnassignedListInfo 离职成员信息
  146. type UnassignedListInfo struct {
  147. HandoverUserID string `json:"handover_userid"`
  148. ExternalUserID string `json:"external_userid"`
  149. DimissionTime int64 `json:"dimission_time"`
  150. }
  151. // GetUnassignedList 获取待分配的离职成员列表
  152. // see https://developer.work.weixin.qq.com/document/path/92124
  153. func (r *Client) GetUnassignedList(req *GetUnassignedListRequest) (*GetUnassignedListResponse, error) {
  154. var (
  155. accessToken string
  156. err error
  157. )
  158. if accessToken, err = r.GetAccessToken(); err != nil {
  159. return nil, err
  160. }
  161. var response []byte
  162. if response, err = util.PostJSON(fmt.Sprintf(getUnassignedListURL, accessToken), req); err != nil {
  163. return nil, err
  164. }
  165. result := &GetUnassignedListResponse{}
  166. if err = util.DecodeWithError(response, result, "GetUnassignedList"); err != nil {
  167. return nil, err
  168. }
  169. return result, nil
  170. }
  171. // ResignedTransferCustomerRequest 分配离职成员的客户请求
  172. type ResignedTransferCustomerRequest struct {
  173. HandoverUserID string `json:"handover_userid"`
  174. TakeoverUserID string `json:"takeover_userid"`
  175. ExternalUserID []string `json:"external_userid"`
  176. }
  177. // ResignedTransferCustomerResponse 分配离职成员的客户响应
  178. type ResignedTransferCustomerResponse struct {
  179. util.CommonError
  180. Customer []TransferCustomerItem `json:"customer"`
  181. }
  182. // ResignedTransferCustomer 分配离职成员的客户
  183. // see https://developer.work.weixin.qq.com/document/path/94081
  184. func (r *Client) ResignedTransferCustomer(req *ResignedTransferCustomerRequest) (*ResignedTransferCustomerResponse, error) {
  185. var (
  186. accessToken string
  187. err error
  188. )
  189. if accessToken, err = r.GetAccessToken(); err != nil {
  190. return nil, err
  191. }
  192. var response []byte
  193. if response, err = util.PostJSON(fmt.Sprintf(resignedTransferCustomerURL, accessToken), req); err != nil {
  194. return nil, err
  195. }
  196. result := &ResignedTransferCustomerResponse{}
  197. if err = util.DecodeWithError(response, result, "ResignedTransferCustomer"); err != nil {
  198. return nil, err
  199. }
  200. return result, nil
  201. }
  202. // ResignedTransferResultRequest 查询离职客户接替状态请求
  203. type ResignedTransferResultRequest struct {
  204. HandoverUserID string `json:"handover_userid"`
  205. TakeoverUserID string `json:"takeover_userid"`
  206. Cursor string `json:"cursor"`
  207. }
  208. // ResignedTransferResultResponse 查询离职客户接替状态响应
  209. type ResignedTransferResultResponse struct {
  210. util.CommonError
  211. Customer []TransferResultItem `json:"customer"`
  212. NextCursor string `json:"next_cursor"`
  213. }
  214. // ResignedTransferResult 查询离职客户接替状态
  215. // see https://developer.work.weixin.qq.com/document/path/94082
  216. func (r *Client) ResignedTransferResult(req *ResignedTransferResultRequest) (*ResignedTransferResultResponse, error) {
  217. var (
  218. accessToken string
  219. err error
  220. )
  221. if accessToken, err = r.GetAccessToken(); err != nil {
  222. return nil, err
  223. }
  224. var response []byte
  225. if response, err = util.PostJSON(fmt.Sprintf(resignedTransferResultURL, accessToken), req); err != nil {
  226. return nil, err
  227. }
  228. result := &ResignedTransferResultResponse{}
  229. if err = util.DecodeWithError(response, result, "ResignedTransferResult"); err != nil {
  230. return nil, err
  231. }
  232. return result, nil
  233. }
  234. // GroupChatTransferRequest 分配离职成员的客户群请求
  235. type GroupChatTransferRequest struct {
  236. ChatIDList []string `json:"chat_id_list"`
  237. NewOwner string `json:"new_owner"`
  238. }
  239. // GroupChatTransferResponse 分配离职成员的客户群响应
  240. type GroupChatTransferResponse struct {
  241. util.CommonError
  242. FailedChatList []FailedChat `json:"failed_chat_list"`
  243. }
  244. // GroupChatTransfer 分配离职成员的客户群
  245. // see https://developer.work.weixin.qq.com/document/path/92127
  246. func (r *Client) GroupChatTransfer(req *GroupChatTransferRequest) (*GroupChatTransferResponse, error) {
  247. var (
  248. accessToken string
  249. err error
  250. )
  251. if accessToken, err = r.GetAccessToken(); err != nil {
  252. return nil, err
  253. }
  254. var response []byte
  255. if response, err = util.PostJSON(fmt.Sprintf(groupChatTransferURL, accessToken), req); err != nil {
  256. return nil, err
  257. }
  258. result := &GroupChatTransferResponse{}
  259. if err = util.DecodeWithError(response, result, "GroupChatTransfer"); err != nil {
  260. return nil, err
  261. }
  262. return result, nil
  263. }