| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- package externalcontact
- import (
- "encoding/json"
- "fmt"
- "github.com/silenceper/wechat/v2/util"
- )
- const (
- // GetUserBehaviorDataURL 获取「联系客户统计」数据
- GetUserBehaviorDataURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_user_behavior_data"
- // GetGroupChatStatURL 获取「群聊数据统计」数据 按群主聚合的方式
- GetGroupChatStatURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/statistic"
- // GetGroupChatStatByDayURL 获取「群聊数据统计」数据 按自然日聚合的方式
- GetGroupChatStatByDayURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/statistic_group_by_day"
- )
- type (
- // GetUserBehaviorRequest 获取「联系客户统计」数据请求
- GetUserBehaviorRequest struct {
- UserID []string `json:"userid"`
- PartyID []int `json:"partyid"`
- StartTime int `json:"start_time"`
- EndTime int `json:"end_time"`
- }
- // GetUserBehaviorResponse 获取「联系客户统计」数据响应
- GetUserBehaviorResponse struct {
- util.CommonError
- BehaviorData []BehaviorData `json:"behavior_data"`
- }
- // BehaviorData 联系客户统计数据
- BehaviorData struct {
- StatTime int `json:"stat_time"`
- ChatCnt int `json:"chat_cnt"`
- MessageCnt int `json:"message_cnt"`
- ReplyPercentage float64 `json:"reply_percentage"`
- AvgReplyTime int `json:"avg_reply_time"`
- NegativeFeedbackCnt int `json:"negative_feedback_cnt"`
- NewApplyCnt int `json:"new_apply_cnt"`
- NewContactCnt int `json:"new_contact_cnt"`
- }
- )
- // GetUserBehaviorData 获取「联系客户统计」数据
- // @see https://developer.work.weixin.qq.com/document/path/92132
- func (r *Client) GetUserBehaviorData(req *GetUserBehaviorRequest) ([]BehaviorData, error) {
- accessToken, err := r.GetAccessToken()
- if err != nil {
- return nil, err
- }
- var response []byte
- jsonData, err := json.Marshal(req)
- if err != nil {
- return nil, err
- }
- response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", GetUserBehaviorDataURL, accessToken), string(jsonData))
- if err != nil {
- return nil, err
- }
- var result GetUserBehaviorResponse
- err = util.DecodeWithError(response, &result, "GetUserBehaviorData")
- if err != nil {
- return nil, err
- }
- return result.BehaviorData, nil
- }
- type (
- // GetGroupChatStatRequest 获取「群聊数据统计」数据 按群主聚合的方式 请求
- GetGroupChatStatRequest struct {
- DayBeginTime int `json:"day_begin_time"`
- DayEndTime int `json:"day_end_time"`
- OwnerFilter OwnerFilter `json:"owner_filter"`
- OrderBy int `json:"order_by"`
- OrderAsc int `json:"order_asc"`
- Offset int `json:"offset"`
- Limit int `json:"limit"`
- }
- // GetGroupChatStatResponse 获取「群聊数据统计」数据 按群主聚合的方式 响应
- GetGroupChatStatResponse struct {
- util.CommonError
- Total int `json:"total"`
- NextOffset int `json:"next_offset"`
- Items []GroupChatStatItem `json:"items"`
- }
- // GroupChatStatItem 群聊数据统计(按群主聚合)条目
- GroupChatStatItem struct {
- Owner string `json:"owner"`
- Data GroupChatStatItemData `json:"data"`
- }
- )
- // OwnerFilter 群主过滤
- type OwnerFilter struct {
- UseridList []string `json:"userid_list"`
- }
- // GroupChatStatItemData 群聊数据统计条目数据
- type GroupChatStatItemData struct {
- NewChatCnt int `json:"new_chat_cnt"`
- ChatTotal int `json:"chat_total"`
- ChatHasMsg int `json:"chat_has_msg"`
- NewMemberCnt int `json:"new_member_cnt"`
- MemberTotal int `json:"member_total"`
- MemberHasMsg int `json:"member_has_msg"`
- MsgTotal int `json:"msg_total"`
- MigrateTraineeChatCnt int `json:"migrate_trainee_chat_cnt"`
- }
- // GetGroupChatStat 获取「群聊数据统计」数据 按群主聚合的方式
- // @see https://developer.work.weixin.qq.com/document/path/92133
- func (r *Client) GetGroupChatStat(req *GetGroupChatStatRequest) (*GetGroupChatStatResponse, error) {
- accessToken, err := r.GetAccessToken()
- if err != nil {
- return nil, err
- }
- var response []byte
- jsonData, err := json.Marshal(req)
- if err != nil {
- return nil, err
- }
- response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", GetGroupChatStatURL, accessToken), string(jsonData))
- if err != nil {
- return nil, err
- }
- result := &GetGroupChatStatResponse{}
- err = util.DecodeWithError(response, result, "GetGroupChatStat")
- if err != nil {
- return nil, err
- }
- return result, nil
- }
- type (
- // GetGroupChatStatByDayRequest 获取「群聊数据统计」数据 按自然日聚合的方式 请求
- GetGroupChatStatByDayRequest struct {
- DayBeginTime int `json:"day_begin_time"`
- DayEndTime int `json:"day_end_time"`
- OwnerFilter OwnerFilter `json:"owner_filter"`
- }
- // GetGroupChatStatByDayResponse 获取「群聊数据统计」数据 按自然日聚合的方式 响应
- GetGroupChatStatByDayResponse struct {
- util.CommonError
- Items []GetGroupChatStatByDayItem `json:"items"`
- }
- // GetGroupChatStatByDayItem 群聊数据统计(按自然日聚合)条目
- GetGroupChatStatByDayItem struct {
- StatTime int `json:"stat_time"`
- Data GroupChatStatItemData `json:"data"`
- }
- )
- // GetGroupChatStatByDay 获取「群聊数据统计」数据 按自然日聚合的方式
- // @see https://developer.work.weixin.qq.com/document/path/92133
- func (r *Client) GetGroupChatStatByDay(req *GetGroupChatStatByDayRequest) ([]GetGroupChatStatByDayItem, error) {
- accessToken, err := r.GetAccessToken()
- if err != nil {
- return nil, err
- }
- var response []byte
- jsonData, err := json.Marshal(req)
- if err != nil {
- return nil, err
- }
- response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", GetGroupChatStatByDayURL, accessToken), string(jsonData))
- if err != nil {
- return nil, err
- }
- var result GetGroupChatStatByDayResponse
- err = util.DecodeWithError(response, &result, "GetGroupChatStatByDay")
- if err != nil {
- return nil, err
- }
- return result.Items, nil
- }
|