# 简介

本教程介绍如何通过开放平台的事件监听获取自定义请假审批结果，并将请假信息同步到考勤打卡系统和日程上。

## 实现效果

本教程最终实现的效果如下：

## 操作流程

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/eece17a89c30b70da5e60f92c8fa638c_V4SiV6KicO.png?height=208&lazyload=true&width=913)

## 使用到的API列表

### 鉴权

**[方法 (API)](https://open.feishu.cn/document/ukTMukTMukTM/uITNz4iM1MjLyUzM)** | 权限要求 | **[访问凭证](https://open.feishu.cn/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM)（选择其一）**
---|---|---
[获取 tenant_access_token](https://open.feishu.cn/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/tenant_access_token_internal)<br>`GET` /open-apis/auth/v3/tenant_access_token/internal<br>> 通过此接口获取 tenant_access_token

### 审批

**[方法 (API)](https://open.feishu.cn/document/ukTMukTMukTM/uITNz4iM1MjLyUzM)** | 权限要求 | **[访问凭证](https://open.feishu.cn/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM)（选择其一）**
---|---|---
[创建审批实例](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/create)<br>`GET` /open-apis/approval/v4/instances<br>> 通过此接口创建一个审批实例，调用方需对审批定义的表单有详细了解，将按照定义的表单结构，将表单 Value 通过接口传入 | 查看、创建、更新、删除审批应用相关信息(approval:approval)<br>查看、创建、更新、删除原生审批实例相关信息(approval:approval:instance) | `tenant_access_token`
[获取单个审批实例详情](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/get)<br>`GET` /open-apis/approval/v4/instances/:instance_id<br>> 通过审批实例 Instance Code 获取审批实例详情 | 查看、创建、更新、删除审批应用相关信息(approval:approval)<br>访问审批应用(approval:approval:readonly)<br>查看、创建、更新、删除原生审批实例相关信息(approval:approval:instance) | `tenant_access_token`

### 日程

**[方法 (API)](https://open.feishu.cn/document/ukTMukTMukTM/uITNz4iM1MjLyUzM)** | 权限要求 | **[访问凭证](https://open.feishu.cn/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM)（选择其一）**
---|---|---
[创建请假日程](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/calendar-v4/timeoff_event/create)<br>`POST` /open-apis/calendar/v4/timeoff_events<br>> 为指定用户创建一个请假日程，可以是一个普通请假日程，也可以是一个全天日程 | 创建或删除请假日程(calendar:timeoff)<br>获取用户 user ID(contact:user.employee_id:readonly) | `tenant_access_token`<br>`user_access_token`
[查询主日历信息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/calendar-v4/calendar/primary)<br>`POST` /open-apis/calendar/v4/calendars/primary<br>> 获取当前身份的主日历信息 | 获取日历、日程及忙闲信息(calendar:calendar:readonly)<br>获取用户 user ID(contact:user.employee_id:readonly) | `tenant_access_token`<br>`user_access_token`
[创建日程](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/calendar-v4/calendar-event/create)<br>`POST` /open-apis/calendar/v4/calendars/:calendar_id/events<br>> 该接口用于以当前身份（应用 / 用户）在日历上创建一个日程 | 更新日历及日程信息(calendar:calendar) | `tenant_access_token`<br>`user_access_token`

### 消息

**[方法 (API)](https://open.feishu.cn/document/ukTMukTMukTM/uITNz4iM1MjLyUzM)** | 权限要求 | **[访问凭证](https://open.feishu.cn/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM)（选择其一）**
---|---|---
[发送消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create)<br>`POST` /open-apis/im/v1/messages<br>> 给指定用户或者会话发送消息，支持文本、富文本、可交互的消息卡片、群名片、个人名片、图片、视频、音频、文件、表情包 | 以应用的身份发消息(im:message:send_as_bot)<br>获取与发送单聊、群组消息(im:message)<br>发送消息V2(im:message:send) | `tenant_access_token`
[回复消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/reply)<br>`GET` /open-apis/im/v1/messages/:message_id/reply<br>> 回复指定消息，支持文本、富文本、卡片、群名片、个人名片、图片、视频、文件等多种消息类型 | 以应用的身份发消息(im:message:send_as_bot)<br>获取与发送单聊、群组消息(im:message)<br>发送消息V2(im:message:send) | `tenant_access_token`

### 事件

**[事件](https://open.feishu.cn/document/ukTMukTMukTM/uUTNz4SN1MjL1UzM)** | 权限要求
---|---
[接收消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/events/receive)<br>`im.message.receive_v1`<br>> 机器人接收到用户发送的消息后触发此事件。 | 接收群聊中@机器人消息事件(im:message.group_at_msg:readonly)<br>获取群组中所有消息（敏感权限）(im:message.group_msg)<br>读取用户发给机器人的单聊消息(im:message.p2p_msg:readonly)<br>获取用户发给机器人的单聊消息（历史版本）(im:message.p2p_msg)<br>获取用户在群组中@机器人的消息（历史版本）(im:message.group_at_msg)<br>获取群聊中所有的用户聊天消息(im:message.group_msg:readonly)

