join_way.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package externalcontact
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. // groupChatURL 客户群
  7. const groupChatURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat"
  8. type (
  9. // AddJoinWayRequest 添加群配置请求参数
  10. AddJoinWayRequest struct {
  11. Scene int `json:"scene"` // 必填 1 - 群的小程序插件,2 - 群的二维码插件
  12. Remark string `json:"remark"` //非必填 联系方式的备注信息,用于助记,超过30个字符将被截断
  13. AutoCreateRoom int `json:"auto_create_room"` //非必填 当群满了后,是否自动新建群。0-否;1-是。 默认为1
  14. RoomBaseName string `json:"room_base_name"` //非必填 自动建群的群名前缀,当auto_create_room为1时有效。最长40个utf8字符
  15. RoomBaseID int `json:"room_base_id"` //非必填 自动建群的群起始序号,当auto_create_room为1时有效
  16. ChatIDList []string `json:"chat_id_list"` //必填 使用该配置的客户群ID列表,支持5个。见客户群ID获取方法
  17. State string `json:"state"` //非必填 企业自定义的state参数,用于区分不同的入群渠道。不超过30个UTF-8字符
  18. MarkSource bool `json:"mark_source"`
  19. }
  20. // AddJoinWayResponse 添加群配置返回值
  21. AddJoinWayResponse struct {
  22. util.CommonError
  23. ConfigID string `json:"config_id"`
  24. }
  25. )
  26. // AddJoinWay 加入群聊
  27. // @see https://developer.work.weixin.qq.com/document/path/92229
  28. func (r *Client) AddJoinWay(req *AddJoinWayRequest) (*AddJoinWayResponse, error) {
  29. var (
  30. accessToken string
  31. err error
  32. response []byte
  33. )
  34. if accessToken, err = r.GetAccessToken(); err != nil {
  35. return nil, err
  36. }
  37. response, err = util.PostJSON(fmt.Sprintf("%s/add_join_way?access_token=%s", groupChatURL, accessToken), req)
  38. if err != nil {
  39. return nil, err
  40. }
  41. result := &AddJoinWayResponse{}
  42. err = util.DecodeWithError(response, result, "AddJoinWay")
  43. return result, err
  44. }
  45. type (
  46. //JoinWayConfigRequest 获取或删除群配置的请求参数
  47. JoinWayConfigRequest struct {
  48. ConfigID string `json:"config_id"`
  49. }
  50. //JoinWay 群配置
  51. JoinWay struct {
  52. ConfigID string `json:"config_id"`
  53. Scene int `json:"scene"`
  54. Remark string `json:"remark"`
  55. AutoCreateRoom int `json:"auto_create_room"`
  56. RoomBaseName string `json:"room_base_name"`
  57. RoomBaseID int `json:"room_base_id"`
  58. ChatIDList []string `json:"chat_id_list"`
  59. QrCode string `json:"qr_code"`
  60. State string `json:"state"`
  61. MarkSource bool `json:"mark_source"`
  62. }
  63. //GetJoinWayResponse 获取群配置的返回值
  64. GetJoinWayResponse struct {
  65. util.CommonError
  66. JoinWay JoinWay `json:"join_way"`
  67. }
  68. )
  69. // GetJoinWay 获取客户群进群方式配置
  70. // @see https://developer.work.weixin.qq.com/document/path/92229
  71. func (r *Client) GetJoinWay(req *JoinWayConfigRequest) (*GetJoinWayResponse, error) {
  72. var (
  73. accessToken string
  74. err error
  75. response []byte
  76. )
  77. if accessToken, err = r.GetAccessToken(); err != nil {
  78. return nil, err
  79. }
  80. response, err = util.PostJSON(fmt.Sprintf("%s/get_join_way?access_token=%s", groupChatURL, accessToken), req)
  81. if err != nil {
  82. return nil, err
  83. }
  84. result := &GetJoinWayResponse{}
  85. err = util.DecodeWithError(response, result, "GetJoinWay")
  86. return result, err
  87. }
  88. // UpdateJoinWayRequest 更新群配置的请求参数
  89. type UpdateJoinWayRequest struct {
  90. ConfigID string `json:"config_id"`
  91. Scene int `json:"scene"` // 必填 1 - 群的小程序插件,2 - 群的二维码插件
  92. Remark string `json:"remark"` //非必填 联系方式的备注信息,用于助记,超过30个字符将被截断
  93. AutoCreateRoom int `json:"auto_create_room"` //非必填 当群满了后,是否自动新建群。0-否;1-是。 默认为1
  94. RoomBaseName string `json:"room_base_name"` //非必填 自动建群的群名前缀,当auto_create_room为1时有效。最长40个utf8字符
  95. RoomBaseID int `json:"room_base_id"` //非必填 自动建群的群起始序号,当auto_create_room为1时有效
  96. ChatIDList []string `json:"chat_id_list"` //必填 使用该配置的客户群ID列表,支持5个。见客户群ID获取方法
  97. State string `json:"state"` //非必填 企业自定义的state参数,用于区分不同的入群渠道。不超过30个UTF-8字符
  98. MarkSource bool `json:"mark_source"`
  99. }
  100. // UpdateJoinWay 更新客户群进群方式配置
  101. // @see https://developer.work.weixin.qq.com/document/path/92229
  102. func (r *Client) UpdateJoinWay(req *UpdateJoinWayRequest) error {
  103. var (
  104. accessToken string
  105. err error
  106. response []byte
  107. )
  108. if accessToken, err = r.GetAccessToken(); err != nil {
  109. return err
  110. }
  111. response, err = util.PostJSON(fmt.Sprintf("%s/update_join_way?access_token=%s", groupChatURL, accessToken), req)
  112. if err != nil {
  113. return err
  114. }
  115. return util.DecodeWithCommonError(response, "UpdateJoinWay")
  116. }
  117. // DelJoinWay 删除客户群进群方式配置
  118. // @see https://developer.work.weixin.qq.com/document/path/92229
  119. func (r *Client) DelJoinWay(req *JoinWayConfigRequest) error {
  120. var (
  121. accessToken string
  122. err error
  123. response []byte
  124. )
  125. if accessToken, err = r.GetAccessToken(); err != nil {
  126. return err
  127. }
  128. response, err = util.PostJSON(fmt.Sprintf("%s/del_join_way?access_token=%s", groupChatURL, accessToken), req)
  129. if err != nil {
  130. return err
  131. }
  132. return util.DecodeWithCommonError(response, "DelJoinWay")
  133. }