|
@@ -0,0 +1,127 @@
|
|
|
|
|
+package kf
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+
|
|
|
|
|
+ "github.com/silenceper/wechat/v2/util"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+const (
|
|
|
|
|
+ // getCorpStatisticURL 获取「客户数据统计」企业汇总数据
|
|
|
|
|
+ getCorpStatisticURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/get_corp_statistic?access_token=%s"
|
|
|
|
|
+ // getServicerStatisticURL 获取「客户数据统计」接待人员明细数据
|
|
|
|
|
+ getServicerStatisticURL = "https://qyapi.weixin.qq.com/cgi-bin/kf/get_servicer_statistic?access_token=%s"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+// GetCorpStatisticRequest 获取「客户数据统计」企业汇总数据请求
|
|
|
|
|
+type GetCorpStatisticRequest struct {
|
|
|
|
|
+ OpenKfID string `json:"open_kfid"`
|
|
|
|
|
+ StartTime int64 `json:"start_time"`
|
|
|
|
|
+ EndTime int64 `json:"end_time"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// GetCorpStatisticResponse 获取「客户数据统计」企业汇总数据响应
|
|
|
|
|
+type GetCorpStatisticResponse struct {
|
|
|
|
|
+ util.CommonError
|
|
|
|
|
+ StatisticList []CorpStatisticList `json:"statistic_list"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// CorpStatisticList 企业汇总统计数据列表
|
|
|
|
|
+type CorpStatisticList struct {
|
|
|
|
|
+ StatTime int64 `json:"stat_time"`
|
|
|
|
|
+ Statistic CorpStatistic `json:"statistic"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// CorpStatistic 企业汇总统计一天的统计数据
|
|
|
|
|
+type CorpStatistic struct {
|
|
|
|
|
+ SessionCnt int64 `json:"session_cnt"`
|
|
|
|
|
+ CustomerCnt int64 `json:"customer_cnt"`
|
|
|
|
|
+ CustomerMsgCnt int64 `json:"customer_msg_cnt"`
|
|
|
|
|
+ UpgradeServiceCustomerCnt int64 `json:"upgrade_service_customer_cnt"`
|
|
|
|
|
+ AiSessionReplyCnt int64 `json:"ai_session_reply_cnt"`
|
|
|
|
|
+ AiTransferRate float64 `json:"ai_transfer_rate"`
|
|
|
|
|
+ AiKnowledgeHitRate float64 `json:"ai_knowledge_hit_rate"`
|
|
|
|
|
+ MsgRejectedCustomerCnt int64 `json:"msg_rejected_customer_cnt"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// GetCorpStatistic 获取「客户数据统计」企业汇总数据
|
|
|
|
|
+// see https://developer.work.weixin.qq.com/document/path/95489
|
|
|
|
|
+func (r *Client) GetCorpStatistic(req *GetCorpStatisticRequest) (*GetCorpStatisticResponse, error) {
|
|
|
|
|
+ var (
|
|
|
|
|
+ accessToken string
|
|
|
|
|
+ err error
|
|
|
|
|
+ )
|
|
|
|
|
+ if accessToken, err = r.ctx.GetAccessToken(); err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ var response []byte
|
|
|
|
|
+ if response, err = util.PostJSON(fmt.Sprintf(getCorpStatisticURL, accessToken), req); err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ result := &GetCorpStatisticResponse{}
|
|
|
|
|
+ if err = util.DecodeWithError(response, result, "GetCorpStatistic"); err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ return result, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// GetServicerStatisticRequest 获取「客户数据统计」接待人员明细数据请求
|
|
|
|
|
+type GetServicerStatisticRequest struct {
|
|
|
|
|
+ OpenKfID string `json:"open_kfid"`
|
|
|
|
|
+ ServicerUserID string `json:"servicer_userid"`
|
|
|
|
|
+ StartTime int64 `json:"start_time"`
|
|
|
|
|
+ EndTime int64 `json:"end_time"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// GetServicerStatisticResponse 获取「客户数据统计」接待人员明细数据响应
|
|
|
|
|
+type GetServicerStatisticResponse struct {
|
|
|
|
|
+ util.CommonError
|
|
|
|
|
+ StatisticList []ServicerStatisticList `json:"statistic_list"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// ServicerStatisticList 接待人员明细统计数据列表
|
|
|
|
|
+type ServicerStatisticList struct {
|
|
|
|
|
+ StatTime int64 `json:"stat_time"`
|
|
|
|
|
+ Statistic ServicerStatistic `json:"statistic"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// ServicerStatistic 接待人员明细统计一天的统计数据
|
|
|
|
|
+type ServicerStatistic struct {
|
|
|
|
|
+ SessionCnt int64 `json:"session_cnt"`
|
|
|
|
|
+ CustomerCnt int64 `json:"customer_cnt"`
|
|
|
|
|
+ CustomerMsgCnt int64 `json:"customer_msg_cnt"`
|
|
|
|
|
+ ReplyRate float64 `json:"reply_rate"`
|
|
|
|
|
+ FirstReplyAverageSec float64 `json:"first_reply_average_sec"`
|
|
|
|
|
+ SatisfactionInvestgateCnt int64 `json:"satisfaction_investgate_cnt"`
|
|
|
|
|
+ SatisfactionParticipationRate float64 `json:"satisfaction_participation_rate"`
|
|
|
|
|
+ SatisfiedRate float64 `json:"satisfied_rate"`
|
|
|
|
|
+ MiddlingRate float64 `json:"middling_rate"`
|
|
|
|
|
+ DissatisfiedRate float64 `json:"dissatisfied_rate"`
|
|
|
|
|
+ UpgradeServiceCustomerCnt int64 `json:"upgrade_service_customer_cnt"`
|
|
|
|
|
+ UpgradeServiceMemberInviteCnt int64 `json:"upgrade_service_member_invite_cnt"`
|
|
|
|
|
+ UpgradeServiceMemberCustomerCnt int64 `json:"upgrade_service_member_customer_cnt"`
|
|
|
|
|
+ UpgradeServiceGroupChatInviteCnt int64 `json:"upgrade_service_groupchat_invite_cnt"`
|
|
|
|
|
+ UpgradeServiceGroupChatCustomerCnt int64 `json:"upgrade_service_groupchat_customer_cnt"`
|
|
|
|
|
+ MsgRejectedCustomerCnt int64 `json:"msg_rejected_customer_cnt"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// GetServicerStatistic 获取「客户数据统计」接待人员明细数据
|
|
|
|
|
+// see https://developer.work.weixin.qq.com/document/path/95490
|
|
|
|
|
+func (r *Client) GetServicerStatistic(req *GetServicerStatisticRequest) (*GetServicerStatisticResponse, error) {
|
|
|
|
|
+ var (
|
|
|
|
|
+ accessToken string
|
|
|
|
|
+ err error
|
|
|
|
|
+ )
|
|
|
|
|
+ if accessToken, err = r.ctx.GetAccessToken(); err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ var response []byte
|
|
|
|
|
+ if response, err = util.PostJSON(fmt.Sprintf(getServicerStatisticURL, accessToken), req); err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ result := &GetServicerStatisticResponse{}
|
|
|
|
|
+ if err = util.DecodeWithError(response, result, "GetServicerStatistic"); err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ return result, nil
|
|
|
|
|
+}
|