gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/contact/v3/api.go (about)

     1  // Package contact code generated by oapi sdk gen
     2  /*
     3   * MIT License
     4   *
     5   * Copyright (c) 2022 Lark Technologies Pte. Ltd.
     6   *
     7   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
     8   *
     9   * The above copyright notice and this permission notice, shall be included in all copies or substantial portions of the Software.
    10   *
    11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    12   */
    13  
    14  package larkcontact
    15  
    16  import (
    17  	"context"
    18  	"net/http"
    19  
    20  	"gitee.com/larksuite/oapi-sdk-go/v3/core"
    21  )
    22  
    23  func NewService(config *larkcore.Config) *ContactService {
    24  	c := &ContactService{config: config}
    25  	c.CustomAttr = &customAttr{service: c}
    26  	c.CustomAttrEvent = &customAttrEvent{service: c}
    27  	c.Department = &department{service: c}
    28  	c.EmployeeTypeEnum = &employeeTypeEnum{service: c}
    29  	c.Group = &group{service: c}
    30  	c.GroupMember = &groupMember{service: c}
    31  	c.Scope = &scope{service: c}
    32  	c.Unit = &unit{service: c}
    33  	c.User = &user{service: c}
    34  	return c
    35  }
    36  
    37  type ContactService struct {
    38  	config           *larkcore.Config
    39  	CustomAttr       *customAttr       // 自定义用户字段
    40  	CustomAttrEvent  *customAttrEvent  // 事件
    41  	Department       *department       // 部门
    42  	EmployeeTypeEnum *employeeTypeEnum // 人员类型
    43  	Group            *group            // 用户组
    44  	GroupMember      *groupMember      // 用户组成员
    45  	Scope            *scope            // 通讯录权限范围
    46  	Unit             *unit             // 单位
    47  	User             *user             // 用户
    48  }
    49  
    50  type customAttr struct {
    51  	service *ContactService
    52  }
    53  type customAttrEvent struct {
    54  	service *ContactService
    55  }
    56  type department struct {
    57  	service *ContactService
    58  }
    59  type employeeTypeEnum struct {
    60  	service *ContactService
    61  }
    62  type group struct {
    63  	service *ContactService
    64  }
    65  type groupMember struct {
    66  	service *ContactService
    67  }
    68  type scope struct {
    69  	service *ContactService
    70  }
    71  type unit struct {
    72  	service *ContactService
    73  }
    74  type user struct {
    75  	service *ContactService
    76  }
    77  
    78  // 获取企业自定义用户字段
    79  //
    80  // - 获取企业自定义的用户字段配置信息
    81  //
    82  // - 调用该接口前,需要先确认[企业管理员](https://www.feishu.cn/hc/zh-CN/articles/360049067822)在[企业管理后台 - 组织架构 - 成员字段管理](http://www.feishu.cn/admin/contacts/employee-field-new/custom) 自定义字段管理栏开启了“允许开放平台API调用“。;;![通讯录.gif](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/544738c94f13ef0b9ebaff53a5133cc7_E9EGMkXyzX.gif)
    83  //
    84  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/custom_attr/list
    85  //
    86  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/list_customAttr.go
    87  func (c *customAttr) List(ctx context.Context, req *ListCustomAttrReq, options ...larkcore.RequestOptionFunc) (*ListCustomAttrResp, error) {
    88  	// 发起请求
    89  	apiReq := req.apiReq
    90  	apiReq.ApiPath = "/open-apis/contact/v3/custom_attrs"
    91  	apiReq.HttpMethod = http.MethodGet
    92  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
    93  	apiResp, err := larkcore.Request(ctx, apiReq, c.service.config, options...)
    94  	if err != nil {
    95  		return nil, err
    96  	}
    97  	// 反序列响应结果
    98  	resp := &ListCustomAttrResp{ApiResp: apiResp}
    99  	err = apiResp.JSONUnmarshalBody(resp)
   100  	if err != nil {
   101  		return nil, err
   102  	}
   103  	return resp, err
   104  }
   105  func (c *customAttr) ListByIterator(ctx context.Context, req *ListCustomAttrReq, options ...larkcore.RequestOptionFunc) (*ListCustomAttrIterator, error) {
   106  	return &ListCustomAttrIterator{
   107  		ctx:      ctx,
   108  		req:      req,
   109  		listFunc: c.List,
   110  		options:  options,
   111  		limit:    req.Limit}, nil
   112  }
   113  
   114  // 获取子部门列表
   115  //
   116  // - 通过部门ID获取部门的子部门列表。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   117  //
   118  // - - 使用 user_access_token 时,返回该用户组织架构可见性范围([登陆企业管理后台进行权限配置](https://www.feishu.cn/admin/security/permission/visibility))内的所有可见部门。当进行递归查询时,最多1000个部门对该用户可见。;;- 使用 ; tenant_access_token 则基于应用的通讯录权限范围进行权限校验与过滤。;如果部门ID为0,会检验应用是否有全员通讯录权限,如果是非0 部门ID,则会校验应用是否有该部门的通讯录权限。无部门权限返回无部门通讯录权限错误码,有权限则返回部门下子部门列表(根据fetch_child决定是否递归)。
   119  //
   120  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/children
   121  //
   122  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/children_department.go
   123  func (d *department) Children(ctx context.Context, req *ChildrenDepartmentReq, options ...larkcore.RequestOptionFunc) (*ChildrenDepartmentResp, error) {
   124  	// 发起请求
   125  	apiReq := req.apiReq
   126  	apiReq.ApiPath = "/open-apis/contact/v3/departments/:department_id/children"
   127  	apiReq.HttpMethod = http.MethodGet
   128  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   129  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   130  	if err != nil {
   131  		return nil, err
   132  	}
   133  	// 反序列响应结果
   134  	resp := &ChildrenDepartmentResp{ApiResp: apiResp}
   135  	err = apiResp.JSONUnmarshalBody(resp)
   136  	if err != nil {
   137  		return nil, err
   138  	}
   139  	return resp, err
   140  }
   141  func (d *department) ChildrenByIterator(ctx context.Context, req *ChildrenDepartmentReq, options ...larkcore.RequestOptionFunc) (*ChildrenDepartmentIterator, error) {
   142  	return &ChildrenDepartmentIterator{
   143  		ctx:      ctx,
   144  		req:      req,
   145  		listFunc: d.Children,
   146  		options:  options,
   147  		limit:    req.Limit}, nil
   148  }
   149  
   150  // 创建部门
   151  //
   152  // - 该接口用于向通讯录中创建部门。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   153  //
   154  // - 只可在应用的通讯录权限范围内的部门下创建部门。若需要在根部门下创建子部门,则应用通讯录权限范围需要设置为“全部成员”。应用商店应用无权限调用此接口。
   155  //
   156  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/create
   157  //
   158  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/create_department.go
   159  func (d *department) Create(ctx context.Context, req *CreateDepartmentReq, options ...larkcore.RequestOptionFunc) (*CreateDepartmentResp, error) {
   160  	// 发起请求
   161  	apiReq := req.apiReq
   162  	apiReq.ApiPath = "/open-apis/contact/v3/departments"
   163  	apiReq.HttpMethod = http.MethodPost
   164  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   165  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   166  	if err != nil {
   167  		return nil, err
   168  	}
   169  	// 反序列响应结果
   170  	resp := &CreateDepartmentResp{ApiResp: apiResp}
   171  	err = apiResp.JSONUnmarshalBody(resp)
   172  	if err != nil {
   173  		return nil, err
   174  	}
   175  	return resp, err
   176  }
   177  
   178  // 删除部门
   179  //
   180  // - 该接口用于向通讯录中删除部门。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   181  //
   182  // - 应用需要同时拥有待删除部门及其父部门的通讯录授权。应用商店应用无权限调用该接口。
   183  //
   184  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/delete
   185  //
   186  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/delete_department.go
   187  func (d *department) Delete(ctx context.Context, req *DeleteDepartmentReq, options ...larkcore.RequestOptionFunc) (*DeleteDepartmentResp, error) {
   188  	// 发起请求
   189  	apiReq := req.apiReq
   190  	apiReq.ApiPath = "/open-apis/contact/v3/departments/:department_id"
   191  	apiReq.HttpMethod = http.MethodDelete
   192  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   193  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   194  	if err != nil {
   195  		return nil, err
   196  	}
   197  	// 反序列响应结果
   198  	resp := &DeleteDepartmentResp{ApiResp: apiResp}
   199  	err = apiResp.JSONUnmarshalBody(resp)
   200  	if err != nil {
   201  		return nil, err
   202  	}
   203  	return resp, err
   204  }
   205  
   206  // 获取单个部门信息
   207  //
   208  // - 该接口用于向通讯录获取单个部门信息。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   209  //
   210  // - 使用tenant_access_token时,应用需要拥有待查询部门的通讯录授权。如果需要获取根部门信息,则需要拥有全员权限。;使用user_access_token时,用户需要有待查询部门的可见性,如果需要获取根部门信息,则要求员工可见所有人。
   211  //
   212  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/get
   213  //
   214  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/get_department.go
   215  func (d *department) Get(ctx context.Context, req *GetDepartmentReq, options ...larkcore.RequestOptionFunc) (*GetDepartmentResp, error) {
   216  	// 发起请求
   217  	apiReq := req.apiReq
   218  	apiReq.ApiPath = "/open-apis/contact/v3/departments/:department_id"
   219  	apiReq.HttpMethod = http.MethodGet
   220  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   221  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   222  	if err != nil {
   223  		return nil, err
   224  	}
   225  	// 反序列响应结果
   226  	resp := &GetDepartmentResp{ApiResp: apiResp}
   227  	err = apiResp.JSONUnmarshalBody(resp)
   228  	if err != nil {
   229  		return nil, err
   230  	}
   231  	return resp, err
   232  }
   233  
   234  // 获取部门信息列表
   235  //
   236  // - 该接口用于获取当前部门子部门列表。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   237  //
   238  // - - 使用 user_access_token 时,返回该用户组织架构可见性范围([登陆企业管理后台进行权限配置](https://www.feishu.cn/admin/security/permission/visibility))内的所有可见部门。当进行递归查询时,只筛查最多1000个部门的可见性。;;- 使用 ; tenant_access_token 则基于应用的通讯录权限范围进行权限校验与过滤。由于 ; parent_department_id 是非必填参数,填与不填存在<b>两种数据权限校验与返回</b>情况:;<br> <br>1、请求设置了 ; parent_department_id 为A(根部门0),会检验A是否在通讯录权限内,若在( parent_department_id=0 时会校验是否为全员权限),则返回部门下子部门列表(根据fetch_child决定是否递归),否则返回无部门通讯录权限错误码。;<br> <br>2、请求未带 ; parent_department_id 参数,如通讯录范围为全员权限,只返回根部门ID(部门ID为0),否则返回根据通讯录范围配置的部门ID及子部门(根据 ; fetch_child 决定是否递归)。
   239  //
   240  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/list
   241  //
   242  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/list_department.go
   243  func (d *department) List(ctx context.Context, req *ListDepartmentReq, options ...larkcore.RequestOptionFunc) (*ListDepartmentResp, error) {
   244  	// 发起请求
   245  	apiReq := req.apiReq
   246  	apiReq.ApiPath = "/open-apis/contact/v3/departments"
   247  	apiReq.HttpMethod = http.MethodGet
   248  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   249  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   250  	if err != nil {
   251  		return nil, err
   252  	}
   253  	// 反序列响应结果
   254  	resp := &ListDepartmentResp{ApiResp: apiResp}
   255  	err = apiResp.JSONUnmarshalBody(resp)
   256  	if err != nil {
   257  		return nil, err
   258  	}
   259  	return resp, err
   260  }
   261  func (d *department) ListByIterator(ctx context.Context, req *ListDepartmentReq, options ...larkcore.RequestOptionFunc) (*ListDepartmentIterator, error) {
   262  	return &ListDepartmentIterator{
   263  		ctx:      ctx,
   264  		req:      req,
   265  		listFunc: d.List,
   266  		options:  options,
   267  		limit:    req.Limit}, nil
   268  }
   269  
   270  // 获取父部门信息
   271  //
   272  // - 该接口用来递归获取部门父部门的信息,并按照由子到父的顺序返回有权限的父部门信息列表。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   273  //
   274  // - 使用tenant_access_token时,该接口只返回可见性范围内的父部门信息;;例如:A >>B>>C>>D四级部门,通讯录权限只到B,那么查询D部门的parent,会返回B和C两级部门。;使用user_access_token时,该接口只返回对于用户可见的父部门信息
   275  //
   276  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/parent
   277  //
   278  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/parent_department.go
   279  func (d *department) Parent(ctx context.Context, req *ParentDepartmentReq, options ...larkcore.RequestOptionFunc) (*ParentDepartmentResp, error) {
   280  	// 发起请求
   281  	apiReq := req.apiReq
   282  	apiReq.ApiPath = "/open-apis/contact/v3/departments/parent"
   283  	apiReq.HttpMethod = http.MethodGet
   284  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   285  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   286  	if err != nil {
   287  		return nil, err
   288  	}
   289  	// 反序列响应结果
   290  	resp := &ParentDepartmentResp{ApiResp: apiResp}
   291  	err = apiResp.JSONUnmarshalBody(resp)
   292  	if err != nil {
   293  		return nil, err
   294  	}
   295  	return resp, err
   296  }
   297  func (d *department) ParentByIterator(ctx context.Context, req *ParentDepartmentReq, options ...larkcore.RequestOptionFunc) (*ParentDepartmentIterator, error) {
   298  	return &ParentDepartmentIterator{
   299  		ctx:      ctx,
   300  		req:      req,
   301  		listFunc: d.Parent,
   302  		options:  options,
   303  		limit:    req.Limit}, nil
   304  }
   305  
   306  // 修改部分部门信息
   307  //
   308  // - 该接口用于更新通讯录中部门的信息中的任一个字段。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   309  //
   310  // - 调用该接口需要具有该部门以及更新操作涉及的部门的通讯录权限。应用商店应用无权限调用此接口。
   311  //
   312  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/patch
   313  //
   314  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/patch_department.go
   315  func (d *department) Patch(ctx context.Context, req *PatchDepartmentReq, options ...larkcore.RequestOptionFunc) (*PatchDepartmentResp, error) {
   316  	// 发起请求
   317  	apiReq := req.apiReq
   318  	apiReq.ApiPath = "/open-apis/contact/v3/departments/:department_id"
   319  	apiReq.HttpMethod = http.MethodPatch
   320  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   321  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   322  	if err != nil {
   323  		return nil, err
   324  	}
   325  	// 反序列响应结果
   326  	resp := &PatchDepartmentResp{ApiResp: apiResp}
   327  	err = apiResp.JSONUnmarshalBody(resp)
   328  	if err != nil {
   329  		return nil, err
   330  	}
   331  	return resp, err
   332  }
   333  
   334  // 搜索部门
   335  //
   336  // - 搜索部门,用户通过关键词查询可见的部门数据,部门可见性需要管理员在后台配置。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   337  //
   338  // - 部门存在,但用户搜索不到并不一定是搜索有问题,可能是管理员在后台配置了权限控制,导致用户无法搜索到该部门
   339  //
   340  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/search
   341  //
   342  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/search_department.go
   343  func (d *department) Search(ctx context.Context, req *SearchDepartmentReq, options ...larkcore.RequestOptionFunc) (*SearchDepartmentResp, error) {
   344  	// 发起请求
   345  	apiReq := req.apiReq
   346  	apiReq.ApiPath = "/open-apis/contact/v3/departments/search"
   347  	apiReq.HttpMethod = http.MethodPost
   348  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeUser}
   349  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   350  	if err != nil {
   351  		return nil, err
   352  	}
   353  	// 反序列响应结果
   354  	resp := &SearchDepartmentResp{ApiResp: apiResp}
   355  	err = apiResp.JSONUnmarshalBody(resp)
   356  	if err != nil {
   357  		return nil, err
   358  	}
   359  	return resp, err
   360  }
   361  func (d *department) SearchByIterator(ctx context.Context, req *SearchDepartmentReq, options ...larkcore.RequestOptionFunc) (*SearchDepartmentIterator, error) {
   362  	return &SearchDepartmentIterator{
   363  		ctx:      ctx,
   364  		req:      req,
   365  		listFunc: d.Search,
   366  		options:  options,
   367  		limit:    req.Limit}, nil
   368  }
   369  
   370  // 部门群转为普通群
   371  //
   372  // - 通过该接口将部门群转为普通群。
   373  //
   374  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/unbind_department_chat
   375  //
   376  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/unbindDepartmentChat_department.go
   377  func (d *department) UnbindDepartmentChat(ctx context.Context, req *UnbindDepartmentChatDepartmentReq, options ...larkcore.RequestOptionFunc) (*UnbindDepartmentChatDepartmentResp, error) {
   378  	// 发起请求
   379  	apiReq := req.apiReq
   380  	apiReq.ApiPath = "/open-apis/contact/v3/departments/unbind_department_chat"
   381  	apiReq.HttpMethod = http.MethodPost
   382  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   383  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   384  	if err != nil {
   385  		return nil, err
   386  	}
   387  	// 反序列响应结果
   388  	resp := &UnbindDepartmentChatDepartmentResp{ApiResp: apiResp}
   389  	err = apiResp.JSONUnmarshalBody(resp)
   390  	if err != nil {
   391  		return nil, err
   392  	}
   393  	return resp, err
   394  }
   395  
   396  // 更新部门所有信息
   397  //
   398  // - 该接口用于更新当前部门所有信息。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
   399  //
   400  // - - 调用该接口需要具有该部门以及更新操作涉及的部门的通讯录权限。应用商店应用无权限调用此接口。;; - 没有填写的字段会被置为空值(order字段除外)。
   401  //
   402  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/department/update
   403  //
   404  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/update_department.go
   405  func (d *department) Update(ctx context.Context, req *UpdateDepartmentReq, options ...larkcore.RequestOptionFunc) (*UpdateDepartmentResp, error) {
   406  	// 发起请求
   407  	apiReq := req.apiReq
   408  	apiReq.ApiPath = "/open-apis/contact/v3/departments/:department_id"
   409  	apiReq.HttpMethod = http.MethodPut
   410  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   411  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   412  	if err != nil {
   413  		return nil, err
   414  	}
   415  	// 反序列响应结果
   416  	resp := &UpdateDepartmentResp{ApiResp: apiResp}
   417  	err = apiResp.JSONUnmarshalBody(resp)
   418  	if err != nil {
   419  		return nil, err
   420  	}
   421  	return resp, err
   422  }
   423  
   424  // 新增人员类型
   425  //
   426  // - 新增自定义人员类型
   427  //
   428  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/employee_type_enum/create
   429  //
   430  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/create_employeeTypeEnum.go
   431  func (e *employeeTypeEnum) Create(ctx context.Context, req *CreateEmployeeTypeEnumReq, options ...larkcore.RequestOptionFunc) (*CreateEmployeeTypeEnumResp, error) {
   432  	// 发起请求
   433  	apiReq := req.apiReq
   434  	apiReq.ApiPath = "/open-apis/contact/v3/employee_type_enums"
   435  	apiReq.HttpMethod = http.MethodPost
   436  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   437  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   438  	if err != nil {
   439  		return nil, err
   440  	}
   441  	// 反序列响应结果
   442  	resp := &CreateEmployeeTypeEnumResp{ApiResp: apiResp}
   443  	err = apiResp.JSONUnmarshalBody(resp)
   444  	if err != nil {
   445  		return nil, err
   446  	}
   447  	return resp, err
   448  }
   449  
   450  // 删除人员类型
   451  //
   452  // - 删除自定义人员类型
   453  //
   454  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/employee_type_enum/delete
   455  //
   456  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/delete_employeeTypeEnum.go
   457  func (e *employeeTypeEnum) Delete(ctx context.Context, req *DeleteEmployeeTypeEnumReq, options ...larkcore.RequestOptionFunc) (*DeleteEmployeeTypeEnumResp, error) {
   458  	// 发起请求
   459  	apiReq := req.apiReq
   460  	apiReq.ApiPath = "/open-apis/contact/v3/employee_type_enums/:enum_id"
   461  	apiReq.HttpMethod = http.MethodDelete
   462  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   463  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   464  	if err != nil {
   465  		return nil, err
   466  	}
   467  	// 反序列响应结果
   468  	resp := &DeleteEmployeeTypeEnumResp{ApiResp: apiResp}
   469  	err = apiResp.JSONUnmarshalBody(resp)
   470  	if err != nil {
   471  		return nil, err
   472  	}
   473  	return resp, err
   474  }
   475  
   476  // 查询人员类型
   477  //
   478  // - 该接口用于获取员工的人员类型
   479  //
   480  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/employee_type_enum/list
   481  //
   482  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/list_employeeTypeEnum.go
   483  func (e *employeeTypeEnum) List(ctx context.Context, req *ListEmployeeTypeEnumReq, options ...larkcore.RequestOptionFunc) (*ListEmployeeTypeEnumResp, error) {
   484  	// 发起请求
   485  	apiReq := req.apiReq
   486  	apiReq.ApiPath = "/open-apis/contact/v3/employee_type_enums"
   487  	apiReq.HttpMethod = http.MethodGet
   488  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   489  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   490  	if err != nil {
   491  		return nil, err
   492  	}
   493  	// 反序列响应结果
   494  	resp := &ListEmployeeTypeEnumResp{ApiResp: apiResp}
   495  	err = apiResp.JSONUnmarshalBody(resp)
   496  	if err != nil {
   497  		return nil, err
   498  	}
   499  	return resp, err
   500  }
   501  func (e *employeeTypeEnum) ListByIterator(ctx context.Context, req *ListEmployeeTypeEnumReq, options ...larkcore.RequestOptionFunc) (*ListEmployeeTypeEnumIterator, error) {
   502  	return &ListEmployeeTypeEnumIterator{
   503  		ctx:      ctx,
   504  		req:      req,
   505  		listFunc: e.List,
   506  		options:  options,
   507  		limit:    req.Limit}, nil
   508  }
   509  
   510  // 更新人员类型
   511  //
   512  // - 更新自定义人员类型
   513  //
   514  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/employee_type_enum/update
   515  //
   516  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/update_employeeTypeEnum.go
   517  func (e *employeeTypeEnum) Update(ctx context.Context, req *UpdateEmployeeTypeEnumReq, options ...larkcore.RequestOptionFunc) (*UpdateEmployeeTypeEnumResp, error) {
   518  	// 发起请求
   519  	apiReq := req.apiReq
   520  	apiReq.ApiPath = "/open-apis/contact/v3/employee_type_enums/:enum_id"
   521  	apiReq.HttpMethod = http.MethodPut
   522  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   523  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   524  	if err != nil {
   525  		return nil, err
   526  	}
   527  	// 反序列响应结果
   528  	resp := &UpdateEmployeeTypeEnumResp{ApiResp: apiResp}
   529  	err = apiResp.JSONUnmarshalBody(resp)
   530  	if err != nil {
   531  		return nil, err
   532  	}
   533  	return resp, err
   534  }
   535  
   536  // 创建用户组
   537  //
   538  // - 使用该接口创建用户组,请注意创建用户组时应用的通讯录权限范围需为“全部员工”,否则会创建失败,[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   539  //
   540  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group/create
   541  //
   542  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/create_group.go
   543  func (g *group) Create(ctx context.Context, req *CreateGroupReq, options ...larkcore.RequestOptionFunc) (*CreateGroupResp, error) {
   544  	// 发起请求
   545  	apiReq := req.apiReq
   546  	apiReq.ApiPath = "/open-apis/contact/v3/group"
   547  	apiReq.HttpMethod = http.MethodPost
   548  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   549  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   550  	if err != nil {
   551  		return nil, err
   552  	}
   553  	// 反序列响应结果
   554  	resp := &CreateGroupResp{ApiResp: apiResp}
   555  	err = apiResp.JSONUnmarshalBody(resp)
   556  	if err != nil {
   557  		return nil, err
   558  	}
   559  	return resp, err
   560  }
   561  
   562  // 删除用户组
   563  //
   564  // - 通过该接口可删除企业中的用户组,请注意删除用户组时应用的通讯录权限范围需为“全部员工”,否则会删除失败,[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   565  //
   566  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group/delete
   567  //
   568  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/delete_group.go
   569  func (g *group) Delete(ctx context.Context, req *DeleteGroupReq, options ...larkcore.RequestOptionFunc) (*DeleteGroupResp, error) {
   570  	// 发起请求
   571  	apiReq := req.apiReq
   572  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id"
   573  	apiReq.HttpMethod = http.MethodDelete
   574  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   575  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   576  	if err != nil {
   577  		return nil, err
   578  	}
   579  	// 反序列响应结果
   580  	resp := &DeleteGroupResp{ApiResp: apiResp}
   581  	err = apiResp.JSONUnmarshalBody(resp)
   582  	if err != nil {
   583  		return nil, err
   584  	}
   585  	return resp, err
   586  }
   587  
   588  // 查询用户组
   589  //
   590  // - 根据用户组 ID 查询某个用户组的基本信息,支持查询普通用户组和动态用户组。请确保应用的通讯录权限范围里包括该用户组或者是“全部员工”,[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   591  //
   592  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group/get
   593  //
   594  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/get_group.go
   595  func (g *group) Get(ctx context.Context, req *GetGroupReq, options ...larkcore.RequestOptionFunc) (*GetGroupResp, error) {
   596  	// 发起请求
   597  	apiReq := req.apiReq
   598  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id"
   599  	apiReq.HttpMethod = http.MethodGet
   600  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   601  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   602  	if err != nil {
   603  		return nil, err
   604  	}
   605  	// 反序列响应结果
   606  	resp := &GetGroupResp{ApiResp: apiResp}
   607  	err = apiResp.JSONUnmarshalBody(resp)
   608  	if err != nil {
   609  		return nil, err
   610  	}
   611  	return resp, err
   612  }
   613  
   614  // 查询用户所属用户组
   615  //
   616  // - 通过该接口可查询该用户所属的用户组列表,可分别查询普通用户组和动态用户组。如果应用的通讯录权限范围是“全部员工”,则可获取该员工所属的全部用户组列表。如果应用的通讯录权限范围不是“全部员工”,则仅可获取通讯录权限范围内该员工所属的用户组。[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   617  //
   618  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group/member_belong
   619  //
   620  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/memberBelong_group.go
   621  func (g *group) MemberBelong(ctx context.Context, req *MemberBelongGroupReq, options ...larkcore.RequestOptionFunc) (*MemberBelongGroupResp, error) {
   622  	// 发起请求
   623  	apiReq := req.apiReq
   624  	apiReq.ApiPath = "/open-apis/contact/v3/group/member_belong"
   625  	apiReq.HttpMethod = http.MethodGet
   626  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   627  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   628  	if err != nil {
   629  		return nil, err
   630  	}
   631  	// 反序列响应结果
   632  	resp := &MemberBelongGroupResp{ApiResp: apiResp}
   633  	err = apiResp.JSONUnmarshalBody(resp)
   634  	if err != nil {
   635  		return nil, err
   636  	}
   637  	return resp, err
   638  }
   639  
   640  // 更新用户组
   641  //
   642  // - 使用该接口更新用户组信息,请注意更新用户组时应用的通讯录权限范围需为“全部员工”,否则会更新失败。[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   643  //
   644  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group/patch
   645  //
   646  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/patch_group.go
   647  func (g *group) Patch(ctx context.Context, req *PatchGroupReq, options ...larkcore.RequestOptionFunc) (*PatchGroupResp, error) {
   648  	// 发起请求
   649  	apiReq := req.apiReq
   650  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id"
   651  	apiReq.HttpMethod = http.MethodPatch
   652  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   653  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   654  	if err != nil {
   655  		return nil, err
   656  	}
   657  	// 反序列响应结果
   658  	resp := &PatchGroupResp{ApiResp: apiResp}
   659  	err = apiResp.JSONUnmarshalBody(resp)
   660  	if err != nil {
   661  		return nil, err
   662  	}
   663  	return resp, err
   664  }
   665  
   666  // 查询用户组列表
   667  //
   668  // - 通过该接口可查询企业的用户组列表,可分别查询普通用户组或动态用户组。如果应用的通讯录权限范围是“全部员工”,则可获取企业全部用户组列表。如果应用的通讯录权限范围不是“全部员工”,则仅可获取通讯录权限范围内的用户组。[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   669  //
   670  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group/simplelist
   671  //
   672  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/simplelist_group.go
   673  func (g *group) Simplelist(ctx context.Context, req *SimplelistGroupReq, options ...larkcore.RequestOptionFunc) (*SimplelistGroupResp, error) {
   674  	// 发起请求
   675  	apiReq := req.apiReq
   676  	apiReq.ApiPath = "/open-apis/contact/v3/group/simplelist"
   677  	apiReq.HttpMethod = http.MethodGet
   678  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   679  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   680  	if err != nil {
   681  		return nil, err
   682  	}
   683  	// 反序列响应结果
   684  	resp := &SimplelistGroupResp{ApiResp: apiResp}
   685  	err = apiResp.JSONUnmarshalBody(resp)
   686  	if err != nil {
   687  		return nil, err
   688  	}
   689  	return resp, err
   690  }
   691  func (g *group) SimplelistByIterator(ctx context.Context, req *SimplelistGroupReq, options ...larkcore.RequestOptionFunc) (*SimplelistGroupIterator, error) {
   692  	return &SimplelistGroupIterator{
   693  		ctx:      ctx,
   694  		req:      req,
   695  		listFunc: g.Simplelist,
   696  		options:  options,
   697  		limit:    req.Limit}, nil
   698  }
   699  
   700  // 添加用户组成员
   701  //
   702  // - 向用户组中添加成员(目前成员仅支持用户,未来会支持部门),如果应用的通讯录权限范围是“全部员工”,则可将任何成员添加到任何用户组。如果应用的通讯录权限范围不是“全部员工”,则仅可将通讯录权限范围中的成员添加到通讯录权限范围的用户组中,[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   703  //
   704  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group-member/add
   705  //
   706  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/add_groupMember.go
   707  func (g *groupMember) Add(ctx context.Context, req *AddGroupMemberReq, options ...larkcore.RequestOptionFunc) (*AddGroupMemberResp, error) {
   708  	// 发起请求
   709  	apiReq := req.apiReq
   710  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id/member/add"
   711  	apiReq.HttpMethod = http.MethodPost
   712  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   713  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   714  	if err != nil {
   715  		return nil, err
   716  	}
   717  	// 反序列响应结果
   718  	resp := &AddGroupMemberResp{ApiResp: apiResp}
   719  	err = apiResp.JSONUnmarshalBody(resp)
   720  	if err != nil {
   721  		return nil, err
   722  	}
   723  	return resp, err
   724  }
   725  
   726  // 批量添加用户组成员
   727  //
   728  // - 向普通用户组中批量添加成员(目前仅支持添加用户,暂不支持添加部门),如果应用的通讯录权限范围是“全部员工”,则可将任何成员添加到任何用户组。如果应用的通讯录权限范围不是“全部员工”,则仅可将通讯录权限范围中的成员添加到通讯录权限范围的用户组中,[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   729  //
   730  // - 请求体中的member_type,目前仅支持user, 未来将支持department。
   731  //
   732  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group-member/batch_add
   733  //
   734  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/batchAdd_groupMember.go
   735  func (g *groupMember) BatchAdd(ctx context.Context, req *BatchAddGroupMemberReq, options ...larkcore.RequestOptionFunc) (*BatchAddGroupMemberResp, error) {
   736  	// 发起请求
   737  	apiReq := req.apiReq
   738  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id/member/batch_add"
   739  	apiReq.HttpMethod = http.MethodPost
   740  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   741  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   742  	if err != nil {
   743  		return nil, err
   744  	}
   745  	// 反序列响应结果
   746  	resp := &BatchAddGroupMemberResp{ApiResp: apiResp}
   747  	err = apiResp.JSONUnmarshalBody(resp)
   748  	if err != nil {
   749  		return nil, err
   750  	}
   751  	return resp, err
   752  }
   753  
   754  // 批量移除用户组成员
   755  //
   756  // - 从普通用户组中批量移除成员 (目前仅支持移除用户,暂不支持移除部门)。如果应用的通讯录权限范围是“全部员工”,则可将任何成员移出任何用户组。如果应用的通讯录权限范围不是“全部员工”,则仅可将通讯录权限范围中的成员从通讯录权限范围的用户组中移除, [点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   757  //
   758  // - 请求体中的member_type,目前仅支持user, 未来将支持department。
   759  //
   760  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group-member/batch_remove
   761  //
   762  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/batchRemove_groupMember.go
   763  func (g *groupMember) BatchRemove(ctx context.Context, req *BatchRemoveGroupMemberReq, options ...larkcore.RequestOptionFunc) (*BatchRemoveGroupMemberResp, error) {
   764  	// 发起请求
   765  	apiReq := req.apiReq
   766  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id/member/batch_remove"
   767  	apiReq.HttpMethod = http.MethodPost
   768  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   769  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   770  	if err != nil {
   771  		return nil, err
   772  	}
   773  	// 反序列响应结果
   774  	resp := &BatchRemoveGroupMemberResp{ApiResp: apiResp}
   775  	err = apiResp.JSONUnmarshalBody(resp)
   776  	if err != nil {
   777  		return nil, err
   778  	}
   779  	return resp, err
   780  }
   781  
   782  // 移除用户组成员
   783  //
   784  // - 从用户组中移除成员 (目前成员仅支持用户,未来会支持部门),如果应用的通讯录权限范围是“全部员工”,则可将任何成员移出任何用户组。如果应用的通讯录权限范围不是“全部员工”,则仅可将通讯录权限范围中的成员从通讯录权限范围的用户组中移除, [点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   785  //
   786  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group-member/remove
   787  //
   788  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/remove_groupMember.go
   789  func (g *groupMember) Remove(ctx context.Context, req *RemoveGroupMemberReq, options ...larkcore.RequestOptionFunc) (*RemoveGroupMemberResp, error) {
   790  	// 发起请求
   791  	apiReq := req.apiReq
   792  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id/member/remove"
   793  	apiReq.HttpMethod = http.MethodPost
   794  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   795  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   796  	if err != nil {
   797  		return nil, err
   798  	}
   799  	// 反序列响应结果
   800  	resp := &RemoveGroupMemberResp{ApiResp: apiResp}
   801  	err = apiResp.JSONUnmarshalBody(resp)
   802  	if err != nil {
   803  		return nil, err
   804  	}
   805  	return resp, err
   806  }
   807  
   808  // 查询用户组成员列表
   809  //
   810  // - 通过该接口可查询某个用户组的成员列表(支持查询成员中的用户和部门), 本接口支持普通用户组和动态用户组。如果应用的通讯录权限范围是“全部员工”,则可查询企业内任何用户组的成员列表。如果应用的通讯录权限范围不是“全部员工”,则仅可查询通讯录权限范围中的用户组的成员列表,[点击了解通讯录权限范围](/ssl:ttdoc/ukTMukTMukTM/uETNz4SM1MjLxUzM/v3/guides/scope_authority)。
   811  //
   812  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/group-member/simplelist
   813  //
   814  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/simplelist_groupMember.go
   815  func (g *groupMember) Simplelist(ctx context.Context, req *SimplelistGroupMemberReq, options ...larkcore.RequestOptionFunc) (*SimplelistGroupMemberResp, error) {
   816  	// 发起请求
   817  	apiReq := req.apiReq
   818  	apiReq.ApiPath = "/open-apis/contact/v3/group/:group_id/member/simplelist"
   819  	apiReq.HttpMethod = http.MethodGet
   820  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   821  	apiResp, err := larkcore.Request(ctx, apiReq, g.service.config, options...)
   822  	if err != nil {
   823  		return nil, err
   824  	}
   825  	// 反序列响应结果
   826  	resp := &SimplelistGroupMemberResp{ApiResp: apiResp}
   827  	err = apiResp.JSONUnmarshalBody(resp)
   828  	if err != nil {
   829  		return nil, err
   830  	}
   831  	return resp, err
   832  }
   833  
   834  // 获取通讯录授权范围
   835  //
   836  // - 该接口用于获取应用被授权可访问的通讯录范围,包括可访问的部门列表、用户列表和用户组列表。;授权范围为全员时,返回的部门列表为该企业所有的一级部门;否则返回的部门为管理员在设置授权范围时勾选的部门(不包含勾选部门的子部门)。
   837  //
   838  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/scope/list
   839  //
   840  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/list_scope.go
   841  func (s *scope) List(ctx context.Context, req *ListScopeReq, options ...larkcore.RequestOptionFunc) (*ListScopeResp, error) {
   842  	// 发起请求
   843  	apiReq := req.apiReq
   844  	apiReq.ApiPath = "/open-apis/contact/v3/scopes"
   845  	apiReq.HttpMethod = http.MethodGet
   846  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   847  	apiResp, err := larkcore.Request(ctx, apiReq, s.service.config, options...)
   848  	if err != nil {
   849  		return nil, err
   850  	}
   851  	// 反序列响应结果
   852  	resp := &ListScopeResp{ApiResp: apiResp}
   853  	err = apiResp.JSONUnmarshalBody(resp)
   854  	if err != nil {
   855  		return nil, err
   856  	}
   857  	return resp, err
   858  }
   859  
   860  // 建立部门与单位的绑定关系
   861  //
   862  // - 通过该接口建立部门与单位的绑定关系,需更新单位的权限,需对应部门的通讯录权限。由于单位是旗舰版付费功能,企业需开通相关版本,否则会绑定失败
   863  //
   864  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/bind_department
   865  //
   866  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/bindDepartment_unit.go
   867  func (u *unit) BindDepartment(ctx context.Context, req *BindDepartmentUnitReq, options ...larkcore.RequestOptionFunc) (*BindDepartmentUnitResp, error) {
   868  	// 发起请求
   869  	apiReq := req.apiReq
   870  	apiReq.ApiPath = "/open-apis/contact/v3/unit/bind_department"
   871  	apiReq.HttpMethod = http.MethodPost
   872  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   873  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   874  	if err != nil {
   875  		return nil, err
   876  	}
   877  	// 反序列响应结果
   878  	resp := &BindDepartmentUnitResp{ApiResp: apiResp}
   879  	err = apiResp.JSONUnmarshalBody(resp)
   880  	if err != nil {
   881  		return nil, err
   882  	}
   883  	return resp, err
   884  }
   885  
   886  // 创建单位
   887  //
   888  // - 使用该接口创建单位,需要有更新单位的权限。注意:单位功能属于旗舰版付费功能,企业需开通对应版本才可以创建单位。
   889  //
   890  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/create
   891  //
   892  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/create_unit.go
   893  func (u *unit) Create(ctx context.Context, req *CreateUnitReq, options ...larkcore.RequestOptionFunc) (*CreateUnitResp, error) {
   894  	// 发起请求
   895  	apiReq := req.apiReq
   896  	apiReq.ApiPath = "/open-apis/contact/v3/unit"
   897  	apiReq.HttpMethod = http.MethodPost
   898  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   899  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   900  	if err != nil {
   901  		return nil, err
   902  	}
   903  	// 反序列响应结果
   904  	resp := &CreateUnitResp{ApiResp: apiResp}
   905  	err = apiResp.JSONUnmarshalBody(resp)
   906  	if err != nil {
   907  		return nil, err
   908  	}
   909  	return resp, err
   910  }
   911  
   912  // 删除单位
   913  //
   914  // - 使用该接口删除单位,需要有更新单位的权限。注意:如果单位的单位类型被其它的业务使用,不允许删除。
   915  //
   916  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/delete
   917  //
   918  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/delete_unit.go
   919  func (u *unit) Delete(ctx context.Context, req *DeleteUnitReq, options ...larkcore.RequestOptionFunc) (*DeleteUnitResp, error) {
   920  	// 发起请求
   921  	apiReq := req.apiReq
   922  	apiReq.ApiPath = "/open-apis/contact/v3/unit/:unit_id"
   923  	apiReq.HttpMethod = http.MethodDelete
   924  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   925  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   926  	if err != nil {
   927  		return nil, err
   928  	}
   929  	// 反序列响应结果
   930  	resp := &DeleteUnitResp{ApiResp: apiResp}
   931  	err = apiResp.JSONUnmarshalBody(resp)
   932  	if err != nil {
   933  		return nil, err
   934  	}
   935  	return resp, err
   936  }
   937  
   938  // 获取单位信息
   939  //
   940  // - 调用该接口获取单位信息,需有获取单位的权限
   941  //
   942  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/get
   943  //
   944  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/get_unit.go
   945  func (u *unit) Get(ctx context.Context, req *GetUnitReq, options ...larkcore.RequestOptionFunc) (*GetUnitResp, error) {
   946  	// 发起请求
   947  	apiReq := req.apiReq
   948  	apiReq.ApiPath = "/open-apis/contact/v3/unit/:unit_id"
   949  	apiReq.HttpMethod = http.MethodGet
   950  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   951  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   952  	if err != nil {
   953  		return nil, err
   954  	}
   955  	// 反序列响应结果
   956  	resp := &GetUnitResp{ApiResp: apiResp}
   957  	err = apiResp.JSONUnmarshalBody(resp)
   958  	if err != nil {
   959  		return nil, err
   960  	}
   961  	return resp, err
   962  }
   963  
   964  // 批量获取单位列表
   965  //
   966  // - 通过该接口获取企业的单位列表,需获取单位的权限
   967  //
   968  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/list
   969  //
   970  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/list_unit.go
   971  func (u *unit) List(ctx context.Context, req *ListUnitReq, options ...larkcore.RequestOptionFunc) (*ListUnitResp, error) {
   972  	// 发起请求
   973  	apiReq := req.apiReq
   974  	apiReq.ApiPath = "/open-apis/contact/v3/unit"
   975  	apiReq.HttpMethod = http.MethodGet
   976  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   977  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   978  	if err != nil {
   979  		return nil, err
   980  	}
   981  	// 反序列响应结果
   982  	resp := &ListUnitResp{ApiResp: apiResp}
   983  	err = apiResp.JSONUnmarshalBody(resp)
   984  	if err != nil {
   985  		return nil, err
   986  	}
   987  	return resp, err
   988  }
   989  
   990  // 获取单位绑定的部门列表
   991  //
   992  // - 通过该接口获取单位绑定的部门列表,需具有获取单位的权限
   993  //
   994  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/list_department
   995  //
   996  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/listDepartment_unit.go
   997  func (u *unit) ListDepartment(ctx context.Context, req *ListDepartmentUnitReq, options ...larkcore.RequestOptionFunc) (*ListDepartmentUnitResp, error) {
   998  	// 发起请求
   999  	apiReq := req.apiReq
  1000  	apiReq.ApiPath = "/open-apis/contact/v3/unit/list_department"
  1001  	apiReq.HttpMethod = http.MethodGet
  1002  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
  1003  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1004  	if err != nil {
  1005  		return nil, err
  1006  	}
  1007  	// 反序列响应结果
  1008  	resp := &ListDepartmentUnitResp{ApiResp: apiResp}
  1009  	err = apiResp.JSONUnmarshalBody(resp)
  1010  	if err != nil {
  1011  		return nil, err
  1012  	}
  1013  	return resp, err
  1014  }
  1015  
  1016  // 修改单位信息
  1017  //
  1018  // - 调用该接口,需要有更新单位的权限。注意:单位功能属于旗舰版付费功能,企业需开通对应版本才可以修改单位
  1019  //
  1020  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/patch
  1021  //
  1022  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/patch_unit.go
  1023  func (u *unit) Patch(ctx context.Context, req *PatchUnitReq, options ...larkcore.RequestOptionFunc) (*PatchUnitResp, error) {
  1024  	// 发起请求
  1025  	apiReq := req.apiReq
  1026  	apiReq.ApiPath = "/open-apis/contact/v3/unit/:unit_id"
  1027  	apiReq.HttpMethod = http.MethodPatch
  1028  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
  1029  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1030  	if err != nil {
  1031  		return nil, err
  1032  	}
  1033  	// 反序列响应结果
  1034  	resp := &PatchUnitResp{ApiResp: apiResp}
  1035  	err = apiResp.JSONUnmarshalBody(resp)
  1036  	if err != nil {
  1037  		return nil, err
  1038  	}
  1039  	return resp, err
  1040  }
  1041  
  1042  // 解除部门与单位的绑定关系
  1043  //
  1044  // - 通过该接口解除部门与单位的绑定关系,需更新单位的权限,需对应部门的通讯录权限。由于单位是旗舰版付费功能,企业需开通相关功能,否则会解绑失败
  1045  //
  1046  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/unit/unbind_department
  1047  //
  1048  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/unbindDepartment_unit.go
  1049  func (u *unit) UnbindDepartment(ctx context.Context, req *UnbindDepartmentUnitReq, options ...larkcore.RequestOptionFunc) (*UnbindDepartmentUnitResp, error) {
  1050  	// 发起请求
  1051  	apiReq := req.apiReq
  1052  	apiReq.ApiPath = "/open-apis/contact/v3/unit/unbind_department"
  1053  	apiReq.HttpMethod = http.MethodPost
  1054  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
  1055  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1056  	if err != nil {
  1057  		return nil, err
  1058  	}
  1059  	// 反序列响应结果
  1060  	resp := &UnbindDepartmentUnitResp{ApiResp: apiResp}
  1061  	err = apiResp.JSONUnmarshalBody(resp)
  1062  	if err != nil {
  1063  		return nil, err
  1064  	}
  1065  	return resp, err
  1066  }
  1067  
  1068  // 通过手机号或邮箱获取用户 ID
  1069  //
  1070  // - 通过该接口,可使用手机号/邮箱获取用户的 ID 信息,具体获取支持的 ID 类型包括 open_id、user_id、union_id,可通过查询参数指定。
  1071  //
  1072  // - 如果查询的手机号、邮箱不存在,或者无权限查看对应的用户,则返回的用户ID列表为空。
  1073  //
  1074  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/batch_get_id
  1075  //
  1076  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/batchGetId_user.go
  1077  func (u *user) BatchGetId(ctx context.Context, req *BatchGetIdUserReq, options ...larkcore.RequestOptionFunc) (*BatchGetIdUserResp, error) {
  1078  	// 发起请求
  1079  	apiReq := req.apiReq
  1080  	apiReq.ApiPath = "/open-apis/contact/v3/users/batch_get_id"
  1081  	apiReq.HttpMethod = http.MethodPost
  1082  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
  1083  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1084  	if err != nil {
  1085  		return nil, err
  1086  	}
  1087  	// 反序列响应结果
  1088  	resp := &BatchGetIdUserResp{ApiResp: apiResp}
  1089  	err = apiResp.JSONUnmarshalBody(resp)
  1090  	if err != nil {
  1091  		return nil, err
  1092  	}
  1093  	return resp, err
  1094  }
  1095  
  1096  // 创建用户
  1097  //
  1098  // - 使用该接口向通讯录创建一个用户,可以理解为员工入职。创建用户后只返回有数据权限的数据。具体的数据权限的与字段的对应关系请参照[应用权限](/ssl:ttdoc/ukTMukTMukTM/uQjN3QjL0YzN04CN2cDN)。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
  1099  //
  1100  // - - 新增用户的所有部门必须都在当前应用的通讯录授权范围内才允许新增用户,如果想要在根部门下新增用户,必须要有全员权限。;- 应用商店应用无权限调用此接口。;- 创建用户后,会给用户发送邀请短信/邮件,用户在操作同意后才可访问团队。;- 返回数据中不返回手机号,如果需要请重新查询用户信息获取手机号。
  1101  //
  1102  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/create
  1103  //
  1104  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/create_user.go
  1105  func (u *user) Create(ctx context.Context, req *CreateUserReq, options ...larkcore.RequestOptionFunc) (*CreateUserResp, error) {
  1106  	// 发起请求
  1107  	apiReq := req.apiReq
  1108  	apiReq.ApiPath = "/open-apis/contact/v3/users"
  1109  	apiReq.HttpMethod = http.MethodPost
  1110  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
  1111  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1112  	if err != nil {
  1113  		return nil, err
  1114  	}
  1115  	// 反序列响应结果
  1116  	resp := &CreateUserResp{ApiResp: apiResp}
  1117  	err = apiResp.JSONUnmarshalBody(resp)
  1118  	if err != nil {
  1119  		return nil, err
  1120  	}
  1121  	return resp, err
  1122  }
  1123  
  1124  // 删除用户
  1125  //
  1126  // - 该接口向通讯录删除一个用户信息,可以理解为员工离职。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
  1127  //
  1128  // - 若用户归属部门A、部门B,应用的通讯录权限范围必须包括部门A和部门B才可以删除用户。应用商店应用无权限调用接口。用户可以在删除员工时设置删除员工数据的接收者,如果不设置则由其leader接收,如果该员工没有leader,则会将该员工的数据删除。
  1129  //
  1130  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/delete
  1131  //
  1132  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/delete_user.go
  1133  func (u *user) Delete(ctx context.Context, req *DeleteUserReq, options ...larkcore.RequestOptionFunc) (*DeleteUserResp, error) {
  1134  	// 发起请求
  1135  	apiReq := req.apiReq
  1136  	apiReq.ApiPath = "/open-apis/contact/v3/users/:user_id"
  1137  	apiReq.HttpMethod = http.MethodDelete
  1138  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
  1139  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1140  	if err != nil {
  1141  		return nil, err
  1142  	}
  1143  	// 反序列响应结果
  1144  	resp := &DeleteUserResp{ApiResp: apiResp}
  1145  	err = apiResp.JSONUnmarshalBody(resp)
  1146  	if err != nil {
  1147  		return nil, err
  1148  	}
  1149  	return resp, err
  1150  }
  1151  
  1152  // 获取部门直属用户列表
  1153  //
  1154  // - 基于部门ID获取部门直属用户列表。;[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN).
  1155  //
  1156  // - - 使用 user_access_token 情况下根据个人组织架构的通讯录可见范围进行权限过滤,返回个人组织架构通讯录范围([登录企业管理后台进行权限配置](https://www.feishu.cn/admin/security/permission/visibility))内可见的用户数据。;- 使用tenant_access_token,会根据应用通讯录的范围进行权限过滤。 如果请求的部门ID为0,则校验应用是否具有全员通讯录权限; 如果是非0的部门ID,则会验证应用是否具有该部门的通讯录权限。 无权限返回无权限错误码,有权限则返回对应部门下的直接用户列表。
  1157  //
  1158  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/find_by_department
  1159  //
  1160  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/findByDepartment_user.go
  1161  func (u *user) FindByDepartment(ctx context.Context, req *FindByDepartmentUserReq, options ...larkcore.RequestOptionFunc) (*FindByDepartmentUserResp, error) {
  1162  	// 发起请求
  1163  	apiReq := req.apiReq
  1164  	apiReq.ApiPath = "/open-apis/contact/v3/users/find_by_department"
  1165  	apiReq.HttpMethod = http.MethodGet
  1166  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1167  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1168  	if err != nil {
  1169  		return nil, err
  1170  	}
  1171  	// 反序列响应结果
  1172  	resp := &FindByDepartmentUserResp{ApiResp: apiResp}
  1173  	err = apiResp.JSONUnmarshalBody(resp)
  1174  	if err != nil {
  1175  		return nil, err
  1176  	}
  1177  	return resp, err
  1178  }
  1179  func (u *user) FindByDepartmentByIterator(ctx context.Context, req *FindByDepartmentUserReq, options ...larkcore.RequestOptionFunc) (*FindByDepartmentUserIterator, error) {
  1180  	return &FindByDepartmentUserIterator{
  1181  		ctx:      ctx,
  1182  		req:      req,
  1183  		listFunc: u.FindByDepartment,
  1184  		options:  options,
  1185  		limit:    req.Limit}, nil
  1186  }
  1187  
  1188  // 获取单个用户信息
  1189  //
  1190  // - 该接口用于获取通讯录中[单个用户的信息](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/field-overview)。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
  1191  //
  1192  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/get
  1193  //
  1194  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/get_user.go
  1195  func (u *user) Get(ctx context.Context, req *GetUserReq, options ...larkcore.RequestOptionFunc) (*GetUserResp, error) {
  1196  	// 发起请求
  1197  	apiReq := req.apiReq
  1198  	apiReq.ApiPath = "/open-apis/contact/v3/users/:user_id"
  1199  	apiReq.HttpMethod = http.MethodGet
  1200  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1201  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1202  	if err != nil {
  1203  		return nil, err
  1204  	}
  1205  	// 反序列响应结果
  1206  	resp := &GetUserResp{ApiResp: apiResp}
  1207  	err = apiResp.JSONUnmarshalBody(resp)
  1208  	if err != nil {
  1209  		return nil, err
  1210  	}
  1211  	return resp, err
  1212  }
  1213  
  1214  // 获取用户列表
  1215  //
  1216  // - 基于部门ID获取部门下直属用户列表。;[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
  1217  //
  1218  // - - 使用 user_access_token 情况下根据个人组织架构的通讯录可见范围进行权限过滤,返回个人组织架构通讯录范围([登陆企业管理后台进行权限配置](https://www.feishu.cn/admin/security/permission/visibility))内可见的用户数据。;-  tenant_access_token  基于应用通讯录范围进行权限鉴定。由于 department_id 是非必填参数,填与不填存在<b>两种数据权限校验与返回</b>情况:<br>1、请求设置了 department_id ;(根部门为0),会检验所带部门ID是否具有通讯录权限(如果带上 ; department_id=0 会校验是否有全员权限),有则返回部门下直属的成员列表, 否则提示无部门权限的错误码返回。<br>2、请求未带 ;  department_id 参数,则会返回权限范围内的独立用户(权限范围直接包含了某用户,则该用户视为权限范围内的独立用户)。
  1219  //
  1220  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/list
  1221  //
  1222  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/list_user.go
  1223  func (u *user) List(ctx context.Context, req *ListUserReq, options ...larkcore.RequestOptionFunc) (*ListUserResp, error) {
  1224  	// 发起请求
  1225  	apiReq := req.apiReq
  1226  	apiReq.ApiPath = "/open-apis/contact/v3/users"
  1227  	apiReq.HttpMethod = http.MethodGet
  1228  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1229  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1230  	if err != nil {
  1231  		return nil, err
  1232  	}
  1233  	// 反序列响应结果
  1234  	resp := &ListUserResp{ApiResp: apiResp}
  1235  	err = apiResp.JSONUnmarshalBody(resp)
  1236  	if err != nil {
  1237  		return nil, err
  1238  	}
  1239  	return resp, err
  1240  }
  1241  func (u *user) ListByIterator(ctx context.Context, req *ListUserReq, options ...larkcore.RequestOptionFunc) (*ListUserIterator, error) {
  1242  	return &ListUserIterator{
  1243  		ctx:      ctx,
  1244  		req:      req,
  1245  		listFunc: u.List,
  1246  		options:  options,
  1247  		limit:    req.Limit}, nil
  1248  }
  1249  
  1250  // 修改用户部分信息
  1251  //
  1252  // - 该接口用于更新通讯录中用户的字段,未传递的参数不会更新。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
  1253  //
  1254  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/patch
  1255  //
  1256  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/patch_user.go
  1257  func (u *user) Patch(ctx context.Context, req *PatchUserReq, options ...larkcore.RequestOptionFunc) (*PatchUserResp, error) {
  1258  	// 发起请求
  1259  	apiReq := req.apiReq
  1260  	apiReq.ApiPath = "/open-apis/contact/v3/users/:user_id"
  1261  	apiReq.HttpMethod = http.MethodPatch
  1262  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
  1263  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1264  	if err != nil {
  1265  		return nil, err
  1266  	}
  1267  	// 反序列响应结果
  1268  	resp := &PatchUserResp{ApiResp: apiResp}
  1269  	err = apiResp.JSONUnmarshalBody(resp)
  1270  	if err != nil {
  1271  		return nil, err
  1272  	}
  1273  	return resp, err
  1274  }
  1275  
  1276  // 更新用户所有信息
  1277  //
  1278  // - 该接口用于更新通讯录中用户的字段。[常见问题答疑](/ssl:ttdoc/ugTN1YjL4UTN24CO1UjN/uQzN1YjL0cTN24CN3UjN)。
  1279  //
  1280  // - ;应用需要拥有待更新用户的通讯录授权,如果涉及到用户部门变更,还需要同时拥有所有新部门的通讯录授权。应用商店应用无权限调用此接口。
  1281  //
  1282  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/contact-v3/user/update
  1283  //
  1284  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/contactv3/update_user.go
  1285  func (u *user) Update(ctx context.Context, req *UpdateUserReq, options ...larkcore.RequestOptionFunc) (*UpdateUserResp, error) {
  1286  	// 发起请求
  1287  	apiReq := req.apiReq
  1288  	apiReq.ApiPath = "/open-apis/contact/v3/users/:user_id"
  1289  	apiReq.HttpMethod = http.MethodPut
  1290  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
  1291  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
  1292  	if err != nil {
  1293  		return nil, err
  1294  	}
  1295  	// 反序列响应结果
  1296  	resp := &UpdateUserResp{ApiResp: apiResp}
  1297  	err = apiResp.JSONUnmarshalBody(resp)
  1298  	if err != nil {
  1299  		return nil, err
  1300  	}
  1301  	return resp, err
  1302  }