upgrade.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  33. return
  34. }
  35. if data, err = util.HTTPGet(fmt.Sprintf(upgradeServiceConfigAddr, accessToken)); err != nil {
  36. return
  37. }
  38. if err = json.Unmarshal(data, &info); err != nil {
  39. return
  40. }
  41. if info.ErrCode != 0 {
  42. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  43. }
  44. return info, nil
  45. }
  46. // UpgradeServiceOptions 为客户升级为专员或客户群服务请求参数
  47. type UpgradeServiceOptions struct {
  48. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  49. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  50. Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。1:专员服务。2:客户群服务
  51. Member struct {
  52. UserID string `json:"userid"` // 服务专员的userid
  53. Wording string `json:"wording"` // 推荐语
  54. } `json:"member"` // 推荐的服务专员,type等于1时有效
  55. GroupChat struct {
  56. ChatID string `json:"chat_id"` // 客户群id
  57. Wording string `json:"wording"` // 推荐语
  58. } `json:"groupchat"` // 推荐的客户群,type等于2时有效
  59. }
  60. // UpgradeService 为客户升级为专员或客户群服务
  61. func (r *Client) UpgradeService(options UpgradeServiceOptions) (info util.CommonError, err error) {
  62. var (
  63. accessToken string
  64. data []byte
  65. )
  66. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  67. return
  68. }
  69. if data, err = util.PostJSON(fmt.Sprintf(upgradeService, accessToken), options); err != nil {
  70. return
  71. }
  72. if err = json.Unmarshal(data, &info); err != nil {
  73. return
  74. }
  75. if info.ErrCode != 0 {
  76. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  77. }
  78. return info, nil
  79. }
  80. // UpgradeMemberServiceOptions 为客户升级为专员服务请求参数
  81. type UpgradeMemberServiceOptions struct {
  82. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  83. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  84. Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。1:专员服务
  85. Member struct {
  86. UserID string `json:"userid"` // 服务专员的userid
  87. Wording string `json:"wording"` // 推荐语
  88. } `json:"member"` // 推荐的服务专员,type等于1时有效
  89. }
  90. // UpgradeMemberService 为客户升级为专员服务
  91. func (r *Client) UpgradeMemberService(options UpgradeMemberServiceOptions) (info util.CommonError, err error) {
  92. var (
  93. accessToken string
  94. data []byte
  95. )
  96. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  97. return
  98. }
  99. if data, err = util.PostJSON(fmt.Sprintf(upgradeService, accessToken), options); err != nil {
  100. return
  101. }
  102. if err = json.Unmarshal(data, &info); err != nil {
  103. return
  104. }
  105. if info.ErrCode != 0 {
  106. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  107. }
  108. return info, nil
  109. }
  110. // UpgradeServiceGroupChatOptions 为客户升级为客户群服务请求参数
  111. type UpgradeServiceGroupChatOptions struct {
  112. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  113. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  114. Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。2:客户群服务
  115. GroupChat struct {
  116. ChatID string `json:"chat_id"` // 客户群id
  117. Wording string `json:"wording"` // 推荐语
  118. } `json:"groupchat"` // 推荐的客户群,type等于2时有效
  119. }
  120. // UpgradeGroupChatService 为客户升级为客户群服务
  121. func (r *Client) UpgradeGroupChatService(options UpgradeServiceGroupChatOptions) (info util.CommonError, err error) {
  122. var (
  123. accessToken string
  124. data []byte
  125. )
  126. accessToken, err = r.ctx.GetAccessToken()
  127. if err != nil {
  128. return
  129. }
  130. data, err = util.PostJSON(fmt.Sprintf(upgradeService, accessToken), options)
  131. if err != nil {
  132. return
  133. }
  134. if err = json.Unmarshal(data, &info); err != nil {
  135. return
  136. }
  137. if info.ErrCode != 0 {
  138. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  139. }
  140. return info, nil
  141. }
  142. // UpgradeServiceCancelOptions 为客户取消推荐
  143. type UpgradeServiceCancelOptions struct {
  144. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  145. ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
  146. }
  147. // UpgradeServiceCancel 为客户取消推荐
  148. func (r *Client) UpgradeServiceCancel(options UpgradeServiceCancelOptions) (info util.CommonError, err error) {
  149. var (
  150. accessToken string
  151. data []byte
  152. )
  153. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  154. return
  155. }
  156. if data, err = util.PostJSON(fmt.Sprintf(upgradeServiceCancel, accessToken), options); err != nil {
  157. return
  158. }
  159. if err = json.Unmarshal(data, &info); err != nil {
  160. return
  161. }
  162. if info.ErrCode != 0 {
  163. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  164. }
  165. return info, nil
  166. }