Skip to content

Commit 03d4a57

Browse files
bors[bot]w3xse7en
andauthored
Merge #56
56: feat: add ListUnassignedExternalContact TransferExternalContact GetTransferExternalContactResult TransferGroupChatExternalContact r=xen0n a=w3xse7en ListUnassignedExternalContact doc:https://open.work.weixin.qq.com/api/doc/90000/90135/92124 TransferExternalContact doc:https://open.work.weixin.qq.com/api/doc/90000/90135/92125 GetTransferExternalContactResult doc:https://open.work.weixin.qq.com/api/doc/90000/90135/92973 TransferGroupChatExternalContact doc:https://open.work.weixin.qq.com/api/doc/90000/90135/92127 Co-authored-by: w3xse7en <w3xse7en@outlook.com>
2 parents 33910f5 + 51afa80 commit 03d4a57

File tree

7 files changed

+345
-1
lines changed

7 files changed

+345
-1
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ in at least 2 of Qiniu's internal systems.
111111
<details>
112112
<summary>外部联系人管理 API</summary>
113113

114-
* [ ] 离职成员的外部联系人再分配
114+
115115
* [x] 成员对外信息
116116
* [x] 客户管理
117117
- [x] 获取客户列表
@@ -120,6 +120,11 @@ in at least 2 of Qiniu's internal systems.
120120
* [x] 客户标签管理
121121
- [x] 管理企业标签
122122
- [x] 编辑客户企业标签
123+
* [x] 客户分配
124+
- [x] 获取离职成员列表
125+
- [x] 分配在职或离职成员的客户
126+
- [x] 查询客户接替结果
127+
- [x] 分配离职成员的客户群
123128
* [x] 变更回调通知
124129
- [x] 添加企业客户事件
125130
- [x] 编辑企业客户事件

