statistic.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package externalcontact
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. // getUserBehaviorDataURL 获取「联系客户统计」数据
  9. getUserBehaviorDataURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_user_behavior_data"
  10. // getGroupChatStatURL 获取「群聊数据统计」数据 按群主聚合的方式
  11. getGroupChatStatURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/statistic"
  12. // getGroupChatStatByDayURL 获取「群聊数据统计」数据 按自然日聚合的方式
  13. getGroupChatStatByDayURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/statistic_group_by_day"
  14. )
  15. type (
  16. // GetUserBehaviorRequest 获取「联系客户统计」数据请求
  17. GetUserBehaviorRequest struct {
  18. UserID []string `json:"userid"`
  19. PartyID []int `json:"partyid"`
  20. StartTime int `json:"start_time"`
  21. EndTime int `json:"end_time"`
  22. }
  23. // GetUserBehaviorResponse 获取「联系客户统计」数据响应
  24. GetUserBehaviorResponse struct {
  25. util.CommonError
  26. BehaviorData []BehaviorData `json:"behavior_data"`
  27. }
  28. // BehaviorData 联系客户统计数据
  29. BehaviorData struct {
  30. StatTime int `json:"stat_time"`
  31. ChatCnt int `json:"chat_cnt"`
  32. MessageCnt int `json:"message_cnt"`
  33. ReplyPercentage float64 `json:"reply_percentage"`
  34. AvgReplyTime int `json:"avg_reply_time"`
  35. NegativeFeedbackCnt int `json:"negative_feedback_cnt"`
  36. NewApplyCnt int `json:"new_apply_cnt"`
  37. NewContactCnt int `json:"new_contact_cnt"`
  38. }
  39. )
  40. // GetUserBehaviorData 获取「联系客户统计」数据
  41. // @see https://developer.work.weixin.qq.com/document/path/92132
  42. func (r *Client) GetUserBehaviorData(req *GetUserBehaviorRequest) ([]BehaviorData, error) {
  43. accessToken, err := r.GetAccessToken()
  44. if err != nil {
  45. return nil, err
  46. }
  47. var response []byte
  48. jsonData, err := json.Marshal(req)
  49. if err != nil {
  50. return nil, err
  51. }
  52. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", getUserBehaviorDataURL, accessToken), string(jsonData))
  53. if err != nil {
  54. return nil, err
  55. }
  56. var result GetUserBehaviorResponse
  57. err = util.DecodeWithError(response, &result, "GetUserBehaviorData")
  58. return result.BehaviorData, err
  59. }
  60. type (
  61. // GetGroupChatStatRequest 获取「群聊数据统计」数据 按群主聚合的方式 请求
  62. GetGroupChatStatRequest struct {
  63. DayBeginTime int `json:"day_begin_time"`
  64. DayEndTime int `json:"day_end_time"`
  65. OwnerFilter OwnerFilter `json:"owner_filter"`
  66. OrderBy int `json:"order_by"`
  67. OrderAsc int `json:"order_asc"`
  68. Offset int `json:"offset"`
  69. Limit int `json:"limit"`
  70. }
  71. // GetGroupChatStatResponse 获取「群聊数据统计」数据 按群主聚合的方式 响应
  72. GetGroupChatStatResponse struct {
  73. util.CommonError
  74. Total int `json:"total"`
  75. NextOffset int `json:"next_offset"`
  76. Items []GroupChatStatItem `json:"items"`
  77. }
  78. // GroupChatStatItem 群聊数据统计 (按群主聚合) 条目
  79. GroupChatStatItem struct {
  80. Owner string `json:"owner"`
  81. Data GroupChatStatItemData `json:"data"`
  82. }
  83. )
  84. // OwnerFilter 群主过滤
  85. type OwnerFilter struct {
  86. UseridList []string `json:"userid_list"`
  87. }
  88. // GroupChatStatItemData 群聊数据统计条目数据
  89. type GroupChatStatItemData struct {
  90. NewChatCnt int `json:"new_chat_cnt"`
  91. ChatTotal int `json:"chat_total"`
  92. ChatHasMsg int `json:"chat_has_msg"`
  93. NewMemberCnt int `json:"new_member_cnt"`
  94. MemberTotal int `json:"member_total"`
  95. MemberHasMsg int `json:"member_has_msg"`
  96. MsgTotal int `json:"msg_total"`
  97. MigrateTraineeChatCnt int `json:"migrate_trainee_chat_cnt"`
  98. }
  99. // GetGroupChatStat 获取「群聊数据统计」数据 按群主聚合的方式
  100. // @see https://developer.work.weixin.qq.com/document/path/92133
  101. func (r *Client) GetGroupChatStat(req *GetGroupChatStatRequest) (*GetGroupChatStatResponse, error) {
  102. accessToken, err := r.GetAccessToken()
  103. if err != nil {
  104. return nil, err
  105. }
  106. var response []byte
  107. jsonData, err := json.Marshal(req)
  108. if err != nil {
  109. return nil, err
  110. }
  111. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", getGroupChatStatURL, accessToken), string(jsonData))
  112. if err != nil {
  113. return nil, err
  114. }
  115. result := &GetGroupChatStatResponse{}
  116. err = util.DecodeWithError(response, result, "GetGroupChatStat")
  117. return result, err
  118. }
  119. type (
  120. // GetGroupChatStatByDayRequest 获取「群聊数据统计」数据 按自然日聚合的方式 请求
  121. GetGroupChatStatByDayRequest struct {
  122. DayBeginTime int `json:"day_begin_time"`
  123. DayEndTime int `json:"day_end_time"`
  124. OwnerFilter OwnerFilter `json:"owner_filter"`
  125. }
  126. // GetGroupChatStatByDayResponse 获取「群聊数据统计」数据 按自然日聚合的方式 响应
  127. GetGroupChatStatByDayResponse struct {
  128. util.CommonError
  129. Items []GetGroupChatStatByDayItem `json:"items"`
  130. }
  131. // GetGroupChatStatByDayItem 群聊数据统计 (按自然日聚合) 条目
  132. GetGroupChatStatByDayItem struct {
  133. StatTime int `json:"stat_time"`
  134. Data GroupChatStatItemData `json:"data"`
  135. }
  136. )
  137. // GetGroupChatStatByDay 获取「群聊数据统计」数据 按自然日聚合的方式
  138. // @see https://developer.work.weixin.qq.com/document/path/92133
  139. func (r *Client) GetGroupChatStatByDay(req *GetGroupChatStatByDayRequest) ([]GetGroupChatStatByDayItem, error) {
  140. accessToken, err := r.GetAccessToken()
  141. if err != nil {
  142. return nil, err
  143. }
  144. var response []byte
  145. jsonData, err := json.Marshal(req)
  146. if err != nil {
  147. return nil, err
  148. }
  149. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", getGroupChatStatByDayURL, accessToken), string(jsonData))
  150. if err != nil {
  151. return nil, err
  152. }
  153. var result GetGroupChatStatByDayResponse
  154. err = util.DecodeWithError(response, &result, "GetGroupChatStatByDay")
  155. return result.Items, err
  156. }