| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- package externalcontact
- import (
- "encoding/json"
- "fmt"
- "github.com/silenceper/wechat/v2/util"
- )
- const (
- // FetchExternalContactUserListURL 获取客户列表
- FetchExternalContactUserListURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list"
- // FetchExternalContactUserDetailURL 获取客户详情
- FetchExternalContactUserDetailURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get"
- // FetchBatchExternalContactUserDetailURL 批量获取客户详情
- FetchBatchExternalContactUserDetailURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user"
- // UpdateUserRemarkURL 更新客户备注信息
- UpdateUserRemarkURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/remark"
- )
- // ExternalUserListResponse 外部联系人列表响应
- type ExternalUserListResponse struct {
- util.CommonError
- ExternalUserID []string `json:"external_userid"`
- }
- // GetExternalUserList 获取客户列表
- // @see https://developer.work.weixin.qq.com/document/path/92113
- func (r *Client) GetExternalUserList(userID string) ([]string, error) {
- accessToken, err := r.GetAccessToken()
- if err != nil {
- return nil, err
- }
- var response []byte
- response, err = util.HTTPGet(fmt.Sprintf("%s?access_token=%v&userid=%v", FetchExternalContactUserListURL, accessToken, userID))
- if err != nil {
- return nil, err
- }
- var result ExternalUserListResponse
- err = util.DecodeWithError(response, &result, "GetExternalUserList")
- if err != nil {
- return nil, err
- }
- return result.ExternalUserID, nil
- }
- // ExternalUserDetailResponse 外部联系人详情响应
- type ExternalUserDetailResponse struct {
- util.CommonError
- ExternalUser
- }
- // ExternalUser 外部联系人
- type ExternalUser struct {
- ExternalUserID string `json:"external_userid"`
- Name string `json:"name"`
- Avatar string `json:"avatar"`
- Type int64 `json:"type"`
- Gender int64 `json:"gender"`
- UnionID string `json:"unionid"`
- Position string `json:"position"`
- CorpName string `json:"corp_name"`
- CorpFullName string `json:"corp_full_name"`
- ExternalProfile string `json:"external_profile"`
- FollowUser []FollowUser `json:"follow_user"`
- NextCursor string `json:"next_cursor"`
- }
- // FollowUser 跟进用户(指企业内部用户)
- type FollowUser struct {
- UserID string `json:"userid"`
- Remark string `json:"remark"`
- Description string `json:"description"`
- CreateTime string `json:"create_time"`
- Tags []Tag `json:"tags"`
- RemarkCorpName string `json:"remark_corp_name"`
- RemarkMobiles []string `json:"remark_mobiles"`
- OperUserID string `json:"oper_userid"`
- AddWay int64 `json:"add_way"`
- WeChatChannels WechatChannel `json:"wechat_channels"`
- State string `json:"state"`
- }
- // Tag 已绑定在外部联系人的标签
- type Tag struct {
- GroupName string `json:"group_name"`
- TagName string `json:"tag_name"`
- Type int64 `json:"type"`
- TagID string `json:"tag_id"`
- }
- // WechatChannel 视频号添加的场景
- type WechatChannel struct {
- NickName string `json:"nickname"`
- Source string `json:"source"`
- }
- // GetExternalUserDetail 获取外部联系人详情
- func (r *Client) GetExternalUserDetail(externalUserID string, nextCursor ...string) (*ExternalUser, error) {
- accessToken, err := r.GetAccessToken()
- if err != nil {
- return nil, err
- }
- var response []byte
- response, err = util.HTTPGet(fmt.Sprintf("%s?access_token=%v&external_userid=%v&cursor=%v", FetchExternalContactUserDetailURL, accessToken, externalUserID, nextCursor))
- if err != nil {
- return nil, err
- }
- var result ExternalUserDetailResponse
- err = util.DecodeWithError(response, &result, "get_external_user_detail")
- if err != nil {
- return nil, err
- }
- return &result.ExternalUser, nil
- }
- // BatchGetExternalUserDetailsRequest 批量获取外部联系人详情请求
- type BatchGetExternalUserDetailsRequest struct {
- UserIDList []string `json:"userid_list"`
- Cursor string `json:"cursor"`
- }
- // ExternalUserDetailListResponse 批量获取外部联系人详情响应
- type ExternalUserDetailListResponse struct {
- util.CommonError
- ExternalContactList []ExternalUser `json:"external_contact_list"`
- }
- // BatchGetExternalUserDetails 批量获取外部联系人详情
- func (r *Client) BatchGetExternalUserDetails(request BatchGetExternalUserDetailsRequest) ([]ExternalUser, error) {
- accessToken, err := r.GetAccessToken()
- if err != nil {
- return nil, err
- }
- var response []byte
- jsonData, _ := json.Marshal(request)
- response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", FetchBatchExternalContactUserDetailURL, accessToken), string(jsonData))
- if err != nil {
- return nil, err
- }
- var result ExternalUserDetailListResponse
- err = util.DecodeWithError(response, &result, "BatchGetExternalUserDetails")
- if err != nil {
- return nil, err
- }
- return result.ExternalContactList, nil
- }
- // UpdateUserRemarkRequest 修改客户备注信息请求体
- type UpdateUserRemarkRequest struct {
- UserID string `json:"userid"`
- ExternalUserID string `json:"external_userid"`
- Remark string `json:"remark"`
- Description string `json:"description"`
- RemarkCompany string `json:"remark_company"`
- RemarkMobiles []string `json:"remark_mobiles"`
- RemarkPicMediaID string `json:"remark_pic_mediaid"`
- }
- // UpdateUserRemark 修改客户备注信息
- func (r *Client) UpdateUserRemark(request UpdateUserRemarkRequest) error {
- accessToken, err := r.GetAccessToken()
- if err != nil {
- return err
- }
- var response []byte
- jsonData, _ := json.Marshal(request)
- response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", UpdateUserRemarkURL, accessToken), string(jsonData))
- if err != nil {
- return err
- }
- return util.DecodeWithCommonError(response, "UpdateUserRemark")
- }
|