servicer.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package kf
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. // 添加接待人员
  9. receptionistAddAddr = "https://qyapi.weixin.qq.com/cgi-bin/kf/servicer/add?access_token=%s"
  10. // 删除接待人员
  11. receptionistDelAddr = "https://qyapi.weixin.qq.com/cgi-bin/kf/servicer/del?access_token=%s"
  12. // 获取接待人员列表
  13. receptionistListAddr = "https://qyapi.weixin.qq.com/cgi-bin/kf/servicer/list?access_token=%s&open_kfid=%s"
  14. )
  15. // ReceptionistOptions 添加接待人员请求参数
  16. type ReceptionistOptions struct {
  17. OpenKFID string `json:"open_kfid"` // 客服帐号ID
  18. UserIDList []string `json:"userid_list"` // 接待人员userid列表。第三方应用填密文userid,即open_userid 可填充个数:1 ~ 100。超过100个需分批调用。
  19. DepartmentIDList []int `json:"department_id_list"` // 接待人员部门id列表 可填充个数:0 ~ 100。超过100个需分批调用。
  20. }
  21. // ReceptionistSchema 添加接待人员响应内容
  22. type ReceptionistSchema struct {
  23. util.CommonError
  24. ResultList []struct {
  25. UserID string `json:"userid"`
  26. DepartmentID int `json:"department_id"`
  27. util.CommonError
  28. } `json:"result_list"`
  29. }
  30. // ReceptionistAdd 添加接待人员
  31. // @see https://developer.work.weixin.qq.com/document/path/94646
  32. func (r *Client) ReceptionistAdd(options ReceptionistOptions) (info ReceptionistSchema, err error) {
  33. var (
  34. accessToken string
  35. data []byte
  36. )
  37. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  38. return
  39. }
  40. if data, err = util.PostJSON(fmt.Sprintf(receptionistAddAddr, accessToken), options); err != nil {
  41. return
  42. }
  43. if err = json.Unmarshal(data, &info); err != nil {
  44. return
  45. }
  46. if info.ErrCode != 0 {
  47. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  48. }
  49. return
  50. }
  51. // ReceptionistDel 删除接待人员
  52. // @see https://developer.work.weixin.qq.com/document/path/94647
  53. func (r *Client) ReceptionistDel(options ReceptionistOptions) (info ReceptionistSchema, err error) {
  54. var (
  55. accessToken string
  56. data []byte
  57. )
  58. accessToken, err = r.ctx.GetAccessToken()
  59. if err != nil {
  60. return
  61. }
  62. data, err = util.PostJSON(fmt.Sprintf(receptionistDelAddr, accessToken), options)
  63. if err != nil {
  64. return
  65. }
  66. if err = json.Unmarshal(data, &info); err != nil {
  67. return
  68. }
  69. if info.ErrCode != 0 {
  70. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  71. }
  72. return
  73. }
  74. // ReceptionistListSchema 获取接待人员列表响应内容
  75. type ReceptionistListSchema struct {
  76. util.CommonError
  77. ReceptionistList []struct {
  78. UserID string `json:"userid"` // 接待人员的userid。第三方应用获取到的为密文userid,即open_userid
  79. Status int `json:"status"` // 接待人员的接待状态。0:接待中,1:停止接待。第三方应用需具有“管理帐号、分配会话和收发消息”权限才可获取
  80. DepartmentID int `json:"department_id"` // 接待人员部门的id
  81. StopType int `json:"stop_type"` // 接待人员的接待状态为「停止接待」的子类型。0:停止接待,1:暂时挂起
  82. } `json:"servicer_list"`
  83. }
  84. // ReceptionistList 获取接待人员列表
  85. // @see https://developer.work.weixin.qq.com/document/path/94645
  86. func (r *Client) ReceptionistList(kfID string) (info ReceptionistListSchema, err error) {
  87. var (
  88. accessToken string
  89. data []byte
  90. )
  91. accessToken, err = r.ctx.GetAccessToken()
  92. if err != nil {
  93. return
  94. }
  95. data, err = util.HTTPGet(fmt.Sprintf(receptionistListAddr, accessToken, kfID))
  96. if err != nil {
  97. return
  98. }
  99. if err = json.Unmarshal(data, &info); err != nil {
  100. return
  101. }
  102. if info.ErrCode != 0 {
  103. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  104. }
  105. return
  106. }