Skip to content

原生审批管理接口 -(FeishuV4Approval_Tenant)

接口名称

原生审批管理接口 -(IFeishuTenantV4Approval

功能描述

该接口用于管理飞书原生审批功能。根据企业业务需要在飞书审批中心创建审批定义,用来定义一类审批的表单与流程,后续员工发起审批时,需要填写定义的表单,审批的流转也会按照定义的流程进行。

参考文档

函数列表

函数名称功能描述认证方式HTTP 方法
CreateApprovalAsync创建审批定义租户令牌POST
GetApprovalByCodeAsync获取审批定义详情租户令牌GET
CreateInstanceAsync创建审批实例租户令牌POST
CancelInstanceAsync撤回审批实例租户令牌POST
CarbonCopyInstanceAsync抄送审批实例租户令牌POST
PreviewInstanceAsync预览审批流程(创建实例前)租户令牌POST
PreviewInstanceAsync预览审批流程(创建实例后)租户令牌POST
GetInstanceByIdAsync获取审批实例详情租户令牌GET

函数详细内容

创建审批定义

函数签名

csharp
Task<FeishuApiResult<CreateApprovalResult>?> CreateApprovalAsync(
    [Body] CreateApprovalRequest createApprovalRequest,
    [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type,
    [Query("department_id_type")] string? department_id_type = Consts.Department_Id_Type,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
createApprovalRequestCreateApprovalRequest创建审批定义请求体
user_id_typestring用户 ID 类型,默认:open_id
department_id_typestring部门 ID 类型,默认:open_department_id
cancellationTokenCancellationToken取消操作令牌对象

请求体示例:

json
{
  "approval_name": "请假申请",
  "description": "用于员工请假的审批流程",
  "viewers": [
    {
      "viewer_type": "USER",
      "viewer_id": "ou_7dab8a3d3dfcd10xxx"
    }
  ],
  "form": {
    "form_content": "<input type='text' name='reason' placeholder='请假原因'/>"
  },
  "config": {
    "enable_again": true,
    "enable_cc": true
  }
}

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "approval_code": "7C468A54-8745-2245-9675-08B7C63E7A85"
  }
}

说明

  • 用于创建审批定义,可以灵活指定审批定义的基础信息、表单和流程等
  • 创建成功后返回 approval_code,后续操作都需要使用此 Code

代码示例

csharp
// 使用租户权限创建审批定义
public class ApprovalService
{
    private readonly IFeishuTenantV4Approval _approvalClient;

    public ApprovalService(IFeishuTenantV4Approval approvalClient)
    {
        _approvalClient = approvalClient;
    }

    public async Task CreateApprovalAsync()
    {
        var request = new CreateApprovalRequest
        {
            ApprovalName = "请假申请",
            Description = "用于员工请假的审批流程",
            Viewers = new List<Viewer>
            {
                new Viewer
                {
                    ViewerType = "TENANT",
                    ViewerId = ""
                }
            },
            Form = new Form
            {
                FormContent = "表单配置内容"
            },
            Config = new ApprovalConfig
            {
                EnableAgain = true,
                EnableCc = true
            }
        };

        var result = await _approvalClient.CreateApprovalAsync(request);

        if (result?.Code == 0)
        {
            Console.WriteLine($"审批定义创建成功,Code: {result.Data?.ApprovalCode}");
        }
    }
}

获取审批定义详情

函数签名

csharp
Task<FeishuApiResult<GetApprovalResult>?> GetApprovalByCodeAsync(
    [Path] string approval_code,
    [Query("locale")] string? locale = null,
    [Query("with_admin_id")] bool? with_admin_id = null,
    [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
approval_codestring审批定义 Code,示例值:"7C468A54-8745-2245-9675-08B7C63E7A85"
localestring语言可选值,默认为审批定义配置的默认语言,示例值:"zh-CN"
with_admin_idbool是否返回有数据管理权限的审批流程管理员 ID 列表
user_id_typestring用户 ID 类型,默认:open_id
cancellationTokenCancellationToken取消操作令牌对象

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "approval_code": "7C468A54-8745-2245-9675-08B7C63E7A85",
    "approval_name": "请假申请",
    "description": "用于员工请假的审批流程",
    "status": "ACTIVE",
    "form": {
      "form_content": "表单配置内容"
    },
    "nodes": [
      {
        "node_id": "START",
        "node_type": "START",
        "node_name": "发起人"
      }
    ]
  }
}

说明

  • 根据审批定义 Code 以及语言、用户 ID 等筛选条件获取指定审批定义的信息
  • 包括审批定义名称、状态、表单控件以及节点等信息
  • 获取审批定义信息后,可根据信息构造创建审批实例的请求

代码示例

csharp
// 使用租户权限获取审批定义详情
public class ApprovalService
{
    private readonly IFeishuTenantV4Approval _approvalClient;

    public ApprovalService(IFeishuTenantV4Approval approvalClient)
    {
        _approvalClient = approvalClient;
    }

    public async Task GetApprovalAsync()
    {
        var approvalCode = "7C468A54-8745-2245-9675-08B7C63E7A85";
        var result = await _approvalClient.GetApprovalByCodeAsync(
            approvalCode,
            locale: "zh-CN",
            with_admin_id: true);

        if (result?.Code == 0)
        {
            Console.WriteLine($"审批名称: {result.Data?.ApprovalName}");
            Console.WriteLine($"审批状态: {result.Data?.Status}");
        }
    }
}

创建审批实例

函数签名

csharp
Task<FeishuApiResult<CreateInstancesResult>?> CreateInstanceAsync(
    [Body] CreateInstanceRequest createInstanceRequest,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
createInstanceRequestCreateInstanceRequest创建审批实例请求体
cancellationTokenCancellationToken取消操作令牌对象

请求体示例:

json
{
  "approval_code": "7C468A54-8745-2245-9675-08B7C63E7A85",
  "open_id": "ou_7dab8a3d3dfcd10xxx",
  "form": [
    {
      "id": "reason",
      "type": "input",
      "value": "家中有事"
    },
    {
      "id": "date",
      "type": "date",
      "value": "2025-03-20"
    }
  ],
  "node_custome_mode": "SEQUENTIAL"
}

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "instance_code": "6A123516-FB88-470D-A428-9AF58B71B3C0"
  }
}

