mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
feat: ✨ 企业微信-客户联系-获客助手 (#704)
This commit is contained in:
326
work/externalcontact/customer_acquisition.go
Normal file
326
work/externalcontact/customer_acquisition.go
Normal file
@@ -0,0 +1,326 @@
|
||||
package externalcontact
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/silenceper/wechat/v2/util"
|
||||
)
|
||||
|
||||
const (
|
||||
// listLinkUrl 获取获客链接列表
|
||||
listLinkURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition/list_link?access_token=%s"
|
||||
// getCustomerAcquisition 获取获客链接详情
|
||||
getCustomerAcquisitionURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition/get?access_token=%s"
|
||||
// createCustomerAcquisitionLink 创建获客链接
|
||||
createCustomerAcquisitionLinkURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition/create_link?access_token=%s"
|
||||
// updateCustomerAcquisitionLink 编辑获客链接
|
||||
updateCustomerAcquisitionLinkURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition/update_link?access_token=%s"
|
||||
// deleteCustomerAcquisitionLink 删除获客链接
|
||||
deleteCustomerAcquisitionLinkURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition/delete_link?access_token=%s"
|
||||
// getCustomerInfoWithCustomerAcquisitionLinkURL 获取由获客链接添加的客户信息
|
||||
getCustomerInfoWithCustomerAcquisitionLinkURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition/customer?access_token=%s"
|
||||
// customerAcquisitionQuota 查询剩余使用量
|
||||
customerAcquisitionQuotaURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition_quota?access_token=%s"
|
||||
// customerAcquisitionStatistic 查询链接使用详情
|
||||
customerAcquisitionStatisticURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/customer_acquisition/statistic?access_token=%s"
|
||||
)
|
||||
|
||||
type (
|
||||
// ListLinkRequest 获取获客链接列表请求
|
||||
ListLinkRequest struct {
|
||||
Limit int `json:"limit"`
|
||||
Cursor string `json:"cursor"`
|
||||
}
|
||||
// ListLinkResponse 获取获客链接列表响应
|
||||
ListLinkResponse struct {
|
||||
util.CommonError
|
||||
LinkIDList []string `json:"link_id_list"`
|
||||
NextCursor string `json:"next_cursor"`
|
||||
}
|
||||
)
|
||||
|
||||
// ListLink 获客助手--获取获客链接列表
|
||||
// see https://developer.work.weixin.qq.com/document/path/97297
|
||||
func (r *Client) ListLink(req *ListLinkRequest) (*ListLinkResponse, 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(listLinkURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &ListLinkResponse{}
|
||||
if err = util.DecodeWithError(response, result, "ListLink"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type (
|
||||
// GetCustomerAcquisitionRequest 获取获客链接详情请求
|
||||
GetCustomerAcquisitionRequest struct {
|
||||
LinkID string `json:"link_id"`
|
||||
}
|
||||
// GetCustomerAcquisitionResponse 获取获客链接详情响应
|
||||
GetCustomerAcquisitionResponse struct {
|
||||
util.CommonError
|
||||
Link Link `json:"link"`
|
||||
Range CustomerAcquisitionRange `json:"range"`
|
||||
SkipVerify bool `json:"skip_verify"`
|
||||
}
|
||||
// Link 获客链接
|
||||
Link struct {
|
||||
LinkID string `json:"link_id"`
|
||||
LinkName string `json:"link_name"`
|
||||
URL string `json:"url"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
}
|
||||
|
||||
// CustomerAcquisitionRange 该获客链接使用范围
|
||||
CustomerAcquisitionRange struct {
|
||||
UserList []string `json:"user_list"`
|
||||
DepartmentList []int64 `json:"department_list"`
|
||||
}
|
||||
)
|
||||
|
||||
// GetCustomerAcquisition 获客助手--获取获客链接详情
|
||||
// see https://developer.work.weixin.qq.com/document/path/97297
|
||||
func (r *Client) GetCustomerAcquisition(req *GetCustomerAcquisitionRequest) (*GetCustomerAcquisitionResponse, 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(getCustomerAcquisitionURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &GetCustomerAcquisitionResponse{}
|
||||
if err = util.DecodeWithError(response, result, "GetCustomerAcquisition"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type (
|
||||
// CreateCustomerAcquisitionLinkRequest 创建获客链接请求
|
||||
CreateCustomerAcquisitionLinkRequest struct {
|
||||
LinkName string `json:"link_name"`
|
||||
Range CustomerAcquisitionRange `json:"range"`
|
||||
SkipVerify bool `json:"skip_verify"`
|
||||
}
|
||||
// CreateCustomerAcquisitionLinkResponse 创建获客链接响应
|
||||
CreateCustomerAcquisitionLinkResponse struct {
|
||||
util.CommonError
|
||||
Link Link `json:"link"`
|
||||
}
|
||||
)
|
||||
|
||||
// CreateCustomerAcquisitionLink 获客助手--创建获客链接
|
||||
// see https://developer.work.weixin.qq.com/document/path/97297
|
||||
func (r *Client) CreateCustomerAcquisitionLink(req *CreateCustomerAcquisitionLinkRequest) (*CreateCustomerAcquisitionLinkResponse, 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(createCustomerAcquisitionLinkURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &CreateCustomerAcquisitionLinkResponse{}
|
||||
if err = util.DecodeWithError(response, result, "CreateCustomerAcquisitionLink"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type (
|
||||
// UpdateCustomerAcquisitionLinkRequest 编辑获客链接请求
|
||||
UpdateCustomerAcquisitionLinkRequest struct {
|
||||
LinkID string `json:"link_id"`
|
||||
LinkName string `json:"link_name"`
|
||||
Range CustomerAcquisitionRange `json:"range"`
|
||||
SkipVerify bool `json:"skip_verify"`
|
||||
}
|
||||
// UpdateCustomerAcquisitionLinkResponse 编辑获客链接响应
|
||||
UpdateCustomerAcquisitionLinkResponse struct {
|
||||
util.CommonError
|
||||
}
|
||||
)
|
||||
|
||||
// UpdateCustomerAcquisitionLink 获客助手--编辑获客链接
|
||||
// see https://developer.work.weixin.qq.com/document/path/97297
|
||||
func (r *Client) UpdateCustomerAcquisitionLink(req *UpdateCustomerAcquisitionLinkRequest) (*UpdateCustomerAcquisitionLinkResponse, 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(updateCustomerAcquisitionLinkURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &UpdateCustomerAcquisitionLinkResponse{}
|
||||
if err = util.DecodeWithError(response, result, "UpdateCustomerAcquisitionLink"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type (
|
||||
// DeleteCustomerAcquisitionLinkRequest 删除获客链接请求
|
||||
DeleteCustomerAcquisitionLinkRequest struct {
|
||||
LinkID string `json:"link_id"`
|
||||
}
|
||||
// DeleteCustomerAcquisitionLinkResponse 删除获客链接响应
|
||||
DeleteCustomerAcquisitionLinkResponse struct {
|
||||
util.CommonError
|
||||
}
|
||||
)
|
||||
|
||||
// DeleteCustomerAcquisitionLink 获客助手--删除获客链接
|
||||
// see https://developer.work.weixin.qq.com/document/path/97297
|
||||
func (r *Client) DeleteCustomerAcquisitionLink(req *DeleteCustomerAcquisitionLinkRequest) (*DeleteCustomerAcquisitionLinkResponse, 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(deleteCustomerAcquisitionLinkURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &DeleteCustomerAcquisitionLinkResponse{}
|
||||
if err = util.DecodeWithError(response, result, "DeleteCustomerAcquisitionLink"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type (
|
||||
// GetCustomerInfoWithCustomerAcquisitionLinkRequest 获取由获客链接添加的客户信息请求
|
||||
GetCustomerInfoWithCustomerAcquisitionLinkRequest struct {
|
||||
LinkID string `json:"link_id"`
|
||||
Limit int64 `json:"limit"`
|
||||
Cursor string `json:"cursor"`
|
||||
}
|
||||
// GetCustomerInfoWithCustomerAcquisitionLinkResponse 获取由获客链接添加的客户信息响应
|
||||
GetCustomerInfoWithCustomerAcquisitionLinkResponse struct {
|
||||
util.CommonError
|
||||
CustomerList []CustomerList `json:"customer_list"`
|
||||
NextCursor string `json:"next_cursor"`
|
||||
}
|
||||
// CustomerList 客户列表
|
||||
CustomerList struct {
|
||||
ExternalUserid string `json:"external_userid"`
|
||||
Userid string `json:"userid"`
|
||||
ChatStatus int64 `json:"chat_status"`
|
||||
State string `json:"state"`
|
||||
}
|
||||
)
|
||||
|
||||
// GetCustomerInfoWithCustomerAcquisitionLink 获客助手--获取由获客链接添加的客户信息
|
||||
// see https://developer.work.weixin.qq.com/document/path/97298
|
||||
func (r *Client) GetCustomerInfoWithCustomerAcquisitionLink(req *GetCustomerInfoWithCustomerAcquisitionLinkRequest) (*GetCustomerInfoWithCustomerAcquisitionLinkResponse, 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(getCustomerInfoWithCustomerAcquisitionLinkURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &GetCustomerInfoWithCustomerAcquisitionLinkResponse{}
|
||||
if err = util.DecodeWithError(response, result, "GetCustomerInfoWithCustomerAcquisitionLink"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type (
|
||||
// CustomerAcquisitionQuotaResponse 查询剩余使用量响应
|
||||
CustomerAcquisitionQuotaResponse struct {
|
||||
util.CommonError
|
||||
Total int64 `json:"total"`
|
||||
Balance int64 `json:"balance"`
|
||||
QuotaList []QuotaList `json:"quota_list"`
|
||||
}
|
||||
// QuotaList 额度
|
||||
QuotaList struct {
|
||||
ExpireDate int64 `json:"expire_date"`
|
||||
Balance int64 `json:"balance"`
|
||||
}
|
||||
)
|
||||
|
||||
// CustomerAcquisitionQuota 获客助手额度管理与使用统计--查询剩余使用量
|
||||
// see https://developer.work.weixin.qq.com/document/path/97375
|
||||
func (r *Client) CustomerAcquisitionQuota() (*CustomerAcquisitionQuotaResponse, error) {
|
||||
var (
|
||||
accessToken string
|
||||
err error
|
||||
)
|
||||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response []byte
|
||||
if response, err = util.HTTPGet((fmt.Sprintf(customerAcquisitionQuotaURL, accessToken))); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &CustomerAcquisitionQuotaResponse{}
|
||||
if err = util.DecodeWithError(response, result, "CustomerAcquisitionQuota"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type (
|
||||
// CustomerAcquisitionStatisticRequest 查询链接使用详情请求
|
||||
CustomerAcquisitionStatisticRequest struct {
|
||||
LinkID string `json:"link_id"`
|
||||
StartTime int64 `json:"start_time"`
|
||||
EndTime int64 `json:"end_time"`
|
||||
}
|
||||
// CustomerAcquisitionStatisticResponse 查询链接使用详情响应
|
||||
CustomerAcquisitionStatisticResponse struct {
|
||||
util.CommonError
|
||||
ClickLinkCustomerCnt int64 `json:"click_link_customer_cnt"`
|
||||
NewCustomerCnt int64 `json:"new_customer_cnt"`
|
||||
}
|
||||
)
|
||||
|
||||
// CustomerAcquisitionStatistic 获客助手额度管理与使用统计--查询链接使用详情
|
||||
// see https://developer.work.weixin.qq.com/document/path/97375
|
||||
func (r *Client) CustomerAcquisitionStatistic(req *CustomerAcquisitionStatisticRequest) (*CustomerAcquisitionStatisticResponse, 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(customerAcquisitionStatisticURL, accessToken), req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := &CustomerAcquisitionStatisticResponse{}
|
||||
if err = util.DecodeWithError(response, result, "CustomerAcquisitionStatistic"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user