mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
feat:企业微信-客户联系-在职继承/离职继承 (#699)
Co-authored-by: markwang <www.wang61@qq.com>
This commit is contained in:
291
work/externalcontact/transfer.go
Normal file
291
work/externalcontact/transfer.go
Normal file
@@ -0,0 +1,291 @@
|
||||
package externalcontact
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/silenceper/wechat/v2/util"
|
||||
)
|
||||
|
||||
const (
|
||||
// transferCustomerURL 分配在职成员的客户
|
||||
transferCustomerURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/transfer_customer?access_token=%s"
|
||||
// transferResultURL 查询客户接替状态
|
||||
transferResultURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/transfer_result?access_token=%s"
|
||||
// groupChatOnJobTransferURL 分配在职成员的客户群
|
||||
groupChatOnJobTransferURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/onjob_transfer?access_token=%s"
|
||||
// getUnassignedListURL 获取待分配的离职成员列表
|
||||
getUnassignedListURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_unassigned_list?access_token=%s"
|
||||
// resignedTransferCustomerURL 分配离职成员的客户
|
||||
resignedTransferCustomerURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/resigned/transfer_customer?access_token=%s"
|
||||
// resignedTransferResultURL 查询离职客户接替状态
|
||||
resignedTransferResultURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/resigned/transfer_result?access_token=%s"
|
||||
// groupChatTransferURL 分配离职成员的客户群
|
||||
groupChatTransferURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/transfer?access_token=%s"
|
||||
)
|
||||
|
||||
// TransferCustomerRequest 分配在职成员的客户请求
|
||||
type TransferCustomerRequest struct {
|
||||
HandoverUserID string `json:"handover_userid"`
|
||||
TakeoverUserID string `json:"takeover_userid"`
|
||||
ExternalUserID []string `json:"external_userid"`
|
||||
TransferSuccessMsg string `json:"transfer_success_msg"`
|
||||
}
|
||||
|
||||
// TransferCustomerResponse 分配在职成员的客户请求响应
|
||||
type TransferCustomerResponse struct {
|
||||
util.CommonError
|
||||
Customer []TransferCustomerItem `json:"customer"`
|
||||
}
|
||||
|
||||
// TransferCustomerItem 客户分配结果
|
||||
type TransferCustomerItem struct {
|
||||
ExternalUserID string `json:"external_userid"`
|
||||
ErrCode int `json:"errcode"`
|
||||
}
|
||||
|
||||
// TransferCustomer 分配在职成员的客户
|
||||
// see https://developer.work.weixin.qq.com/document/path/92125
|
||||
func (r *Client) TransferCustomer(req *TransferCustomerRequest) (*TransferCustomerResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(transferCustomerURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &TransferCustomerResponse{}
|
||||
if err = util.DecodeWithError(response, result, "TransferCustomer"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// TransferResultRequest 查询客户接替状态请求
|
||||
type TransferResultRequest struct {
|
||||
HandoverUserID string `json:"handover_userid"`
|
||||
TakeoverUserID string `json:"takeover_userid"`
|
||||
Cursor string `json:"cursor"`
|
||||
}
|
||||
|
||||
// TransferResultResponse 查询客户接替状态响应
|
||||
type TransferResultResponse struct {
|
||||
util.CommonError
|
||||
Customer []TransferResultItem `json:"customer"`
|
||||
NextCursor string `json:"next_cursor"`
|
||||
}
|
||||
|
||||
// TransferResultItem 客户接替状态
|
||||
type TransferResultItem struct {
|
||||
ExternalUserID string `json:"external_userid"`
|
||||
Status int `json:"status"`
|
||||
TakeoverTime int64 `json:"takeover_time"`
|
||||
}
|
||||
|
||||
// TransferResult 查询客户接替状态
|
||||
// see https://developer.work.weixin.qq.com/document/path/94088
|
||||
func (r *Client) TransferResult(req *TransferResultRequest) (*TransferResultResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(transferResultURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &TransferResultResponse{}
|
||||
if err = util.DecodeWithError(response, result, "TransferResult"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GroupChatOnJobTransferRequest 分配在职成员的客户群请求
|
||||
type GroupChatOnJobTransferRequest struct {
|
||||
ChatIDList []string `json:"chat_id_list"`
|
||||
NewOwner string `json:"new_owner"`
|
||||
}
|
||||
|
||||
// GroupChatOnJobTransferResponse 分配在职成员的客户群响应
|
||||
type GroupChatOnJobTransferResponse struct {
|
||||
util.CommonError
|
||||
FailedChatList []FailedChat `json:"failed_chat_list"`
|
||||
}
|
||||
|
||||
// FailedChat 没能成功继承的群
|
||||
type FailedChat struct {
|
||||
ChatID string `json:"chat_id"`
|
||||
ErrCode int `json:"errcode"`
|
||||
ErrMsg string `json:"errmsg"`
|
||||
}
|
||||
|
||||
// GroupChatOnJobTransfer 分配在职成员的客户群
|
||||
// see https://developer.work.weixin.qq.com/document/path/95703
|
||||
func (r *Client) GroupChatOnJobTransfer(req *GroupChatOnJobTransferRequest) (*GroupChatOnJobTransferResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(groupChatOnJobTransferURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &GroupChatOnJobTransferResponse{}
|
||||
if err = util.DecodeWithError(response, result, "GroupChatOnJobTransfer"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetUnassignedListRequest 获取待分配的离职成员列表请求
|
||||
type GetUnassignedListRequest struct {
|
||||
Cursor string `json:"cursor"`
|
||||
PageSize int `json:"page_size"`
|
||||
}
|
||||
|
||||
// GetUnassignedListResponse 获取待分配的离职成员列表响应
|
||||
type GetUnassignedListResponse struct {
|
||||
util.CommonError
|
||||
Info []UnassignedListInfo `json:"info"`
|
||||
IsLast bool `json:"is_last"`
|
||||
NextCursor string `json:"next_cursor"`
|
||||
}
|
||||
|
||||
// UnassignedListInfo 离职成员信息
|
||||
type UnassignedListInfo struct {
|
||||
HandoverUserID string `json:"handover_userid"`
|
||||
ExternalUserID string `json:"external_userid"`
|
||||
DimissionTime int64 `json:"dimission_time"`
|
||||
}
|
||||
|
||||
// GetUnassignedList 获取待分配的离职成员列表
|
||||
// see https://developer.work.weixin.qq.com/document/path/92124
|
||||
func (r *Client) GetUnassignedList(req *GetUnassignedListRequest) (*GetUnassignedListResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(getUnassignedListURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &GetUnassignedListResponse{}
|
||||
if err = util.DecodeWithError(response, result, "GetUnassignedList"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// ResignedTransferCustomerRequest 分配离职成员的客户请求
|
||||
type ResignedTransferCustomerRequest struct {
|
||||
HandoverUserID string `json:"handover_userid"`
|
||||
TakeoverUserID string `json:"takeover_userid"`
|
||||
ExternalUserID []string `json:"external_userid"`
|
||||
}
|
||||
|
||||
// ResignedTransferCustomerResponse 分配离职成员的客户响应
|
||||
type ResignedTransferCustomerResponse struct {
|
||||
util.CommonError
|
||||
Customer []TransferCustomerItem `json:"customer"`
|
||||
}
|
||||
|
||||
// ResignedTransferCustomer 分配离职成员的客户
|
||||
// see https://developer.work.weixin.qq.com/document/path/94081
|
||||
func (r *Client) ResignedTransferCustomer(req *ResignedTransferCustomerRequest) (*ResignedTransferCustomerResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(resignedTransferCustomerURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &ResignedTransferCustomerResponse{}
|
||||
if err = util.DecodeWithError(response, result, "ResignedTransferCustomer"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// ResignedTransferResultRequest 查询离职客户接替状态请求
|
||||
type ResignedTransferResultRequest struct {
|
||||
HandoverUserID string `json:"handover_userid"`
|
||||
TakeoverUserID string `json:"takeover_userid"`
|
||||
Cursor string `json:"cursor"`
|
||||
}
|
||||
|
||||
// ResignedTransferResultResponse 查询离职客户接替状态响应
|
||||
type ResignedTransferResultResponse struct {
|
||||
util.CommonError
|
||||
Customer []TransferResultItem `json:"customer"`
|
||||
NextCursor string `json:"next_cursor"`
|
||||
}
|
||||
|
||||
// ResignedTransferResult 查询离职客户接替状态
|
||||
// see https://developer.work.weixin.qq.com/document/path/94082
|
||||
func (r *Client) ResignedTransferResult(req *ResignedTransferResultRequest) (*ResignedTransferResultResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(resignedTransferResultURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &ResignedTransferResultResponse{}
|
||||
if err = util.DecodeWithError(response, result, "ResignedTransferResult"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GroupChatTransferRequest 分配离职成员的客户群请求
|
||||
type GroupChatTransferRequest struct {
|
||||
ChatIDList []string `json:"chat_id_list"`
|
||||
NewOwner string `json:"new_owner"`
|
||||
}
|
||||
|
||||
// GroupChatTransferResponse 分配离职成员的客户群响应
|
||||
type GroupChatTransferResponse struct {
|
||||
util.CommonError
|
||||
FailedChatList []FailedChat `json:"failed_chat_list"`
|
||||
}
|
||||
|
||||
// GroupChatTransfer 分配离职成员的客户群
|
||||
// see https://developer.work.weixin.qq.com/document/path/92127
|
||||
func (r *Client) GroupChatTransfer(req *GroupChatTransferRequest) (*GroupChatTransferResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.PostJSON(fmt.Sprintf(groupChatTransferURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &GroupChatTransferResponse{}
|
||||
if err = util.DecodeWithError(response, result, "GroupChatTransfer"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user