upgrade.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package kf
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. //获取配置的专员与客户群
  9. upgradeServiceConfigAddr = "https://qyapi.weixin.qq.com/cgi-bin/kf/customer/get_upgrade_service_config?access_token=%s"
  10. // 为客户升级为专员或客户群服务
  11. upgradeService = "https://qyapi.weixin.qq.com/cgi-bin/kf/customer/upgrade_service?access_token=%s"
  12. //为客户取消推荐
  13. upgradeServiceCancel = "https://qyapi.weixin.qq.com/cgi-bin/kf/customer/cancel_upgrade_service?access_token=%s"
  14. )
  15. // UpgradeServiceConfigSchema 获取配置的专员与客户群
  16. type UpgradeServiceConfigSchema struct {
  17. util.CommonError
  18. MemberRange struct {
  19. UserIDList []string `json:"userid_list"` // 专员userid列表
  20. DepartmentIDList []string `json:"department_id_list"` // 专员部门列表
  21. } `json:"member_range"` // 专员服务配置范围
  22. GroupChatRange struct {
  23. ChatIDList []string `json:"chat_id_list"` // 客户群列表
  24. } `json:"groupchat_range"` // 客户群配置范围
  25. }
  26. // UpgradeServiceConfig 获取配置的专员与客户群
  27. func (r *Client) UpgradeServiceConfig() (info UpgradeServiceConfigSchema, err error) {
  28. var (
  29. accessToken string
  30. data []byte
  31. )
  32. accessToken, err = r.ctx.GetAccessToken()
  33. if err != nil {
  34. return
  35. }
  36. data, err = util.HTTPGet(fmt.Sprintf(upgradeServiceConfigAddr, accessToken))
  37. if err != nil {
  38. return
  39. }
  40. if err = json.Unmarshal(data, &info); err != nil {
  41. return
  42. }
  43. if info.ErrCode != 0 {
  44. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  45. }
  46. return info, nil
  47. }
  48. // UpgradeServiceOptions 为客户升级为专员或客户群服务请求参数
  49. type UpgradeServiceOptions struct {
  50. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  51. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  52. Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。1:专员服务。2:客户群服务
  53. Member struct {
  54. UserID string `json:"userid"` // 服务专员的userid
  55. Wording string `json:"wording"` // 推荐语
  56. } `json:"member"` // 推荐的服务专员,type等于1时有效
  57. GroupChat struct {
  58. ChatID string `json:"chat_id"` // 客户群id
  59. Wording string `json:"wording"` // 推荐语
  60. } `json:"groupchat"` // 推荐的客户群,type等于2时有效
  61. }
  62. // UpgradeService 为客户升级为专员或客户群服务
  63. func (r *Client) UpgradeService(options UpgradeServiceOptions) (info util.CommonError, err error) {
  64. var (
  65. accessToken string
  66. data []byte
  67. )
  68. accessToken, err = r.ctx.GetAccessToken()
  69. if err != nil {
  70. return
  71. }
  72. data, err = util.PostJSON(fmt.Sprintf(upgradeService, accessToken), options)
  73. if err != nil {
  74. return
  75. }
  76. if err = json.Unmarshal(data, &info); err != nil {
  77. return
  78. }
  79. if info.ErrCode != 0 {
  80. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  81. }
  82. return info, nil
  83. }
  84. // UpgradeMemberServiceOptions 为客户升级为专员服务请求参数
  85. type UpgradeMemberServiceOptions struct {
  86. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  87. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  88. Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。1:专员服务
  89. Member struct {
  90. UserID string `json:"userid"` // 服务专员的userid
  91. Wording string `json:"wording"` // 推荐语
  92. } `json:"member"` // 推荐的服务专员,type等于1时有效
  93. }
  94. // UpgradeMemberService 为客户升级为专员服务
  95. func (r *Client) UpgradeMemberService(options UpgradeMemberServiceOptions) (info util.CommonError, err error) {
  96. var (
  97. accessToken string
  98. data []byte
  99. )
  100. accessToken, err = r.ctx.GetAccessToken()
  101. if err != nil {
  102. return
  103. }
  104. data, err = util.PostJSON(fmt.Sprintf(upgradeService, accessToken), options)
  105. if err != nil {
  106. return
  107. }
  108. if err = json.Unmarshal(data, &info); err != nil {
  109. return
  110. }
  111. if info.ErrCode != 0 {
  112. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  113. }
  114. return info, nil
  115. }
  116. // UpgradeServiceGroupChatOptions 为客户升级为客户群服务请求参数
  117. type UpgradeServiceGroupChatOptions struct {
  118. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  119. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  120. Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。2:客户群服务
  121. GroupChat struct {
  122. ChatID string `json:"chat_id"` // 客户群id
  123. Wording string `json:"wording"` // 推荐语
  124. } `json:"groupchat"` // 推荐的客户群,type等于2时有效
  125. }
  126. // UpgradeGroupChatService 为客户升级为客户群服务
  127. func (r *Client) UpgradeGroupChatService(options UpgradeServiceGroupChatOptions) (info util.CommonError, err error) {
  128. var (
  129. accessToken string
  130. data []byte
  131. )
  132. accessToken, err = r.ctx.GetAccessToken()
  133. if err != nil {
  134. return
  135. }
  136. data, err = util.PostJSON(fmt.Sprintf(upgradeService, accessToken), options)
  137. if err != nil {
  138. return
  139. }
  140. if err = json.Unmarshal(data, &info); err != nil {
  141. return
  142. }
  143. if info.ErrCode != 0 {
  144. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  145. }
  146. return info, nil
  147. }
  148. // UpgradeServiceCancelOptions 为客户取消推荐
  149. type UpgradeServiceCancelOptions struct {
  150. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  151. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  152. }
  153. // UpgradeServiceCancel 为客户取消推荐
  154. func (r *Client) UpgradeServiceCancel(options UpgradeServiceCancelOptions) (info util.CommonError, err error) {
  155. var (
  156. accessToken string
  157. data []byte
  158. )
  159. accessToken, err = r.ctx.GetAccessToken()
  160. if err != nil {
  161. return
  162. }
  163. data, err = util.PostJSON(fmt.Sprintf(upgradeServiceCancel, accessToken), options)
  164. if err != nil {
  165. return
  166. }
  167. if err = json.Unmarshal(data, &info); err != nil {
  168. return
  169. }
  170. if info.ErrCode != 0 {
  171. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  172. }
  173. return info, nil
  174. }