package externalcontact import ( "fmt" "github.com/silenceper/wechat/v2/util" ) // groupChatURL 客户群 const groupChatURL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat" type ( // AddJoinWayRequest 添加群配置请求参数 AddJoinWayRequest struct { Scene int `json:"scene"` // 必填 1 - 群的小程序插件,2 - 群的二维码插件 Remark string `json:"remark"` //非必填 联系方式的备注信息,用于助记,超过30个字符将被截断 AutoCreateRoom int `json:"auto_create_room"` //非必填 当群满了后,是否自动新建群。0-否;1-是。 默认为1 RoomBaseName string `json:"room_base_name"` //非必填 自动建群的群名前缀,当auto_create_room为1时有效。最长40个utf8字符 RoomBaseID int `json:"room_base_id"` //非必填 自动建群的群起始序号,当auto_create_room为1时有效 ChatIDList []string `json:"chat_id_list"` //必填 使用该配置的客户群ID列表,支持5个。见客户群ID获取方法 State string `json:"state"` //非必填 企业自定义的state参数,用于区分不同的入群渠道。不超过30个UTF-8字符 MarkSource bool `json:"mark_source"` } // AddJoinWayResponse 添加群配置返回值 AddJoinWayResponse struct { util.CommonError ConfigID string `json:"config_id"` } ) // AddJoinWay 加入群聊 // @see https://developer.work.weixin.qq.com/document/path/92229 func (r *Client) AddJoinWay(req *AddJoinWayRequest) (*AddJoinWayResponse, error) { var ( accessToken string err error response []byte ) if accessToken, err = r.GetAccessToken(); err != nil { return nil, err } response, err = util.PostJSON(fmt.Sprintf("%s/add_join_way?access_token=%s", groupChatURL, accessToken), req) if err != nil { return nil, err } result := &AddJoinWayResponse{} err = util.DecodeWithError(response, result, "AddJoinWay") return result, err } type ( //JoinWayConfigRequest 获取或删除群配置的请求参数 JoinWayConfigRequest struct { ConfigID string `json:"config_id"` } //JoinWay 群配置 JoinWay struct { ConfigID string `json:"config_id"` Scene int `json:"scene"` Remark string `json:"remark"` AutoCreateRoom int `json:"auto_create_room"` RoomBaseName string `json:"room_base_name"` RoomBaseID int `json:"room_base_id"` ChatIDList []string `json:"chat_id_list"` QrCode string `json:"qr_code"` State string `json:"state"` MarkSource bool `json:"mark_source"` } //GetJoinWayResponse 获取群配置的返回值 GetJoinWayResponse struct { util.CommonError JoinWay JoinWay `json:"join_way"` } ) // GetJoinWay 获取客户群进群方式配置 // @see https://developer.work.weixin.qq.com/document/path/92229 func (r *Client) GetJoinWay(req *JoinWayConfigRequest) (*GetJoinWayResponse, error) { var ( accessToken string err error response []byte ) if accessToken, err = r.GetAccessToken(); err != nil { return nil, err } response, err = util.PostJSON(fmt.Sprintf("%s/get_join_way?access_token=%s", groupChatURL, accessToken), req) if err != nil { return nil, err } result := &GetJoinWayResponse{} err = util.DecodeWithError(response, result, "GetJoinWay") return result, err } // UpdateJoinWayRequest 更新群配置的请求参数 type UpdateJoinWayRequest struct { ConfigID string `json:"config_id"` Scene int `json:"scene"` // 必填 1 - 群的小程序插件,2 - 群的二维码插件 Remark string `json:"remark"` //非必填 联系方式的备注信息,用于助记,超过30个字符将被截断 AutoCreateRoom int `json:"auto_create_room"` //非必填 当群满了后,是否自动新建群。0-否;1-是。 默认为1 RoomBaseName string `json:"room_base_name"` //非必填 自动建群的群名前缀,当auto_create_room为1时有效。最长40个utf8字符 RoomBaseID int `json:"room_base_id"` //非必填 自动建群的群起始序号,当auto_create_room为1时有效 ChatIDList []string `json:"chat_id_list"` //必填 使用该配置的客户群ID列表,支持5个。见客户群ID获取方法 State string `json:"state"` //非必填 企业自定义的state参数,用于区分不同的入群渠道。不超过30个UTF-8字符 MarkSource bool `json:"mark_source"` } // UpdateJoinWay 更新客户群进群方式配置 // @see https://developer.work.weixin.qq.com/document/path/92229 func (r *Client) UpdateJoinWay(req *UpdateJoinWayRequest) error { var ( accessToken string err error response []byte ) if accessToken, err = r.GetAccessToken(); err != nil { return err } response, err = util.PostJSON(fmt.Sprintf("%s/update_join_way?access_token=%s", groupChatURL, accessToken), req) if err != nil { return err } return util.DecodeWithCommonError(response, "UpdateJoinWay") } // DelJoinWay 删除客户群进群方式配置 // @see https://developer.work.weixin.qq.com/document/path/92229 func (r *Client) DelJoinWay(req *JoinWayConfigRequest) error { var ( accessToken string err error response []byte ) if accessToken, err = r.GetAccessToken(); err != nil { return err } response, err = util.PostJSON(fmt.Sprintf("%s/del_join_way?access_token=%s", groupChatURL, accessToken), req) if err != nil { return err } return util.DecodeWithCommonError(response, "DelJoinWay") }