apis.md.go

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/apis.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,17 @@ Name|Request Type|Response Type|Access Token|URL|Doc
8989
`execExternalContactDelCorpTag`|`reqExternalContactDelCorpTag`|`respExternalContactDelCorpTag`|+|`POST /cgi-bin/externalcontact/del_corp_tag`|[删除企业客户标签](https://work.weixin.qq.com/api/doc/90000/90135/92117)
9090
`execExternalContactMarkTag`|`reqExternalContactMarkTag`|`respExternalContactMarkTag`|+|`POST /cgi-bin/externalcontact/mark_tag`|[标记客户企业标签](https://work.weixin.qq.com/api/doc/90000/90135/92118)
9191

92+
# 外部联系人管理 - 客户分配
93+
94+
## API calls
95+
96+
Name|Request Type|Response Type|Access Token|URL|Doc
97+
:---|------------|-------------|------------|:--|:--
98+
`execListUnassignedExternalContact`|`reqListUnassignedExternalContact`|`respListUnassignedExternalContact`|+|`POST /cgi-bin/externalcontact/get_unassigned_list`|[获取离职成员的客户列表](https://work.weixin.qq.com/api/doc/90000/90135/92124)
99+
`execTransferExternalContact`|`reqTransferExternalContact`|`respTransferExternalContact`|+|`POST /cgi-bin/externalcontact/transfer`|[分配成员的客户](https://work.weixin.qq.com/api/doc/90000/90135/92125)
100+
`execGetTransferExternalContactResult`|`reqGetTransferExternalContactResult`|`respGetTransferExternalContactResult`|+|`POST /cgi-bin/externalcontact/get_transfer_result`|[查询客户接替结果](https://work.weixin.qq.com/api/doc/90000/90135/92973)
101+
`execTransferGroupChatExternalContact`|`reqTransferGroupChatExternalContact`|`respTransferGroupChatExternalContact`|+|`POST /cgi-bin/externalcontact/groupchat/transfer`|[离职成员的群再分配](https://work.weixin.qq.com/api/doc/90000/90135/92127)
102+
92103
# 应用管理
93104

94105
## API calls

docs/external_contact.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,38 @@ Name|JSON|Type|Doc
181181
`ExternalUserID`|`external_userid`|`string`| 外部联系人userid
182182
`AddTag`|`add_tag`|`[]string`| 要标记的标签列表
183183
`RemoveTag`|`remove_tag`|`[]string`| 要移除的标签列表
184+
185+
### `ExternalContactUnassignedList` 离职成员的客户列表
186+
187+
Name|JSON|Type|Doc
188+
:---|:---|:---|:--
189+
`Info`|`info`|`[]ExternalContactUnassigned`| 离职成员的客户
190+
`IsLast`|`is_last`|`bool`| 是否是最后一条记录
191+
`NextCursor`|`next_cursor`|`string`| 分页查询游标,已经查完则返回空("")
192+
193+
```go
194+
// ExternalContactTransferStatus 客户接替结果状态
195+
type ExternalContactTransferStatus uint8
196+
197+
const (
198+
// ExternalContactTransferStatusSuccess 1-接替完毕
199+
ExternalContactTransferStatusSuccess ExternalContactTransferStatus = 1
200+
// ExternalContactTransferStatusWait 2-等待接替
201+
ExternalContactTransferStatusWait ExternalContactTransferStatus = 2
202+
// ExternalContactTransferStatusRefused 3-客户拒绝
203+
ExternalContactTransferStatusRefused ExternalContactTransferStatus = 3
204+
// ExternalContactTransferStatusExhausted 4-接替成员客户达到上限
205+
ExternalContactTransferStatusExhausted ExternalContactTransferStatus = 4
206+
// ExternalContactTransferStatusNoData 5-无接替记录
207+
ExternalContactTransferStatusNoData ExternalContactTransferStatus = 5
208+
)
209+
210+
```
211+
212+
### `ExternalContactGroupChatTransferFailed` 离职成员的群再分配失败
213+
214+
Name|JSON|Type|Doc
215+
:---|:---|:---|:--
216+
`ChatID`|`chat_id`|`string`| 没能成功继承的群ID
217+
`ErrCode`|`errcode`|`int`| 没能成功继承的群,错误码
218+
`ErrMsg`|`errmsg`|`string`| 没能成功继承的群,错误描述

external_contact.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package workwx
22

3+
import (
4+
"time"
5+
)
6+
37
// ListExternalContact 获取客户列表
48
func (c *WorkwxApp) ListExternalContact(userID string) ([]string, error) {
59
resp, err := c.execExternalContactList(reqExternalContactList{
@@ -81,3 +85,72 @@ func (c *WorkwxApp) MarkExternalContactTag(userID, externalUserID string, addTag
8185
})
8286
return err
8387
}
88+
89+
// ExternalContactUnassigned 离职成员的客户
90+
type ExternalContactUnassigned struct {
91+
// HandoverUserID 离职成员的userid
92+
HandoverUserID string
93+
// ExternalUserID 外部联系人userid
94+
ExternalUserID string
95+
// DemissionTime 成员离职时间
96+
DemissionTime time.Time
97+
}
98+
99+
// ListUnassignedExternalContact 获取离职成员的客户列表
100+
func (c *WorkwxApp) ListUnassignedExternalContact(pageID, pageSize uint32, cursor string) (*ExternalContactUnassignedList, error) {
101+
resp, err := c.execListUnassignedExternalContact(reqListUnassignedExternalContact{
102+
PageID: pageID,
103+
PageSize: pageSize,
104+
Cursor: cursor,
105+
})
106+
if err != nil {
107+
return nil, err
108+
}
109+
externalContactUnassignedList := resp.intoExternalContactUnassignedList()
110+
return &externalContactUnassignedList, nil
111+
}
112+
113+
// TransferExternalContact 分配成员的客户
114+
func (c *WorkwxApp) TransferExternalContact(externalUserID, handoverUserID, takeoverUserID, transferSuccessMsg string) error {
115+
_, err := c.execTransferExternalContact(reqTransferExternalContact{
116+
ExternalUserID: externalUserID,
117+
HandoverUserID: handoverUserID,
118+
TakeoverUserID: takeoverUserID,
119+
TransferSuccessMsg: transferSuccessMsg,
120+
})
121+
return err
122+
}
123+
124+
// ExternalContactTransferResult 客户接替结果
125+
type ExternalContactTransferResult struct {
126+
// Status 接替状态, 1-接替完毕 2-等待接替 3-客户拒绝 4-接替成员客户达到上限 5-无接替记录
127+
Status ExternalContactTransferStatus
128+
// TakeoverTime 接替客户的时间,如果是等待接替状态,则为未来的自动接替时间
129+
TakeoverTime time.Time
130+
}
131+
132+
// GetTransferExternalContactResult 查询客户接替结果
133+
func (c *WorkwxApp) GetTransferExternalContactResult(externalUserID, handoverUserID, takeoverUserID string) (*ExternalContactTransferResult, error) {
134+
resp, err := c.execGetTransferExternalContactResult(reqGetTransferExternalContactResult{
135+
ExternalUserID: externalUserID,
136+
HandoverUserID: handoverUserID,
137+
TakeoverUserID: takeoverUserID,
138+
})
139+
if err != nil {
140+
return nil, err
141+
}
142+
externalContactTransferResult := resp.intoExternalContactTransferResult()
143+
return &externalContactTransferResult, nil
144+
}
145+
146+
// TransferGroupChatExternalContact 离职成员的群再分配
147+
func (c *WorkwxApp) TransferGroupChatExternalContact(chatIDList []string, newOwner string) ([]ExternalContactGroupChatTransferFailed, error) {
148+
resp, err := c.execTransferGroupChatExternalContact(reqTransferGroupChatExternalContact{
149+
ChatIDList: chatIDList,
150+
NewOwner: newOwner,
151+
})
152+
if err != nil {
153+
return nil, err
154+
}
155+
return resp.FailedChatList, nil
156+
}

external_contact.md.go

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

models.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,3 +722,131 @@ func (x respMsgAuditGetGroupChat) intoGroupChat() (resp MsgAuditGroupChat) {
722722
}
723723
return resp
724724
}
725+
726+
type reqListUnassignedExternalContact struct {
727+
// PageID 分页查询,要查询页号,从0开始
728+
PageID uint32 `json:"page_id"`
729+
// PageSize 每次返回的最大记录数,默认为1000,最大值为1000
730+
PageSize uint32 `json:"page_size"`
731+
// Cursor 分页查询游标,字符串类型,适用于数据量较大的情况,如果使用该参数则无需填写page_id,该参数由上一次调用返回
732+
Cursor string `json:"cursor"`
733+
}
734+
735+
var _ bodyer = reqListUnassignedExternalContact{}
736+
737+
func (x reqListUnassignedExternalContact) intoBody() ([]byte, error) {
738+
result, err := json.Marshal(x)
739+
if err != nil {
740+
return nil, err
741+
}
742+
743+
return result, nil
744+
}
745+
746+
type respListUnassignedExternalContact struct {
747+
respCommon
748+
Info []struct {
749+
HandoverUserid string `json:"handover_userid"`
750+
ExternalUserid string `json:"external_userid"`
751+
DemissionTime int `json:"dimission_time"`
752+
} `json:"info"`
753+
IsLast bool `json:"is_last"`
754+
NextCursor string `json:"next_cursor"`
755+
}
756+
757+
func (x respListUnassignedExternalContact) intoExternalContactUnassignedList() (resp ExternalContactUnassignedList) {
758+
list := make([]ExternalContactUnassigned, 0, len(x.Info))
759+
for _, info := range x.Info {
760+
list = append(list, ExternalContactUnassigned{
761+
HandoverUserID: info.HandoverUserid,
762+
ExternalUserID: info.ExternalUserid,
763+
DemissionTime: time.Unix(int64(info.DemissionTime), 0),
764+
})
765+
}
766+
resp.Info = list
767+
resp.IsLast = x.IsLast
768+
resp.NextCursor = x.NextCursor
769+
return resp
770+
}
771+
772+
type reqTransferExternalContact struct {
773+
// ExternalUserID 外部联系人的userid,注意不是企业成员的帐号
774+
ExternalUserID string `json:"external_userid"`
775+
// HandoverUserID 原跟进成员的userid
776+
HandoverUserID string `json:"handover_userid"`
777+
// TakeoverUserID 接替成员的userid
778+
TakeoverUserID string `json:"takeover_userid"`
779+
// TransferSuccessMsg 转移成功后发给客户的消息,最多200个字符,不填则使用默认文案,目前只对在职成员分配客户的情况生效
780+
TransferSuccessMsg string `json:"transfer_success_msg"`
781+
}
782+
783+
var _ bodyer = reqTransferExternalContact{}
784+
785+
func (x reqTransferExternalContact) intoBody() ([]byte, error) {
786+
result, err := json.Marshal(x)
787+
if err != nil {
788+
return nil, err
789+
}
790+
791+
return result, nil
792+
}
793+
794+
type respTransferExternalContact struct {
795+
respCommon
796+
}
797+
798+
type reqGetTransferExternalContactResult struct {
799+
// ExternalUserID 外部联系人的userid,注意不是企业成员的帐号
800+
ExternalUserID string `json:"external_userid"`
801+
// HandoverUserID 原跟进成员的userid
802+
HandoverUserID string `json:"handover_userid"`
803+
// TakeoverUserID 接替成员的userid
804+
TakeoverUserID string `json:"takeover_userid"`
805+
}
806+
807+
var _ bodyer = reqGetTransferExternalContactResult{}
808+
809+
func (x reqGetTransferExternalContactResult) intoBody() ([]byte, error) {
810+
result, err := json.Marshal(x)
811+
if err != nil {
812+
return nil, err
813+
}
814+
815+
return result, nil
816+
}
817+
818+
type respGetTransferExternalContactResult struct {
819+
respCommon
820+
Status uint8 `json:"status"`
821+
TakeoverTime int `json:"takeover_time"`
822+
}
823+
824+
func (x respGetTransferExternalContactResult) intoExternalContactTransferResult() ExternalContactTransferResult {
825+
return ExternalContactTransferResult{
826+
Status: ExternalContactTransferStatus(x.Status),
827+
TakeoverTime: time.Unix(int64(x.TakeoverTime), 0),
828+
}
829+
}
830+
831+
type reqTransferGroupChatExternalContact struct {
832+
// ChatIDList 需要转群主的客户群ID列表。取值范围: 1 ~ 100
833+
ChatIDList []string `json:"chat_id_list"`
834+
// NewOwner 新群主ID
835+
NewOwner string `json:"new_owner"`
836+
}
837+
838+
var _ bodyer = reqTransferGroupChatExternalContact{}
839+
840+
func (x reqTransferGroupChatExternalContact) intoBody() ([]byte, error) {
841+
result, err := json.Marshal(x)
842+
if err != nil {
843+
return nil, err
844+
}
845+
846+
return result, nil
847+
}
848+
849+
type respTransferGroupChatExternalContact struct {
850+
respCommon
851+
FailedChatList []ExternalContactGroupChatTransferFailed `json:"failed_chat_list"`
852+
}

0 commit comments

Comments
 (0)