# Ezjoin Meeting Skill

> EzyJoin 智慧会议操作技能 - 预约会议室、创建/取消会议、查询会议日程与 AI 纪要、企业知识库检索

- Skill: `ahang1598/ezjoin-meeting-skill` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ahang1598/ezjoin-meeting-skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ahang1598/ezjoin-meeting-skill/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: ahang1598 (https://skillmd.com/u/ahang1598)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/ahang1598/ezjoin-meeting-skill

---


# EzyJoin 智慧会议 Skill

本 Skill 提供 EzyJoin 智慧会议平台的完整操作能力。所有操作通过 MCP Server 暴露的工具完成，无需拼接 URL 或设置请求头。

## 认证说明

- 用户需先完成 OAuth 授权（WorkBuddy 自动引导，浏览器登录 EzyJoin 账号后点击"允许"）
- 授权后 WorkBuddy 自动携带 access_token，MCP Server 自动识别当前用户身份
- access_token 有效期 1 小时，过期后 WorkBuddy 自动用 refresh_token 续期（30 天），无需用户干预
- 若 refresh_token 也过期，提示用户重新授权即可
- **不要要求用户提供 userId**：当前用户身份已由授权自动确定，userId 参数由服务端自动注入

## 可用工具

### teamMembers - 查询团队成员

查询当前用户加入的所有团队及成员清单。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| teamId | integer | - | 团队ID，不传则返回所有团队 |

**使用示例**：
- 用户问"我有哪些团队/同事"时调用，无需参数
- 用户提到某团队名称时，先调用本工具拿到 teamId

### meetingList - 查询会议列表

查询团队成员（含自己）权限范围内参与的所有会议，含各种审核状态（审批中/已通过/无需审核/已驳回）。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| teamId | integer | - | 仅查指定团队的会议 |
| creatorUserId | integer | - | 仅查指定创建人的会议 |
| subject | string | - | 会议主题模糊搜索，最大100字符 |
| start_time | string | - | 开始时间 >= 该时间，格式 Y-m-d H:i:s |
| end_time | string | - | 开始时间 <= 该时间，格式 Y-m-d H:i:s（跨度最多30天） |
| page | integer | - | 页码，默认1 |
| pageSize | integer | - | 每页数量，默认20，最大100 |

**使用示例**：
- 用户问"我今天的会议"→ 传 start_time/end_time 为当天 00:00:00~23:59:59
- 用户问"本周/本月会议安排"→ 按时间范围过滤
- 返回的 auditStatus 可直接判断是否在审批中：1=无需审核、2=审批中、3=已通过、4=已驳回

### meetingDetail - 查询会议详情

查询指定会议的详细信息（主题、时间、会议室、参会人等）。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| meetingId | integer | ✅ | 会议ID |

**使用示例**：
- 用户问"XX会议的详情"→ 先用 meetingList 找到 meetingId，再调用本工具

### meetingTranscription - 查询会议转写

查询指定会议的转写内容（语音转文字记录）。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| meetingId | integer | ✅ | 会议ID |

### meetingMinutes - 查询会议 AI 纪要

查询指定会议的 AI 纪要内容。type=4 为全文纪要（默认），其他类型为分段纪要：1=会议议程、2=会议决议、3=会议任务。当前用户无纪要时自动回退到该会议最新一份纪要（管理员可查看成员纪要）。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| meetingId | integer | ✅ | 会议ID |
| type | integer | - | 纪要类型：4=全文纪要(默认), 1=议程, 2=决议, 3=任务 |

**使用示例**：
- 用户问"XX会议的纪要/会议记录"→ 先 meetingList 找 meetingId，再调用本工具（默认全文纪要）
- 用户问"会议有什么决议/任务"→ 传 type=2 或 type=3
- 会议尚无纪要时返回 content=null，应如实告知用户纪要尚未生成

### companyUsers - 搜索公司用户

搜索公司用户（扁平列表），支持按姓名/手机/邮箱/拼音模糊搜索。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| keyword | string | - | 搜索关键词，不传返回全部 |
| pageSize | integer | - | 每页数量，默认20，最大100 |

### inviteUserList - 查询可邀请参会人

查询可邀请为参会人的用户列表（按部门分组），用于创建会议前查找参会人。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| keyword | string | - | 搜索关键词（部门名或用户姓名/手机/邮箱） |

### buildingRoomTree - 查询楼宇/会议室树

查询当前公司下所有楼宇、区域、会议室的三级树结构。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| 无 | - | - | 直接调用即可 |

**使用示例**：
- 用户问"有哪些会议室"或预约前先查会议室 → 调用本工具，返回楼宇(building)→区域(area)→会议室(meetingRoom)结构，取 meetingRoom 的 id/value 作为 meetingRoomId

### meetingRoomAvailability - 查询会议室占用情况

查询指定时间段内会议室的占用情况（空闲/已占用及冲突会议），用于预约前判断可用性。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| startTime | string | ✅ | 开始时间，格式 Y-m-d H:i:s |
| endTime | string | ✅ | 结束时间，格式 Y-m-d H:i:s |
| meetingRoomId | integer | - | 会议室ID（可选，只查指定会议室） |
| buildingId | integer | - | 楼宇ID（可选，只查该楼宇下的会议室） |

**使用示例**：
- 预约前先调用本工具确认会议室空闲，若占用需如实告知用户并推荐其他可用会议室
- 用户说"帮我找明天下午空闲的会议室"→ 结合 buildingRoomTree + 本工具（不带 meetingRoomId）筛选

### meetingCreate - 创建会议

创建会议。type=1 线下日程（仅会议室），type=2 综合会议（会议室 + 线上视频会议）。支持周期会议（meetingType=1 + repeatType/repeatUntil）。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| type | integer | - | 1=线下(默认), 2=综合会议 |
| meetingType | integer | - | 0=单次(默认), 1=周期会议 |
| repeatType | integer | 周期时必填 | 0=每天, 1=每周, 2=每月, 7=每个工作日 |
| repeatUntil | string | 周期时必填 | 重复截止时间，格式 Y-m-d H:i:s，最多向后1年 |
| repeatInterval | integer | - | 重复间隔，仅每周生效，默认1 |
| meetingRoomId | integer | ✅ | 会议室ID（从 buildingRoomTree 获取） |
| startTime | string | ✅ | 开始时间，格式 Y-m-d H:i:s |
| endTime | string | ✅ | 结束时间，格式 Y-m-d H:i:s |
| platform | integer | type=2 时必填 | 1=企微, 4=飞书, 5=腾讯会议 |
| password | string | - | 入会密码（最大20字符） |
| subject | string | - | 会议主题，最大50字，默认"未命名会议" |
| content | string | - | 会议描述/预约原因，最大500字 |
| inviteUserIds | integer[] | - | 参会人 userId 数组 |

**时间规则**（不满足会创建失败）：
- startTime 必须晚于当前时间
- endTime 必须晚于 startTime
- 时长不少于 5 分钟

**使用示例**：
- "帮我预约明天下午 3 点到 4 点的会议室" → 先 buildingRoomTree 选会议室 → meetingRoomAvailability 确认空闲 → meetingCreate
- **创建后必须检查返回结果**：isError=true 或 code!=200 表示失败，必须如实把失败原因（msg）告知用户，禁止谎报"预约成功"

### meetingEdit - 更新会议

更新当前用户自己创建的未开始会议。只传需修改的字段，未传的保持不变。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| meetingId | integer | ✅ | 会议ID |
| subject | string | - | 新主题，最大50字 |
| content | string | - | 新描述，最大500字 |
| startTime | string | - | 新开始时间，格式 Y-m-d H:i:s |
| endTime | string | - | 新结束时间，格式 Y-m-d H:i:s |
| inviteUserIds | integer[] | - | 参会人 userId 数组（传此字段时替换全部参会人） |

**注意事项**：
- 只能修改自己创建的、未开始的会议
- 时间规则同创建会议
- 更新后必须检查返回结果，失败时如实告知用户原因

### meetingCancel - 取消会议

取消当前用户自己创建的未开始会议。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| meetingId | integer | ✅ | 会议ID |

**使用示例**：
- 用户说"取消 XX 会议" → 先用 meetingList 确认会议存在且可取消，再调用
- 调用后必须检查返回结果，失败时如实告知原因

### sendWeworkMessage - 发送企业微信消息

向公司成员发送企业微信消息。支持 text 文本和 textcard 卡片消息。收件人必须是当前用户同公司的有效用户。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| recipientUserIds | integer[] | ✅ | 收件人 userId 数组（至少1个，需为本公司用户） |
| msgType | string | ✅ | text=文本, textcard=卡片 |
| content | string | ✅ | 消息内容，最大2000字符 |
| title | string | textcard 时必填 | 卡片标题，最大100字符 |
| url | string | - | 卡片跳转链接，最大500字符 |

**使用示例**：
- 用户说"给张三发条企微消息说下午开会" → 先 companyUsers 找到张三 userId → 调用本工具
- 用户说"发个会议通知卡片给参会人" → msgType=textcard，title 填"会议通知"，url 填会议链接

### sendEmail - 发送邮件

向公司成员发送邮件（通过企业微信邮箱发送）。收件人可通过 userId 或邮箱地址指定，至少需要一种。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| recipientUserIds | integer[] | - | 收件人 userId 数组（与 recipientEmails 至少填一个） |
| recipientEmails | string[] | - | 收件人邮箱地址数组（与 recipientUserIds 至少填一个） |
| ccUserIds | integer[] | - | 抄送人 userId 数组 |
| ccEmails | string[] | - | 抄送邮箱地址数组 |
| subject | string | ✅ | 邮件主题，最大200字符 |
| content | string | ✅ | 邮件正文，最大10000字符 |
| contentType | string | - | html 或 text（默认 text） |

**使用示例**：
- 用户说"给团队发封邮件" → 先 companyUsers/teamMembers 找到收件人 → 调用本工具
- 收件人指定：recipientUserIds 与 recipientEmails 至少填一种，否则工具会报错

### scheduledTaskCreate - 创建 AI 定时任务

创建一个 AI 助手定时任务，按指定频率自动执行提示词。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| title | string | ✅ | 任务标题，≤100字 |
| prompt | string | ✅ | 提示词，执行时发送给 AI 助手 |
| frequency | integer | ✅ | 1=每天 2=按间隔 3=单次 |
| executeTime | string | frequency=1 必填 | HH:MM |
| intervalHours | integer | frequency=2 必填 | 间隔小时数(1-24)，从每天0点起算 |
| weekdays | integer[] | - | 执行日 1-7（1=周一 7=周天），不传=每天 |
| executeDate | string | frequency=3 必填 | Y-m-d H:i:s |
| validStartDate | string | - | 生效开始日期 Y-m-d |
| validEndDate | string | - | 生效结束日期 Y-m-d |

### scheduledTaskList - 查询 AI 定时任务

列出当前用户的 AI 助手定时任务。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| frequency | integer | - | 按频率筛选：1=每天 2=按间隔 3=单次 |

### scheduledTaskUpdate - 修改 AI 定时任务

修改当前用户的 AI 助手定时任务（仅传需修改的字段）。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| taskId | integer | ✅ | 任务ID |
| title | string | - | 新标题 |
| prompt | string | - | 新提示词 |
| frequency | integer | - | 1=每天 2=按间隔 3=单次 |
| executeTime | string | - | HH:MM |
| intervalHours | integer | - | 间隔小时数 |
| weekdays | integer[] | - | 执行日 1-7 |
| executeDate | string | - | Y-m-d H:i:s |
| validStartDate | string | - | Y-m-d |
| validEndDate | string | - | Y-m-d |

### scheduledTaskDelete - 删除 AI 定时任务

删除当前用户的 AI 助手定时任务。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| taskId | integer | ✅ | 任务ID |

### scheduledTaskPause - 暂停 AI 定时任务

暂停当前用户的 AI 助手定时任务，暂停后到点不再执行。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| taskId | integer | ✅ | 任务ID |

### scheduledTaskResume - 恢复 AI 定时任务

恢复当前用户已暂停的 AI 助手定时任务。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| taskId | integer | ✅ | 任务ID |

### knowledgeSearch - 搜索企业知识库

搜索企业知识库，返回文档标题和摘要。企业知识库文档（公司制度、流程规范、业务资料）始终包含在结果中。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| teamIds | integer[] | - | 团队ID数组，查这些团队下所有成员上传的文档 |
| meetingIds | integer[] | - | 会议ID数组，查这些会议的附件文档 |

**使用场景**：
- 用户询问公司制度、流程规范、业务资料、会议文档时使用
- 查询维度优先级：meetingIds > teamIds > 默认（只查当前用户自己的文档）

### knowledgeGet - 读取知识库文档全文

读取知识库中指定文档的原文全文。先调用 knowledgeSearch 拿到 docId 后再调用本工具。

**参数说明**：
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| docId | integer | ✅ | 文档ID（从 knowledgeSearch 返回结果获取） |

## 通用注意事项

- **会议操作流程**：预约会议前先查会议室（buildingRoomTree）→ 查占用（meetingRoomAvailability）→ 创建（meetingCreate）；取消/改期先查列表（meetingList）确认 meetingId
- **如实反馈结果**：任何工具返回 isError=true 或 code!=200 时，必须把 msg 原样转达用户，禁止谎报成功
- **会议状态**：auditStatus=2 表示审批中，需等待审批通过；1=无需审核、3=已通过、4=已驳回
- **时间格式**：统一使用 Y-m-d H:i:s（如 2026-08-08 15:00:00）
- **权限边界**：只能操作当前用户自己创建或参与的会议；无权限时工具会返回明确错误
- **多租户**：每个用户只看到自己所属公司的数据，天然隔离
- **遇到 401/Token 过期**：提示用户重新授权，不要尝试绕过

