Skip to content

删除用户

调用该接口从通讯录内删除一个指定用户(该动作可以理解为员工离职),删除时可通过请求参数将用户所有的群组、文档、日程和应用等数据转让至他人。

注意事项

  • 调用该接口的应用的通讯录权限范围必须包含用户所属的部门。例如,待删除用户归属部门 A、部门 B,则应用的通讯录权限范围必须包括部门 A 和部门 B,这样才可以成功删除用户。
  • 删除用户后,你可以调用获取单个用户信息接口,通过用户 ID 查询用户的状态(响应参数 status),从而确保用户已成功删除(对应已离职状态)。

请求

项目
HTTP URLhttps://open.feishu.cn/open-apis/contact/v3/users/:user_id
HTTP MethodDELETE
接口频率限制1000 次/分钟、50 次/秒
支持的应用类型custom
权限要求 调用该 API 所需的权限。开启其中任意一项权限即可调用contact:contact 更新通讯录
字段权限要求> Tip: 该接口返回体中存在下列敏感字段,仅当开启对应的权限后才会返回;如果无需获取这些字段,则不建议申请 contact:user.employee_id:readonly 获取用户 user ID

请求头

名称类型必填描述
Authorizationstringtenant_access_token 值格式:"Bearer access_token" 示例值:"Bearer t-7f1bcd13fc57d46bac21793a18e560" 了解更多:如何选择与获取 access token
Content-Typestring固定值:"application/json; charset=utf-8"

路径参数

名称类型描述
user_idstring用户 ID。ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"

查询参数

名称类型必填描述
user_id_typestring用户 ID 类型
示例值:open_id
可选值有
- open_id: 标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。了解更多:如何获取 Open ID - union_id: 标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的,在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID,应用开发商可以把同个用户在多个应用中的身份关联起来。了解更多:如何获取 Union ID? - user_id: 标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内,一个用户的 User ID 在所有应用(包括商店应用)中都保持一致。User ID 主要用于在不同的应用间打通用户数据。了解更多:如何获取 User ID?
默认值open_id
当值为 user_id,字段权限要求contact:user.employee_id:readonly 获取用户 user ID

请求体

名称类型必填描述
department_chat_acceptor_user_idstring部门群接收者的用户 ID。被删除用户为部门群群主时,转让群主给指定接收者。
注意: - ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 不指定该参数时,如果被删除用户是部门群群主,则群主会默认转让给群内第一个入群的人。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
external_chat_acceptor_user_idstring外部群接收者的用户 ID。被删除用户为外部群群主时,转让群主给指定接收者。
注意: - ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 不指定该参数时,如果被删除用户是外部群群主,则群主会默认转让给群内与被删除用户在同一组织的第一个入群的人。如果组织内只有被删除用户在群里,则解散外部群。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
docs_acceptor_user_idstring文档接收者的用户 ID。用户被删除时,其拥有的文档转让给接收者。
注意: - ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 不指定接收者则默认转让给被删除用户的直属上级。如果被删除用户无直属上级,则将文档资源保留在该用户名下。 - 文档转让后,只改变文档所有者,其他权限不受影响。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
calendar_acceptor_user_idstring日程接收者的用户 ID。用户被删除时,其拥有的日程转让给接收者。
注意: - ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 不指定接收者则默认转让给被删除用户的直属上级。如果被删除用户无直属上级,则直接删除日程资源。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
application_acceptor_user_idstring应用接收者的用户 ID。用户被删除时,其创建的应用转让给接收者。
注意: - ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 不指定接收者则默认转让给被删除用户的直属上级。如果被删除用户无直属上级,则保留应用在该用户名下,但该用户无法登录开发者后台进行应用管理。企业管理员可以在管理后台手动转移应用给其他人。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
minutes_acceptor_user_idstring妙记接收者的用户 ID。用户被删除时,其拥有的妙记资源转让给接收者。
注意: - ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 如果不指定接收者,则默认转让给被删除用户的直属上级。如果被删除用户无直属上级,则将妙记保留在该用户名下。 - 妙记转让后,只改变妙记所有者,不影响已分享的妙记链接。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
survey_acceptor_user_idstring飞书问卷接收者的用户 ID。用户被删除时,其拥有的飞书问卷资源转让给接收者。
注意: - ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 不指定接收者则默认转让给被删除用户的直属上级。如果被删除用户无直属上级,则直接删除飞书问卷资源。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
email_acceptorresource_acceptor用户邮件资源的处理方式。
该参数为可选参数,如果未传值,则默认将邮件资源转让给被删除用户的直属上级。如果被删除用户无直属上级,则保留邮件资源在该用户名下。
  └ processing_typestring处理方式。
示例值:"1"
可选值有
- 1: 转移资源 - 2: 保留资源 - 3: 删除资源
  └ acceptor_user_idstring邮件资源接收者的用户 ID。ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID
说明:仅当 processing_type 取值为 1 时,需要设置该参数值。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"
anycross_acceptor_user_idstring用户集成平台资源的接收者的用户 ID。
注意:
- ID 类型需要与查询参数中的 user_id_type 类型保持一致。用户 ID 获取方式可参见如何获取不同的用户 ID。 - 不指定接收者则默认转让给被删除用户的直属上级。如果被删除用户无直属上级,则保留应用在该用户名下,但该用户无法登录飞书集成平台。企业管理员可以在管理后台手动转移应用给其他人。
示例值:"ou_7dab8a3d3cdcc9da365777c7ad535d62"

