gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/approval/v4/api.go (about) 1 // Package approval 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 larkapproval 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) *ApprovalService { 24 a := &ApprovalService{config: config} 25 a.Approval = &approval{service: a} 26 a.ExternalApproval = &externalApproval{service: a} 27 a.ExternalInstance = &externalInstance{service: a} 28 a.ExternalTask = &externalTask{service: a} 29 a.Instance = &instance{service: a} 30 a.InstanceComment = &instanceComment{service: a} 31 a.Task = &task{service: a} 32 return a 33 } 34 35 type ApprovalService struct { 36 config *larkcore.Config 37 Approval *approval // 审批定义 38 ExternalApproval *externalApproval // 三方审批定义 39 ExternalInstance *externalInstance // 三方审批实例 40 ExternalTask *externalTask // 三方审批任务 41 Instance *instance // 审批实例 42 InstanceComment *instanceComment // 评论 43 Task *task // 审批任务 44 } 45 46 type approval struct { 47 service *ApprovalService 48 } 49 type externalApproval struct { 50 service *ApprovalService 51 } 52 type externalInstance struct { 53 service *ApprovalService 54 } 55 type externalTask struct { 56 service *ApprovalService 57 } 58 type instance struct { 59 service *ApprovalService 60 } 61 type instanceComment struct { 62 service *ApprovalService 63 } 64 type task struct { 65 service *ApprovalService 66 } 67 68 // 创建审批定义 69 // 70 // - 用于通过接口创建简单的审批定义,可以灵活指定定义的基础信息、表单和流程等。创建成功后,不支持从审批管理后台删除该定义。不推荐企业自建应用使用,如有需要尽量联系管理员在审批管理后台创建定义。 71 // 72 // - 接口谨慎调用,创建后的审批定义无法停用/删除 73 // 74 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/create 75 // 76 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_approval.go 77 func (a *approval) Create(ctx context.Context, req *CreateApprovalReq, options ...larkcore.RequestOptionFunc) (*CreateApprovalResp, error) { 78 // 发起请求 79 apiReq := req.apiReq 80 apiReq.ApiPath = "/open-apis/approval/v4/approvals" 81 apiReq.HttpMethod = http.MethodPost 82 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 83 apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...) 84 if err != nil { 85 return nil, err 86 } 87 // 反序列响应结果 88 resp := &CreateApprovalResp{ApiResp: apiResp} 89 err = apiResp.JSONUnmarshalBody(resp) 90 if err != nil { 91 return nil, err 92 } 93 return resp, err 94 } 95 96 // 查看审批定义 97 // 98 // - 根据 Approval Code 获取某个审批定义的详情,用于构造创建审批实例的请求。 99 // 100 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/get 101 // 102 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/get_approval.go 103 func (a *approval) Get(ctx context.Context, req *GetApprovalReq, options ...larkcore.RequestOptionFunc) (*GetApprovalResp, error) { 104 // 发起请求 105 apiReq := req.apiReq 106 apiReq.ApiPath = "/open-apis/approval/v4/approvals/:approval_code" 107 apiReq.HttpMethod = http.MethodGet 108 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 109 apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...) 110 if err != nil { 111 return nil, err 112 } 113 // 反序列响应结果 114 resp := &GetApprovalResp{ApiResp: apiResp} 115 err = apiResp.JSONUnmarshalBody(resp) 116 if err != nil { 117 return nil, err 118 } 119 return resp, err 120 } 121 122 // 订阅审批事件 123 // 124 // - 应用订阅 approval_code 后,该应用就可以收到该审批定义对应实例的事件通知。同一应用只需要订阅一次,无需重复订阅。;;当应用不希望再收到审批事件时,可以使用取消订阅接口进行取消,取消后将不再给应用推送消息。;;订阅和取消订阅都是应用维度的,多个应用可以同时订阅同一个 approval_code,每个应用都能收到审批事件。 125 // 126 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/subscribe 127 // 128 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/subscribe_approval.go 129 func (a *approval) Subscribe(ctx context.Context, req *SubscribeApprovalReq, options ...larkcore.RequestOptionFunc) (*SubscribeApprovalResp, error) { 130 // 发起请求 131 apiReq := req.apiReq 132 apiReq.ApiPath = "/open-apis/approval/v4/approvals/:approval_code/subscribe" 133 apiReq.HttpMethod = http.MethodPost 134 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 135 apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...) 136 if err != nil { 137 return nil, err 138 } 139 // 反序列响应结果 140 resp := &SubscribeApprovalResp{ApiResp: apiResp} 141 err = apiResp.JSONUnmarshalBody(resp) 142 if err != nil { 143 return nil, err 144 } 145 return resp, err 146 } 147 148 // 取消订阅审批事件 149 // 150 // - 取消订阅 approval_code 后,无法再收到该审批定义对应实例的事件通知 151 // 152 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/unsubscribe 153 // 154 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/unsubscribe_approval.go 155 func (a *approval) Unsubscribe(ctx context.Context, req *UnsubscribeApprovalReq, options ...larkcore.RequestOptionFunc) (*UnsubscribeApprovalResp, error) { 156 // 发起请求 157 apiReq := req.apiReq 158 apiReq.ApiPath = "/open-apis/approval/v4/approvals/:approval_code/unsubscribe" 159 apiReq.HttpMethod = http.MethodPost 160 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 161 apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...) 162 if err != nil { 163 return nil, err 164 } 165 // 反序列响应结果 166 resp := &UnsubscribeApprovalResp{ApiResp: apiResp} 167 err = apiResp.JSONUnmarshalBody(resp) 168 if err != nil { 169 return nil, err 170 } 171 return resp, err 172 } 173 174 // 三方审批定义创建 175 // 176 // - 审批定义是审批的描述,包括审批名称、图标、描述等基础信息。创建好审批定义,用户就可以在审批应用的发起页中看到审批,如果用户点击发起,则会跳转到配置的发起三方系统地址去发起审批。;;另外,审批定义还配置了审批操作时的回调地址:审批人在待审批列表中进行【同意】【拒绝】操作时,审批中心会调用回调地址通知三方系统。 177 // 178 // - 注意,审批中心不负责审批流程的流转,只负责展示、操作、消息通知。因此审批定义创建时没有审批流程的信息。 179 // 180 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_approval/create 181 // 182 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_externalApproval.go 183 func (e *externalApproval) Create(ctx context.Context, req *CreateExternalApprovalReq, options ...larkcore.RequestOptionFunc) (*CreateExternalApprovalResp, error) { 184 // 发起请求 185 apiReq := req.apiReq 186 apiReq.ApiPath = "/open-apis/approval/v4/external_approvals" 187 apiReq.HttpMethod = http.MethodPost 188 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 189 apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...) 190 if err != nil { 191 return nil, err 192 } 193 // 反序列响应结果 194 resp := &CreateExternalApprovalResp{ApiResp: apiResp} 195 err = apiResp.JSONUnmarshalBody(resp) 196 if err != nil { 197 return nil, err 198 } 199 return resp, err 200 } 201 202 // 三方审批实例校验 203 // 204 // - 校验三方审批实例数据,用于判断服务端数据是否为最新的。用户提交实例最新更新时间,如果服务端不存在该实例,或者服务端实例更新时间不是最新的,则返回对应实例 id。;;例如,用户可以每隔5分钟,将最近5分钟产生的实例使用该接口进行对比。 205 // 206 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_instance/check 207 // 208 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/check_externalInstance.go 209 func (e *externalInstance) Check(ctx context.Context, req *CheckExternalInstanceReq, options ...larkcore.RequestOptionFunc) (*CheckExternalInstanceResp, error) { 210 // 发起请求 211 apiReq := req.apiReq 212 apiReq.ApiPath = "/open-apis/approval/v4/external_instances/check" 213 apiReq.HttpMethod = http.MethodPost 214 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 215 apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...) 216 if err != nil { 217 return nil, err 218 } 219 // 反序列响应结果 220 resp := &CheckExternalInstanceResp{ApiResp: apiResp} 221 err = apiResp.JSONUnmarshalBody(resp) 222 if err != nil { 223 return nil, err 224 } 225 return resp, err 226 } 227 228 // 三方审批实例同步 229 // 230 // - 审批中心不负责审批的流转,审批的流转在三方系统,三方系统在审批流转后生成的审批实例、审批任务、审批抄送数据同步到审批中心。;;用户可以在审批中心中浏览三方系统同步过来的实例、任务、抄送信息,并且可以跳转回三方系统进行更详细的查看和操作,其中实例信息在【已发起】列表,任务信息在【待审批】和【已审批】列表,抄送信息在【抄送我】列表;;:::html;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/9dff4434afbeb0ef69de7f36b9a6e995_z5iwmTzEgg.png" alt="" style="zoom:17%;" />;;;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/ca6e0e984a7a6d64e1b16a0bac4bf868_tfqjCiaJQM.png" alt="" style="zoom:17%;" />;;;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/529377e238df78d391bbd22e962ad195_T7eefLI1GA.png" alt="" style="zoom:17%;" />;:::;;对于审批任务,三方系统也可以配置审批任务的回调接口,这样审批人可以在审批中心中直接进行审批操作,审批中心会回调三方系统,三方系统收到回调后更新任务信息,并将新的任务信息同步回审批中心,形成闭环。;;:::html;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/721c35428bc1187db3318c572f9979ad_je75QpElcg.png" alt="" style="zoom:25%;" />;:::;<br> 231 // 232 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_instance/create 233 // 234 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_externalInstance.go 235 func (e *externalInstance) Create(ctx context.Context, req *CreateExternalInstanceReq, options ...larkcore.RequestOptionFunc) (*CreateExternalInstanceResp, error) { 236 // 发起请求 237 apiReq := req.apiReq 238 apiReq.ApiPath = "/open-apis/approval/v4/external_instances" 239 apiReq.HttpMethod = http.MethodPost 240 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 241 apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...) 242 if err != nil { 243 return nil, err 244 } 245 // 反序列响应结果 246 resp := &CreateExternalInstanceResp{ApiResp: apiResp} 247 err = apiResp.JSONUnmarshalBody(resp) 248 if err != nil { 249 return nil, err 250 } 251 return resp, err 252 } 253 254 // 获取三方审批任务状态 255 // 256 // - 该接口用于获取三方审批的状态。用户传入查询条件,接口返回满足条件的审批实例的状态。该接口支持多种参数的组合,包括如下组合:;;1.通过 instance_ids 获取指定实例的任务状态;;2.通过 user_ids 获取指定用户的任务状态;;3.通过 status 获取指定状态的所有任务;;4.通过page_token获取下一批数据 257 // 258 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_task/list 259 // 260 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/list_externalTask.go 261 func (e *externalTask) List(ctx context.Context, req *ListExternalTaskReq, options ...larkcore.RequestOptionFunc) (*ListExternalTaskResp, error) { 262 // 发起请求 263 apiReq := req.apiReq 264 apiReq.ApiPath = "/open-apis/approval/v4/external_tasks" 265 apiReq.HttpMethod = http.MethodGet 266 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 267 apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...) 268 if err != nil { 269 return nil, err 270 } 271 // 反序列响应结果 272 resp := &ListExternalTaskResp{ApiResp: apiResp} 273 err = apiResp.JSONUnmarshalBody(resp) 274 if err != nil { 275 return nil, err 276 } 277 return resp, err 278 } 279 func (e *externalTask) ListByIterator(ctx context.Context, req *ListExternalTaskReq, options ...larkcore.RequestOptionFunc) (*ListExternalTaskIterator, error) { 280 return &ListExternalTaskIterator{ 281 ctx: ctx, 282 req: req, 283 listFunc: e.List, 284 options: options, 285 limit: req.Limit}, nil 286 } 287 288 // 289 // 290 // - 291 // 292 // - 官网API文档链接:https://open.feishu.cn/document/ukTMukTMukTM/ukTM5UjL5ETO14SOxkTN/approval-task-addsign 293 // 294 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/addSign_instance.go 295 func (i *instance) AddSign(ctx context.Context, req *AddSignInstanceReq, options ...larkcore.RequestOptionFunc) (*AddSignInstanceResp, error) { 296 // 发起请求 297 apiReq := req.apiReq 298 apiReq.ApiPath = "/open-apis/approval/v4/instances/add_sign" 299 apiReq.HttpMethod = http.MethodPost 300 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 301 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 302 if err != nil { 303 return nil, err 304 } 305 // 反序列响应结果 306 resp := &AddSignInstanceResp{ApiResp: apiResp} 307 err = apiResp.JSONUnmarshalBody(resp) 308 if err != nil { 309 return nil, err 310 } 311 return resp, err 312 } 313 314 // 审批实例撤回 315 // 316 // - 对于状态为“审批中”的单个审批实例进行撤销操作,撤销后审批流程结束 317 // 318 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/cancel 319 // 320 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/cancel_instance.go 321 func (i *instance) Cancel(ctx context.Context, req *CancelInstanceReq, options ...larkcore.RequestOptionFunc) (*CancelInstanceResp, error) { 322 // 发起请求 323 apiReq := req.apiReq 324 apiReq.ApiPath = "/open-apis/approval/v4/instances/cancel" 325 apiReq.HttpMethod = http.MethodPost 326 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 327 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 328 if err != nil { 329 return nil, err 330 } 331 // 反序列响应结果 332 resp := &CancelInstanceResp{ApiResp: apiResp} 333 err = apiResp.JSONUnmarshalBody(resp) 334 if err != nil { 335 return nil, err 336 } 337 return resp, err 338 } 339 340 // 审批实例抄送 341 // 342 // - 通过接口可以将当前审批实例抄送给其他人。 343 // 344 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/cc 345 // 346 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/cc_instance.go 347 func (i *instance) Cc(ctx context.Context, req *CcInstanceReq, options ...larkcore.RequestOptionFunc) (*CcInstanceResp, error) { 348 // 发起请求 349 apiReq := req.apiReq 350 apiReq.ApiPath = "/open-apis/approval/v4/instances/cc" 351 apiReq.HttpMethod = http.MethodPost 352 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 353 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 354 if err != nil { 355 return nil, err 356 } 357 // 反序列响应结果 358 resp := &CcInstanceResp{ApiResp: apiResp} 359 err = apiResp.JSONUnmarshalBody(resp) 360 if err != nil { 361 return nil, err 362 } 363 return resp, err 364 } 365 366 // 创建审批实例 367 // 368 // - 创建一个审批实例,调用方需对审批定义的表单有详细了解,将按照定义的表单结构,将表单 Value 通过接口传入 369 // 370 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/create 371 // 372 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_instance.go 373 func (i *instance) Create(ctx context.Context, req *CreateInstanceReq, options ...larkcore.RequestOptionFunc) (*CreateInstanceResp, error) { 374 // 发起请求 375 apiReq := req.apiReq 376 apiReq.ApiPath = "/open-apis/approval/v4/instances" 377 apiReq.HttpMethod = http.MethodPost 378 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 379 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 380 if err != nil { 381 return nil, err 382 } 383 // 反序列响应结果 384 resp := &CreateInstanceResp{ApiResp: apiResp} 385 err = apiResp.JSONUnmarshalBody(resp) 386 if err != nil { 387 return nil, err 388 } 389 return resp, err 390 } 391 392 // 获取单个审批实例详情 393 // 394 // - 通过审批实例 Instance Code 获取审批实例详情。Instance Code 由 [批量获取审批实例](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/list) 接口获取。 395 // 396 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/get 397 // 398 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/get_instance.go 399 func (i *instance) Get(ctx context.Context, req *GetInstanceReq, options ...larkcore.RequestOptionFunc) (*GetInstanceResp, error) { 400 // 发起请求 401 apiReq := req.apiReq 402 apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id" 403 apiReq.HttpMethod = http.MethodGet 404 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 405 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 406 if err != nil { 407 return nil, err 408 } 409 // 反序列响应结果 410 resp := &GetInstanceResp{ApiResp: apiResp} 411 err = apiResp.JSONUnmarshalBody(resp) 412 if err != nil { 413 return nil, err 414 } 415 return resp, err 416 } 417 418 // 批量获取审批实例ID 419 // 420 // - 根据 approval_code 批量获取审批实例的 instance_code,用于拉取租户下某个审批定义的全部审批实例。默认以审批创建时间排序 421 // 422 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/list 423 // 424 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/list_instance.go 425 func (i *instance) List(ctx context.Context, req *ListInstanceReq, options ...larkcore.RequestOptionFunc) (*ListInstanceResp, error) { 426 // 发起请求 427 apiReq := req.apiReq 428 apiReq.ApiPath = "/open-apis/approval/v4/instances" 429 apiReq.HttpMethod = http.MethodGet 430 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 431 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 432 if err != nil { 433 return nil, err 434 } 435 // 反序列响应结果 436 resp := &ListInstanceResp{ApiResp: apiResp} 437 err = apiResp.JSONUnmarshalBody(resp) 438 if err != nil { 439 return nil, err 440 } 441 return resp, err 442 } 443 func (i *instance) ListByIterator(ctx context.Context, req *ListInstanceReq, options ...larkcore.RequestOptionFunc) (*ListInstanceIterator, error) { 444 return &ListInstanceIterator{ 445 ctx: ctx, 446 req: req, 447 listFunc: i.List, 448 options: options, 449 limit: req.Limit}, nil 450 } 451 452 // 453 // 454 // - 455 // 456 // - 官网API文档链接:https://open.feishu.cn/document/ukTMukTMukTM/ukTM5UjL5ETO14SOxkTN/approval-preview 457 // 458 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/preview_instance.go 459 func (i *instance) Preview(ctx context.Context, req *PreviewInstanceReq, options ...larkcore.RequestOptionFunc) (*PreviewInstanceResp, error) { 460 // 发起请求 461 apiReq := req.apiReq 462 apiReq.ApiPath = "/open-apis/approval/v4/instances/preview" 463 apiReq.HttpMethod = http.MethodPost 464 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 465 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 466 if err != nil { 467 return nil, err 468 } 469 // 反序列响应结果 470 resp := &PreviewInstanceResp{ApiResp: apiResp} 471 err = apiResp.JSONUnmarshalBody(resp) 472 if err != nil { 473 return nil, err 474 } 475 return resp, err 476 } 477 478 // 实例列表查询 479 // 480 // - 该接口通过不同条件查询审批系统中符合条件的审批实例列表。 481 // 482 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/query 483 // 484 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/query_instance.go 485 func (i *instance) Query(ctx context.Context, req *QueryInstanceReq, options ...larkcore.RequestOptionFunc) (*QueryInstanceResp, error) { 486 // 发起请求 487 apiReq := req.apiReq 488 apiReq.ApiPath = "/open-apis/approval/v4/instances/query" 489 apiReq.HttpMethod = http.MethodPost 490 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 491 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 492 if err != nil { 493 return nil, err 494 } 495 // 反序列响应结果 496 resp := &QueryInstanceResp{ApiResp: apiResp} 497 err = apiResp.JSONUnmarshalBody(resp) 498 if err != nil { 499 return nil, err 500 } 501 return resp, err 502 } 503 func (i *instance) QueryByIterator(ctx context.Context, req *QueryInstanceReq, options ...larkcore.RequestOptionFunc) (*QueryInstanceIterator, error) { 504 return &QueryInstanceIterator{ 505 ctx: ctx, 506 req: req, 507 listFunc: i.Query, 508 options: options, 509 limit: req.Limit}, nil 510 } 511 512 // 抄送列表查询接口 513 // 514 // - 该接口通过不同条件查询审批系统中符合条件的审批抄送列表。 515 // 516 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/search_cc 517 // 518 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/searchCc_instance.go 519 func (i *instance) SearchCc(ctx context.Context, req *SearchCcInstanceReq, options ...larkcore.RequestOptionFunc) (*SearchCcInstanceResp, error) { 520 // 发起请求 521 apiReq := req.apiReq 522 apiReq.ApiPath = "/open-apis/approval/v4/instances/search_cc" 523 apiReq.HttpMethod = http.MethodPost 524 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 525 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 526 if err != nil { 527 return nil, err 528 } 529 // 反序列响应结果 530 resp := &SearchCcInstanceResp{ApiResp: apiResp} 531 err = apiResp.JSONUnmarshalBody(resp) 532 if err != nil { 533 return nil, err 534 } 535 return resp, err 536 } 537 538 // 审批任务退回 539 // 540 // - 从当前审批任务,退回到已审批的一个或多个任务节点。退回后,已审批节点重新生成审批任务 541 // 542 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/specified_rollback 543 // 544 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/specifiedRollback_instance.go 545 func (i *instance) SpecifiedRollback(ctx context.Context, req *SpecifiedRollbackInstanceReq, options ...larkcore.RequestOptionFunc) (*SpecifiedRollbackInstanceResp, error) { 546 // 发起请求 547 apiReq := req.apiReq 548 apiReq.ApiPath = "/open-apis/approval/v4/instances/specified_rollback" 549 apiReq.HttpMethod = http.MethodPost 550 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 551 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 552 if err != nil { 553 return nil, err 554 } 555 // 反序列响应结果 556 resp := &SpecifiedRollbackInstanceResp{ApiResp: apiResp} 557 err = apiResp.JSONUnmarshalBody(resp) 558 if err != nil { 559 return nil, err 560 } 561 return resp, err 562 } 563 564 // 创建评论 565 // 566 // - 在某审批实例下创建、修改评论或评论回复(不包含审批同意、拒绝、转交等附加的理由或意见)。 567 // 568 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/create 569 // 570 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_instanceComment.go 571 func (i *instanceComment) Create(ctx context.Context, req *CreateInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*CreateInstanceCommentResp, error) { 572 // 发起请求 573 apiReq := req.apiReq 574 apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments" 575 apiReq.HttpMethod = http.MethodPost 576 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 577 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 578 if err != nil { 579 return nil, err 580 } 581 // 反序列响应结果 582 resp := &CreateInstanceCommentResp{ApiResp: apiResp} 583 err = apiResp.JSONUnmarshalBody(resp) 584 if err != nil { 585 return nil, err 586 } 587 return resp, err 588 } 589 590 // 删除评论 591 // 592 // - 逻辑删除某审批实例下的一条评论或评论回复(不包含审批同意、拒绝、转交等附加的理由或意见)。 593 // 594 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/delete 595 // 596 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/delete_instanceComment.go 597 func (i *instanceComment) Delete(ctx context.Context, req *DeleteInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*DeleteInstanceCommentResp, error) { 598 // 发起请求 599 apiReq := req.apiReq 600 apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments/:comment_id" 601 apiReq.HttpMethod = http.MethodDelete 602 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 603 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 604 if err != nil { 605 return nil, err 606 } 607 // 反序列响应结果 608 resp := &DeleteInstanceCommentResp{ApiResp: apiResp} 609 err = apiResp.JSONUnmarshalBody(resp) 610 if err != nil { 611 return nil, err 612 } 613 return resp, err 614 } 615 616 // 获取评论 617 // 618 // - 根据 Instance Code 获取某个审批实例下的全部评论与评论回复(不包含审批同意、拒绝、转交等附加的理由或意见)。 619 // 620 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/list 621 // 622 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/list_instanceComment.go 623 func (i *instanceComment) List(ctx context.Context, req *ListInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*ListInstanceCommentResp, error) { 624 // 发起请求 625 apiReq := req.apiReq 626 apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments" 627 apiReq.HttpMethod = http.MethodGet 628 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 629 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 630 if err != nil { 631 return nil, err 632 } 633 // 反序列响应结果 634 resp := &ListInstanceCommentResp{ApiResp: apiResp} 635 err = apiResp.JSONUnmarshalBody(resp) 636 if err != nil { 637 return nil, err 638 } 639 return resp, err 640 } 641 642 // 清空评论 643 // 644 // - 删除某审批实例下的全部评论与评论回复。 645 // 646 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/remove 647 // 648 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/remove_instanceComment.go 649 func (i *instanceComment) Remove(ctx context.Context, req *RemoveInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*RemoveInstanceCommentResp, error) { 650 // 发起请求 651 apiReq := req.apiReq 652 apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments/remove" 653 apiReq.HttpMethod = http.MethodPost 654 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 655 apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...) 656 if err != nil { 657 return nil, err 658 } 659 // 反序列响应结果 660 resp := &RemoveInstanceCommentResp{ApiResp: apiResp} 661 err = apiResp.JSONUnmarshalBody(resp) 662 if err != nil { 663 return nil, err 664 } 665 return resp, err 666 } 667 668 // 审批任务同意 669 // 670 // - 对于单个审批任务进行同意操作。同意后审批流程会流转到下一个审批人。 671 // 672 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/approve 673 // 674 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/approve_task.go 675 func (t *task) Approve(ctx context.Context, req *ApproveTaskReq, options ...larkcore.RequestOptionFunc) (*ApproveTaskResp, error) { 676 // 发起请求 677 apiReq := req.apiReq 678 apiReq.ApiPath = "/open-apis/approval/v4/tasks/approve" 679 apiReq.HttpMethod = http.MethodPost 680 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 681 apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...) 682 if err != nil { 683 return nil, err 684 } 685 // 反序列响应结果 686 resp := &ApproveTaskResp{ApiResp: apiResp} 687 err = apiResp.JSONUnmarshalBody(resp) 688 if err != nil { 689 return nil, err 690 } 691 return resp, err 692 } 693 694 // 用户角度列出任务 695 // 696 // - 根据用户和任务分组查询任务列表 697 // 698 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/query 699 // 700 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/query_task.go 701 func (t *task) Query(ctx context.Context, req *QueryTaskReq, options ...larkcore.RequestOptionFunc) (*QueryTaskResp, error) { 702 // 发起请求 703 apiReq := req.apiReq 704 apiReq.ApiPath = "/open-apis/approval/v4/tasks/query" 705 apiReq.HttpMethod = http.MethodGet 706 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser} 707 apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...) 708 if err != nil { 709 return nil, err 710 } 711 // 反序列响应结果 712 resp := &QueryTaskResp{ApiResp: apiResp} 713 err = apiResp.JSONUnmarshalBody(resp) 714 if err != nil { 715 return nil, err 716 } 717 return resp, err 718 } 719 func (t *task) QueryByIterator(ctx context.Context, req *QueryTaskReq, options ...larkcore.RequestOptionFunc) (*QueryTaskIterator, error) { 720 return &QueryTaskIterator{ 721 ctx: ctx, 722 req: req, 723 listFunc: t.Query, 724 options: options, 725 limit: req.Limit}, nil 726 } 727 728 // 审批任务拒绝 729 // 730 // - 对于单个审批任务进行拒绝操作。拒绝后审批流程结束。 731 // 732 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/reject 733 // 734 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/reject_task.go 735 func (t *task) Reject(ctx context.Context, req *RejectTaskReq, options ...larkcore.RequestOptionFunc) (*RejectTaskResp, error) { 736 // 发起请求 737 apiReq := req.apiReq 738 apiReq.ApiPath = "/open-apis/approval/v4/tasks/reject" 739 apiReq.HttpMethod = http.MethodPost 740 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 741 apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...) 742 if err != nil { 743 return nil, err 744 } 745 // 反序列响应结果 746 resp := &RejectTaskResp{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 // - 对于单个退回到发起人的审批任务进行重新发起操作。发起后审批流程会流转到下一个审批人。 757 // 758 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/resubmit 759 // 760 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/resubmit_task.go 761 func (t *task) Resubmit(ctx context.Context, req *ResubmitTaskReq, options ...larkcore.RequestOptionFunc) (*ResubmitTaskResp, error) { 762 // 发起请求 763 apiReq := req.apiReq 764 apiReq.ApiPath = "/open-apis/approval/v4/tasks/resubmit" 765 apiReq.HttpMethod = http.MethodPost 766 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 767 apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...) 768 if err != nil { 769 return nil, err 770 } 771 // 反序列响应结果 772 resp := &ResubmitTaskResp{ApiResp: apiResp} 773 err = apiResp.JSONUnmarshalBody(resp) 774 if err != nil { 775 return nil, err 776 } 777 return resp, err 778 } 779 780 // 任务列表查询 781 // 782 // - 该接口通过不同条件查询审批系统中符合条件的审批任务列表 783 // 784 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/search 785 // 786 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/search_task.go 787 func (t *task) Search(ctx context.Context, req *SearchTaskReq, options ...larkcore.RequestOptionFunc) (*SearchTaskResp, error) { 788 // 发起请求 789 apiReq := req.apiReq 790 apiReq.ApiPath = "/open-apis/approval/v4/tasks/search" 791 apiReq.HttpMethod = http.MethodPost 792 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 793 apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...) 794 if err != nil { 795 return nil, err 796 } 797 // 反序列响应结果 798 resp := &SearchTaskResp{ApiResp: apiResp} 799 err = apiResp.JSONUnmarshalBody(resp) 800 if err != nil { 801 return nil, err 802 } 803 return resp, err 804 } 805 806 // 审批任务转交 807 // 808 // - 对于单个审批任务进行转交操作。转交后审批流程流转给被转交人。 809 // 810 // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/transfer 811 // 812 // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/transfer_task.go 813 func (t *task) Transfer(ctx context.Context, req *TransferTaskReq, options ...larkcore.RequestOptionFunc) (*TransferTaskResp, error) { 814 // 发起请求 815 apiReq := req.apiReq 816 apiReq.ApiPath = "/open-apis/approval/v4/tasks/transfer" 817 apiReq.HttpMethod = http.MethodPost 818 apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant} 819 apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...) 820 if err != nil { 821 return nil, err 822 } 823 // 反序列响应结果 824 resp := &TransferTaskResp{ApiResp: apiResp} 825 err = apiResp.JSONUnmarshalBody(resp) 826 if err != nil { 827 return nil, err 828 } 829 return resp, err 830 }