statistic.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. if err != nil {
  59. return nil, err
  60. }
  61. return result.BehaviorData, nil
  62. }
  63. type (
  64. // GetGroupChatStatRequest 获取「群聊数据统计」数据 按群主聚合的方式 请求
  65. GetGroupChatStatRequest struct {
  66. DayBeginTime int `json:"day_begin_time"`
  67. DayEndTime int `json:"day_end_time"`
  68. OwnerFilter OwnerFilter `json:"owner_filter"`
  69. OrderBy int `json:"order_by"`
  70. OrderAsc int `json:"order_asc"`
  71. Offset int `json:"offset"`
  72. Limit int `json:"limit"`
  73. }
  74. // GetGroupChatStatResponse 获取「群聊数据统计」数据 按群主聚合的方式 响应
  75. GetGroupChatStatResponse struct {
  76. util.CommonError
  77. Total int `json:"total"`
  78. NextOffset int `json:"next_offset"`
  79. Items []GroupChatStatItem `json:"items"`
  80. }
  81. // GroupChatStatItem 群聊数据统计(按群主聚合)条目
  82. GroupChatStatItem struct {
  83. Owner string `json:"owner"`
  84. Data GroupChatStatItemData `json:"data"`
  85. }
  86. )
  87. // OwnerFilter 群主过滤
  88. type OwnerFilter struct {
  89. UseridList []string `json:"userid_list"`
  90. }
  91. // GroupChatStatItemData 群聊数据统计条目数据
  92. type GroupChatStatItemData struct {
  93. NewChatCnt int `json:"new_chat_cnt"`
  94. ChatTotal int `json:"chat_total"`
  95. ChatHasMsg int `json:"chat_has_msg"`
  96. NewMemberCnt int `json:"new_member_cnt"`
  97. MemberTotal int `json:"member_total"`
  98. MemberHasMsg int `json:"member_has_msg"`
  99. MsgTotal int `json:"msg_total"`
  100. MigrateTraineeChatCnt int `json:"migrate_trainee_chat_cnt"`
  101. }
  102. // GetGroupChatStat 获取「群聊数据统计」数据 按群主聚合的方式
  103. // @see https://developer.work.weixin.qq.com/document/path/92133
  104. func (r *Client) GetGroupChatStat(req *GetGroupChatStatRequest) (*GetGroupChatStatResponse, error) {
  105. accessToken, err := r.GetAccessToken()
  106. if err != nil {
  107. return nil, err
  108. }
  109. var response []byte
  110. jsonData, err := json.Marshal(req)
  111. if err != nil {
  112. return nil, err
  113. }
  114. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", getGroupChatStatURL, accessToken), string(jsonData))
  115. if err != nil {
  116. return nil, err
  117. }
  118. result := &GetGroupChatStatResponse{}
  119. err = util.DecodeWithError(response, result, "GetGroupChatStat")
  120. if err != nil {
  121. return nil, err
  122. }
  123. return result, nil
  124. }
  125. type (
  126. // GetGroupChatStatByDayRequest 获取「群聊数据统计」数据 按自然日聚合的方式 请求
  127. GetGroupChatStatByDayRequest struct {
  128. DayBeginTime int `json:"day_begin_time"`
  129. DayEndTime int `json:"day_end_time"`
  130. OwnerFilter OwnerFilter `json:"owner_filter"`
  131. }
  132. // GetGroupChatStatByDayResponse 获取「群聊数据统计」数据 按自然日聚合的方式 响应
  133. GetGroupChatStatByDayResponse struct {
  134. util.CommonError
  135. Items []GetGroupChatStatByDayItem `json:"items"`
  136. }
  137. // GetGroupChatStatByDayItem 群聊数据统计(按自然日聚合)条目
  138. GetGroupChatStatByDayItem struct {
  139. StatTime int `json:"stat_time"`
  140. Data GroupChatStatItemData `json:"data"`
  141. }
  142. )
  143. // GetGroupChatStatByDay 获取「群聊数据统计」数据 按自然日聚合的方式
  144. // @see https://developer.work.weixin.qq.com/document/path/92133
  145. func (r *Client) GetGroupChatStatByDay(req *GetGroupChatStatByDayRequest) ([]GetGroupChatStatByDayItem, error) {
  146. accessToken, err := r.GetAccessToken()
  147. if err != nil {
  148. return nil, err
  149. }
  150. var response []byte
  151. jsonData, err := json.Marshal(req)
  152. if err != nil {
  153. return nil, err
  154. }
  155. response, err = util.HTTPPost(fmt.Sprintf("%s?access_token=%v", getGroupChatStatByDayURL, accessToken), string(jsonData))
  156. if err != nil {
  157. return nil, err
  158. }
  159. var result GetGroupChatStatByDayResponse
  160. err = util.DecodeWithError(response, &result, "GetGroupChatStatByDay")
  161. if err != nil {
  162. return nil, err
  163. }
  164. return result.Items, nil
  165. }