请求体示例

json
{
    "department_chat_acceptor_user_id": "ou_7dab8a3d3cdcc9da365777c7ad535d62",
    "external_chat_acceptor_user_id": "ou_7dab8a3d3cdcc9da365777c7ad535d62",
    "docs_acceptor_user_id": "ou_7dab8a3d3cdcc9da365777c7ad535d62",
    "calendar_acceptor_user_id": "ou_7dab8a3d3cdcc9da365777c7ad535d62",
    "application_acceptor_user_id": "ou_7dab8a3d3cdcc9da365777c7ad535d62",
	"email_acceptor": {
		"processing_type": "1",
		"acceptor_user_id": "ou_7dab8a3d3cdcc9da365777c7ad535d62"
	}
}

Go 请求示例

go
import (
	"context"

	"github.com/larksuite/oapi-sdk-go/v3"
	"github.com/larksuite/oapi-sdk-go/v3/service/contact/v3"
)

func main() {
	// 创建 Client
	client := lark.NewClient("appID", "appSecret")

	// 创建请求对象
	req := larkcontact.NewDeleteUserReqBuilder().
		UserId(`ou_7dab8a3d3cdcc9da365777c7ad535d62`).
		Body(larkcontact.NewDeleteUserReqBodyBuilder().
			DepartmentChatAcceptorUserId(`ou_7dab8a3d3cdcc9da365777c7ad535d62`).
			ExternalChatAcceptorUserId(`ou_7dab8a3d3cdcc9da365777c7ad535d62`).
			DocsAcceptorUserId(`ou_7dab8a3d3cdcc9da365777c7ad535d62`).
			Build()).
		Build()

	// 发起请求
	resp, err := client.Contact.User.Delete(context.Background(), req)
}

Java 请求示例

java
import com.lark.oapi.Client;
import com.lark.oapi.core.request.RequestOptions;
import com.lark.oapi.service.contact.v3.model.DeleteUserReq;
import com.lark.oapi.service.contact.v3.model.DeleteUserReqBody;
import com.lark.oapi.service.contact.v3.model.DeleteUserResp;

public class Main {
    public static void main(String arg[]) throws Exception {
        // 构建client
        Client client = Client.newBuilder("appId", "appSecret").build();

        // 创建请求对象
        DeleteUserReq req = DeleteUserReq.newBuilder()
                .userId("ou_7dab8a3d3cdcc9da365777c7ad535d62")
                .userIdType("")
                .deleteUserReqBody(DeleteUserReqBody.newBuilder()
                        .departmentChatAcceptorUserId("ou_7dab8a3d3cdcc9da365777c7ad535d62")
                        .externalChatAcceptorUserId("ou_7dab8a3d3cdcc9da365777c7ad535d62")
                        .docsAcceptorUserId("ou_7dab8a3d3cdcc9da365777c7ad535d62")
                        .build())
                .build();

        // 发起请求
        DeleteUserResp resp = client.contact().user().delete(req, RequestOptions.newBuilder().build());
    }
}

响应

响应体

名称类型描述
codeint错误码,非 0 表示失败
msgstring错误描述
data\--

响应体示例

json
{
    "code": 0,
    "msg": "success",
    "data": {}
}

错误码

HTTP状态码错误码描述排查建议
40040001param error参数错误。你可以自行检查输入参数是否设置有误。如果问题无法解决可联系开放平台技术支持
40340004no dept authority error无部门权限。用户所属部门需要添加在应用的通讯录权限范围内。如何设置应用的通讯录权限范围,可参见权限范围资源介绍
40341050no user authority error无用户权限。需将当前操作的用户添加到应用或用户的权限范围内。根据调用 API 的身份不同,解决方案也不同,具体说明如下: - 使用 tenant_access_token 调用 API 当前操作的用户需要添加在应用的通讯录权限范围内。通讯录权限范围定义了应用在调用通讯录 API 时可获取的部门、用户的数据范围。应用无法访问不在通讯录权限范围内的数据。 由开发者登录开发者后台,在应用详情页的 开发配置 > 权限管理 > 数据权限 页面内,配置 通讯录权限范围,添加指定用户。 image.png 已发布的应用企业管理员可在管理后台 > 工作台 > 应用管理 页面,修改应用的通讯录权限范围。 image.png - 使用 user_access_token 调用 API 当你使用用户身份调用通讯录 API 时,可操作的权限范围不受应用的通讯录权限范围影响,而是受当前用户的组织架构可见范围影响,该范围限制了用户在企业内可见的组织架构数据范围。 由企业管理员在管理后台 > 安全 > 成员权限 页面中,点击 组织架构可见范围 进行管理。 image.png 完整介绍参见权限范围资源介绍
40041052user resign acceptor is invalid error离职用户的资源接受者无效。你需要检查传入的资源接收者 ID 是否有误。
40044037tenant manager cannot be deleted无法删除租户管理员。你可以在管理后台 > 企业设置 > 管路员权限 页面,移除该用户的管理员身份后重试。
40044042User is in resurrect progress, retry later当前用户在恢复流程中,无法完成操作。你需要等待用户恢复完成,请稍后重试。
40044062According to the settings, this member's account can only be deleted through Member life cycle.根据租户管理员规则配置,该用户仅能通过生命周期引擎删除

更多错误码信息,参见通用错误码

内容来源:飞书开放平台 · 自动爬取整理