From 5a23c5c7806af64ccaac0c3eb5435807c59254ff Mon Sep 17 00:00:00 2001 From: markwang <2951177317@qq.com> Date: Sat, 15 Jul 2023 23:58:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1-?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E8=81=94=E7=B3=BB-=E5=9C=A8=E8=81=8C?= =?UTF-8?q?=E7=BB=A7=E6=89=BF/=E7=A6=BB=E8=81=8C=E7=BB=A7=E6=89=BF=20(#699?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: markwang --- work/externalcontact/transfer.go | 291 +++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 work/externalcontact/transfer.go diff --git a/work/externalcontact/transfer.go b/work/externalcontact/transfer.go new file mode 100644 index 0000000..a0ee0d5 --- /dev/null +++ b/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 +}