Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from
Jul 15, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
291 changes: 291 additions & 0 deletions work/externalcontact/transfer.go
Original file line number Diff line number Diff line change
@@ -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
}
Loading