Skip to content

部门管理

功能描述

飞书组织机构部门是指企业组织架构树上的某一个节点。在部门内部,可添加用户作为部门成员,也可添加新的部门作为子部门。该API提供完整的部门管理功能,包括部门的创建、更新、查询、删除以及部门群管理等功能,支持层级化的组织架构管理。

函数列表

函数名称功能描述认证方式HTTP方法
CreateDepartmentAsync在通讯录内创建一个部门tenant_access_tokenPOST
UpdatePartDepartmentAsync更新指定部门的部分信息tenant_access_tokenPATCH
UpdateDepartmentAsync更新指定部门的信息tenant_access_tokenPUT
UpdateDepartmentIdAsync更新部门的自定义IDtenant_access_tokenPATCH
UnbindDepartmentChatAsync将指定部门的部门群转为普通群tenant_access_tokenPOST
GetDepartmentInfoByIdAsync获取单个部门信息user_access_tokenGET
GetDepartmentsByIdsAsync批量获取部门信息tenant_access_tokenGET
GetDepartmentsByParentIdAsync查询指定部门下的子部门列表tenant_access_tokenGET
GetParentDepartmentsByIdAsync递归获取指定部门的父部门信息tenant_access_tokenGET
SearchDepartmentsAsync通过部门名称关键词搜索部门user_access_tokenPOST
DeleteDepartmentByIdAsync从通讯录中删除指定的部门tenant_access_tokenDELETE

CreateDepartmentAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • departmentCreateRequest (必填) - 创建部门的请求体
  • user_id_type (可选) - 用户ID类型,默认为"user_id"
  • department_id_type (可选) - 部门ID类型,默认为"department_id"
  • client_token (可选) - 幂等性判断token

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "department": {
      "name": "技术部",
      "department_id": "od-4e6789c92a3c8e02dbe89d3f9b87c",
      "open_department_id": "od-4e6789c92a3c8e02dbe89d3f9b87c",
      "parent_department_id": "0",
      "leader_user_id": "ou_123456789",
      "member_count": 10,
      "status": { "is_deleted": false }
    }
  }
}

错误响应:
{
  "code": 400,
  "msg": "部门名称已存在"
}

说明

  • 部门名称不可包含斜杠(/)
  • 根部门的父部门ID为"0"
  • 支持创建部门群聊
  • HRBP列表和负责人信息可同时设置

代码示例

csharp
// 创建新部门示例
var createRequest = new DepartmentCreateRequest
{
    Name = "技术研发部",
    ParentDepartmentId = "0", // 根部门
    LeaderUserId = "ou_123456789",
    Order = "1",
    CreateGroupChat = true,
    DepartmentId = "tech_dept_001",
    Leaders = new List<DepartmentLeader>
    {
        new DepartmentLeader { UserId = "ou_123456789", Type = 1 }
    },
    DepartmentHrbps = new List<string> { "ou_hrbp_001" }
};

var result = await _feishuApi.CreateDepartmentAsync(
    tenantAccessToken,
    createRequest,
    user_id_type: "user_id",
    department_id_type: "department_id",
    client_token: Guid.NewGuid().ToString());

if (result.Success)
{
    var department = result.Data.Department;
    Console.WriteLine($"部门创建成功:{department.Name} (ID: {department.DepartmentId})");
}
else
{
    Console.WriteLine($"创建失败:{result.Message}");
}

UpdatePartDepartmentAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • department_id (必填) - 部门ID
  • departmentCreateRequest (必填) - 部分更新请求体
  • user_id_type (可选) - 用户ID类型
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "department": {
      "name": "更新后的技术部",
      "department_id": "od-4e6789c92a3c8e02dbe89d3f9b87c",
      "leader_user_id": "ou_new_leader"
    }
  }
}

说明

  • 只更新传入的字段,其他字段保持不变
  • 支持更新名称、主管、排序等信息

代码示例

csharp
// 部分更新部门信息
var updateRequest = new DepartmentPartUpdateRequest
{
    Name = "技术研发部(更新)",
    LeaderUserId = "ou_new_leader_123",
    Order = "2"
};

var result = await _feishuApi.UpdatePartDepartmentAsync(
    tenantAccessToken,
    "od-4e6789c92a3c8e02dbe89d3f9b87c",
    updateRequest);

if (result.Success)
{
    Console.WriteLine("部门信息更新成功");
}

UpdateDepartmentAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • department_id (必填) - 部门ID
  • departmentCreateRequest (必填) - 完整更新请求体
  • user_id_type (可选) - 用户ID类型
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "department": {
      "name": "完整更新的技术部",
      "department_id": "od-4e6789c92a3c8e02dbe89d3f9b87c"
    }
  }
}