说明

  • 使用指定审批定义 Code 创建一个审批实例
  • 接口调用者需对审批定义的表单有详细了解
  • 按照定义的表单结构,将表单 Value 通过本接口传入

代码示例

csharp
// 使用租户权限创建审批实例
public class ApprovalService
{
    private readonly IFeishuTenantV4Approval _approvalClient;

    public ApprovalService(IFeishuTenantV4Approval approvalClient)
    {
        _approvalClient = approvalClient;
    }

    public async Task CreateInstanceAsync()
    {
        var request = new CreateInstanceRequest
        {
            ApprovalCode = "7C468A54-8745-2245-9675-08B7C63E7A85",
            OpenId = "ou_7dab8a3d3dfcd10xxx",
            Form = new List<FormData>
            {
                new FormData { Id = "reason", Type = "input", Value = "家中有事" },
                new FormData { Id = "date", Type = "date", Value = "2025-03-20" },
                new FormData { Id = "days", Type = "number", Value = "1" }
            },
            NodeCustomeMode = "SEQUENTIAL"
        };

        var result = await _approvalClient.CreateInstanceAsync(request);

        if (result?.Code == 0)
        {
            Console.WriteLine($"审批实例创建成功,Code: {result.Data?.InstanceCode}");
        }
    }
}

撤回审批实例

函数签名

