1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-04 12:52:27 +08:00

feat: 企业微信-客户联系-获客助手 (#704)

This commit is contained in:
曹晶
2023-08-25 18:28:21 +08:00
committed by GitHub
parent da80430065
commit c81d0b1215

View 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
}