说明

  • 需要提供完整的部门信息
  • 未提供的字段会被清空

代码示例

csharp
// 完整更新部门信息
var fullUpdateRequest = new DepartmentUpdateRequest
{
    Name = "完整技术研发部",
    ParentDepartmentId = "od_parent_001",
    LeaderUserId = "ou_full_leader",
    Order = "1",
    CreateGroupChat = false,
    Leaders = new List<DepartmentLeader>
    {
        new DepartmentLeader { UserId = "ou_full_leader", Type = 1 }
    }
};

var result = await _feishuApi.UpdateDepartmentAsync(
    tenantAccessToken,
    "od-4e6789c92a3c8e02dbe89d3f9b87c",
    fullUpdateRequest);

UpdateDepartmentIdAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • department_id (必填) - 原部门ID
  • departMentUpdateIdRequest (必填) - 更新ID请求体
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "msg": "success"
}

说明

  • 用于更新部门的自定义ID
  • 新ID必须唯一

代码示例

csharp
// 更新部门自定义ID
var updateIdRequest = new DepartMentUpdateIdRequest
{
    NewDepartmentId = "new_tech_dept_2024"
};

var result = await _feishuApi.UpdateDepartmentIdAsync(
    tenantAccessToken,
    "od-4e6789c92a3c8e02dbe89d3f9b87c",
    updateIdRequest);

if (result.Success)
{
    Console.WriteLine("部门ID更新成功");
}

UnbindDepartmentChatAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • departmentRequest (必填) - 部门请求体
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "msg": "success"
}

说明

  • 将部门群转换为普通群
  • 转换后群聊不再与部门关联

代码示例

csharp
// 解绑部门群聊
var deptRequest = new DepartmentRequest
{
    DepartmentId = "od-4e6789c92a3c8e02dbe89d3f9b87c"
};

var result = await _feishuApi.UnbindDepartmentChatAsync(
    tenantAccessToken,
    deptRequest);

if (result.Success)
{
    Console.WriteLine("部门群已解绑");
}

GetDepartmentInfoByIdAsync

认证:user_access_token
参数

  • user_access_token (必填) - 用户访问令牌
  • department_id (必填) - 部门ID
  • department_id_type (可选) - 部门ID类型
  • user_id_type (可选) - 用户ID类型

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "department": {
      "name": "技术部",
      "department_id": "od-4e6789c92a3c8e02dbe89d3f9b87c",
      "parent_department_id": "0",
      "leader_user_id": "ou_123456789",
      "member_count": 10,
      "primary_member_count": 8,
      "department_hrbps": ["ou_hrbp_001"],
      "group_chat_employee_types": [1, 2]
    }
  }
}

说明

  • 获取部门的完整信息
  • 包含成员数量、HRBP等详细信息

代码示例

csharp
// 获取部门详细信息
var result = await _feishuApi.GetDepartmentInfoByIdAsync(
    userAccessToken,
    "od-4e6789c92a3c8e02dbe89d3f9b87c");

if (result.Success)
{
    var dept = result.Data.Department;
    Console.WriteLine($"部门:{dept.Name}");
    Console.WriteLine($"成员数:{dept.MemberCount}");
    Console.WriteLine($"主要负责人:{dept.LeaderUserId}");
    
    foreach (var hrbp in dept.DepartmentHrbps)
    {
        Console.WriteLine($"HRBP:{hrbp}");
    }
}

GetDepartmentsByIdsAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • department_ids (必填) - 部门ID数组
  • user_id_type (可选) - 用户ID类型
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "items": [
      {
        "name": "技术部",
        "department_id": "od-tech001",
        "member_count": 15
      },
      {
        "name": "产品部", 
        "department_id": "od-prod001",
        "member_count": 8
      }
    ]
  }
}

说明

  • 一次获取多个部门的信息
  • 最多支持50个部门ID

代码示例

csharp
// 批量获取部门信息
var departmentIds = new[] { "od-tech001", "od-prod001", "od-sales001" };

var result = await _feishuApi.GetDepartmentsByIdsAsync(
    tenantAccessToken,
    departmentIds);

if (result.Success)
{
    foreach (var dept in result.Data.Items)
    {
        Console.WriteLine($"{dept.Name} - {dept.MemberCount}人");
    }
}

GetDepartmentsByParentIdAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • department_id (必填) - 父部门ID
  • fetch_child (可选) - 是否递归获取子部门,默认false
  • page_size (可选) - 分页大小,默认10
  • page_token (可选) - 分页标记
  • user_id_type (可选) - 用户ID类型
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "items": [
      {
        "name": "前端组",
        "department_id": "od-frontend",
        "parent_department_id": "od-tech001"
      },
      {
        "name": "后端组",
        "department_id": "od-backend", 
        "parent_department_id": "od-tech001"
      }
    ],
    "page_token": "next_page_token"
  }
}

说明

  • 获取指定部门下的子部门列表
  • 支持递归获取所有层级的子部门

代码示例

csharp
// 获取子部门列表(支持分页)
var pageSize = 20;
var pageToken = "";

do
{
    var result = await _feishuApi.GetDepartmentsByParentIdAsync(
        tenantAccessToken,
        "od-tech001",
        fetch_child: false,
        page_size: pageSize,
        page_token: string.IsNullOrEmpty(pageToken) ? null : pageToken);

    if (result.Success)
    {
        foreach (var dept in result.Data.Items)
        {
            Console.WriteLine($"{dept.Name} ({dept.DepartmentId})");
        }

        pageToken = result.Data.PageToken;
    }
} while (!string.IsNullOrEmpty(pageToken));

GetParentDepartmentsByIdAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • department_id (必填) - 部门ID
  • page_size (可选) - 分页大小,默认10
  • page_token (可选) - 分页标记
  • user_id_type (可选) - 用户ID类型
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "items": [
      {
        "name": "技术部",
        "department_id": "od-tech001",
        "parent_department_id": "0"
      },
      {
        "name": "公司总部",
        "department_id": "0",
        "parent_department_id": ""
      }
    ]
  }
}

说明

  • 递归获取所有父级部门信息
  • 从直接父部门到根部门的完整路径

代码示例

csharp
// 获取部门层级路径
var result = await _feishuApi.GetParentDepartmentsByIdAsync(
    tenantAccessToken,
    "od-frontend-team");

if (result.Success)
{
    Console.WriteLine("部门层级路径:");
    var path = new List<string>();
    
    foreach (var dept in result.Data.Items)
    {
        path.Add(dept.Name);
    }
    
    path.Reverse(); // 从根到子
    Console.WriteLine(string.Join(" > ", path));
}

SearchDepartmentsAsync

认证:user_access_token
参数

  • user_access_token (必填) - 用户访问令牌
  • searchRequest (必填) - 搜索请求体
  • page_size (可选) - 分页大小,默认10
  • page_token (可选) - 分页标记
  • user_id_type (可选) - 用户ID类型
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "data": {
    "items": [
      {
        "name": "技术研发部",
        "department_id": "od-tech001",
        "parent_department_id": "0"
      }
    ],
    "page_token": "next_page_token"
  }
}

说明

  • 通过部门名称关键词搜索
  • 只支持搜索可见的部门
  • 不支持搜索国际化名称

代码示例

csharp
// 搜索部门
var searchRequest = new SearchRequest
{
    Query = "技术"
};

var result = await _feishuApi.SearchDepartmentsAsync(
    userAccessToken,
    searchRequest,
    page_size: 20);

if (result.Success)
{
    Console.WriteLine($"找到 {result.Data.Items.Count} 个相关部门:");
    foreach (var dept in result.Data.Items)
    {
        Console.WriteLine($"- {dept.Name} ({dept.DepartmentId})");
    }
}

DeleteDepartmentByIdAsync

认证:tenant_access_token
参数

  • tenant_access_token (必填) - 应用访问令牌
  • department_id (必填) - 部门ID
  • department_id_type (可选) - 部门ID类型

响应

json
成功响应:
{
  "code": 0,
  "msg": "success"
}

错误响应:
{
  "code": 400,
  "msg": "部门下还有成员,无法删除"
}

说明

  • 删除部门前需确保无子部门和无成员
  • 删除操作不可恢复

代码示例

csharp
// 删除部门(先检查是否可以删除)
var checkResult = await _feishuApi.GetDepartmentsByParentIdAsync(
    tenantAccessToken,
    "od-dept-to-delete");

if (checkResult.Success && checkResult.Data.Items.Any())
{
    Console.WriteLine("部门下还有子部门,无法删除");
    return;
}

var deleteResult = await _feishuApi.DeleteDepartmentByIdAsync(
    tenantAccessToken,
    "od-dept-to-delete");

if (deleteResult.Success)
{
    Console.WriteLine("部门删除成功");
}
else
{
    Console.WriteLine($"删除失败:{deleteResult.Message}");
}

版本记录

版本日期说明作者
v1.0.02025-11-20初始版本,包含所有部门管理APIMud Studio