transfer.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  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. err = util.DecodeWithError(response, result, "TransferCustomer")
  55. return result, err
  56. }
  57. // TransferResultRequest 查询客户接替状态请求
  58. type TransferResultRequest struct {
  59. HandoverUserID string `json:"handover_userid"`
  60. TakeoverUserID string `json:"takeover_userid"`
  61. Cursor string `json:"cursor"`
  62. }
  63. // TransferResultResponse 查询客户接替状态响应
  64. type TransferResultResponse struct {
  65. util.CommonError
  66. Customer []TransferResultItem `json:"customer"`
  67. NextCursor string `json:"next_cursor"`
  68. }
  69. // TransferResultItem 客户接替状态
  70. type TransferResultItem struct {
  71. ExternalUserID string `json:"external_userid"`
  72. Status int `json:"status"`
  73. TakeoverTime int64 `json:"takeover_time"`
  74. }
  75. // TransferResult 查询客户接替状态
  76. // see https://developer.work.weixin.qq.com/document/path/94088
  77. func (r *Client) TransferResult(req *TransferResultRequest) (*TransferResultResponse, error) {
  78. var (
  79. accessToken string
  80. err error
  81. )
  82. if accessToken, err = r.GetAccessToken(); err != nil {
  83. return nil, err
  84. }
  85. var response []byte
  86. if response, err = util.PostJSON(fmt.Sprintf(transferResultURL, accessToken), req); err != nil {
  87. return nil, err
  88. }
  89. result := &TransferResultResponse{}
  90. err = util.DecodeWithError(response, result, "TransferResult")
  91. return result, err
  92. }
  93. // GroupChatOnJobTransferRequest 分配在职成员的客户群请求
  94. type GroupChatOnJobTransferRequest struct {
  95. ChatIDList []string `json:"chat_id_list"`
  96. NewOwner string `json:"new_owner"`
  97. }
  98. // GroupChatOnJobTransferResponse 分配在职成员的客户群响应
  99. type GroupChatOnJobTransferResponse struct {
  100. util.CommonError
  101. FailedChatList []FailedChat `json:"failed_chat_list"`
  102. }
  103. // FailedChat 没能成功继承的群
  104. type FailedChat struct {
  105. ChatID string `json:"chat_id"`
  106. ErrCode int `json:"errcode"`
  107. ErrMsg string `json:"errmsg"`
  108. }
  109. // GroupChatOnJobTransfer 分配在职成员的客户群
  110. // see https://developer.work.weixin.qq.com/document/path/95703
  111. func (r *Client) GroupChatOnJobTransfer(req *GroupChatOnJobTransferRequest) (*GroupChatOnJobTransferResponse, error) {
  112. var (
  113. accessToken string
  114. err error
  115. )
  116. if accessToken, err = r.GetAccessToken(); err != nil {
  117. return nil, err
  118. }
  119. var response []byte
  120. if response, err = util.PostJSON(fmt.Sprintf(groupChatOnJobTransferURL, accessToken), req); err != nil {
  121. return nil, err
  122. }
  123. result := &GroupChatOnJobTransferResponse{}
  124. err = util.DecodeWithError(response, result, "GroupChatOnJobTransfer")
  125. return result, err
  126. }
  127. // GetUnassignedListRequest 获取待分配的离职成员列表请求
  128. type GetUnassignedListRequest struct {
  129. Cursor string `json:"cursor"`
  130. PageSize int `json:"page_size"`
  131. }
  132. // GetUnassignedListResponse 获取待分配的离职成员列表响应
  133. type GetUnassignedListResponse struct {
  134. util.CommonError
  135. Info []UnassignedListInfo `json:"info"`
  136. IsLast bool `json:"is_last"`
  137. NextCursor string `json:"next_cursor"`
  138. }
  139. // UnassignedListInfo 离职成员信息
  140. type UnassignedListInfo struct {
  141. HandoverUserID string `json:"handover_userid"`
  142. ExternalUserID string `json:"external_userid"`
  143. DimissionTime int64 `json:"dimission_time"`
  144. }
  145. // GetUnassignedList 获取待分配的离职成员列表
  146. // see https://developer.work.weixin.qq.com/document/path/92124
  147. func (r *Client) GetUnassignedList(req *GetUnassignedListRequest) (*GetUnassignedListResponse, error) {
  148. var (
  149. accessToken string
  150. err error
  151. )
  152. if accessToken, err = r.GetAccessToken(); err != nil {
  153. return nil, err
  154. }
  155. var response []byte
  156. if response, err = util.PostJSON(fmt.Sprintf(getUnassignedListURL, accessToken), req); err != nil {
  157. return nil, err
  158. }
  159. result := &GetUnassignedListResponse{}
  160. err = util.DecodeWithError(response, result, "GetUnassignedList")
  161. return result, err
  162. }
  163. // ResignedTransferCustomerRequest 分配离职成员的客户请求
  164. type ResignedTransferCustomerRequest struct {
  165. HandoverUserID string `json:"handover_userid"`
  166. TakeoverUserID string `json:"takeover_userid"`
  167. ExternalUserID []string `json:"external_userid"`
  168. }
  169. // ResignedTransferCustomerResponse 分配离职成员的客户响应
  170. type ResignedTransferCustomerResponse struct {
  171. util.CommonError
  172. Customer []TransferCustomerItem `json:"customer"`
  173. }
  174. // ResignedTransferCustomer 分配离职成员的客户
  175. // see https://developer.work.weixin.qq.com/document/path/94081
  176. func (r *Client) ResignedTransferCustomer(req *ResignedTransferCustomerRequest) (*ResignedTransferCustomerResponse, error) {
  177. var (
  178. accessToken string
  179. err error
  180. )
  181. if accessToken, err = r.GetAccessToken(); err != nil {
  182. return nil, err
  183. }
  184. var response []byte
  185. if response, err = util.PostJSON(fmt.Sprintf(resignedTransferCustomerURL, accessToken), req); err != nil {
  186. return nil, err
  187. }
  188. result := &ResignedTransferCustomerResponse{}
  189. err = util.DecodeWithError(response, result, "ResignedTransferCustomer")
  190. return result, err
  191. }
  192. // ResignedTransferResultRequest 查询离职客户接替状态请求
  193. type ResignedTransferResultRequest struct {
  194. HandoverUserID string `json:"handover_userid"`
  195. TakeoverUserID string `json:"takeover_userid"`
  196. Cursor string `json:"cursor"`
  197. }
  198. // ResignedTransferResultResponse 查询离职客户接替状态响应
  199. type ResignedTransferResultResponse struct {
  200. util.CommonError
  201. Customer []TransferResultItem `json:"customer"`
  202. NextCursor string `json:"next_cursor"`
  203. }
  204. // ResignedTransferResult 查询离职客户接替状态
  205. // see https://developer.work.weixin.qq.com/document/path/94082
  206. func (r *Client) ResignedTransferResult(req *ResignedTransferResultRequest) (*ResignedTransferResultResponse, error) {
  207. var (
  208. accessToken string
  209. err error
  210. )
  211. if accessToken, err = r.GetAccessToken(); err != nil {
  212. return nil, err
  213. }
  214. var response []byte
  215. if response, err = util.PostJSON(fmt.Sprintf(resignedTransferResultURL, accessToken), req); err != nil {
  216. return nil, err
  217. }
  218. result := &ResignedTransferResultResponse{}
  219. err = util.DecodeWithError(response, result, "ResignedTransferResult")
  220. return result, err
  221. }
  222. // GroupChatTransferRequest 分配离职成员的客户群请求
  223. type GroupChatTransferRequest struct {
  224. ChatIDList []string `json:"chat_id_list"`
  225. NewOwner string `json:"new_owner"`
  226. }
  227. // GroupChatTransferResponse 分配离职成员的客户群响应
  228. type GroupChatTransferResponse struct {
  229. util.CommonError
  230. FailedChatList []FailedChat `json:"failed_chat_list"`
  231. }
  232. // GroupChatTransfer 分配离职成员的客户群
  233. // see https://developer.work.weixin.qq.com/document/path/92127
  234. func (r *Client) GroupChatTransfer(req *GroupChatTransferRequest) (*GroupChatTransferResponse, error) {
  235. var (
  236. accessToken string
  237. err error
  238. )
  239. if accessToken, err = r.GetAccessToken(); err != nil {
  240. return nil, err
  241. }
  242. var response []byte
  243. if response, err = util.PostJSON(fmt.Sprintf(groupChatTransferURL, accessToken), req); err != nil {
  244. return nil, err
  245. }
  246. result := &GroupChatTransferResponse{}
  247. err = util.DecodeWithError(response, result, "GroupChatTransfer")
  248. return result, err
  249. }