csharp
Task<FeishuNullDataApiResult?> CancelInstanceAsync(
    [Body] CancelInstancesRequest cancelInstancesRequest,
    [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
cancelInstancesRequestCancelInstancesRequest撤回审批实例请求体
user_id_typestring用户 ID 类型,默认:open_id
cancellationTokenCancellationToken取消操作令牌对象

请求体示例:

json
{
  "instance_code": "6A123516-FB88-470D-A428-9AF58B71B3C0",
  "user_id": "ou_7dab8a3d3dfcd10xxx",
  "reason": "信息填写错误,需要重新提交"
}

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok"
}

说明

  • 管理员在审批后台的某一审批定义的更多设置中,勾选了"允许撤销审批中的申请"或者"允许撤销 x 天内通过的审批"
  • 在符合撤销规则的情况下,可以调用本接口将指定提交人的审批实例撤回

代码示例

csharp
// 使用租户权限撤回审批实例
public class ApprovalService
{
    private readonly IFeishuTenantV4Approval _approvalClient;

    public ApprovalService(IFeishuTenantV4Approval approvalClient)
    {
        _approvalClient = approvalClient;
    }

    public async Task CancelInstanceAsync()
    {
        var request = new CancelInstancesRequest
        {
            InstanceCode = "6A123516-FB88-470D-A428-9AF58B71B3C0",
            UserId = "ou_7dab8a3d3dfcd10xxx",
            Reason = "信息填写错误,需要重新提交"
        };

        var result = await _approvalClient.CancelInstanceAsync(request);

        if (result?.Code == 0)
        {
            Console.WriteLine("审批实例撤回成功");
        }
    }
}

抄送审批实例

函数签名

csharp
Task<FeishuNullDataApiResult?> CarbonCopyInstanceAsync(
    [Body] CarbonCopyInstanceRequest ccInstanceRequest,
    [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
ccInstanceRequestCarbonCopyInstanceRequest抄送审批实例请求体
user_id_typestring用户 ID 类型,默认:open_id
cancellationTokenCancellationToken取消操作令牌对象

请求体示例:

json
{
  "instance_code": "6A123516-FB88-470D-A428-9AF58B71B3C0",
  "cc_user_ids": ["ou_7dab8a3d3dfcd10xxx", "ou_8eab9b4e4egde21yyy"]
}

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok"
}

说明

  • 将当前审批实例抄送给指定用户
  • 被抄送的用户可以查看审批实例详情
  • 在飞书客户端的"工作台 > 审批 > 审批中心 > 抄送我"列表中可查看到审批实例

代码示例

csharp
// 使用租户权限抄送审批实例
public class ApprovalService
{
    private readonly IFeishuTenantV4Approval _approvalClient;

    public ApprovalService(IFeishuTenantV4Approval approvalClient)
    {
        _approvalClient = approvalClient;
    }

    public async Task CarbonCopyInstanceAsync()
    {
        var request = new CarbonCopyInstanceRequest
        {
            InstanceCode = "6A123516-FB88-470D-A428-9AF58B71B3C0",
            CcUserIds = new List<string>
            {
                "ou_7dab8a3d3dfcd10xxx",
                "ou_8eab9b4e4egde21yyy"
            }
        };

        var result = await _approvalClient.CarbonCopyInstanceAsync(request);

        if (result?.Code == 0)
        {
            Console.WriteLine("抄送成功");
        }
    }
}

预览审批流程(创建实例前)

函数签名

csharp
Task<FeishuApiResult<PreviewNodeResult>?> PreviewInstanceAsync(
    [Body] PreviewInstanceRequest previewInstanceRequest,
    [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
previewInstanceRequestPreviewInstanceRequest预览审批流程请求体(创建实例前)
user_id_typestring用户 ID 类型,默认:open_id
cancellationTokenCancellationToken取消操作令牌对象

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "nodes": [
      {
        "node_id": "START",
        "node_type": "START",
        "node_name": "发起人"
      },
      {
        "node_id": "APPROVAL_1",
        "node_type": "APPROVAL",
        "node_name": "部门主管审批",
        "approvers": ["ou_7dab8a3d3dfcd10xxx"]
      }
    ]
  }
}

说明

  • 在创建审批实例之前,可调用本接口预览审批流程数据
  • 帮助用户了解审批流程走向

代码示例

csharp
// 使用租户权限预览审批流程
public class ApprovalService
{
    private readonly IFeishuTenantV4Approval _approvalClient;

    public ApprovalService(IFeishuTenantV4Approval approvalClient)
    {
        _approvalClient = approvalClient;
    }

    public async Task PreviewInstanceAsync()
    {
        var request = new PreviewInstanceRequest
        {
            ApprovalCode = "7C468A54-8745-2245-9675-08B7C63E7A85",
            OpenId = "ou_7dab8a3d3dfcd10xxx"
        };

        var result = await _approvalClient.PreviewInstanceAsync(request);

        if (result?.Code == 0)
        {
            foreach (var node in result.Data?.Nodes ?? new List<PreviewNode>())
            {
                Console.WriteLine($"节点: {node.NodeName}, 类型: {node.NodeType}");
            }
        }
    }
}

预览审批流程(创建实例后)

函数签名

csharp
Task<FeishuApiResult<PreviewNodeResult>?> PreviewInstanceAsync(
    [Body] PreviewInstanceAfterRequest previewInstanceRequest,
    [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
previewInstanceRequestPreviewInstanceAfterRequest预览审批流程请求体(创建实例后)
user_id_typestring用户 ID 类型,默认:open_id
cancellationTokenCancellationToken取消操作令牌对象

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "nodes": [
      {
        "node_id": "APPROVAL_2",
        "node_type": "APPROVAL",
        "node_name": "财务审批"
      }
    ]
  }
}

说明

  • 在创建审批实例之后,可调用本接口预览某一审批节点的后续流程数据
  • 帮助用户了解从当前节点开始的后续审批流程走向

获取审批实例详情

函数签名

csharp
Task<FeishuApiResult<GetApprovalInstanceResult>?> GetInstanceByIdAsync(
    [Path] string instance_id,
    [Query("locale")] string? locale = null,
    [Query("user_id")] bool? user_id = null,
    [Query("user_id_type")] string? user_id_type = Consts.User_Id_Type,
    CancellationToken cancellationToken = default);

认证

租户令牌TenantAccessToken

参数

参数名必填类型描述
instance_idstring审批实例 Code,示例值:"6A123516-FB88-470D-A428-9AF58B71B3C0"
localestring语言可选值,示例值:"zh-CN"
user_idbool是否返回发起审批的用户 ID
user_id_typestring用户 ID 类型,默认:open_id
cancellationTokenCancellationToken取消操作令牌对象

响应

成功响应示例:

json
{
  "code": 0,
  "msg": "ok",
  "data": {
    "instance_code": "6A123516-FB88-470D-A428-9AF58B71B3C0",
    "approval_code": "7C468A54-8745-2245-9675-08B7C63E7A85",
    "approval_name": "请假申请",
    "open_id": "ou_7dab8a3d3dfcd10xxx",
    "status": "PENDING",
    "create_time": "2025-03-20T10:30:00+08:00",
    "update_time": "2025-03-20T10:30:00+08:00",
    "form": [
      {
        "id": "reason",
        "name": "请假原因",
        "type": "input",
        "value": "家中有事"
      }
    ],
    "tasks": [
      {
        "task_id": "123456789",
        "open_id": "ou_8eab9b4e4egde21yyy",
        "status": "PENDING",
        "node_name": "部门主管审批"
      }
    ]
  }
}

说明

  • 通过审批实例 Code 获取指定审批实例的详细信息
  • 包括审批实例的名称、创建时间、发起审批的用户、状态以及任务列表等信息

代码示例

csharp
// 使用租户权限获取审批实例详情
public class ApprovalService
{
    private readonly IFeishuTenantV4Approval _approvalClient;

    public ApprovalService(IFeishuTenantV4Approval approvalClient)
    {
        _approvalClient = approvalClient;
    }

    public async Task GetInstanceAsync()
    {
        var instanceId = "6A123516-FB88-470D-A428-9AF58B71B3C0";
        var result = await _approvalClient.GetInstanceByIdAsync(instanceId);

        if (result?.Code == 0)
        {
            var data = result.Data;
            Console.WriteLine($"审批名称: {data?.ApprovalName}");
            Console.WriteLine($"审批状态: {data?.Status}");
            Console.WriteLine($"创建时间: {data?.CreateTime}");

            foreach (var task in data?.Tasks ?? new List<TaskInfo>())
            {
                Console.WriteLine($"任务: {task.NodeName}, 状态: {task.Status}");
            }
        }
    }
}