Skip to main content
Glama

Feishu MCP Server

attendance_v1.ts97.1 kB
import { z } from 'zod'; export type attendanceV1ToolName = | 'attendance.v1.approvalInfo.process' | 'attendance.v1.archiveRule.delReport' | 'attendance.v1.archiveRule.list' | 'attendance.v1.archiveRule.uploadReport' | 'attendance.v1.archiveRule.userStatsFieldsQuery' | 'attendance.v1.group.create' | 'attendance.v1.group.delete' | 'attendance.v1.group.get' | 'attendance.v1.group.list' | 'attendance.v1.group.listUser' | 'attendance.v1.group.search' | 'attendance.v1.leaveAccrualRecord.patch' | 'attendance.v1.leaveEmployExpireRecord.get' | 'attendance.v1.shift.create' | 'attendance.v1.shift.delete' | 'attendance.v1.shift.get' | 'attendance.v1.shift.list' | 'attendance.v1.shift.query' | 'attendance.v1.userApproval.create' | 'attendance.v1.userApproval.query' | 'attendance.v1.userDailyShift.batchCreate' | 'attendance.v1.userDailyShift.batchCreateTemp' | 'attendance.v1.userDailyShift.query' | 'attendance.v1.userFlow.batchCreate' | 'attendance.v1.userFlow.batchDel' | 'attendance.v1.userFlow.get' | 'attendance.v1.userFlow.query' | 'attendance.v1.userSetting.modify' | 'attendance.v1.userSetting.query' | 'attendance.v1.userStatsData.query' | 'attendance.v1.userStatsField.query' | 'attendance.v1.userStatsView.query' | 'attendance.v1.userStatsView.update' | 'attendance.v1.userTaskRemedy.create' | 'attendance.v1.userTaskRemedy.query' | 'attendance.v1.userTaskRemedy.queryUserAllowedRemedys' | 'attendance.v1.userTask.query'; export const attendanceV1ApprovalInfoProcess = { project: 'attendance', name: 'attendance.v1.approvalInfo.process', sdkName: 'attendance.v1.approvalInfo.process', path: '/open-apis/attendance/v1/approval_infos/process', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-假勤审批-通知审批状态更新-对于只使用飞书考勤系统而未使用飞书审批系统的企业,可以通过该接口更新写入飞书考勤系统中的三方系统审批状态,例如请假、加班、外出、出差、补卡等审批,状态包括通过、不通过、撤销等', accessTokens: ['tenant'], schema: { data: z.object({ approval_id: z .string() .describe( '审批实例 ID,获取方式:1) 2) 3)', ), approval_type: z .string() .describe('审批类型- `leave`:请假- `out`:外出- `overtime`:加班- `trip`:出差- `remedy`:补卡'), status: z .number() .describe( '审批状态- `1`:不通过- `2`:通过- `4`:撤销**注意**- **请假、外出、加班、出差**只支持传**撤销**- **补卡**支持传**不通过、通过和撤销**', ), }), }, }; export const attendanceV1ArchiveRuleDelReport = { project: 'attendance', name: 'attendance.v1.archiveRule.delReport', sdkName: 'attendance.v1.archiveRule.delReport', path: '/open-apis/attendance/v1/archive_rule/del_report', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-归档报表-删除归档报表行数据-按月份、用户和归档规则ID直接删除归档报表行数据', accessTokens: ['tenant', 'user'], schema: { data: z.object({ month: z.string().describe('月份,格式yyyyMM'), operator_id: z.string().describe('操作者ID,对应employee_type'), archive_rule_id: z .string() .describe( '归档规则id,可根据获得', ), user_ids: z.array(z.string()).describe('用户id,对应employee_type').optional(), }), params: z.object({ employee_type: z .string() .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用* `employee_id `:员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID* `employee_no`:员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号', ), }), useUAT: z.boolean().describe('使用用户身份请求, 否则使用应用身份').optional(), }, }; export const attendanceV1ArchiveRuleList = { project: 'attendance', name: 'attendance.v1.archiveRule.list', sdkName: 'attendance.v1.archiveRule.list', path: '/open-apis/attendance/v1/archive_rule', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-归档报表-查询所有归档规则-查询所有归档规则,对应后台假勤管理-考勤统计-报表-功能', accessTokens: ['tenant', 'user'], schema: { params: z.object({ page_size: z.number().describe('分页大小,必填参数').optional(), page_token: z .string() .describe( '分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果', ) .optional(), }), useUAT: z.boolean().describe('使用用户身份请求, 否则使用应用身份').optional(), }, }; export const attendanceV1ArchiveRuleUploadReport = { project: 'attendance', name: 'attendance.v1.archiveRule.uploadReport', sdkName: 'attendance.v1.archiveRule.uploadReport', path: '/open-apis/attendance/v1/archive_rule/upload_report', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-归档报表-写入归档报表结果-写入归档报表结果,对应假勤管理-考勤统计-报表-页签,点击报表名称进入后的导入功能。可以将数据直接写入归档报表', accessTokens: ['tenant', 'user'], schema: { data: z.object({ month: z.string().describe('月份,格式为yyyyMM'), operator_id: z.string().describe('操作者ID,对应employee_type'), archive_report_datas: z .array( z.object({ member_id: z.string().describe('用户ID,对应employee_type'), start_time: z.string().describe('考勤开始时间,格式为yyyyMMdd'), end_time: z.string().describe('考勤结束时间,格式为yyyyMMdd'), field_datas: z .array( z.object({ code: z .string() .describe( '字段编码,可根据 获取', ), value: z.string().describe('字段结果值').optional(), }), ) .describe('字段结果(不超过200个)') .optional(), }), ) .describe('归档报表内容(不超过50个)') .optional(), archive_rule_id: z .string() .describe( '归档规则id,可根据获得', ), }), params: z.object({ employee_type: z .string() .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用* `employee_id `:员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID* `employee_no`:员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号', ), }), useUAT: z.boolean().describe('使用用户身份请求, 否则使用应用身份').optional(), }, }; export const attendanceV1ArchiveRuleUserStatsFieldsQuery = { project: 'attendance', name: 'attendance.v1.archiveRule.userStatsFieldsQuery', sdkName: 'attendance.v1.archiveRule.userStatsFieldsQuery', path: '/open-apis/attendance/v1/archive_rule/user_stats_fields_query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-归档报表-查询归档报表表头-查询归档报表表头,对应后台假勤管理-考勤统计-报表-中一个归档报表的表头信息。归档报表支持引用系统报表,可设置归档时间和数据归档周期,并且支持根据部门/人员、国家/地区、人员类型、工作地点、职级、序列、职务进行人员圈选', accessTokens: ['tenant', 'user'], schema: { data: z.object({ locale: z.string().describe('语言类型。默认为zh。可选值有:* `en`:英语* `ja`:日语* `zh`:中文').optional(), month: z.string().describe('月份,日期格式为yyyyMM'), archive_rule_id: z .string() .describe( '归档规则id,可根据获得', ), operator_id: z.string().describe('操作者id,对应employee_type'), }), params: z.object({ employee_type: z .string() .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用* `employee_id `:员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID* `employee_no`:员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号', ), }), useUAT: z.boolean().describe('使用用户身份请求, 否则使用应用身份').optional(), }, }; export const attendanceV1GroupCreate = { project: 'attendance', name: 'attendance.v1.group.create', sdkName: 'attendance.v1.group.create', path: '/open-apis/attendance/v1/groups', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤组管理-创建或修改考勤组-考勤组,是对部门或者员工在某个特定场所及特定时间段内的出勤情况(包括上下班、迟到、早退、病假、婚假、丧假、公休、工作时间、加班情况等)的一种规则设定。通过设置考勤组,可以从部门、员工两个维度,来设定考勤方式、考勤时间、考勤地点等考勤规则。对应功能同设置-假勤设置-的“新建”功能', accessTokens: ['tenant'], schema: { data: z.object({ group: z .object({ group_id: z .string() .describe( '考勤组 ID(仅修改时提供), 需要从或接口中获取 groupId。如果不填的话,会创建新的考勤组', ) .optional(), group_name: z.string().describe('考勤组名称'), time_zone: z.string().describe('时区'), bind_dept_ids: z .array(z.string().describe('参加考勤的部门id列表')) .describe('绑定的部门 ID(与「need_punch_members」同时使用时,以当前字段为准)。对应dept_type') .optional(), except_dept_ids: z .array(z.string().describe('无需考勤的部门id列表')) .describe('排除的部门 ID(该字段已下线)') .optional(), bind_user_ids: z .array(z.string().describe('参加考勤的人员id列表')) .describe('绑定的用户 ID(与「need_punch_members」同时使用时,以当前字段为准),对应employee_type') .optional(), except_user_ids: z .array(z.string().describe('参加考勤的人员id列表')) .describe('排除的用户 ID(该字段已下线)') .optional(), group_leader_ids: z .array(z.string().describe('考勤组主负责人id列表')) .describe('考勤主负责人 ID 列表,必选字段(需至少拥有考勤组管理员权限),对应employee_type'), sub_group_leader_ids: z .array(z.string().describe('考勤组子负责人id列表')) .describe('考勤子负责人 ID 列表,对应employee_type') .optional(), allow_out_punch: z.boolean().describe('是否允许外勤打卡,默认为空').optional(), out_punch_need_approval: z .boolean() .describe('外勤打卡需审批(需要允许外勤打卡才能设置生效),默认为空') .optional(), out_punch_need_remark: z .boolean() .describe('外勤打卡需填写备注(需要允许外勤打卡才能设置生效),默认为空') .optional(), out_punch_need_photo: z .boolean() .describe('外勤打卡需拍照(需要允许外勤打卡才能设置生效),默认为空') .optional(), out_punch_allowed_hide_addr: z .boolean() .describe('外勤打卡允许员工隐藏详细地址(需要允许外勤打卡才能设置生效),默认为空') .optional(), allow_pc_punch: z.boolean().describe('是否允许 PC 端打卡,默认为空').optional(), allow_remedy: z.boolean().describe('是否限制补卡,默认为空').optional(), remedy_limit: z.boolean().describe('是否限制补卡次数,默认为空').optional(), remedy_limit_count: z.number().describe('补卡次数,默认为空').optional(), remedy_date_limit: z.boolean().describe('是否限制补卡时间,默认为空').optional(), remedy_date_num: z.number().describe('补卡时间,几天内补卡,默认为空').optional(), allow_remedy_type_lack: z.boolean().describe('允许缺卡补卡(需要允许补卡才能设置生效),默认为空').optional(), allow_remedy_type_late: z.boolean().describe('允许迟到补卡(需要允许补卡才能设置生效),默认为空').optional(), allow_remedy_type_early: z .boolean() .describe('允许早退补卡(需要允许补卡才能设置生效),默认为空') .optional(), allow_remedy_type_normal: z .boolean() .describe('允许正常补卡(需要允许补卡才能设置生效),默认为空') .optional(), show_cumulative_time: z.boolean().describe('是否展示累计时长,默认为空').optional(), show_over_time: z.boolean().describe('是否展示加班时长,默认为空').optional(), hide_staff_punch_time: z.boolean().describe('是否隐藏员工打卡详情,默认为空').optional(), face_punch: z.boolean().describe('是否开启人脸识别打卡,默认为空').optional(), face_punch_cfg: z .number() .describe( '人脸识别打卡规则,默认为空**可选值有:*** 1:每次打卡均需人脸识别* 2:疑似作弊打卡时需要人脸识别', ) .optional(), face_live_need_action: z .boolean() .describe( '人脸打卡规则,默认为空**可选值有:*** false:表示开启活体验证 * true:表示动作验证,仅在 face_punch_cfg = 1 时有效', ) .optional(), face_downgrade: z.boolean().describe('人脸识别失败时是否允许普通拍照打卡,默认为空').optional(), replace_basic_pic: z.boolean().describe('人脸识别失败时是否允许替换基准图片,默认为空').optional(), machines: z .array( z.object({ machine_sn: z.string().describe('考勤机序列号'), machine_name: z.string().describe('考勤机名称'), }), ) .describe('考勤机列表') .optional(), gps_range: z.number().describe('GPS 打卡的有效范围(历史无效字段)').optional(), locations: z .array( z.object({ location_name: z.string().describe('地址名称'), location_type: z.number().describe('地址类型**可选值有:*** 1:GPS* 2:Wi-Fi* 8:IP'), latitude: z.number().describe('地址纬度').optional(), longitude: z.number().describe('地址经度').optional(), ssid: z.string().describe('Wi-Fi 名称').optional(), bssid: z.string().describe('Wi-Fi 的 MAC 地址').optional(), map_type: z.number().describe('地图类型,1:高德, 2:谷歌').optional(), address: z.string().describe('地址名称').optional(), ip: z.string().describe('IP 地址').optional(), feature: z.string().describe('额外信息,例如:运营商信息').optional(), gps_range: z.number().describe('GPS 打卡的有效范围(历史无效字段)').optional(), }), ) .describe('地址列表(仅追加,不会覆盖之前的列表)') .optional(), group_type: z.number().describe('考勤类型**可选值有:*** 1:固定班制* 2:排班制* 3:自由班制'), punch_day_shift_ids: z .array(z.string()) .describe( '班次 ID 列表。当考勤类型参数(group_type)设置为固定班制时,必须填够 7 个(从周一至周日)。当考勤类型参数(group_type)设置为排班制或自由班制时,请传入空数组。班次 ID 可以通过 和 获取。休息日填0', ), free_punch_cfg: z .object({ free_start_time: z .string() .describe('自由班制打卡开始时间,格式为x点x分,注意这里小时如果小于10点,是不需要补零的'), free_end_time: z .string() .describe('自由班制打卡结束时间,格式为x点x分,注意这里小时如果小于10点,是不需要补零的'), punch_day: z.number().describe('打卡的时间,为 7 位数字,每一位依次代表周一到周日,0 为不上班,1 为上班'), work_day_no_punch_as_lack: z.boolean().describe('工作日不打卡是否记为缺卡,默认为空').optional(), work_hours_demand: z.boolean().describe('工作日出勤是否需满足时长要求,默认为空').optional(), work_hours: z.number().describe('每日工作时长(分钟),范围[0,1440]').optional(), }) .describe('配置自由班制') .optional(), calendar_id: z .number() .describe( '国家日历 ID**可选值有:*** 0:不根据国家日历排休* 1:中国大陆* 2:美国* 3:日本* 4:印度* 5:新加坡', ), need_punch_special_days: z .array( z.object({ punch_day: z.number().describe('打卡日期,格式为yyyyMMdd'), shift_id: z .string() .describe( '班次 ID,可根据 和 获得', ), }), ) .describe('必须打卡的特殊日期') .optional(), no_need_punch_special_days: z .array( z.object({ punch_day: z.number().describe('打卡日期,格式为yyyyMMdd'), shift_id: z .string() .describe( '班次 ID,可根据 和 获得', ), }), ) .describe('无需打卡的特殊日期') .optional(), work_day_no_punch_as_lack: z.boolean().describe('自由班制下工作日不打卡是否记为缺卡,默认为空').optional(), effect_now: z.boolean().describe('是否立即生效,默认 false').optional(), remedy_period_type: z.number().describe('补卡周期类型* 1:按月* 2:自定义').optional(), remedy_period_custom_date: z.number().describe('补卡自定义周期起始日期,范围0-28号').optional(), punch_type: z .number() .describe( '打卡类型。位运算,即如需设置 1 和 2 两种打卡类型,则需要传入加和值 3。**可选值**:* 1:GPS 打卡* 2:Wi-Fi 打卡* 4:考勤机打卡* 8:IP 打卡', ) .optional(), rest_clockIn_need_approval: z .boolean() .describe( '休息日打卡需审批。当设置 `rest_clockIn_need_approval=true` 时,休息日一天开始时间会被重置为 4:00。默认为空', ) .optional(), clockIn_need_photo: z.boolean().describe('每次打卡均需拍照,默认为空').optional(), member_status_change: z .object({ onboarding_on_no_need_punch: z.boolean().describe('是否入职日上班无需打卡,默认为空').optional(), onboarding_off_no_need_punch: z.boolean().describe('是否入职日下班无需打卡,默认为空').optional(), offboarding_on_no_need_punch: z.boolean().describe('是否离职日上班无需打卡,默认为空').optional(), offboarding_off_no_need_punch: z.boolean().describe('是否离职日下班无需打卡,默认为空').optional(), }) .describe('人员异动打卡设置') .optional(), leave_need_punch: z.boolean().describe('请假离岗或返岗是否需打卡,默认为空').optional(), leave_need_punch_cfg: z .object({ late_minutes_as_late: z.number().describe('晚到超过多久记为迟到').optional(), late_minutes_as_lack: z.number().describe('晚到超过多久记为缺卡').optional(), early_minutes_as_early: z.number().describe('早走超过多久记为早退').optional(), early_minutes_as_lack: z.number().describe('早走超过多久记为缺卡').optional(), }) .describe('请假离岗或返岗打卡规则,单位:分钟') .optional(), go_out_need_punch: z.number().describe('外出期间是否需打卡,默认为空').optional(), go_out_need_punch_cfg: z .object({ late_minutes_as_late: z.number().describe('晚到超过多久记为迟到').optional(), late_minutes_as_lack: z.number().describe('晚到超过多久记为缺卡').optional(), early_minutes_as_early: z.number().describe('早走超过多久记为早退').optional(), early_minutes_as_lack: z.number().describe('早走超过多久记为缺卡').optional(), }) .describe('外出期间打卡规则,单位:分钟') .optional(), travel_need_punch: z.number().describe('出差期间是否需打卡,默认为空').optional(), travel_need_punch_cfg: z .object({ late_minutes_as_late: z.number().describe('晚到超过多久记为迟到').optional(), late_minutes_as_lack: z.number().describe('晚到超过多久记为缺卡').optional(), early_minutes_as_early: z.number().describe('早走超过多久记为早退').optional(), early_minutes_as_lack: z.number().describe('早走超过多久记为缺卡').optional(), }) .describe('出差期间打卡规则,单位:分钟') .optional(), need_punch_members: z .array( z.object({ rule_scope_type: z.number().describe('圈人方式:* `0`:无 * `1`:全部 * `2`:自定义').optional(), scope_group_list: z .object({ scope_value_type: z .number() .describe( '**类型**:* 1: 部门* 2:人员* 3: 国家地区* 4: 员工类型* 5: 工作城市* 6: 职级* 7: 序列* 8: 职务(企业版)* 9: 工时制度(企业版)* 100: 自定义字段(企业版)', ) .optional(), operation_type: z .number() .describe( '范围类型(是否包含)* 1: 包含* 2: 不包含* 3: 相等* 4: 小于等于* 5: 大于等于* 6: 大于* 7: 小于* 8: 不相等', ) .optional(), right: z .array( z.object({ key: z.string().describe('标识Key').optional(), name: z.string().describe('名称').optional(), }), ) .describe('如果是人员/部门类型 不需要使用该字段') .optional(), member_ids: z .array(z.string()) .describe('部门/人员 ID 列表(根据 scope_value_type 判断为部门或人员)') .optional(), custom_field_ID: z .string() .describe('企业版自定义字段唯一键 ID, 需要从飞书人事获取(暂不支持)') .optional(), custom_field_obj_type: z .string() .describe( '企业版自定义字段对象类型(暂不支持)* "Employment": 主数据对象,员工雇佣信息 * "Person": 主数据对象,个人', ) .optional(), }) .describe('圈人规则列表') .optional(), }), ) .describe('需要打卡的人员集合(仅当不传「bind_dept_ids」和「bind_user_ids」时,才会使用该字段)') .optional(), no_need_punch_members: z .array( z.object({ rule_scope_type: z.number().describe('圈人方式:* `0`:无 * `1`:全部 * `2`:自定义').optional(), scope_group_list: z .object({ scope_value_type: z .number() .describe( '**类型**:* 1: 部门* 2:人员* 3: 国家地区* 4: 员工类型* 5: 工作城市* 6: 职级* 7: 序列* 8: 职务(企业版)* 9: 工时制度(企业版)* 100: 自定义字段(企业版)', ) .optional(), operation_type: z .number() .describe( '范围类型(是否包含)* 1: 包含* 2: 不包含* 3: 相等* 4: 小于等于* 5: 大于等于* 6: 大于* 7: 小于* 8: 不相等', ) .optional(), right: z .array( z.object({ key: z.string().describe('标识Key').optional(), name: z.string().describe('名称').optional(), }), ) .describe('如果是人员/部门类型 不需要使用该字段') .optional(), member_ids: z .array(z.string()) .describe('部门/人员 ID 列表(根据 scope_value_type 判断为部门或人员)') .optional(), custom_field_ID: z .string() .describe('企业版自定义字段唯一键 ID, 需要从飞书人事获取(暂不支持)') .optional(), custom_field_obj_type: z .string() .describe( '企业版自定义字段对象类型(暂不支持)* "Employment": 主数据对象,员工雇佣信息 * "Person": 主数据对象,个人', ) .optional(), }) .describe('圈人规则列表') .optional(), }), ) .describe( '无需打卡的人员集合(仅当不传「bind_default_dept_ids」和「bind_default_user_ids」时,才会使用该字段)', ) .optional(), save_auto_changes: z .boolean() .describe( '是否允许保存有冲突人员的考勤组。如果 true,则冲突人员将被自动拉入到当前设置的考勤组中,并从原考勤组中移除;如果 false,则需手动调整冲突人员。默认为 false', ) .optional(), org_change_auto_adjust: z .boolean() .describe('当有新员工入职或人员异动,符合条件的人员是否自动加入考勤组。默认为空') .optional(), bind_default_dept_ids: z .array(z.string().describe('默认出勤的部门id列表')) .describe( '参与无需打卡的部门 ID 列表(与「no_need_punch_members」同时使用时,以当前字段为准),对应dept_type', ) .optional(), bind_default_user_ids: z .array(z.string().describe('默认出勤的用户ID列表')) .describe( '参与无需打卡的人员 ID 列表(与「no_need_punch_members」同时使用时,以当前字段为准),对应employee_type', ) .optional(), }) .describe('考勤组信息'), operator_id: z .string() .describe( '操作人uid,对应employee_type,如果您未操作,则此字段为必填字段', ) .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), dept_type: z .literal('open_id') .describe( '部门 ID 的类型 Options:open_id(暂时只支持部门的 openid。具体概念请参考中的open_department_id)', ), }), }, }; export const attendanceV1GroupDelete = { project: 'attendance', name: 'attendance.v1.group.delete', sdkName: 'attendance.v1.group.delete', path: '/open-apis/attendance/v1/groups/:group_id', httpMethod: 'DELETE', description: '[Feishu/Lark]-考勤打卡-考勤组管理-删除考勤组-通过考勤组 ID 删除考勤组。对应设置-假勤设置-操作列的删除功能', accessTokens: ['tenant'], schema: { path: z.object({ group_id: z .string() .describe( '考勤组 ID,获取方式:1) 2) 3)', ), }), }, }; export const attendanceV1GroupGet = { project: 'attendance', name: 'attendance.v1.group.get', sdkName: 'attendance.v1.group.get', path: '/open-apis/attendance/v1/groups/:group_id', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-考勤组管理-按 ID 查询考勤组-通过考勤组 ID 获取考勤组详情。包含基本信息、考勤班次、考勤方式、考勤设置信息', accessTokens: ['tenant'], schema: { params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体和响应体中的 user_id 和 creator_id 的员工id类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), dept_type: z .literal('open_id') .describe( '部门 ID 的类型 Options:open_id(暂时只支持部门的 openid。具体概念请参考中的open_department_id)', ), }), path: z.object({ group_id: z .string() .describe( '考勤组 ID,获取方式:1) 2) 3)', ), }), }, }; export const attendanceV1GroupList = { project: 'attendance', name: 'attendance.v1.group.list', sdkName: 'attendance.v1.group.list', path: '/open-apis/attendance/v1/groups', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-考勤组管理-查询所有考勤组-翻页获取所有考勤组列表。列表中的数据为考勤组信息,字段包含考勤组名称和考勤组id', accessTokens: ['tenant'], schema: { params: z.object({ page_size: z.number().describe('分页大小').optional(), page_token: z .string() .describe( '分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果', ) .optional(), }), }, }; export const attendanceV1GroupListUser = { project: 'attendance', name: 'attendance.v1.group.listUser', sdkName: 'attendance.v1.group.listUser', path: '/open-apis/attendance/v1/groups/:group_id/list_user', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-考勤组管理-查询考勤组下所有成员-查询指定考勤组下的所有成员', accessTokens: ['tenant', 'user'], schema: { params: z.object({ employee_type: z .string() .describe( '响应体中 user_id 的员工 ID 类型。如果没有后台管理权限,可使用<b>可选值有</b>:1. employee_id:员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID2. employee_no:员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号', ), dept_type: z .string() .describe( '响应体中 department_ids 的部门 ID 的类型<b>可选值有</b>:1. open_id:暂时只支持部门的 openid。具体概念请参考中的open_department_id', ), page_size: z.number().describe('分页大小').optional(), page_token: z .string() .describe( '分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果', ) .optional(), member_clock_type: z .number() .describe( '查询的考勤组成员的打卡类型<b>可选值有</b>:<ul><li>0:全部打卡类型</li><li>1:需要打卡类型</li><li>2:无需打卡类型</li></ul>', ), }), path: z.object({ group_id: z .string() .describe( '考勤组 ID,获取方式:1) 2) 3)', ), }), useUAT: z.boolean().describe('使用用户身份请求, 否则使用应用身份').optional(), }, }; export const attendanceV1GroupSearch = { project: 'attendance', name: 'attendance.v1.group.search', sdkName: 'attendance.v1.group.search', path: '/open-apis/attendance/v1/groups/search', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤组管理-按名称查询考勤组-按考勤组名称查询考勤组摘要信息。查询条件支持名称精确匹配和模糊匹配两种方式。查询结果按考勤组修改时间 desc 排序,且最大记录数为 10 条。对应页面设置-假勤设置-的名称搜索功能', accessTokens: ['tenant'], schema: { data: z.object({ group_name: z.string().describe('考勤组名称') }), }, }; export const attendanceV1LeaveAccrualRecordPatch = { project: 'attendance', name: 'attendance.v1.leaveAccrualRecord.patch', sdkName: 'attendance.v1.leaveAccrualRecord.patch', path: '/open-apis/attendance/v1/leave_accrual_record/:leave_id', httpMethod: 'PATCH', description: '[Feishu/Lark]-考勤打卡-休假发放记录-修改发放记录-更新发放记录的发放数量和失效日期,对应假勤管理-休假管理-', accessTokens: ['tenant'], schema: { data: z.object({ leave_granting_record_id: z .string() .describe( '发放记录的唯一ID,可通过', ), employment_id: z.string().describe('员工ID,类型对应user_id_type'), leave_type_id: z .string() .describe( '假期类型ID,可通过获取', ), reason: z .array(z.object({ lang: z.string().describe('语言码'), value: z.string().describe('语言码对应的文本') })) .describe('修改发放记录原因'), time_offset: z.number().describe('时间偏移,东八区:480 8*60').optional(), expiration_date: z.string().describe('失效日期,格式"2020-01-01"').optional(), quantity: z.string().describe('修改发放数量').optional(), }), params: z.object({ user_id_type: z.enum(['open_id', 'union_id', 'user_id', 'people_corehr_id']).describe('用户ID类型').optional(), }), path: z.object({ leave_id: z .string() .describe( '假期类型ID,可通过获取', ) .optional(), }), }, }; export const attendanceV1LeaveEmployExpireRecordGet = { project: 'attendance', name: 'attendance.v1.leaveEmployExpireRecord.get', sdkName: 'attendance.v1.leaveEmployExpireRecord.get', path: '/open-apis/attendance/v1/leave_employ_expire_records/:leave_id', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-休假获取过期发放记录-通过过期时间获取发放记录-只能获取到对应时间段过期的发放记录', accessTokens: ['tenant'], schema: { data: z.object({ employment_id: z.string().describe('员工ID,与user_id_type保持一致'), leave_type_id: z .string() .describe( '假期类型ID,可通过获取', ), start_expiration_date: z.string().describe('失效最早日期,格式为yyyy-MM-dd'), end_expiration_date: z.string().describe('失效最晚日期,格式为yyyy-MM-dd'), time_offset: z.number().describe('时间偏移,东八区:480 8*60, 如果没有这个参数,默认东八区').optional(), }), params: z.object({ user_id_type: z.enum(['open_id', 'union_id', 'user_id', 'people_corehr_id']).describe('用户ID类型').optional(), }), path: z.object({ leave_id: z .string() .describe( '假期类型ID,可通过获取', ) .optional(), }), }, }; export const attendanceV1ShiftCreate = { project: 'attendance', name: 'attendance.v1.shift.create', sdkName: 'attendance.v1.shift.create', path: '/open-apis/attendance/v1/shifts', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤班次-创建班次-班次是描述一次考勤任务时间规则的统称,比如一天打多少次卡,每次卡的上下班时间,晚到多长时间算迟到,晚到多长时间算缺卡等。在假勤设置-中点击班次名称可以进行班次详情查看。如果入参中传入了班次id,那么支持编辑班次的能力', accessTokens: ['tenant'], schema: { data: z.object({ shift_name: z.string().describe('班次名称,不可重复'), punch_times: z.number().describe('打卡次数(历史字段,已无用,以punch_time_rule为准)'), sub_shift_leader_ids: z .array(z.string().describe('排班组子负责人id列表')) .describe('班次负责人,与employee_type类型对应') .optional(), is_flexible: z.boolean().describe('是否弹性打卡,默认为false,不开启').optional(), flexible_minutes: z .number() .describe( '弹性打卡时间,单位:分钟,设置【上班最多可晚到】与【下班最多可早走】时间。仅当未设置 flexible_rule 参数时,该参数生效。如果设置了 flexible_rule 参数,则该参数不生效', ) .optional(), flexible_rule: z .array( z.object({ flexible_early_minutes: z .number() .describe('下班最多可早走,单位:分钟(上班早到几分钟,下班可早走几分钟)'), flexible_late_minutes: z .number() .describe('上班最多可晚到,单位:分钟(上班晚到几分钟,下班须晚走几分钟)'), }), ) .describe('弹性打卡时间设置') .optional(), no_need_off: z.boolean().describe('true为不需要打下班卡。默认为false,需要下班打卡').optional(), punch_time_rule: z .array( z.object({ on_time: z.string().describe('上班时间'), off_time: z .string() .describe( '下班时间。如果下班时间跨天,则需要在 24 小时的基础上累加时间。例如,第二天凌晨 2 点取值为 26:00', ), late_minutes_as_late: z.number().describe('晚到多久记为迟到。单位:分钟'), late_minutes_as_lack: z.number().describe('晚到多久记为缺卡。单位:分钟'), on_advance_minutes: z.number().describe('最早多久可打上班卡。最大值为 720。单位:分钟'), early_minutes_as_early: z.number().describe('早退多久记为早退。单位:分钟'), early_minutes_as_lack: z.number().describe('早退多久记为缺卡。单位:分钟'), off_delay_minutes: z.number().describe('最晚多久可打下班卡。最大值为 960。单位:分钟'), late_minutes_as_serious_late: z.number().describe('晚到多久记为严重迟到。单位:分钟').optional(), no_need_on: z .boolean() .describe('true为不需要打上班卡,这里需要特别注意,第一段打卡规则须为false。后续可按需配置') .optional(), no_need_off: z .boolean() .describe('true为不需要打下班卡。默认为false,需要下班打卡(优先级高于data.shift.no_need_off)') .optional(), }), ) .describe('打卡规则'), late_off_late_on_rule: z .array( z.object({ late_off_minutes: z.number().describe('晚走多久。单位:分钟'), late_on_minutes: z.number().describe('晚到多久。单位:分钟'), }), ) .describe('晚走晚到规则(仅飞书人事企业版可用)') .optional(), rest_time_rule: z .array( z.object({ rest_begin_time: z.string().describe('休息开始'), rest_end_time: z.string().describe('休息结束'), }), ) .describe('休息规则') .optional(), overtime_rule: z .array( z.object({ on_overtime: z.string().describe('开始时间'), off_overtime: z.string().describe('结束时间') }), ) .describe('加班时段(仅飞书人事企业版可用)') .optional(), day_type: z .number() .describe('日期类型,【是否弹性打卡 = ture】时,不可设置为“休息日” 可选值:1:工作日 2:休息日。默认值:1') .optional(), overtime_rest_time_rule: z .array( z.object({ rest_begin_time: z.string().describe('休息开始'), rest_end_time: z.string().describe('休息结束'), }), ) .describe('班外休息规则') .optional(), late_minutes_as_serious_late: z .number() .describe( '晚到多久记为严重迟到。单位:分钟(优先级高于data.shift.punch_time_rule.late_minutes_as_serious_late)', ) .optional(), shift_middle_time_rule: z .object({ middle_time_type: z .number() .describe( '半天分割类型 Options:0(DefaultWithRest 按全天班次时长(含休息)的中点分割),1(DefaultWithoutRest 按全天班次时长(不含休息)的中点分割),2(BaseInRest 按休息时间分割),3(BaseInFixed 按固定时间点分割)', ) .optional(), fixed_middle_time: z.string().describe('固定分割时间点(middle_time_type 为 3 时有效)').optional(), }) .describe('半天分割规则(仅飞书人事企业版可用)') .optional(), shift_attendance_time_config: z .object({ attendance_time: z.number().describe('应出勤时长').optional(), on_attendance_time: z.number().describe('上半天应出勤时长').optional(), off_attendance_time: z.number().describe('下半天应出勤时长').optional(), }) .describe('应出勤配置(灰度中,暂未开放)') .optional(), late_off_late_on_setting: z .object({ late_off_base_on_time_type: z .number() .describe('当日晚走时间计算规则 Options:0(FlexibleType 弹性规则),1(FixedType 固定规则)') .optional(), late_on_base_on_time_type: z .number() .describe('次日晚到时间计算规则 Options:0(FixedType 固定规则),1(FlexibleType 弹性规则)') .optional(), }) .describe('晚走次日晚到配置规则') .optional(), id: z .string() .describe( '班次id(更新班次时需要传递),获取方式:1) 2)', ) .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID,或者获取的userid。),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ) .optional(), }), }, }; export const attendanceV1ShiftDelete = { project: 'attendance', name: 'attendance.v1.shift.delete', sdkName: 'attendance.v1.shift.delete', path: '/open-apis/attendance/v1/shifts/:shift_id', httpMethod: 'DELETE', description: '[Feishu/Lark]-考勤打卡-考勤班次-删除班次-通过班次 ID 删除班次。对应功能为假勤设置-班次列表中操作栏的删除按钮', accessTokens: ['tenant'], schema: { path: z.object({ shift_id: z .string() .describe( '班次 ID,获取方式:1) 2)', ), }), }, }; export const attendanceV1ShiftGet = { project: 'attendance', name: 'attendance.v1.shift.get', sdkName: 'attendance.v1.shift.get', path: '/open-apis/attendance/v1/shifts/:shift_id', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-考勤班次-按 ID 查询班次-通过班次 ID 获取班次详情。对应功能为假勤设置-班次列表中的具体班次,班次信息可以点击班次名称查看', accessTokens: ['tenant'], schema: { path: z.object({ shift_id: z .string() .describe( '班次 ID,获取方式:1) 2)', ), }), }, }; export const attendanceV1ShiftList = { project: 'attendance', name: 'attendance.v1.shift.list', sdkName: 'attendance.v1.shift.list', path: '/open-apis/attendance/v1/shifts', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-考勤班次-查询所有班次-飞书人事管理后台中假勤设置-中的翻页查询所有班次功能,展示班次名称、打卡规则、弹性班次规则、休息规则等', accessTokens: ['tenant'], schema: { params: z.object({ page_size: z.number().describe('分页大小').optional(), page_token: z .string() .describe( '分页标记,第一次请求不填,表示从头开始遍历;分页查询结果还有更多项时会同时返回新的 page_token,下次遍历可采用该 page_token 获取查询结果', ) .optional(), }), }, }; export const attendanceV1ShiftQuery = { project: 'attendance', name: 'attendance.v1.shift.query', sdkName: 'attendance.v1.shift.query', path: '/open-apis/attendance/v1/shifts/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤班次-按名称查询班次-飞书人事管理后台中假勤设置-中的搜索班次名称功能,展示班次名称、打卡规则、弹性班次规则、休息规则等', accessTokens: ['tenant'], schema: { params: z.object({ shift_name: z.string().describe('班次名称,支持模糊匹配') }), }, }; export const attendanceV1UserApprovalCreate = { project: 'attendance', name: 'attendance.v1.userApproval.create', sdkName: 'attendance.v1.userApproval.create', path: '/open-apis/attendance/v1/user_approvals', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-假勤审批-写入审批结果-由于部分企业使用的是自己的审批系统,而不是飞书审批系统,因此员工的请假、加班等数据无法流入到飞书考勤系统中,导致员工在请假时间段内依然收到打卡提醒,并且被记为缺卡。对于这些只使用飞书考勤系统,而未使用飞书审批系统的企业,可以通过考勤开放接口的形式,将三方审批结果数据回写到飞书考勤系统中', accessTokens: ['tenant'], schema: { data: z.object({ user_approval: z .object({ user_id: z.string().describe('审批提交人 ID。传入的ID类型需要与employee_type的取值一致'), date: z.string().describe('审批作用日期,格式为yyyyMMdd'), outs: z .array( z.object({ uniq_id: z .string() .describe( '外出类型唯一 ID,代表一种外出类型,长度小于 14* 如何获取?可以选择填入三方的外出类型id。如市内外出、市外外出的id', ), unit: z .number() .describe('外出时长单位 Options:1(Day 天),2(Hour 小时),3(HalfDay 半天),4(HalfHour 半小时)'), interval: z.number().describe('关联审批单外出时长,单位为秒,与unit无关'), start_time: z.string().describe('开始时间,时间格式为 yyyy-MM-dd HH:mm:ss'), end_time: z.string().describe('结束时间,时间格式为 yyyy-MM-dd HH:mm:ss'), i18n_names: z .object({ ch: z.string().describe('中文描述').optional(), en: z.string().describe('英语描述').optional(), ja: z.string().describe('日语描述').optional(), }) .describe( '外出多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语', ), default_locale: z .string() .describe( '默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称', ), reason: z.string().describe('外出理由'), idempotent_id: z .string() .describe('外出记录的唯一幂等键,用于避免外出记录重复创建,可以填入三方的外出记录id') .optional(), correct_process_id: z .array(z.string()) .describe('更正流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), cancel_process_id: z .array(z.string()) .describe('撤销流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), process_id: z .array(z.string()) .describe('发起流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), }), ) .describe('外出信息') .optional(), leaves: z .array( z.object({ uniq_id: z.string().describe('审批实例id').optional(), unit: z .number() .describe('假期时长单位 Options:1(Day 天),2(Hour 小时),3(HalfDay 半天),4(HalfHour 半小时)'), interval: z.number().describe('关联审批单假期时长,单位为秒,与unit无关'), start_time: z.string().describe('开始时间,时间格式为 yyyy-MM-dd HH:mm:ss'), end_time: z.string().describe('结束时间,时间格式为 yyyy-MM-dd HH:mm:ss'), i18n_names: z .object({ ch: z.string().describe('中文描述').optional(), en: z.string().describe('英语描述').optional(), ja: z.string().describe('日语描述').optional(), }) .describe( '假期多语言展示,格式为 map,key 为 ["ch"、"en"、"ja"],其中 ch 代表中文、en 代表英语、ja 代表日语', ), default_locale: z .enum(['ch', 'en', 'ja']) .describe( '默认语言类型,由于飞书客户端支持中、英、日三种语言,当用户切换语言时,如果假期名称没有所对应的语言,会使用默认语言的名称 Options:ch(中文),en(英文),ja(日文)', ), reason: z.string().describe('请假理由,必选字段'), idempotent_id: z .string() .describe('请假记录的唯一幂等键,用于避免请假记录重复创建,可以填入三方的请假记录id') .optional(), }), ) .describe('请假信息') .optional(), overtime_works: z .array( z.object({ duration: z .number() .describe( '加班时长,如需使用此字段进行加班时长计算,请联系开通。默认采用start_time和end_time计算', ), unit: z .number() .describe('加班时长单位 Options:1(Day 天),2(Hour 小时),3(HalfDay 半天),4(HalfHour 半小时)'), category: z .number() .describe('加班日期类型 Options:1(Workday 工作日),2(Weekend 休息日),3(Holiday 节假日)'), type: z .number() .describe( '加班规则类型 Options:0(None 仅记录),1(DaysOff 调休),2(Fee 加班费),3(Bind 【该可选值已废弃】)', ), start_time: z.string().describe('开始时间,时间格式为 yyyy-MM-dd HH:mm:ss'), end_time: z.string().describe('结束时间,时间格式为 yyyy-MM-dd HH:mm:ss'), reason: z.string().describe('加班事由').optional(), idempotent_id: z .string() .describe('加班记录的唯一幂等键,用于避免加班记录重复创建,可以填入三方的加班记录id') .optional(), correct_process_id: z .array(z.string()) .describe('更正流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), cancel_process_id: z .array(z.string()) .describe('撤销流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), process_id: z .array(z.string()) .describe('发起流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), }), ) .describe('加班信息') .optional(), trips: z .array( z.object({ start_time: z.string().describe('开始时间,时间格式为 yyyy-MM-dd HH:mm:ss'), end_time: z.string().describe('结束时间,时间格式为 yyyy-MM-dd HH:mm:ss'), reason: z.string().describe('出差理由'), approve_pass_time: z.string().describe('审批通过时间,时间格式为 yyyy-MM-dd HH:mm:ss'), approve_apply_time: z.string().describe('审批申请时间,时间格式为 yyyy-MM-dd HH:mm:ss'), idempotent_id: z .string() .describe('出差记录的唯一幂等键,用于避免出差记录重复创建,可以填入三方的出差记录id') .optional(), correct_process_id: z .array(z.string()) .describe('更正流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), cancel_process_id: z .array(z.string()) .describe('撤销流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), process_id: z .array(z.string()) .describe('发起流程实例 ID。该字段由系统自动生成,在写入审批结果时,无需传入该参数') .optional(), departure: z .object({ region_level: z .string() .describe('地理等级(国家|省|市|区)l1:国家级;l2:省级;l3:市级l4:区/县级') .optional(), region_id: z .string() .describe( '地理id可以通过或获取(仅支持飞书人事企业版使用)', ) .optional(), }) .describe('出发地(只有一个)') .optional(), destinations: z .array( z.object({ region_level: z .string() .describe('地理等级(国家|省|市|区)l1:国家级;l2:省级;l3:市级l4:区/县级') .optional(), region_id: z .string() .describe( '地理id可以通过或获取(仅支持飞书人事企业版使用)', ) .optional(), }), ) .describe('目的地(可写多个)') .optional(), transportation: z .array(z.number()) .describe('交通工具(1 飞机,2 火车,3 汽车,4 高铁/动车,5 船,6 其他)') .optional(), trip_type: z.number().describe('出差类型(1:单程 2:往返)').optional(), remarks: z.string().describe('出差备注').optional(), }), ) .describe( '出差信息。目前仅支持全天出差(未满全天则按全天计入)。如果你需要支持半天出差,请咨询', ) .optional(), time_zone: z.string().describe('此字段不再使用,以用户匹配的考勤组时区为准').optional(), }) .describe('审批信息') .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no', 'open_id']) .describe( '请求体和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号),open_id(用户在某个应用中的身份,可以参考)', ), }), }, }; export const attendanceV1UserApprovalQuery = { project: 'attendance', name: 'attendance.v1.userApproval.query', sdkName: 'attendance.v1.userApproval.query', path: '/open-apis/attendance/v1/user_approvals/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-假勤审批-获取审批数据-获取员工在某段时间内的请假、加班、外出和出差四种审批数据', accessTokens: ['tenant'], schema: { data: z.object({ user_ids: z .array(z.string()) .describe('employee_no 或 employee_id 列表。传入的ID类型需要与employee_type的取值一致'), check_date_from: z .number() .describe( '查询的起始日期。格式yyyyMMdd**注意**:传入的日期不能超过当天 +1 天,例如当天 20241010,则传入 20241011 支持查询,但传入 20241012 会报错', ), check_date_to: z.number().describe('查询的结束日期,与 check_date_from 的时间间隔不超过 30 天。格式yyyyMMdd'), check_date_type: z .enum(['PeriodTime', 'CreateTime', 'UpdateTime']) .describe( '查询依据的时间类型(不填默认依据PeriodTime) Options:PeriodTime(单据作用时间),CreateTime(单据创建时间),UpdateTime(单据状态更新时间(灰度中,暂不开放))', ) .optional(), status: z .number() .describe( '查询状态(不填默认查询已通过状态)请假、加班:仅支持已通过和已撤回状态外出、出差:支持查询所有状态 Options:0(Todo 待审批),1(Rejected 未通过),2(Approved 已通过),3(Canceled 已取消),4(Reverted 已撤回)', ) .optional(), check_time_from: z.string().describe('查询的起始时间,精确到秒的时间戳(灰度中,暂不开放)').optional(), check_time_to: z.string().describe('查询的结束时间,精确到秒的时间戳(灰度中,暂不开放)').optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserDailyShiftBatchCreate = { project: 'attendance', name: 'attendance.v1.userDailyShift.batchCreate', sdkName: 'attendance.v1.userDailyShift.batchCreate', path: '/open-apis/attendance/v1/user_daily_shifts/batch_create', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤排班-创建或修改排班表-排班表是用来描述考勤组内人员每天按哪个班次进行上班。目前排班表支持按x月y日对一位或多位人员进行排班。当用户的排班数据不存在时会进行创建,当用户的排班数据存在时会按照入参信息进行修改。注意:每人每天只能在一个考勤组中', accessTokens: ['tenant'], schema: { data: z.object({ user_daily_shifts: z .array( z.object({ group_id: z .string() .describe( '考勤组 ID,获取方式:1) 2) 3)', ), shift_id: z .string() .describe( '班次 ID,获取方式:1) 2)。传入0代表休息', ), month: z.number().describe('月份,格式yyyyMM'), user_id: z.string().describe('用户 ID,与employee_type对应'), day_no: z.number().describe('日期'), is_clear_schedule: z .boolean() .describe('是否清空班次 (此字段优先于 shift_id,若为true ,shift_id 将失效)') .optional(), }), ) .describe('排班表信息列表(数量限制50以内)'), operator_id: z .string() .describe( '操作人uid,与employee_type对应。如果您未操作,则此字段为必填字段', ) .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID,或者获取的userid。),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserDailyShiftBatchCreateTemp = { project: 'attendance', name: 'attendance.v1.userDailyShift.batchCreateTemp', sdkName: 'attendance.v1.userDailyShift.batchCreateTemp', path: '/open-apis/attendance/v1/user_daily_shifts/batch_create_temp', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤排班-创建或修改临时排班-可在排班表上创建或修改临时班次,并用于排班。目前支持按日期对一位或多位人员进行排临时班次。临时排班为付费功能,如需使用请联系您的客户经理', accessTokens: ['tenant', 'user'], schema: { data: z.object({ user_tmp_daily_shifts: z .array( z.object({ group_id: z .string() .describe( '考勤组 ID,获取方式:1) 2) 3)', ), user_id: z.string().describe('用户 ID,与employee_type对应'), date: z.number().describe('日期,格式:yyyymmdd,如20240120'), shift_name: z.string().describe('班次名称'), punch_time_simple_rules: z .array( z.object({ on_time: z.string().describe('上班时间,格式HH:MM'), off_time: z.string().describe('下班时间,格式HH:MM。如需表示次日2点,则填入"26:00"'), }), ) .describe('打卡规则'), }), ) .describe('临时班表信息列表(数量限制50以内)'), operator_id: z.string().describe('操作人uid,与employee_type对应').optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(EmployeeID 员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID,或者获取的userid。),employee_no(EmployeeNo 员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), useUAT: z.boolean().describe('使用用户身份请求, 否则使用应用身份').optional(), }, }; export const attendanceV1UserDailyShiftQuery = { project: 'attendance', name: 'attendance.v1.userDailyShift.query', sdkName: 'attendance.v1.userDailyShift.query', path: '/open-apis/attendance/v1/user_daily_shifts/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤排班-查询排班表-支持查询多个用户的排班情况,注意此接口返回的是用户维度的排班结果,与页面功能并不对应。可以通过返回结果中的group_id查询考勤组 ,shift_id查询班次 。查询的时间跨度不能超过 30 天', accessTokens: ['tenant'], schema: { data: z.object({ user_ids: z.array(z.string()).describe('employee_no 或 employee_id 列表,与employee_type对应。最多50人'), check_date_from: z.number().describe('查询的起始工作日,格式为yyyyMMdd'), check_date_to: z.number().describe('查询的结束工作日,格式为yyyyMMdd'), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID,或者获取的userid。),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserFlowBatchCreate = { project: 'attendance', name: 'attendance.v1.userFlow.batchCreate', sdkName: 'attendance.v1.userFlow.batchCreate', path: '/open-apis/attendance/v1/user_flows/batch_create', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-打卡信息管理-导入打卡流水-导入员工的打卡流水记录。导入后,会根据员工所在的考勤组班次规则,计算最终的打卡状态与结果。可在打卡管理-中查询', accessTokens: ['tenant'], schema: { data: z.object({ flow_records: z .array( z.object({ user_id: z.string().describe('用户 ID。与employee_type对应'), creator_id: z.string().describe('记录创建者 ID。与employee_type对应'), location_name: z.string().describe('打卡位置名称信息'), check_time: z.string().describe('打卡时间,精确到秒的时间戳(只支持导入打卡时间在2022年1月1日之后的数据)'), comment: z.string().describe('打卡备注'), record_id: z.string().describe('打卡记录 ID,导入时此参数无效').optional(), ssid: z.string().describe('打卡 Wi-Fi 的 SSID').optional(), bssid: z.string().describe('打卡 Wi-Fi 的 MAC 地址').optional(), is_field: z.boolean().describe('是否为外勤打卡。默认为false,非外勤打卡').optional(), is_wifi: z.boolean().describe('是否为 Wi-Fi 打卡。默认为false,非Wi-Fi打卡').optional(), type: z .number() .describe( '记录的生成方式。举例:type=0表示「开放平台导入」的「用户打卡」流水;type=1表示「开放平台导入」的「管理员修改」流水。若不设置type,则默认是0。 Options:0(Self 用户打卡),1(ManagerModification 管理员修改),2(Remedy 用户补卡),3(System 系统自动生成),4(Free 下班免打卡),5(Machine 考勤机),6(Quick 极速打卡),7(import 考勤开放平台导入)', ) .optional(), photo_urls: z.array(z.string()).describe('打卡照片列表(该字段目前不支持)').optional(), device_id: z.string().describe('打卡设备ID,(只支持小程序打卡,导入时无效)').optional(), check_result: z .enum([ 'NoNeedCheck', 'SystemCheck', 'Normal', 'Early', 'Late', 'SeriousLate', 'Lack', 'Invalid', 'None', 'Todo', ]) .describe( '打卡结果,作为入参时无效 Options:NoNeedCheck(无需打卡),SystemCheck(系统打卡),Normal(正常),Early(早退),Late(迟到),SeriousLate(严重迟到),Lack(缺卡),Invalid(无效),None(无状态),Todo(尚未打卡)', ) .optional(), external_id: z .string() .describe('用户导入的外部打卡记录ID,用于和外部数据对比,如果不传,在查询的时候不方便区分') .optional(), idempotent_id: z.string().describe('唯一幂等键,不传的话无法实现幂等处理').optional(), }), ) .describe('打卡流水记录列表(数量限制50)'), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体和响应体中的 user_id 和 creator_id 的员工id类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID,或者获取的userid。),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserFlowBatchDel = { project: 'attendance', name: 'attendance.v1.userFlow.batchDel', sdkName: 'attendance.v1.userFlow.batchDel', path: '/open-apis/attendance/v1/user_flows/batch_del', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-打卡信息管理-删除打卡流水-删除员工从开放平台导入的打卡记录。删除后会重新计算打卡记录对应考勤任务结果', accessTokens: ['tenant'], schema: { data: z.object({ record_ids: z .array(z.string().describe('待删除的流水记录ID')) .describe( '打卡流水记录 ID,获取方式:1) 2) 3)', ), }), }, }; export const attendanceV1UserFlowGet = { project: 'attendance', name: 'attendance.v1.userFlow.get', sdkName: 'attendance.v1.userFlow.get', path: '/open-apis/attendance/v1/user_flows/:user_flow_id', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-打卡信息管理-查询打卡流水-通过打卡记录 ID 获取用户的打卡流水记录。返回信息主要包含:* 用户id和创建者id* 记录信息* 打卡位置信息、时间信息* 打卡方式信息 * GPS 打卡:location_name(定位地址信息) * Wi-Fi 打卡:ssid(wifi名称)、bssid(mac地址) * 考勤机打卡:device_id(考勤机设备id)对应页面功能打卡管理-', accessTokens: ['tenant'], schema: { params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '响应体中的 user_id 和 creator_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), path: z.object({ user_flow_id: z .string() .describe( '打卡流水记录 ID,获取方式:1) 2) 3)', ), }), }, }; export const attendanceV1UserFlowQuery = { project: 'attendance', name: 'attendance.v1.userFlow.query', sdkName: 'attendance.v1.userFlow.query', path: '/open-apis/attendance/v1/user_flows/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-打卡信息管理-批量查询打卡流水-通过用户 ID 获取用户的打卡流水记录。返回信息主要包含:* 用户id和创建者id* 记录信息* 打卡位置信息、时间信息* 打卡方式信息 * GPS 打卡:location_name(定位地址信息) * Wi-Fi 打卡:ssid(wifi名称)、bssid(mac地址) * 考勤机打卡:device_id(考勤机设备id)对应页面功能打卡管理-', accessTokens: ['tenant'], schema: { data: z.object({ user_ids: z.array(z.string()).describe('employee_no 或 employee_id 列表,长度不超过 50'), check_time_from: z.string().describe('查询的起始时间,秒级时间戳'), check_time_to: z.string().describe('查询的结束时间,秒级时间戳'), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), include_terminated_user: z .boolean() .describe( '由于新入职用户可以复用已离职用户的employee_no/employee_id。如果true,返回employee_no/employee_id对应的所有在职+离职用户数据;如果false,只返回employee_no/employee_id对应的在职或最近一个离职用户数据', ) .optional(), }), }, }; export const attendanceV1UserSettingModify = { project: 'attendance', name: 'attendance.v1.userSetting.modify', sdkName: 'attendance.v1.userSetting.modify', path: '/open-apis/attendance/v1/user_settings/modify', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤用户管理-修改用户人脸识别信息-修改授权内员工的用户设置信息,包括人脸照片文件 ID。修改用户人脸识别信息目前只支持 API 方式修改,管理后台已无法修改', accessTokens: ['tenant'], schema: { data: z.object({ user_setting: z .object({ user_id: z.string().describe('用户 ID,对应employee_type'), face_key: z .string() .describe( '人脸照片文件 ID,获取方式:', ), face_key_update_time: z.string().describe('人脸照片更新时间,精确到秒的时间戳').optional(), }) .describe('用户设置') .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserSettingQuery = { project: 'attendance', name: 'attendance.v1.userSetting.query', sdkName: 'attendance.v1.userSetting.query', path: '/open-apis/attendance/v1/user_settings/query', httpMethod: 'GET', description: '[Feishu/Lark]-考勤打卡-考勤用户管理-批量查询用户人脸识别信息-批量查询授权内员工的用户设置信息,包括人脸照片文件 ID、人脸照片更新时间。对应页面假勤设置-。根据返回的face_key可以下载人脸信息', accessTokens: ['tenant'], schema: { data: z.object({ user_ids: z.array(z.string()).describe('employee_no 或 employee_id 列表,对应employee_type') }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(EmployeeId 员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(EmployeeNo 员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserStatsDataQuery = { project: 'attendance', name: 'attendance.v1.userStatsData.query', sdkName: 'attendance.v1.userStatsData.query', path: '/open-apis/attendance/v1/user_stats_datas/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤统计-查询统计数据-查询日度统计或月度统计的统计数据。字段包含基本信息、考勤组信息、出勤统计、异常统计、请假统计、加班统计、打卡时间、考勤结果和自定义字段。具体报表可在考勤统计-中找到', accessTokens: ['tenant'], schema: { data: z.object({ locale: z.enum(['en', 'ja', 'zh']).describe('语言类型 Options:en(英语),ja(日语),zh(中文)'), stats_type: z.enum(['daily', 'month']).describe('统计类型 Options:daily(日度统计),month(月度统计)'), start_date: z.number().describe('开始时间,格式yyyyMMdd'), end_date: z.number().describe('结束时间,格式yyyyMMdd(时间间隔不超过 31 天)'), user_ids: z .array(z.string()) .describe( '查询的用户 ID 列表,与employee_type对应(用户数量不超过 200)* 必填字段(已全部升级到新系统,新系统要求必填)', ) .optional(), need_history: z.boolean().describe('是否包含离职人员和转出人员,默认为false不包含').optional(), current_group_only: z .boolean() .describe('* `true`:只展示员工当前所属考勤组数据* `false`:展示员工所有考勤组数据默认值:false') .optional(), user_id: z .string() .describe( '操作者的 user_id。与employee_type对应* 不同的操作者(管理员)的每个报表可能有不同的字段设置,系统将根据 user_id 查询指定报表的统计数据。* 必填字段(已全部升级到新系统,新系统要求该字段必填)', ) .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserStatsFieldQuery = { project: 'attendance', name: 'attendance.v1.userStatsField.query', sdkName: 'attendance.v1.userStatsField.query', path: '/open-apis/attendance/v1/user_stats_fields/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤统计-查询统计表头-查询考勤统计支持的日度统计或月度统计的统计表头。报表的表头信息可以在考勤统计-中查询到具体的报表信息,此接口专门用于查询表头数据', accessTokens: ['tenant'], schema: { data: z.object({ locale: z.enum(['en', 'ja', 'zh']).describe('语言类型 Options:en(英语),ja(日语),zh(中文)'), stats_type: z.enum(['daily', 'month']).describe('统计类型 Options:daily(日度统计),month(月度统计)'), start_date: z.number().describe('开始时间,格式为yyyyMMdd(无效字段)'), end_date: z.number().describe('结束时间,格式为yyyyMMdd(时间间隔不超过 40 天)(无效字段)'), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserStatsViewQuery = { project: 'attendance', name: 'attendance.v1.userStatsView.query', sdkName: 'attendance.v1.userStatsView.query', path: '/open-apis/attendance/v1/user_stats_views/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤统计-查询统计设置-查询考勤统计支持的日度统计或月度统计的统计表头。报表的表头信息可以在考勤统计-中查询到具体的报表信息,此接口专门用于查询表头数据。注意此接口和基本相同,区别点在于在兼容历史统计视图模型(历史统计数据模型可以按用户ID设置,后续统计升级为仅支持租户维度)', accessTokens: ['tenant'], schema: { data: z.object({ locale: z.enum(['en', 'ja', 'zh']).describe('语言类型 Options:en(英语),ja(日语),zh(中文)'), stats_type: z.enum(['daily', 'month']).describe('统计类型 Options:daily(日度统计),month(月度统计)'), user_id: z .string() .describe('操作者的用户id,对应employee_type* 必填字段(系统升级后,新系统要求必填)') .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserStatsViewUpdate = { project: 'attendance', name: 'attendance.v1.userStatsView.update', sdkName: 'attendance.v1.userStatsView.update', path: '/open-apis/attendance/v1/user_stats_views/:user_stats_view_id', httpMethod: 'PUT', description: '[Feishu/Lark]-考勤打卡-考勤统计-更新统计设置-更新开发者定制的日度统计或月度统计的统计报表表头设置信息。报表的表头信息可以在考勤统计-中查询到具体的报表信息,此接口专门用于更新表头信息', accessTokens: ['tenant'], schema: { data: z.object({ view: z .object({ view_id: z .string() .describe( '视图 ID,可通过获取', ), stats_type: z.enum(['daily', 'month']).describe('视图类型 Options:daily(日度统计),month(月度统计)'), user_id: z.string().describe('操作者的用户id,对应employee_type'), items: z .array( z.object({ code: z.string().describe('标题编号'), child_items: z .array( z.object({ code: z.string().describe('子标题编号'), value: z.string().describe('开关字段,0:关闭,1:开启'), }), ) .describe('子标题') .optional(), }), ) .describe('用户设置字段') .optional(), }) .describe('统计设置'), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), path: z.object({ user_stats_view_id: z .string() .describe( '用户视图 ID,获取方式:1)', ), }), }, }; export const attendanceV1UserTaskRemedyCreate = { project: 'attendance', name: 'attendance.v1.userTaskRemedy.create', sdkName: 'attendance.v1.userTaskRemedy.create', path: '/open-apis/attendance/v1/user_task_remedys', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤补卡-通知补卡审批发起-对于只使用飞书考勤系统而未使用飞书审批系统的企业,可以通过该接口,将在三方审批系统中发起的补卡审批数据,写入到飞书考勤系统中,状态为审批中。写入后可以由 进行状态更新', accessTokens: ['tenant'], schema: { data: z.object({ user_id: z.string().describe('用户 ID,对应employee_type'), remedy_date: z.number().describe('补卡日期,日期格式yyyyMMdd'), punch_no: z.number().describe('第几次上下班,0:第 1 次上下班,1:第 2 次上下班,2:第 3 次上下班,自由班制填 0'), work_type: z.number().describe('上班 / 下班,1:上班,2:下班,自由班制填 0'), remedy_time: z.string().describe('补卡时间,时间格式为 yyyy-MM-dd HH:mm'), reason: z.string().describe('补卡原因'), time: z.string().describe('字段已失效').optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserTaskRemedyQuery = { project: 'attendance', name: 'attendance.v1.userTaskRemedy.query', sdkName: 'attendance.v1.userTaskRemedy.query', path: '/open-apis/attendance/v1/user_task_remedys/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤补卡-获取补卡记录-补卡:用户通过审批的方式,在某一次上/下班的打卡时间范围内,补充一条打卡记录,用以修正用户的考勤结果。本接口专用于获取员工的补卡记录(无页面功能对应)', accessTokens: ['tenant'], schema: { data: z.object({ user_ids: z .array(z.string()) .describe('employee_no 或 employee_id 列表。传入的ID类型需要与employee_type的取值一致。最多支持50个'), check_time_from: z.string().describe('查询的起始时间,精确到秒的时间戳'), check_time_to: z.string().describe('查询的结束时间,精确到秒的时间戳'), check_date_type: z .enum(['PeriodTime', 'CreateTime', 'UpdateTime']) .describe( '查询依据的时间类型(默认依据PeriodTime,如果使用非默认的,非特定租户不支持) Options:PeriodTime(单据作用时间),CreateTime(单据创建时间(目前暂不支持)),UpdateTime(单据状态更新时间(灰度中,暂不开放))', ) .optional(), status: z .number() .describe( '查询状态(不填默认查询已通过状态) Options:0(Pending 待审批),1(Rejected 未通过),2(Pass 已通过),3(Cancel 已取消),4(Withdraw 已撤回)', ) .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '请求体中的 user_ids 和响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserTaskRemedyQueryUserAllowedRemedys = { project: 'attendance', name: 'attendance.v1.userTaskRemedy.queryUserAllowedRemedys', sdkName: 'attendance.v1.userTaskRemedy.queryUserAllowedRemedys', path: '/open-apis/attendance/v1/user_task_remedys/query_user_allowed_remedys', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-考勤补卡-获取可补卡时间-获取用户某天可以补的第几次上 / 下班卡的时间', accessTokens: ['tenant'], schema: { data: z.object({ user_id: z.string().describe('用户 ID,对应employee_type'), remedy_date: z.number().describe('补卡日期,格式为yyyyMMdd'), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '响应体中的 user_id 的员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), }), }, }; export const attendanceV1UserTaskQuery = { project: 'attendance', name: 'attendance.v1.userTask.query', sdkName: 'attendance.v1.userTask.query', path: '/open-apis/attendance/v1/user_tasks/query', httpMethod: 'POST', description: '[Feishu/Lark]-考勤打卡-打卡信息管理-查询打卡结果-获取企业内员工的实际打卡结果,包括:* 打卡任务列表 * 打卡记录id * 用户信息 * 考勤组id * 班次id * 考勤记录 * 上班记录 * 下班记录 * 上班打卡结果 * 下班打卡结果 * 上班打卡结果补充 * 下班打卡结果补充 * 上班打卡时间 * 下班打卡时间* 无效用户id列表* 没有权限用户ID列表', accessTokens: ['tenant'], schema: { data: z.object({ user_ids: z.array(z.string()).describe('employee_no 或 employee_id 列表,对应employee_type,长度不超过 50'), check_date_from: z.number().describe('查询的起始工作日,格式为yyyyMMdd'), check_date_to: z.number().describe('查询的结束工作日,格式为yyyyMMdd'), need_overtime_result: z .boolean() .describe( '是否需要加班班段打卡结果;当need_overtime_result=true时,会返回加班班段,加班班段通过task_shift_type=1标识,加班班段上下班与正常班段相连时会出现共用record_id情况。例如:9-18为正常班次,18-19为加班班次,打卡结果中records 会出现两段,分别为9-18,18-19 且两段上下班record_id相同(check_in_record_id和check_out_record_id相同)。非相连加班班次正常分段返回。当need_overtime_result=false时,仅返回正常班段且task_shift_type=0', ) .optional(), }), params: z.object({ employee_type: z .enum(['employee_id', 'employee_no']) .describe( '员工ID类型。如果没有后台管理权限,可使用 Options:employee_id(员工 employee ID,即 > 组织架构 > 成员与部门 > 成员详情中的用户 ID),employee_no(员工工号,即 > 组织架构 > 成员与部门 > 成员详情中的工号)', ), ignore_invalid_users: z .boolean() .describe( '是否忽略无效和没有权限的用户,对应employee_type。如果 true,则返回有效用户的信息,并告知无效和没有权限的用户信息;如果 false,且 user_ids 中存在无效或没有权限的用户,则返回错误', ) .optional(), include_terminated_user: z .boolean() .describe( '由于新入职员工可以复用已离职员工的 employee_no/employee_id,对应employee_type。如果 true,则返回 employee_no/employee_id 对应的所有在职 + 离职员工的数据;如果 false,则只返回 employee_no/employee_id 对应的在职或最近一个离职员工的数据', ) .optional(), }), }, }; export const attendanceV1Tools = [ attendanceV1ApprovalInfoProcess, attendanceV1ArchiveRuleDelReport, attendanceV1ArchiveRuleList, attendanceV1ArchiveRuleUploadReport, attendanceV1ArchiveRuleUserStatsFieldsQuery, attendanceV1GroupCreate, attendanceV1GroupDelete, attendanceV1GroupGet, attendanceV1GroupList, attendanceV1GroupListUser, attendanceV1GroupSearch, attendanceV1LeaveAccrualRecordPatch, attendanceV1LeaveEmployExpireRecordGet, attendanceV1ShiftCreate, attendanceV1ShiftDelete, attendanceV1ShiftGet, attendanceV1ShiftList, attendanceV1ShiftQuery, attendanceV1UserApprovalCreate, attendanceV1UserApprovalQuery, attendanceV1UserDailyShiftBatchCreate, attendanceV1UserDailyShiftBatchCreateTemp, attendanceV1UserDailyShiftQuery, attendanceV1UserFlowBatchCreate, attendanceV1UserFlowBatchDel, attendanceV1UserFlowGet, attendanceV1UserFlowQuery, attendanceV1UserSettingModify, attendanceV1UserSettingQuery, attendanceV1UserStatsDataQuery, attendanceV1UserStatsFieldQuery, attendanceV1UserStatsViewQuery, attendanceV1UserStatsViewUpdate, attendanceV1UserTaskRemedyCreate, attendanceV1UserTaskRemedyQuery, attendanceV1UserTaskRemedyQueryUserAllowedRemedys, attendanceV1UserTaskQuery, ];

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Xumingmingming/feishu-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server