Просмотр исходного кода

feat:企业微信-客户联系-在职继承/离职继承 (#699)

Co-authored-by: markwang <www.wang61@qq.com>
markwang 2 лет назад
Родитель
Сommit
5a23c5c780
1 измененных файлов с 291 добавлено и 0 удалено
  1. 291 0
      work/externalcontact/transfer.go

+ 291 - 0
work/externalcontact/transfer.go

@@ -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
+}