{"id":"a034ded6-61cf-42a1-8da8-9169432d02be","entityType":"agent","slug":"clawhub-wemeeting-tencent-meeting-skill","name":"腾讯会议","canonicalUrl":"https://www.xpersona.co/agent/clawhub-wemeeting-tencent-meeting-skill","canonicalPath":"/agent/clawhub-wemeeting-tencent-meeting-skill","generatedAt":"2026-10-10T00:09:17.554Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T03:29:03.546Z","emptyReason":null},"description":"腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、 Skill: 腾讯会议 Owner: wemeeting Summary: 腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、 Tags: latest:1.0.15 Version history: v1.0.15 | 2026-09-02T12:56:02.054Z | user -","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 6.2K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s175ez71wh2dx6r63jzbs444n983jkg3:tencent-meeting-skill","sourceUrl":"https://clawhub.ai/wemeeting/tencent-meeting-skill","homepage":"https://clawhub.ai/wemeeting/skills/tencent-meeting-skill","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/wemeeting/tencent-meeting-skill","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/wemeeting/skills/tencent-meeting-skill","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T03:29:03.546Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T03:29:03.546Z","emptyReason":null},"stars":null,"forks":null,"downloads":6210,"packageName":null,"latestVersion":"1.0.15","tractionLabel":"6.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T03:29:03.546Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T03:29:03.546Z","lastCrawledAt":"2026-10-09T03:29:03.546Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T03:29:03.546Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.15","createdAt":"2026-09-02T12:56:02.054Z","changelog":"- 新增支持“元宝纪要”相关功能，包括纪要搜索、要点/待办获取和滚动总结。 - 在描述中明确“元宝纪要”检索能力，支持关键词、时间过滤与概览提取。 - 移除 skill-card.md 文件，无影响实际功能使用。 - 业务与规则、场景说明增补元宝纪要相关指引。 - 其余核心功能、约束和敏感操作规范保持不变。","fileCount":14,"zipByteSize":51141},{"version":"1.0.14","createdAt":"2026-08-11T10:03:35.682Z","changelog":"Tencent Meeting Skill 1.0.14 Changelog - Expanded功能说明，新增支持管理会中等候室成员、导出参会成员统计与异步任务结果查询、录制播放地址等。 - 业务场景增加“会中控制”与导出会中参会统计，并完善相关处理流程说明。 - 录制说明中将“下载地址”表述明确为“播放地址”，更贴近实际功能更新。 - 增补部分业务流程与注意事项，覆盖更全面的会议管理与会控场景。 - 移除 skill-card.md 文件，不影响功能使用。","fileCount":14,"zipByteSize":46770},{"version":"1.0.13","createdAt":"2026-07-31T03:55:27.436Z","changelog":"- Removed the file: skill-card.md. - No changes to core functionality or behavior. - No user-facing feature updates. - Maintenance update to clean up unused documentation.","fileCount":14,"zipByteSize":45512},{"version":"1.0.12","createdAt":"2026-07-28T03:52:35.370Z","changelog":"tencent-meeting-skill 1.0.12 - Expanded enterprise contact features: now supports团队通讯录搜索、手机号和邮箱批量查open_id，满足邀请、呼叫等场景对用户标识的需求。 - 新增受邀人增删替换与会中成员管理：支持创建/修改会议时灵活指定受邀人，增加专用\"添加/移除/替换受邀人\"、会中批量呼叫/踢人等工具和规则，并明确二次确认流程。 - 强化纯查询与人员操作意图判定：如果用户仅想了解成员信息（如“查一下某人是哪部门”），将拒绝调用通讯录接口，仅明确邀请/呼叫等场景先查open_id后操作。 - 新增会议和录制列表搜索功能：支持多条件精准检索会议及录制文件（按主题、成员、手机号/邮箱等），完善分页与筛选规范。 - 细化批量操作上限与","fileCount":14,"zipByteSize":45939},{"version":"1.0.11","createdAt":"2026-06-19T02:32:17.896Z","changelog":"tencent-meeting-skill v1.0.11 - 新增 scripts/local_tools.py 和 scripts/update_state.py 两个脚本文件，增加本地工具与状态更新支持。 - SKILL.md 文档升级：版本检查相关描述由“版本过旧”调整为“有可更新版本”场景，细化 MCP 版本管理说明。","fileCount":14,"zipByteSize":32806},{"version":"1.0.10","createdAt":"2026-06-11T02:38:49.721Z","changelog":"tencent-meeting-skill 1.0.10 introduces feedback与录制权限申请支持，完善隐私与用户确认机制 - 新增录制权限申请流程（apply_record_permission_prepare/commit），访问录制内容无权限时自动引导用户按预览→确认→提交两步申请 - 增强反馈上报机制，遇到工具缺失、报错、能力不足、结果异常、功能建议等情况时，Agent必须强制触发submit_feedback，包含二次用户确认 - 补充隐私政策与反馈规则，敏感操作前明确需二次确认及脱敏要求（references/privacy_policy.md、feedback_rules.md） - 扩展描述与使用规则，适配新场景与自动触发机制 - 移除旧的 skill-card.md 文档，文档结构更新完善","fileCount":12,"zipByteSize":24327},{"version":"1.0.8","createdAt":"2026-05-18T03:01:21.885Z","changelog":"Tencent Meeting Skill 1.0.8 - Expanded and clarified usage scenarios for all major meeting operations (creation, updating, cancellation, info/query, recordings, transcripts, AI minutes). - Enhanced main description to cover supported and explicitly unsupported trigger scenarios, making operation boundaries clearer. - Consolidated and organized tool usage rules for time conversion, meeting code handling, parameter validation, and pagination across API calls. - Improved output guidelines, including user confirmation requirements for sensitive operations and tracing info display mandates. - Updated tables and tool indices for easier reference by users and developers.","fileCount":10,"zipByteSize":16641},{"version":"1.0.7","createdAt":"2026-04-23T11:40:43.566Z","changelog":"Changed - description: removed redundant warning, added \"Smart Summary\" feature description - Overview section synced to include \"Smart Summary\" - Version management inline rules moved to references/version_management.md - Improved pagination, parameter descriptions, and notes for some tools Added - Added \"Error Handling\" specification, referencing references/error_dictionary.md - Added parameter constraints and trigger scenario descriptions for some tools","fileCount":9,"zipByteSize":17070}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s175ez71wh2dx6r63jzbs444n983jkg3:tencent-meeting-skill","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T00:09:17.549Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wemeeting-tencent-meeting-skill/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T03:29:03.546Z","emptyReason":null},"readme":"Skill: 腾讯会议\n\nOwner: wemeeting\n\nSummary: 腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、\n\nTags: latest:1.0.15\n\nVersion history:\n\nv1.0.15 | 2026-09-02T12:56:02.054Z | user\n\n- 新增支持“元宝纪要”相关功能，包括纪要搜索、要点/待办获取和滚动总结。\n- 在描述中明确“元宝纪要”检索能力，支持关键词、时间过滤与概览提取。\n- 移除 skill-card.md 文件，无影响实际功能使用。\n- 业务与规则、场景说明增补元宝纪要相关指引。\n- 其余核心功能、约束和敏感操作规范保持不变。\n\nv1.0.14 | 2026-08-11T10:03:35.682Z | user\n\nTencent Meeting Skill 1.0.14 Changelog\n\n- Expanded功能说明，新增支持管理会中等候室成员、导出参会成员统计与异步任务结果查询、录制播放地址等。\n- 业务场景增加“会中控制”与导出会中参会统计，并完善相关处理流程说明。\n- 录制说明中将“下载地址”表述明确为“播放地址”，更贴近实际功能更新。\n- 增补部分业务流程与注意事项，覆盖更全面的会议管理与会控场景。\n- 移除 skill-card.md 文件，不影响功能使用。\n\nv1.0.13 | 2026-07-31T03:55:27.436Z | user\n\n- Removed the file: skill-card.md.\n- No changes to core functionality or behavior.\n- No user-facing feature updates.\n- Maintenance update to clean up unused documentation.\n\nv1.0.12 | 2026-07-28T03:52:35.370Z | user\n\ntencent-meeting-skill 1.0.12\n\n- Expanded enterprise contact features: now supports团队通讯录搜索、手机号和邮箱批量查open_id，满足邀请、呼叫等场景对用户标识的需求。\n- 新增受邀人增删替换与会中成员管理：支持创建/修改会议时灵活指定受邀人，增加专用\"添加/移除/替换受邀人\"、会中批量呼叫/踢人等工具和规则，并明确二次确认流程。\n- 强化纯查询与人员操作意图判定：如果用户仅想了解成员信息（如“查一下某人是哪部门”），将拒绝调用通讯录接口，仅明确邀请/呼叫等场景先查open_id后操作。\n- 新增会议和录制列表搜索功能：支持多条件精准检索会议及录制文件（按主题、成员、手机号/邮箱等），完善分页与筛选规范。\n- 细化批量操作上限与\n\nv1.0.11 | 2026-06-19T02:32:17.896Z | user\n\ntencent-meeting-skill v1.0.11\n\n- 新增 scripts/local_tools.py 和 scripts/update_state.py 两个脚本文件，增加本地工具与状态更新支持。\n- SKILL.md 文档升级：版本检查相关描述由“版本过旧”调整为“有可更新版本”场景，细化 MCP 版本管理说明。\n\nv1.0.10 | 2026-06-11T02:38:49.721Z | user\n\ntencent-meeting-skill 1.0.10 introduces feedback与录制权限申请支持，完善隐私与用户确认机制\n\n- 新增录制权限申请流程（apply_record_permission_prepare/commit），访问录制内容无权限时自动引导用户按预览→确认→提交两步申请\n- 增强反馈上报机制，遇到工具缺失、报错、能力不足、结果异常、功能建议等情况时，Agent必须强制触发submit_feedback，包含二次用户确认\n- 补充隐私政策与反馈规则，敏感操作前明确需二次确认及脱敏要求（references/privacy_policy.md、feedback_rules.md）\n- 扩展描述与使用规则，适配新场景与自动触发机制\n- 移除旧的 skill-card.md 文档，文档结构更新完善\n\nv1.0.8 | 2026-05-18T03:01:21.885Z | user\n\nTencent Meeting Skill 1.0.8\n\n- Expanded and clarified usage scenarios for all major meeting operations (creation, updating, cancellation, info/query, recordings, transcripts, AI minutes).\n- Enhanced main description to cover supported and explicitly unsupported trigger scenarios, making operation boundaries clearer.\n- Consolidated and organized tool usage rules for time conversion, meeting code handling, parameter validation, and pagination across API calls.\n- Improved output guidelines, including user confirmation requirements for sensitive operations and tracing info display mandates.\n- Updated tables and tool indices for easier reference by users and developers.\n\nv1.0.7 | 2026-04-23T11:40:43.566Z | user\n\nChanged\n- description: removed redundant warning, added \"Smart Summary\" feature description\n- Overview section synced to include \"Smart Summary\"\n- Version management inline rules moved to references/version_management.md\n- Improved pagination, parameter descriptions, and notes for some tools\nAdded\n- Added \"Error Handling\" specification, referencing references/error_dictionary.md\n- Added parameter constraints and trigger scenario descriptions for some tools\n\nv1.0.5 | 2026-03-31T11:26:19.963Z | user\n\n更新md\n\nv1.0.0 | 2026-03-14T18:48:15.632Z | user\n\n腾讯会议Skill 1.0.0\n\n-支持会议管理：预约、修改、取消会议等；\n-支持会议查询：查询会议列表、参会成员列表等；\n-支持录制与纪要：查询录制、转写、纪要等\n\nArchive index:\n\nArchive v1.0.15: 14 files, 51141 bytes\n\nFiles: config.json (126b), references/api_references.md (31918b), references/error_dictionary.md (22248b), references/feedback_rules.md (3454b), references/privacy_policy.md (5722b), references/version_management.md (4226b), scripts/local_tools.py (9019b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6661b), scripts/update_state.py (11772b), scripts/utils.py (1526b), skill-card.md (3174b), SKILL.md (47739b), _meta.json (141b)\n\nFile v1.0.15:SKILL.md\n\n---\nname: tencent-meeting-mcp\ndescription: \"腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、会中踢出成员（支持普通成员/SIP/PSTN，可选是否允许重新加入）、时间转换与版本检查、Agent意见箱反馈上报。当用户需要预约或管理腾讯会议、查看参会人员、查询会议录制或转写内容、获取智能纪要、通过姓名/手机号/邮箱定位企业成员、管理会议受邀人、会中呼叫或踢人时使用；当用户访问录制相关内容（播放地址/转写/智能纪要）出现无权限错误时，自动发起录制权限申请流程；当用户仅提供姓名/手机号/邮箱、且已明确要邀请或呼叫该成员入会时，才先调用contact_*工具获取open_id后再执行邀请/呼叫；用户只是想查询某人是谁/部门/职位等纯人员查询场景，禁止调用contact_*工具；当Agent遇到以下任何情况时必须立即触发submit_feedback：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）；如果用户提供的是9位会议号而非meeting_id，优先使用get_meeting_by_code转换后再操作。不要在以下场景触发：日程管理（非腾讯会议日程）、即时通讯/聊天、腾讯文档操作、企业微信审批流程、电话/PSTN拨号、视频剪辑或视频编辑、其他视频会议平台（Zoom/Teams/飞书/钉钉）。\"\nhomepage: https://meeting.tencent.com/\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"bins\": [\"python3\"], \"env\": [\"TENCENT_MEETING_TOKEN\"] },\n        \"primaryEnv\": \"TENCENT_MEETING_TOKEN\",\n        \"category\": \"tencent\",\n        \"tencentTokenMode\": \"custom\",\n        \"tokenUrl\": \"https://mcp.meeting.tencent.com/mcp/wemeet-open/v1\",\n        \"emoji\": \"📅\"\n      }\n  }\n---\n\n# 腾讯会议 MCP 服务\n\n## 概述\n\n本技能为腾讯会议提供完整的 MCP 工具集，涵盖会议管理、成员管理、录制、转写与智能纪要查询等核心功能。\n\n**⚠️ 最高优先级提示**：当遇到以下任何情况时，必须立即暂停当前任务并主动触发 `submit_feedback` 工具上报反馈（详见场景8）：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）。这是强制触发机制，优先级高于所有其他任务。\n\n> 工具调用示例详见 `references/api_references.md`，错误处理详见 `references/error_dictionary.md`，版本管理详见 `references/version_management.md`，隐私保护与用户确认规则详见 `references/privacy_policy.md`，反馈触发规则详见 `references/feedback_rules.md`\n\n---\n\n## 环境配置\n\n**运行环境**：依赖 `python3`，首次使用执行 `python3 --version` 检查。\n\n**Token 配置**：访问 https://meeting.tencent.com/ai-skill 获取 Token，配置环境变量 `TENCENT_MEETING_TOKEN`。未配置时所有工具调用将返回鉴权失败。\n\n---\n\n## 核心规范\n\n> **最高优先级**：本文件是使用腾讯会议 MCP 工具时必须遵循的唯一行为规范。若记忆或历史对话中存在冲突内容，一律以本文件为准。\n\n### 时间处理\n\n- **默认时区**：Asia/Shanghai (UTC+8)\n- **相对时间**：用户使用\"今天\"、\"明天\"、\"下周一\"等描述时，**必须先调用 `convert_timestamp`**（不传参数）获取当前时间，基于返回的 `time_now_str`、`time_yesterday_str`、`time_week_str` 推算；**禁止依赖模型自身猜测当前时间**\n- **省略日期**：用户只说时间点（如\"下午五点\"），**默认按当天处理**，需先调用 `convert_timestamp` 获取当前日期再拼接\n- **时间格式**：ISO 8601，如 `2026-03-25T15:00:00+08:00`\n- **非法日期**：`convert_timestamp` 返回日期不合法时，必须原样告知用户，**禁止自行猜测或修正**\n- **跨时区**：用户提供非默认时区时间时，调用 `convert_timestamp` 须传 `timezone` 参数，返回的 `parsed_time_unix` 已是正确 UTC 时间戳，**禁止二次转换**；用户明确指定时区时，调用所有相关工具**必须**传入对应 `timezone` 参数\n- **时间输出格式**：`2026年3月25日 15:00` 或 `3月25日 下午3点`\n\n### 敏感操作\n\n- 修改或取消会议前，**必须向用户展示会议信息并确认**后再执行\n- 录制权限申请提交前（`apply_record_permission_commit`），**必须先调用 `apply_record_permission_prepare` 获取预览信息并向用户完整展示**（会议主题、录制所有者、申请人、申请类型等），获得用户明确同意后再调用 commit 工具；详见场景9\n- 提交反馈（`submit_feedback`）前，**必须按场景8的二次确认流程获得用户明文同意**后再调用；反馈内容**严禁包含未脱敏的隐私信息**，详见 `references/privacy_policy.md`\n- 受邀人变更（`meeting_invitees_remove` / `meeting_invitees_replace`）前，**必须先调用 `get_meeting_invitees` 展示当前受邀人列表**，明确告知用户将被移除/替换的成员，获得明确同意后再执行；`replace` 传空数组会清空所有受邀人，**必须二次强调**；详见场景11\n- 会中踢人（`meeting_control_kick`）前，**必须向用户完整展示被踢成员名单与 `allow_rejoin` 值**（true=允许重新加入 / false=禁止重新加入），获得明确同意后再执行；详见场景12\n- 会中呼叫（`meeting_control_call`）涉及对成员发起电话/客户端呼叫，**必须向用户展示被呼叫成员名单并确认**后再执行；详见场景12\n- 调用这些通讯录工具前，**必须先完成意图判定**： `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 这些通讯录工具前，必须先在内部完成意图判定并满足以下全部条件，否则一律禁止调用：\n  1. 本轮请求**显式包含**邀请入会 / 添加受邀人 / 呼叫入会动作；\n  2. 解析出的 open_id 将**在同一轮内立即**喂给 schedule_meeting / update_meeting / meeting_invitees_* / meeting_control_call等工具。\n  只要用户说的是\"查找 / 搜索 / 查一下 / 看看 / 是谁 / 哪个部门 / 联系方式\"等\n  **纯查询表述且不伴随上述动作**，立即停止，使用固定拒绝话术（见场景10反例），\n  **严禁调用任何 contact_* 工具**。\n- 通讯录工具入参中的手机号、邮箱属于强敏感信息，**禁止在对话或日志中复述明文**；返回的成员姓名向用户展示时优先使用昵称，必要时按 `references/privacy_policy.md` 脱敏\n- 无法查询到会议时，先确认会议号正确性或是否为本人创建\n\n### 追踪信息\n\n所有工具返回的 `X-Tc-Trace` 或 `rpcUuid` 字段，**必须明确展示**给用户\n\n### 错误处理\n\n- 工具调用失败或返回错误时，**必须查阅 `references/error_dictionary.md`** 并按对应指引处理\n- 若错误字典中**未收录**该错误，或按指引处理后仍无法满足用户诉求，**必须立即通过 `submit_feedback` 上报**（详见场景8的强制触发机制）\n\n### 客户端环境标识\n\n调用每个工具时，必须在 arguments 中附带 `_client_info` 对象（`os`、`agent`、`model`）。此参数由模型自动填入，**不需要向用户询问**\n\n### 版本管理\n\n- MCP 响应中出现版本相关提示时，**必须查阅 `references/version_management.md`** 并按对应指引处理\n- `check_skill_version` 触发场景：用户询问新版本、疑似已知问题、MCP 响应提示有可更新版本；更新后建议重新开始对话，确保新版本规则生效\n\n---\n\n## 不触发场景\n\n腾讯文档、通用日程、即时通讯、企业微信审批/打卡、电话/PSTN、视频剪辑、其他会议平台（Zoom/Teams/飞书/钉钉）\n\n---\n\n## 通用规则\n\n1. **Meeting Code 转换**：用户提供的会议号需通过 `get_meeting_by_code` 转换为 meeting_id 后才能调用其他工具\n2. **用户标识前置（仅限邀请/呼叫场景）**：**当且仅当**用户已表达明确的「会议邀请 / 添加受邀人 / 会中呼叫入会」意图、却只提供了姓名/手机号/邮箱（未提供 open_id）时，才调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 解析出 open_id，并**立即**用于 `schedule_meeting` / `update_meeting` / `meeting_invitees_*` / `meeting_control_call`。\n   ⛔ 前置判定：若本轮无\"邀请/添加受邀人/呼叫入会\"动作，直接禁止调用 contact_*，\n   - ⛔ **纯人员查询不适用本规则**：用户只是想\"搜一下/查一下某人是谁、看其部门/职位/联系方式\"而无任何后续会议动作时，**禁止调用任何 `contact_*` 工具**，应直接告知\"查询通讯录人员信息不在本服务范围内\"。\n   - ⛔ **踢人不适用本规则**：踢人所需的 `open_id` / `ms_open_id` 一律取自 `get_meeting_participants`，**严禁**用 `contact_*` 反查（详见场景12）。\n3. **年份默认值**：未指定年份时使用当前年份，禁止使用过去年份\n4. **参数格式错误**：提示用户修改，**禁止主动修改用户输入的参数值**\n5. **分页查询**：统一使用 `page_token`/`page_size` 分页，根据 `has_more` 判断是否继续，为 `true` 时用 `next_page_token` 翻页\n6. **返回昵称优先**：返回主持人、参会者、受邀人时，若无特殊要求只返回用户昵称，不返回用户 ID\n7. **批量上限**：`invitees` ≤ 100；`meeting_control_call.users` ≤ 20；`meeting_control_kick.users + sip_users + pstn_users` 三者总数 ≤ 20；`contact_lookup_by_phone.phones` / `contact_lookup_by_email.emails` ≤ 50。超限时必须告知用户分批处理，**禁止自行截断**\n\n---\n\n## 业务场景\n\n### 场景1：创建会议\n\n**触发条件**\n用户要求预约、创建、安排一场腾讯会议\n\n**处理流程**\n1. 调用 `convert_timestamp` 获取当前时间（涉及相对时间时）\n2. 确认必填信息：会议主题、开始时间、结束时间\n3. 若用户提到邀请成员（仅有姓名/手机号/邮箱），先调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 获取 open_id 列表\n4. 调用 `schedule_meeting` 创建会议，可选传入 `invitees`（open_id 数组，最多 100）\n\n**注意事项**\n- 未提及结束时间默认 1 小时，提示用户可修改\n- 周期性会议重复次数默认 50 次，提示用户可修改\n- 缺少会议主题时工具直接报错，必须提示用户输入\n- 创建时若传入 `invitees`，必须先向用户确认邀请名单（昵称展示）后再执行\n- 创建后如需追加/修改受邀人，使用 `meeting_invitees_add` / `meeting_invitees_remove` / `meeting_invitees_replace`\n\n**输出规范**\n展示创建成功的会议主题、时间、会议号、受邀人数（若有）及追踪信息\n\n---\n\n### 场景2：修改会议\n\n**触发条件**\n用户要求修改、更新已有会议信息（含受邀人增删替换）\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting` 查询当前会议信息；如需修改受邀人，加调 `get_meeting_invitees` 查看当前列表\n3. 若用户提到邀请成员（仅有姓名/手机号/邮箱），先调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 获取 open_id 列表\n4. 向用户展示**完整变更摘要**（含基础信息变更 + 受邀人变更），确认后调用 `update_meeting` 执行修改\n\n**注意事项**\n- 修改前必须二次确认（见核心规范\"敏感操作\"）\n- 可修改：主题、时间、密码、时区、会议类型、入会限制、等候室、周期性规则、受邀人等\n- 若同时修改会议信息和受邀人，需在 `update_meeting` 中传入 `invitees` + `invitees_operate_type`（字符串枚举：`\"add\"`=增量添加 / `\"remove\"`=批量移除 / `\"replace\"`=整体替换），并在确认摘要中**一次性展示所有变更**\n- `invitees` 与 `invitees_operate_type` **必须成对出现**，缺一报参数错误\n- 仅做受邀人变更（无其他字段修改）时，**推荐使用** `meeting_invitees_add` / `_remove` / `_replace` 专用工具，语义更清晰\n\n**输出规范**\n展示修改后的会议信息（含受邀人变化）及追踪信息，提示用户确认变更\n\n---\n\n### 场景3：取消会议\n\n**触发条件**\n用户要求取消、删除已有会议\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting` 查询当前会议信息\n3. 向用户展示待取消信息，确认后调用 `cancel_meeting` 执行取消\n\n**注意事项**\n- 取消前必须二次确认（见核心规范\"敏感操作\"）\n\n**输出规范**\n展示取消成功提示及追踪信息\n\n---\n\n### 场景4：查询会议信息\n\n**触发条件**\n用户要求查看会议详情、参会人员、受邀成员、等候室成员、会议录制信息等\n\n**处理流程**\n- 有 meeting_id → 直接调用 `get_meeting`\n- 有会议号 → `get_meeting_by_code` → `get_meeting`\n- 查看参会人员 → `get_meeting_participants`\n- 查看受邀成员 → `get_meeting_invitees`\n- 查看等候室成员 → `get_waiting_room`\n- 导出参会成员统计（含累计参会时长、会议互动行为等统计） → `export_participants` → 获取 `job_id` → `get_job_result` 查询下载链接\n\n**注意事项**\n- `export_participants` 为异步导出，返回 `job_id`，需通过 `get_job_result` 轮询任务状态\n- `get_job_result` 返回 status：1-成功（可获取下载链接，有效期2小时）、2-失败（查看 error_msg）、3-处理中（稍后重试）\n- 导出适用于需要完整参会统计数据（如考勤分析）的场景，普通查看参会人员使用 `get_meeting_participants` 即可\n\n**输出规范**\n展示会议基本信息、人员列表、会议录制信息等，附带追踪信息\n\n---\n\n### 场景5：会中控制\n\n**触发条件**\n用户要求管理会中等候室成员\n\n**处理流程**\n- 管理会中等候室成员 → `manage_waiting_room`\n\n**输出规范**\n展示操作结果，附带追踪信息\n\n---\n\n### 场景6：查询用户会议列表\n\n**触发条件**\n用户要求查看自己的会议列表、近期会议、我的会议\n\n**处理流程**\n1. **参数判断逻辑**：\n   - 当提供的参数**只有时间**（如start_time/end_time）：**列表优先**\n     - 进行中/未开始：调用 `get_user_meetings`\n     - 已结束：调用 `get_user_ended_meetings`\n   - 有其他参数（会议主题、会议号、创建人、参与者等）：**搜索优先**\n     - 调用 `search_meetings` 进行精确过滤\n2. 查询今天的全部会议：**同时调用两者，结果聚合去重**\n\n**注意事项**\n- `get_user_meetings` 仅包含未开始/进行中的会议，`get_user_ended_meetings` 仅包含已结束会议\n- `search_meetings` 支持按关键词(q)、搜索字段(q_fields)、会议号、日期窗口等过滤，数据按分页返回\n- `search_meetings` 的 `from`/`to` 参数使用 ISO 8601 格式（如 `2026-03-20T00:00:00+08:00`），按用户输入原值透传\n\n**输出规范**\n按时间排列展示会议列表（包含录制信息等），标注状态（未开始/进行中/已结束）\n\n---\n\n### 场景7：查询录制与转写\n\n**触发条件**\n用户要求查看录制、转写内容、搜索关键词、获取智能纪要（录制纪要）\n\n> ⚠️ **纪要类型判定前置**：用户说\"查纪要/会议总结/会议纪要/会议要点\"时，**必须先阅读下方「元宝纪要与录制纪要的边界规则」判断走哪条链路**，不得仅凭命令名字面匹配。若确定走元宝纪要链路，请转至场景7A处理。\n\n**处理流程**\n1. 根据用户意图选择获取录制信息的途径：\n    - **查指定会议的录制（含权限状态）**：使用会议查询工具，响应中每个会议携带 `records` 数组（含 `meeting_record_id` / `state` / `permission_status` 等）。按以下方式定位具体会议：\n        - 按会议主题或主持人搜索 → `search_meetings`\n        - 有会议号 → `get_meeting_by_code`（按会议号精确查）\n        - 有 meeting_id → `get_meeting`（按会议ID精确查）\n        - 按时间查近期会议 → `get_user_meetings`（未开始/进行中）或 `get_user_ended_meetings`（已结束）\n    - **指定关键词查录制**：用户给出主题、创建者、内容等关键词想搜索匹配的录制 → `search_records`\n    - **未指定某场会议、想找自己的录制**：优先用 `get_records_list`（按时间范围或默认查，仅返回用户有权限的录制文件）\n2. 根据需求选择后续操作：\n   - 获取播放录制 → `get_record_addresses`\n   - 转写全文 → `get_transcripts_paragraphs` 获取段落 ID → `get_transcripts_details` 获取文本\n   - 搜索关键词 → `search_transcripts`\n   - 智能纪要（录制纪要） → `get_smart_minutes`\n\n**注意事项**\n- 获取录制会议内容时的推荐优先级：`get_smart_minutes` > `get_transcripts_details` > `get_record_addresses`\n- `get_records_list` 未传 meeting_id/meeting_code 时，`start_time` 和 `end_time` 必须同时传入\n- `get_records_list` 按时间查询：范围不超过 31 天，起始不早于 1 年前\n- `search_records` 支持按关键词(q)、搜索字段(q_fields)、会议ID/会议号、日期窗口、文件类型等过滤，数据按分页返回\n- `search_records` 的 `from`/`to` 参数使用 ISO 8601 格式（如 `2026-03-20T00:00:00+08:00`），按用户输入原值透传\n- `search_transcripts` 中文关键词需 urlencode\n- **录制状态限制**：`state` 为「录制中」或「转码中」的录制文件**不可查看内容、不可申请权限**（场景6的播放/转写/搜索/纪要、场景8的权限申请均不可对这类文件执行）。遇到此类状态时，应告知用户该录制尚未就绪、需等待变为「转码完成」后再操作\n\n**输出规范**\n展示录制列表/播放地址/转写内容/智能纪要，附带追踪信息\n\n---\n\n### 元宝纪要与录制纪要的边界规则\n\n> **CRITICAL — 取纪要前必读**：遇到\"查纪要/会议总结/会议纪要/会议要点\"等诉求时，必须先按本规则判断走元宝纪要（场景7A）还是录制纪要（场景6），不得仅凭命令名字面匹配。\n\n#### 两条链路对比\n\n| 维度 | 元宝纪要（`search_minutes` / `get_minutes`） | 录制纪要（`get_smart_minutes` / `search_records` / `get_transcripts_*`） |\n|------|------|------|\n| 纪要产物 | 完整总结（overview/summary_points/todos）+ 滚动总结（short_summaries） | 智能纪要（基于录制文件的 AI 总结）+ 逐字稿 |\n| 生成时机 | 会中（用户开启元宝纪要） | 会后（基于云录制/文字转写/录音/文件上传） |\n| 所有权 | 参会者每人一份 | 录制创建者所有 |\n| 权限 | 参会者人人可取 | 需录制查看权限，无权限需申请 |\n| 链接 | 无（只能取内容） | 有（播放地址） |\n| 内容一致性 | 因入会时段不同，各人取到的内容可能不一致 | 基于完整录制文件，多人共享相同内容 |\n| 逐字稿 | 无（short_summaries 是 AI 加工版，非原话） | 有（`get_transcripts_details`，含说话人/时间戳） |\n\n#### 纪要选择规则\n\n| 场景 | 选择 |\n|------|------|\n| 只存在一类纪要 | 取存在的那一类 |\n| 两类都存在、用户明确指定（如\"取录制纪要\"\"看元宝纪要\"） | 按用户指定走对应链路 |\n| 两类都存在、用户未指定 | 先查 `get_smart_minutes`（录制纪要）或 `get_minutes`（元宝纪要）任一均可；先查的一种取不到时，继续查另一种（双向兜底）。取到后告知用户纪要来源 |\n| 两条链路都取不到 | 告知用户该会议无可取的纪要 |\n\n#### 原话/逐字稿降级规则\n\n用户要\"原话/逐字稿/谁说了什么\"时：\n- **有录制权限** → 走录制链路 `get_transcripts_paragraphs` + `get_transcripts_details` 取逐字稿\n- **无录制权限但元宝纪要可用** → 降级取元宝 `get_minutes` 的 `short_summary`（滚动总结），**必须标注\"非原话/AI 加工版\"**，无需先询问用户是否接受降级\n\n#### 两条链路的独立性\n\n- 元宝纪要与录制纪要**相互独立、互不影响**\n- 一个用户在一场会议后可同时拥有两类纪要，也可能只有其中一类，也可能都没有\n- 当两者都存在时，内容可能重叠，各自基于不同数据源（会中 ASR vs 录制文件）\n\n---\n\n### 场景7A：查询元宝纪要\n\n**触发条件**\n用户要求搜索或查询元宝纪要、会议总结/要点/待办（经边界规则判定走元宝链路）\n\n> **领域边界**：元宝纪要与录制纪要（`get_smart_minutes`）是两条独立链路。取纪要前请先阅读上方「元宝纪要与录制纪要的边界规则」判断走哪条链路。\n\n> **当前仅支持会后获取**：元宝纪要在会中生成，但当前工具仅支持取已结束会议的纪要。会议进行中或未开始时，告知用户会后重试。\n\n**元宝纪要查询路由**\n\n用户说\"查纪要/会议总结/会议纪要/会议要点\"且确定走元宝链路后，按用户线索选择工具：\n\n| 用户线索 | 入口工具 | 说明 |\n|---------|---------|------|\n| 会议号 / 会议 ID | `get_minutes`（传 `meeting_code` 或 `meeting_id`） | 取该会议的元宝纪要 |\n| 已有 `minute_id` | `get_minutes`（传 `minute_id`） | 取单份完整纪要（含滚动总结） |\n| 纪要内容关键词（无会议号、记得会上说过什么） | `search_minutes`（传 `q`） | 跨会议搜纪要文本 |\n| 主题 / 创建人 / 时间范围（无会议号） | 先 `search_meetings` / `get_user_ended_meetings` 定位会议，再 `get_minutes` | 元宝无按主题/创建人直接搜纪要的能力 |\n| 要\"原话/逐字稿/谁说了什么\" | 元宝无逐字稿，走录制链路（场景6）；无录制权限时降级取 `get_minutes` 的 `short_summary`，标注\"非原话/AI 加工版\" | 见边界规则「原话/逐字稿降级规则」 |\n\n**处理流程**\n1. **判断纪要类型**：按「元宝纪要与录制纪要的边界规则」确定走元宝链路\n2. **定位会议**（若用户给会议号/会议 ID 可跳过）：\n   - 会议号 → 直接传 `get_minutes` 的 `meeting_code`\n   - 会议 ID → 直接传 `get_minutes` 的 `meeting_id`\n   - 主题/创建人 → `search_meetings` 拿 meeting_id\n   - 时间范围 → `get_user_ended_meetings` 拿 meeting_id\n   - 纪要内容关键词（无会议号）→ `search_minutes`\n3. **取纪要**：\n   - 取一场会议的完整总结 → `get_minutes`（传 `meeting_code` 或 `meeting_id`）\n   - 取单份完整纪要（含滚动总结）→ `get_minutes`（传 `minute_id`）\n   - 单独取滚动总结 → `get_minutes`（传 `minute_id` + `short_summary=true`）\n4. **兜底**：元宝纪要无结果时，询问用户是否尝试查找该会议的录制纪要（`get_smart_minutes`）\n\n**纪要搜索路由策略（用户说「搜索纪要」「找纪要」「查纪要内容」时的路由规则）**\n\n> 用户表达「搜索纪要」「找一下纪要」「纪要里有没有提到 XXX」等搜索类诉求时，按以下策略路由：\n\n| 步骤 | 判断条件 | 动作 |\n|------|---------|------|\n| ① 检查录制权限 | 先通过上下文判断用户是否有录制权限（如此前调用录制相关工具是否成功、会议查询响应中 `records[].permission_status` 等） | 若无法判断，可先尝试调用 `search_records` 探测权限 |\n| ② 有录制权限 | 用户 query 为「搜索纪要」「查纪要」等通用纪要搜索 | **优先走录制链路**：调用 `search_records`（`q_fields=smart_minutes`）搜录制纪要；录制纪要无结果时，再降级调用 `search_minutes` 搜元宝纪要 |\n| ③ 无录制权限 | 用户 query 为通用纪要搜索 | **直接走元宝链路**：调用 `search_minutes` 搜元宝纪要 |\n| ④ 细节/原话类问题 | 用户问的是细节问题（如「谁说要延期」「有没有人提到预算」「XX 说了什么」），纪要搜索无结果或纪要粒度不够 | **直接走录制逐字稿**：调用 `search_records`（`q_fields=transcript_content`）或 `search_transcripts` 搜索转写原文，逐字稿能提供说话人+时间戳级别的精确匹配 |\n| ⑤ 无录制权限 + 需要逐字稿 | 步骤④需要走录制链路但用户无权限 | **引导申请权限**：告知用户「该录制需要查看权限才能搜索逐字稿内容，是否需要申请录制权限？」，用户同意后进入场景9（录制权限申请流程） |\n\n**路由示例**：\n- 用户说「帮我搜一下上周纪要里有没有提到排期」→ 有录制权限时先 `search_records(q=\"排期\", q_fields=\"smart_minutes\")`，无结果再 `search_minutes(q=\"排期\")`\n- 用户说「张三在会上说要延期，帮我找一下」→ 这是细节/原话类问题，直接走录制逐字稿 `search_records(q=\"延期\", q_fields=\"transcript_content\")` 或 `search_transcripts`\n- 用户无录制权限时说「搜一下纪要」→ 直接 `search_minutes` 搜元宝纪要\n- 用户无录制权限时说「谁说了要延期」→ 告知需要录制权限才能查逐字稿，引导申请权限（场景9）\n\n**搜索元宝纪要（`search_minutes`）**\n- 支持按关键词(q)、时间窗口(from/to)过滤，所有过滤参数均为可选，可任意组合\n- `from`/`to` 参数使用 ISO 8601 格式（如 `2026-03-20T00:00:00+08:00`），按用户输入原值透传\n- 数据按分页返回，使用 `page_token`/`page_size` 分页\n- **与 `search_records` 的区别**：`search_minutes` 搜元宝纪要文本（overview/summary_points/todos/short_summaries）；`search_records --q_fields transcript_content` 搜录制转写原文。两者检索范围不同，按用户要的纪要类型选择\n\n**查询元宝纪要详情（`get_minutes`）**\n\n支持两种模式：\n\n- **稳态纪要**：传入 `meeting_id` 或 `meeting_code` 获取稳态纪要；`page_token` / `page_size` 控制分页，`page_size` 默认10，最大30；周期会议需配合 `sub_meeting_id` 定位实例\n- **滚动（瞬态）纪要**：传入 `short_summary=true` 且**必须**同时传入 `minute_id`（稳态纪要唯一标识），否则报错；`page_token` / `page_size` 控制分页，`page_size` 默认100，最大300\n\n**注意事项**\n- `get_minutes` 获取滚动（瞬态）纪要时，**必须自动全量拉取**：首次调用后检查响应中的 `has_more` 字段，若为 `true` 则将响应中的 `next_page_token` 作为下一次请求的 `page_token` 继续拉取，循环直到 `has_more` 为 `false`，最终将所有分页结果聚合后一次性返回给用户\n- `get_minutes` 入参识别规则：用户提供的会议标识字符串长度为 9~12 位时视为 `meeting_code`，更长的视为 `meeting_id`\n- `get_minutes` 可选获取概览(overview)、要点(summary_points)、待办(todos)、滚动总结(short_summary)，默认获取概览/要点/待办\n- **元宝纪要因人而异**：参会者因入会时段不同，取到的元宝纪要内容不同。同一会议的不同参会者可能拿到不同的纪要\n- **元宝纪要无链接**：只能取内容，没有可分享的播放地址\n- **元宝纪要无逐字稿**：`short_summaries` 是 AI 加工版，非原话\n\n**输出规范**\n展示元宝纪要内容（概览/要点/待办/滚动总结），附带追踪信息。取到纪要后应告知用户纪要来源为\"元宝纪要\"\n\n---\n\n### 场景7：提交反馈（Agent 意见箱）\n\n**触发条件（强制触发 - 优先级最高）**\nAgent 在执行腾讯会议相关任务过程中遇到以下任何情况时，**必须立即暂停当前任务**并主动询问用户是否调用 `submit_feedback` 上报反馈：\n- **工具缺失**：用户请求的功能在当前工具集中完全不存在\n- **工具报错**：任何工具调用返回非成功状态\n- **能力不足**：工具存在但参数限制或功能范围无法满足用户需求\n- **结果不符预期**：工具调用成功但返回结果与用户预期明显不一致\n- **改进建议**：发现工具集有明显改进空间或新增功能需求\n\n**强制触发机制**\n- **立即暂停**：必须立即暂停当前任务流程\n- **明确询问**：必须询问用户是否上报反馈\n- **二次确认**：必须获得用户明确同意后才调用工具\n\n**详细触发规则**：详见 `references/feedback_rules.md`\n\n**输出规范**\n上报成功后，向用户简要告知已记录该反馈（含 `feedback_id`）；用户拒绝或未确认时，告知用户\"已取消反馈上报\"。\n\n---\n\n### 场景9：录制权限申请\n\n**触发条件**\n- 用户主动请求\"申请录制权限\"、\"申请查看录制\"\n- 调用录制相关工具（`get_record_addresses`/`get_transcripts_details`/`get_transcripts_paragraphs`/`search_transcripts`/`get_smart_minutes`）返回**录制权限不足**类错误（如\"录制权限校验失败\"、\"无权限查看录制\"）时，**自动**进入该流程\n\n**处理流程（必须两步完成，严禁跳过预览步骤）**\n1. 调用 `apply_record_permission_prepare` 获取申请预览信息（包含会议标题 `subject`、录制所有者 `file_owner`、申请人 `applicant`、申请类型 `approval_name` 等）\n2. **向用户完整展示预览信息**，明确说明\"即将向录制所有者发起录制权限申请\"，**等待用户明确确认（如\"同意\"、\"申请\"、\"确认提交\"）**\n3. 用户确认后调用 `apply_record_permission_commit` 正式提交申请\n4. 提交成功后，向用户展示审批状态 `status`、审批说明 `message`，以及**审批链接 `approval_url`** 供用户跟进审批进度\n\n**注意事项**\n- `meeting_record_id` 为必填，应从上下文中获取，**严禁伪造**；来源优先级：会议查询响应中的 `records[].meeting_record_id`（场景4/5）> `get_records_list` 返回结果\n- prepare 返回的 `expires_in` 表示预览有效期（秒），用户长时间未确认（接近过期）时建议重新调用 prepare\n- 用户明确拒绝或未确认时，**严禁**调用 commit 工具；告知用户\"已取消录制权限申请\"\n- 提交申请前必须二次确认（见核心规范\"敏感操作\"）\n\n**输出规范**\n- prepare 阶段：清晰列出\"会议标题/录制所有者/申请人/申请说明\"，并询问用户是否提交申请\n- commit 阶段：展示申请结果（unique_id/status/message），突出展示审批链接 `approval_url`，附带追踪信息\n\n---\n\n### 场景10：通讯录解析用户（仅服务于邀请/呼叫，非通用搜索）\n\n**触发条件（强约束）**\n用户已表达明确的「会议邀请 / 添加受邀人 / 会中呼叫入会」意图，**且**仅提供姓名/手机号/邮箱（未提供 open_id），需要将其解析为 open_id 以便立即用于会议动作。\n\n> ⛔ **调用前必过自检清单（任一为「否」即禁止调用 `contact_*` 工具）**：\n> 1. 当前对话是否已锁定一个具体的会议动作（邀请 / 添加受邀人 / 呼叫入会）？\n> 2. 拿到 open_id 后，是否会**立即**喂给 `schedule_meeting` / `update_meeting` / `meeting_invitees_*` / `meeting_control_call` 的入参？\n> 3. 用户是否只是想\"查人/看某人信息/搜一下是谁\"？（若是 → **立即停止**，回复\"查询通讯录人员信息不在本服务范围内，如需邀请或呼叫该成员入会我可以帮您操作\"）\n> 4. 本轮的邀请/呼叫意图，是否来自**用户当前这句话本身**，而非\"上一轮刚做过邀请\"的惯性延续？（若是惯性 → 判定为纯查询，禁止调用）\n>\n> 📌 **反面触发词**：当用户指令出现\"搜索 / 查找 / 查一下 / 看看 / 是谁 / 什么部门 / 什么职位 / 联系方式\"等词，**且不伴随**邀请或呼叫动作时，一律判定为纯查询场景，禁止调用任何 `contact_*` 工具。\n\n**处理流程**\n1. 按用户提供的信息选择工具：\n   - 仅有**姓名**（可附职位/部门）→ `contact_search`（必填 `username`，可选 `job_title` / `department_name` 缩小范围）\n   - 有**手机号**（1~50 个）→ `contact_lookup_by_phone`\n   - 有**邮箱**（1~50 个）→ `contact_lookup_by_email`\n2. 拿到 `open_id` 后，再用于后续工具（`schedule_meeting` / `update_meeting` / `meeting_invitees_*` / `meeting_control_*`）\n\n**注意事项**\n- **`contact_*` 工具调用场景白名单（强约束）**：`contact_*` 工具 **仅可用于以下两类场景**，用于将姓名解析为 `open_id`：\n    1. **会议邀请**：`schedule_meeting` / `update_meeting` / `meeting_invitees_add` / `meeting_invitees_replace` 的受邀人入参解析\n    2. **呼叫成员入会**：`meeting_control_call` 的 `users` 入参解析\n    \n- **严禁在其他场景下调用 `contact_*` 工具**，包括但不限于：仅为查看某人部门/职位/联系方式、好奇某人信息、为通用人员搜索目的、为踢人提供 open_id（应用 `get_meeting_participants`，详见场景12），**不得将通讯录工具作为通用人员信息查询接口使用**。\n- **`username` 为必填（强约束）**：`contact_search` 的 `username` 参数为**必填**，缺失时工具会直接报错。**严禁模型自行猜测、编造或截取一个名字调用工具**；必须先与用户确认要查找的用户名后再执行。\n- **结果较多时建议追加过滤**：当仅按 `username` 查询返回的成员较多（如同名情况）时，**应建议用户补充 `job_title` 或 `department_name`** 进一步过滤后再次调用 `contact_search`，提升匹配精准度，减少候选项；不得在用户未确认的情况下自行选择某一条。\n- **唯一命中的返回特性**：当 `contact_search` 搜索结果**只有一条**时，工具仅返回该成员的 `open_id` 字段，**不会返回 `user_name` / `job_title` / `department` 等其他成员信息**。此时模型可直接将该 `open_id` 用于后续工具（如 `meeting_invitees_add` / `meeting_control_call`），**无需也无法**基于该响应向用户展示部门/职位等字段；如确需展示成员名称用于二次确认，应使用用户原始口径中的姓名，**严禁伪造**职位/部门信息。\n- **多结果必须由用户确认（强约束）**：当 `contact_search` 返回**多条候选结果**（典型如同名/同部门成员）时，**严禁**模型基于职位、部门、入职时间、匹配度等任何维度**自行选择**某一条继续后续操作（如 `meeting_invitees_add` / `meeting_control_call` / `meeting_control_kick` 等）。必须将候选项的关键信息以**清晰列表**形式展示给用户（仅展示昵称 + 职位 / 部门），并明确询问\"请确认要选择哪一项\"，待用户**明确指定**后再继续执行。**即便其中某条结果看起来\"明显更匹配\"，也必须等待用户确认，不得跳过该步骤**。\n- **隐私展示白名单（强约束）**：通讯录返回的数据可能包含工号、手机号、邮箱等敏感字段。**向用户展示时仅允许出现「姓名（昵称）/ 部门 / 职位」三类字段**，**严禁擅自展示工号、手机号、邮箱、`open_id`、`userid`、`ms_open_id` 等任何其他敏感字段**，即便用户的初始输入中包含某项敏感字段也不得在搜索响应中回显原文（如需回显须按 `references/privacy_policy.md` 脱敏）。\n- 手机号、邮箱属于强敏感信息，调用前**禁止在对话中复述明文**，必要时按 `references/privacy_policy.md` 脱敏展示\n- 单次最多 50 个手机号/邮箱，超限时分批查询，**严禁自行截断**\n- 查询不到用户时，可能是跨企业、用户未加入通讯录、企业关闭了通讯录搜索权限等原因，原样告知用户，禁止猜测\n\n**输出规范**\n- 展示命中成员时**仅允许**「昵称 / 职位 / 部门」三个字段，禁止展示工号、手机号、邮箱、open_id 等敏感字段\n- `open_id` 作为内部参数使用，向用户展示时优先昵称\n- 唯一命中时由于工具仅返回 `open_id`，应直接进入后续操作流程（按需向用户用其原始口径中的姓名做二次确认），**严禁伪造部门/职位信息**\n\n---\n\n### 场景11：管理会议受邀人\n\n**触发条件**\n用户要求查看、添加、移除、替换已有会议的受邀成员\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting_invitees` 查询当前受邀人列表\n3. 若用户仅提供姓名/手机号/邮箱，按场景9获取 open_id\n4. 根据需求选择工具：\n   - **添加** → `meeting_invitees_add`（增量添加，不影响已有）\n   - **移除** → `meeting_invitees_remove`（按 open_id 精确移除）\n   - **整体替换** → `meeting_invitees_replace`（用新列表完全覆盖；传空数组表示**清空所有受邀人**）\n5. 向用户展示变更摘要（**新增 / 移除 / 替换前 → 替换后**，均用昵称展示），获得明确同意后再执行\n\n**注意事项**\n- 仅**会议主持人**可操作受邀人变更，非主持人会返回权限错误\n- `remove` / `replace` 属于不可逆操作，二次确认是强制要求（见核心规范\"敏感操作\"）\n- `replace` 传空数组将**清空全部受邀人**，必须向用户强调影响并获得明确同意\n- 单次最多 100 个 open_id，超限时分批 `add`，**严禁自行截断**\n- 若用户希望\"用 X 替换 Y\"这类局部替换，**推荐组合使用** `remove` + `add` 两步操作，避免误用 `replace` 清空其他成员\n\n**输出规范（强约束 - 受邀人变更专用回复模板）**\n\n执行 `meeting_invitees_add` / `meeting_invitees_remove` / `meeting_invitees_replace` 成功后，回复**必须**严格按以下模板组织字段，且**仅展示这些字段**：\n\n- **会议主题**\n- **会议时间**（开始时间 ~ 结束时间，含时区）\n- **会议号**（`meeting_code`，**严禁**展示 `meeting_id`）\n- **入会链接**（`join_url`）\n- **已邀请成员**（操作完成后**当前完整**的受邀成员列表）\n\n附带 `X-Tc-Trace` / `rpcUuid` 追踪信息。\n\n「已邀请成员」展示规则（严格遵守）：\n1. **必须展示通讯录中的姓名**（如 `张三`），**严禁**直接展示 `open_id` / `userid` / `ms_open_id` / 花名 / 邮箱前缀等任何内部标识\n2. 姓名来源**仅限以下两种**，按优先级回退：\n   - 优先使用 `get_meeting_invitees` 响应中的 `user_name` 字段（变更操作后**应再次调用** `get_meeting_invitees` 获取最新完整列表，从中读取 `user_name`）\n   - 次选使用本轮对话中用户原始口径里的姓名（如用户输入\"加上张三\"，则该 `open_id` 对应\"张三\"）\n   - **严禁**调用 `contact_search` 反查 `open_id` 取姓名（该工具仅支持姓名→open_id 正查，不支持反查）\n3. 若以上两种来源均无法获得姓名，标注为 `未知成员`，**禁止回退到打印 `open_id`**\n4. 当且仅当用户**明确**要求\"展示 ID / 原始字段\"时，才可附带展示 `open_id`\n5. 会议主题、会议号、入会链接等基础字段若变更接口响应未直接返回，**应通过 `get_meeting --meeting-id` 补齐**，不得遗漏字段或用 `-` / `N/A` 占位\n\n---\n\n### 场景12：会中控制（呼叫 / 踢人）\n\n**触发条件**\n用户要求在进行中的会议中：呼叫某成员加入、踢出某成员\n\n**处理流程（呼叫）**\n1. 确认会议正在进行（用户口径或先调 `get_meeting` 校验状态）\n2. 若用户仅提供姓名/手机号/邮箱，按场景9获取 open_id\n3. 向用户展示**被呼叫成员名单**（昵称），获得明确同意\n4. 调用 `meeting_control_call`（`users` 最多 20 个 open_id）\n\n**处理流程（踢人）**\n1. 确认会议正在进行\n2. **必须先调用 `get_meeting_participants`** 查询当前参会成员，从其返回结果中定位待踢成员；**严禁使用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 的返回值作为踢人入参**\n3. **【字段路由表 — 强制，按 `get_meeting_participants` 返回的 `instanceid` 判定，禁止凭印象分类】**\n\n   | `instanceid` | 入参字段 | 使用的 id 字段 |\n      |---|---|---|\n   | `PSTN`（电话入会） | `pstn_users` | **`ms_open_id`** |\n   | `SIP`（SIP 设备） | `sip_users` | **`ms_open_id`** |\n   | 其他（`Mac` / `Windows` / `iOS` / `Android` / `Web` 等） | `users` | **`open_id`** |\n\n   **硬规则（必须遵守，跨多轮会话同样适用）**：\n    - ⛔ 凡 `instanceid ∈ {PSTN, SIP}` 的成员，**严禁放入 `users`**；必须走 `pstn_users` / `sip_users` 并使用 `ms_open_id`。\n    - ⛔ 凡某成员 **`open_id` 为空字符串**（PSTN/SIP 入会成员的典型特征），**必属** PSTN/SIP，**严禁放入 `users`**，必须按 `instanceid` 走对应字段。\n    - ⛔ **禁止默认把所有人塞进 `users`**：每个待踢成员都必须逐一查 `instanceid` 后再分桶，尤其在多轮会话上下文较长时，**不得凭记忆或惯性归类**。\n4. **数据清洗（建索引/分桶前必做）**：\n    - **只认在会成员**：`get_meeting_participants` 会返回带 `left_time`（非 null）的历史离会记录，**必须过滤掉 `left_time != null` 的条目**，避免误匹配/误踢已离会成员。\n    - **跳过空 id**：建立 id→成员 索引时，`open_id` / `ms_open_id` 为空字符串的键一律跳过，避免空串互相覆盖。\n    - **去重**：同一成员可能出现多条记录，按 id 去重。\n5. **`users` / `sip_users` / `pstn_users` 至少一个非空，三者总数 ≤ 20**\n6. 询问用户 `allow_rejoin`（是否允许被踢成员重新加入，默认 `true`=允许）\n7. 向用户**完整展示**被踢名单 + `allow_rejoin` 取值，获得明确同意后调用 `meeting_control_kick`\n\n**注意事项**\n- 踢人是会中破坏性操作，二次确认是强制要求（见核心规范\"敏感操作\"）\n- **不允许踢自己**；非主持人 / 联席主持人无权限\n- 已离开的成员、被叫方占线/拒接等场景，按 `references/error_dictionary.md` 指引向用户告知\n- 单次最多 20 个，超限分批，**严禁自行截断**\n- 若 `get_meeting_participants` 中查不到用户口径所指的成员，应原样告知用户\"该成员当前不在会议中\"，**严禁回退到 `contact_search` 反查 open_id 后强行踢人**\n\n**输出规范**\n- 呼叫：展示成功呼叫的成员清单（昵称）+ 失败成员及原因 + 追踪信息\n- 踢人：展示成功踢出的成员清单（昵称）+ `allow_rejoin` 结果 + 失败成员及原因 + 追踪信息\n\n---\n\n## 工具索引\n\n| 工具 | 说明 | 所属场景 |\n|------|------|-------------------|\n| `convert_timestamp` | 时间转换，获取当前/相对时间，UTC 时间戳转换 | 场景1（前置）、核心规范-时间处理 |\n| `schedule_meeting` | 创建会议，支持普通/周期性会议，可选 `invitees` 一并指定受邀人 | 场景1 |\n| `update_meeting` | 修改会议信息，可选 `invitees` + `invitees_operate_type` 同步增删替换受邀人 | 场景2、场景11 |\n| `cancel_meeting` | 取消会议，支持子会议/整场周期性会议 | 场景3 |\n| `get_meeting` | 通过 meeting_id 查询会议详情 | 场景2/3/4 |\n| `get_meeting_by_code` | 通过会议号转换为 meeting_id | 通用规则-Code转换 |\n| `get_meeting_participants` | 获取参会成员明细 | 场景4 |\n| `get_meeting_invitees` | 获取受邀成员列表 | 场景4、场景11（变更前展示） |\n| `get_waiting_room` | 查询等候室成员 | 场景4 |\n| `export_participants` | 异步导出参会成员统计（含累计参会时长、会议互动行为等统计），返回 job_id | 场景4 |\n| `get_job_result` | 获取异步导出任务结果（状态、下载链接） | 场景4 |\n| `manage_waiting_room` | 管理会中等候室成员 | 场景5 |\n| `get_user_meetings` | 查询未开始/进行中的会议列表 | 场景6 |\n| `get_user_ended_meetings` | 查询已结束的历史会议列表 | 场景6 |\n| `search_meetings` | 搜索会议列表，支持关键词、搜索字段、会议号、时间窗口等过滤 | 场景6 |\n| `get_records_list` | 查询录制文件列表 | 场景7 |\n| `search_records` | 搜索录制文件，支持关键词、搜索字段、时间窗口、会议、文件类型等过滤 | 场景7 |\n| `get_record_addresses` | 获取录制播放地址 | 场景7 |\n| `get_transcripts_paragraphs` | 获取转写段落 ID 列表 | 场景7 |\n| `get_transcripts_details` | 通过 pid 获取转写文本 | 场景7 |\n| `search_transcripts` | 搜索转写关键词 | 场景7 |\n| `get_smart_minutes` | 获取 AI 智能纪要 | 场景7 |\n| `search_minutes` | 搜索元宝纪要，支持关键词、时间窗口过滤 | 场景7A |\n| `get_minutes` | 查询元宝纪要详情，支持获取概览/要点/待办/滚动总结 | 场景7A |\n| `apply_record_permission_prepare` | 录制权限申请-预览，展示申请的会议标题/所有者/申请人等信息供用户确认 | 场景9 |\n| `apply_record_permission_commit` | 录制权限申请-提交，用户确认后正式发起申请，返回审批链接 | 场景9 |\n| `contact_search` | 按姓名/职位/部门搜索企业通讯录成员（仅限会议邀请、呼叫入会场景），返回 open_id | 场景10 |\n| `contact_lookup_by_phone` | 按手机号批量查找企业用户（仅限会议邀请、呼叫入会场景）（最多 50），返回 open_id | 场景10 |\n| `contact_lookup_by_email` | 按邮箱批量查找企业用户（仅限会议邀请、呼叫入会场景）（最多 50），返回 open_id | 场景10 |\n| `meeting_invitees_add` | 向已创建会议增量添加受邀人（最多 100，仅主持人可操作） | 场景11 |\n| `meeting_invitees_remove` | 从会议中移除指定受邀人（仅主持人可操作） | 场景11 |\n| `meeting_invitees_replace` | 用新列表整体替换会议受邀人（传空数组=清空，仅主持人可操作） | 场景11 |\n| `meeting_control_call` | 会中批量呼叫成员入会（最多 20） | 场景12 |\n| `meeting_control_kick` | 会中踢出成员，支持普通/SIP/PSTN，可选 `allow_rejoin` | 场景12 |\n| `submit_feedback` | Agent 意见箱，主动上报工具缺失/错误/能力不足/结果异常/建议（强制触发场景） | 场景8 |\n| `check_skill_version` | 检查技能版本更新 | 核心规范-版本管理 |\n| `get_skill_update_preference` | 查询本地更新偏好与 snooze 决策（是否需要弹出更新提示） | 核心规范-版本管理 |\n| `set_skill_update_preference` | 设置本地更新偏好（snooze 暂不更新 / auto_upgrade / disable_optional_check / enable_optional_check） | 核心规范-版本管理 |\n\nFile v1.0.15:_meta.json\n\n{\n  \"ownerId\": \"kn7c9wqemzmqtst4fydbe2xyc182xfkf\",\n  \"slug\": \"tencent-meeting-skill\",\n  \"version\": \"1.0.15\",\n  \"publishedAt\": 1788353762054\n}\n\nFile v1.0.15:references/api_references.md\n\n# 腾讯会议 MCP 工具调用示例\n\n本文件提供各工具的调用示例。参数说明已集成到 MCP 工具 Schema 中，可通过 `tools/list` 查看。\n\n---\n\n## 目录\n\n- [会议管理](#会议管理)\n  - [创建会议](#schedule_meeting--创建会议)\n  - [修改会议](#update_meeting--修改会议)\n  - [取消会议](#cancel_meeting--取消会议)\n  - [查询会议详情](#get_meeting--查询会议详情)\n  - [通过会议号查询](#get_meeting_by_code--通过会议号查询)\n- [成员管理](#成员管理)\n  - [获取参会成员明细](#get_meeting_participants--获取参会成员明细)\n  - [获取受邀成员列表](#get_meeting_invitees--获取受邀成员列表)\n  - [查询等候室成员](#get_waiting_room--查询等候室成员)\n  - [管理会中等候室成员](#manage_waiting_room--管理会中等候室成员)\n  - [查询用户会议列表](#get_user_meetings--查询用户会议列表)\n  - [查询已结束会议](#get_user_ended_meetings--查询已结束会议)\n  - [搜索会议列表](#search_meetings--搜索会议列表)\n  - [导出参会成员统计](#export_participants--导出参会成员统计)\n  - [获取异步任务结果](#get_job_result--获取异步任务结果)\n- [录制与转写](#录制与转写)\n  - [查询录制列表](#get_records_list--查询录制列表)\n  - [搜索录制文件](#search_records--搜索录制文件)\n  - [获取录制下载地址](#get_record_addresses--获取录制下载地址)\n  - [查询转写详情](#get_transcripts_details--查询转写详情)\n  - [查询转写段落](#get_transcripts_paragraphs--查询转写段落)\n  - [搜索转写内容](#search_transcripts--搜索转写内容)\n  - [获取智能纪要](#get_smart_minutes--获取智能纪要)\n  - [搜索元宝纪要](#search_minutes--搜索元宝纪要)\n  - [查询元宝纪要详情](#get_minutes--查询元宝纪要详情)\n- [录制权限申请](#录制权限申请)\n  - [申请录制权限-预览](#apply_record_permission_prepare--申请录制权限-预览)\n  - [申请录制权限-提交](#apply_record_permission_commit--申请录制权限-提交)\n- [通讯录](#通讯录)\n    - [搜索企业通讯录](#contact_search--搜索企业通讯录)\n    - [按手机号批量查找用户](#contact_lookup_by_phone--按手机号批量查找用户)\n    - [按邮箱批量查找用户](#contact_lookup_by_email--按邮箱批量查找用户)\n- [受邀人管理](#受邀人管理)\n    - [添加受邀人](#meeting_invitees_add--添加受邀人)\n    - [移除受邀人](#meeting_invitees_remove--移除受邀人)\n    - [替换受邀人](#meeting_invitees_replace--替换受邀人)\n- [会中控制](#会中控制)\n    - [呼叫成员入会](#meeting_control_call--呼叫成员入会)\n    - [踢出会议成员](#meeting_control_kick--踢出会议成员)\n- [反馈](#反馈)\n  - [提交反馈（Agent 意见箱）](#submit_feedback--提交反馈agent-意见箱)\n\n---\n\n## 会议管理\n\n### `schedule_meeting` — 创建会议\n\n#### 调用示例\n\n```bash\n# 普通会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品周会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\"\n  }\n}'\n\n# 周期性会议（每周开会，共重复5次）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"每周例会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"meeting_type\": 1,\n    \"recurring_rule\": {\n      \"recurring_type\": 2,\n      \"until_type\": 1,\n      \"until_count\": 5\n    }\n  }\n}'\n\n# 创建会议时同时指定受邀人（invitees 为 open_id 数组，最多 100）\n# open_id 需先通过 contact_search / contact_lookup_by_phone / contact_lookup_by_email 获取\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品评审会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"invitees\": [\"open_id_xxx\", \"open_id_yyy\"]\n  }\n}'\n```\n\n---\n\n### `update_meeting` — 修改会议\n\n#### 调用示例\n\n```bash\n# 修改非周期性会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"subject\": \"新主题\",\n    \"start_time\": \"2026-03-25T16:00:00+08:00\",\n    \"end_time\": \"2026-03-25T17:00:00+08:00\"\n  }\n}'\n\n# 修改周期性会议其中一场子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"start_time\": \"2026-03-26T10:00:00+08:00\",\n    \"end_time\": \"2026-03-26T11:00:00+08:00\",\n    \"meeting_type\": 1,\n    \"recurring_rule\": {\n      \"sub_meeting_id\": \"yyy\"\n    }\n  }\n}'\n\n# 修改会议时同步增量添加受邀人（invitees_operate_type=\"add\"）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_aaa\", \"open_id_bbb\"],\n    \"invitees_operate_type\": \"add\"\n  }\n}'\n\n# 修改会议时同步整体替换受邀人（invitees_operate_type=\"replace\"，传空数组=清空）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_ccc\"],\n    \"invitees_operate_type\": \"replace\"\n  }\n}'\n```\n\n> `invitees_operate_type` 取值（字符串枚举）：`\"add\"`（增量添加）/ `\"remove\"`（批量移除）/ `\"replace\"`（整体替换）。\n> `invitees` 与 `invitees_operate_type` 必须**成对出现**，缺一报参数错误。\n> 仅做受邀人变更（无其他字段修改）时，推荐使用 `meeting_invitees_add` / `_remove` / `_replace` 专用工具。\n\n---\n\n### `cancel_meeting` — 取消会议\n\n#### 调用示例\n\n```bash\n# 取消普通会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\"\n  }\n}'\n\n# 取消周期性会议的某个子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"sub_meeting_id\": \"yyy\"\n  }\n}'\n\n# 取消整场周期性会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"meeting_type\": 1\n  }\n}'\n```\n\n---\n\n### `get_meeting` — 查询会议详情\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_meeting_by_code` — 通过会议号查询\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n## 成员管理\n\n### `get_meeting_participants` — 获取参会成员明细\n\n#### 调用示例\n\n```bash\n# 分页接续：首次不传 page_token；响应 has_more=true 时，将 next_page_token 回填继续翻页\n# 可选按参会时间过滤：叠加传 start_time / end_time 即可\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_meeting_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"page_size\": 20,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n```\n\n---\n\n### `get_meeting_invitees` — 获取受邀成员列表\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_waiting_room` — 查询等候室成员\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `manage_waiting_room` — 管理会中等候室成员\n\n#### 调用示例\n\n```bash\n# 将等候室成员移入会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"enter-meeting\"\n  }\n}'\n\n# 将会中成员移入等候室\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"back-to-waiting\"\n  }\n}'\n\n# 将等候室成员移出等候室，并允许再次加入会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"expel\",\n    \"allow_rejoin\": true\n  }\n}'\n```\n\n---\n\n### `get_user_meetings` — 查询用户会议列表\n\n#### 调用示例\n\n```bash\n# 分页接续：首次不传 page_token；has_more=true 时，回填上次的 next_page_token 继续翻页\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_user_meetings\",\n  \"arguments\": {\n    \"is_show_all_sub_meetings\": 0,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n```\n\n---\n\n### `get_user_ended_meetings` — 查询已结束会议\n\n#### 调用示例\n\n```bash\n# 时间窗口 + 分页接续：首次不传 page_token；has_more=true 时回填继续翻页\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_user_ended_meetings\",\n  \"arguments\": {\n    \"start_time\": \"2026-03-25T00:00:00+08:00\",\n    \"end_time\": \"2026-03-25T23:59:59+08:00\",\n    \"page_size\": 10,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n```\n\n---\n\n### `search_meetings` — 搜索会议列表\n\n> `q_fields` 取值：`subject`（主题，分词匹配）/ `creator`（创建人昵称，模糊匹配）/ `note`（备注，模糊匹配）/ `all`（所有字段）。`page_size` 上限 30。\n\n#### 调用示例\n\n```bash\n# 关键词搜索（q_fields 按需切换：subject / creator / note / all）+ 分页接续\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_meetings\",\n  \"arguments\": {\n    \"q\": \"产品周会\",\n    \"q_fields\": \"subject\",\n    \"page_size\": 30,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n\n# 按会议号精准查询\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_meetings\",\n  \"arguments\": {\n    \"meeting_code\": \"904854736\"\n  }\n}'\n\n# 按时间窗口筛选\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_meetings\",\n  \"arguments\": {\n    \"from\": \"2026-03-20T00:00:00+08:00\",\n    \"to\": \"2026-03-25T23:59:59+08:00\",\n    \"page_size\": 30\n  }\n}'\n```\n\n---\n\n### `export_participants` — 导出参会成员统计\n\n> 异步导出参会成员统计数据（含累计参会时长、会议互动行为等统计），适用于考勤分析等场景。返回 `job_id`，需通过 `get_job_result` 查询导出结果。\n\n#### 调用示例\n\n```bash\n# 基础导出（默认 xlsx 格式）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\"\n  }\n}'\n\n# 指定导出为 json 格式\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"file_type\": \"json\"\n  }\n}'\n\n# 周期性会议导出某场子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"sub_meeting_id\": \"yyy\"\n  }\n}'\n\n# 按入会时间范围筛选导出\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"start_time\": \"2026-03-01T00:00:00+08:00\",\n    \"end_time\": \"2026-03-25T23:59:59+08:00\",\n    \"file_type\": \"xlsx\"\n  }\n}'\n```\n\n---\n\n### `get_job_result` — 获取异步任务结果\n\n> 通过 `export_participants` 等异步导出接口返回的 `job_id` 查询任务状态及下载链接。任务状态：1-成功（可获取下载链接，有效期2小时）、2-失败（查看 error_msg）、3-处理中（稍后重试）。\n\n#### 调用示例\n\n```bash\n# 查询导出任务结果\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_job_result\",\n  \"arguments\": {\n    \"job_id\": \"zzlWxxxxxxxxxxxxxxxxiTs\"\n  }\n}'\n```\n\n---\n\n## 录制与转写\n\n### `get_records_list` — 查询录制列表\n\n> **三种查询模式互斥**：`start_time + end_time`（时间跨度 ≤ 31 天，可翻页）/ `meeting_id`（无需时间）/ `meeting_code`（无需时间）。同一次调用只使用其中一种。\n\n#### 调用示例\n\n```bash\n# 按时间范围查询 + 分页接续（跨度 ≤ 31 天）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_records_list\",\n  \"arguments\": {\n    \"start_time\": \"2026-03-25T00:00:00+08:00\",\n    \"end_time\": \"2026-03-25T23:59:59+08:00\",\n    \"page_size\": 10,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n\n# 按会议 ID 查询（无需传时间）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_records_list\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\"\n  }\n}'\n\n# 按会议号查询（无需传时间）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_records_list\",\n  \"arguments\": {\n    \"meeting_code\": \"904854736\"\n  }\n}'\n```\n\n---\n\n### `search_records` — 搜索录制文件\n\n> `q_fields` 取值分为两类，**snippet 返回行为不同**：\n> - **返回 snippet**：`transcript_content`（转写原文）/ `smart_minutes`（智能纪要）/ `timeline`（时间轴），均为分词匹配\n> - **不返回 snippet**：`subject`（主题，分词匹配）/ `creator`（创建人昵称，模糊匹配）/ `all`（所有字段，按各字段自身方式匹配）\n>\n> `page_size` 上限 30。可用 `meeting_id` / `meeting_code` 精准定位；`file_type` 可选 `video` 等。\n\n#### 调用示例\n\n```bash\n# 关键词搜索（q_fields 按需切换）+ 分页接续\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"q\": \"技术架构\",\n    \"q_fields\": \"transcript_content\",\n    \"page_size\": 20,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n\n# 按会议 ID / 会议号定位（二选一）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"page_size\": 20\n  }\n}'\n\n# 按时间窗口 + 文件类型筛选\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"from\": \"2026-03-20T00:00:00+08:00\",\n    \"to\": \"2026-03-25T23:59:59+08:00\",\n    \"file_type\": \"video\",\n    \"page_size\": 20\n  }\n}'\n```\n\n---\n\n### `get_record_addresses` — 获取录制下载地址\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_transcripts_details` — 查询转写详情\n\n参数以 MCP schema 为准（`tools/list`）；`pid` 为字符串型起始段落号（首页传 `\"0\"`），`limit` 为数字型。\n\n---\n\n### `get_transcripts_paragraphs` — 查询转写段落\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `search_transcripts` — 搜索转写内容\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_smart_minutes` — 获取智能纪要\n\n参数以 MCP schema 为准（`tools/list`）；可选 `lang`（默认 `default` 原文，可传 `en` 等指定翻译语言）与 `pwd`（录制文件访问密码，仅当录制设置了密码时需要）。\n\n### `search_minutes` — 搜索元宝纪要\n\n> **纪要搜索路由策略**：用户说「搜索纪要」「找纪要」时，需先判断录制权限再决定路由：\n> - **有录制权限**：优先调用 `search_records`（`q_fields=smart_minutes`）搜录制纪要，无结果再降级调用 `search_minutes` 搜元宝纪要\n> - **无录制权限**：直接调用 `search_minutes` 搜元宝纪要\n> - **细节/原话类问题**（如「谁说要延期」）：直接走录制逐字稿 `search_records`（`q_fields=transcript_content`）或 `search_transcripts`\n> - **无录制权限 + 需要逐字稿**：引导用户申请录制权限（场景9）\n>\n> 详细路由规则见 SKILL.md 场景7A「纪要搜索路由策略」。\n\n#### 调用示例\n\n```bash\n# 【路由示例1】有录制权限时，用户说\"搜索纪要\"——优先搜录制纪要\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"q\": \"产品评审\",\n    \"q_fields\": \"smart_minutes\",\n    \"page_size\": 20\n  }\n}'\n# 若录制纪要无结果，降级搜元宝纪要\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_minutes\",\n  \"arguments\": {\n    \"q\": \"产品评审\",\n    \"page_size\": 20\n  }\n}'\n\n# 【路由示例2】无录制权限时，直接搜元宝纪要\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_minutes\",\n  \"arguments\": {\n    \"q\": \"产品评审\",\n    \"page_size\": 20\n  }\n}'\n\n# 【路由示例3】细节/原话类问题（如\"谁说要延期\"）——直接走录制逐字稿\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"q\": \"延期\",\n    \"q_fields\": \"transcript_content\",\n    \"page_size\": 20\n  }\n}'\n\n# 按关键词搜索元宝纪要\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_minutes\",\n  \"arguments\": {\n    \"q\": \"产品评审\",\n    \"page_size\": 20\n  }\n}'\n\n# 按时间窗口搜索\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_minutes\",\n  \"arguments\": {\n    \"from\": \"2026-03-01T00:00:00+08:00\",\n    \"to\": \"2026-03-31T23:59:59+08:00\",\n    \"page_size\": 20\n  }\n}'\n\n# 关键词 + 时间窗口组合搜索\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_minutes\",\n  \"arguments\": {\n    \"q\": \"技术方案\",\n    \"from\": \"2026-03-20T00:00:00+08:00\",\n    \"to\": \"2026-03-25T23:59:59+08:00\",\n    \"page_size\": 20\n  }\n}'\n\n# 翻页查询\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_minutes\",\n  \"arguments\": {\n    \"q\": \"周会\",\n    \"page_token\": \"上一次响应中的next_page_token\",\n    \"page_size\": 20\n  }\n}'\n```\n\n---\n\n### `get_minutes` — 查询元宝纪要详情\n\n#### 调用示例\n\n```bash\n# 按会议号查询稳态纪要\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_minutes\",\n  \"arguments\": {\n    \"meeting_code\": \"904854736\",\n    \"overview\": true,\n    \"summary_points\": true,\n    \"todos\": true\n  }\n}'\n\n# 按会议ID查询稳态纪要\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_minutes\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"overview\": true,\n    \"summary_points\": true,\n    \"todos\": true\n  }\n}'\n\n# 按会议ID + 子会议ID查询（周期会议）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_minutes\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"sub_meeting_id\": \"xxx\",\n    \"overview\": true,\n    \"summary_points\": true,\n    \"todos\": true\n  }\n}'\n\n# 获取滚动（瞬态）纪要（必须传 minute_id + short_summary=true）\n# ⚠️ 滚动纪要必须自动全量拉取：循环调用直到 has_more=false\n# 首次调用（不传 page_token）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_minutes\",\n  \"arguments\": {\n    \"minute_id\": \"xxx\",\n    \"short_summary\": true\n  }\n}'\n# 响应结构示例：\n# {\n#   \"minute_id\": \"xxx\",\n#   \"items\": [\n#     {\"timestamp\": \"05:30\", \"speakers\": [\"张三\"], \"content\": \"总结内容\"},\n#     ...\n#   ],\n#   \"total_count\": 50,\n#   \"has_more\": true,\n#   \"next_page_token\": \"abc123\"\n# }\n# 若 has_more=true，继续用 next_page_token 拉取下一页：\n\n# 获取滚动纪要 - 续页拉取（循环直到 has_more=false）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_minutes\",\n  \"arguments\": {\n    \"minute_id\": \"xxx\",\n    \"short_summary\": true,\n    \"page_token\": \"上一次响应中的next_page_token\",\n    \"page_size\": 100\n  }\n}'\n# 将所有分页的 items 聚合后一次性返回给用户\n\n# 稳态纪要翻页查询（page_size 默认10，最大30）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_minutes\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"overview\": true,\n    \"summary_points\": true,\n    \"todos\": true,\n    \"page_token\": \"上一次响应中的next_page_token\",\n    \"page_size\": 10\n  }\n}'\n```\n\n---\n\n## 录制权限申请\n\n> 录制权限申请采用 **两步流程**：先调用 `apply_record_permission_prepare` 获取预览信息向用户展示并确认，\n> 用户明确同意后再调用 `apply_record_permission_commit` 正式提交。**严禁跳过预览阶段直接提交申请。**\n> 触发场景：用户访问录制相关内容（下载地址/转写/智能纪要）出现无权限错误，或用户主动请求申请录制权限。\n\n### `apply_record_permission_prepare` — 申请录制权限-预览\n\n参数以 MCP schema 为准（`tools/list`）；推荐同时携带 `meeting_id`（若已知），便于服务端校验。\n\n#### 返回字段说明\n\n| 字段 | 说明 |\n|------|------|\n| `preview.meeting_record_id` | 会议录制 ID |\n| `preview.approval_name` | 申请类型文案 |\n| `preview.subject` | 会议标题 |\n| `preview.file_owner` | 录制所有者名称 |\n| `preview.apply_note` | 权限申请备注信息 |\n| `preview.applicant` | 申请人名称 |\n| `expires_in` | 预览有效期（秒），接近过期时建议重新调用 |\n\n> **调用后必须**：向用户完整展示预览信息（标题/录制所有者/申请人/申请说明），等待用户明确同意后再调用 commit 工具。\n\n---\n\n### `apply_record_permission_commit` — 申请录制权限-提交\n\n> **前置条件**：已调用 prepare 工具向用户展示预览信息，并获得用户明确同意。\n\n参数与 `apply_record_permission_prepare` 保持一致（若 prepare 传了 `meeting_id`，commit 也应传）。\n\n#### 返回字段说明\n\n| 字段 | 说明 |\n|------|------|\n| `unique_id` | 申请 ID |\n| `status` | 审批状态 |\n| `message` | 审批状态描述 |\n| `approval_url` | 审批链接（**必须展示给用户**，便于跟进审批进度） |\n| `share_text` | 申请说明描述 |\n\n## 通讯录\n\n> **调用场景白名单（强约束）**：通讯录工具（`contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email`）**仅可用于以下两类场景**，用于将姓名/手机号/邮箱**正向解析**为 `open_id`：\n> 1. **会议邀请**：将姓名/手机号/邮箱解析为 `open_id`，用于 `schedule_meeting` / `update_meeting` / `meeting_invitees_add` / `meeting_invitees_replace` 的受邀人入参\n> 2. **呼叫成员入会**：将姓名/手机号/邮箱解析为 `open_id`，用于 `meeting_control_call` 的 `users` 入参\n>\n> **严禁在其他场景下调用通讯录工具**，包括但不限于：仅为查看某人部门/职位/联系方式、好奇某人信息、为通用人员搜索目的、为踢人提供 open_id（应改用 `get_meeting_participants`，详见 `SKILL.md` 场景12）、**将 `open_id` 反查为姓名**（通讯录工具仅支持姓名/手机号/邮箱 → `open_id` 的正向查询，**不支持** `open_id` 反查；姓名回填应使用 `get_meeting_invitees` / `get_meeting_participants` 响应中自带的 `user_name`）。**不得将通讯录作为通用人员信息查询接口使用**。\n>\n> **隐私要点**：手机号、邮箱属于强敏感字段，调用前禁止在对话/日志中复述明文；返回的成员姓名向用户展示时优先使用昵称，必要时按 `privacy_policy.md` 脱敏。\n\n### `contact_search` — 搜索企业通讯录\n\n参数以 MCP schema 为准（`tools/list`）；`username` 必填，同名较多时叠加 `department_name` / `job_title` 过滤后再次调用。\n\n#### 返回字段说明\n\n| 字段 | 说明 |\n|------|------|\n| `members[].open_id` | 成员 open_id（用于后续工具） |\n| `members[].user_name` | 用户名（向用户展示时按隐私规则处理） |\n| `members[].job_title` | 职位 |\n| `members[].department` | 部门 |\n\n> **唯一命中的返回特性**：当搜索结果**只有一条**时，工具仅返回该成员的 `open_id` 字段，**不会返回 `user_name` / `job_title` / `department` 等其他成员信息**。模型可直接将该 `open_id` 用于后续工具（如会议邀请、呼叫入会），**无需也无法**基于该响应向用户展示部门/职位等字段；**严禁基于该响应伪造部门/职位信息**。\n\n#### 使用约束（强约束）\n\n- **`username` 为必填**：缺失会直接报错，**严禁模型自行猜测/编造姓名**，必须先与用户确认要查找的用户名后再调用。\n- **结果较多时建议追加过滤**：仅按 `username` 命中较多（如同名）时，应建议用户补充 `job_title` 或 `department_name` 进一步过滤后**再次调用** `contact_search`，提升匹配精准度。\n- **多结果必须由用户确认（强约束）**：命中多人时**必须向用户展示候选列表（昵称 + 职位 / 部门）由用户选择**，**严禁**模型基于职位、部门、入职时间、匹配度等任何维度**自行选择**某一条继续后续操作。**即便其中某条结果看起来\"明显更匹配\"，也必须等待用户明确指定，不得跳过该步骤**。\n- **隐私展示白名单**：向用户展示时**仅允许**「姓名（昵称）/ 部门 / 职位」三类字段，**严禁擅自展示工号、手机号、邮箱、`open_id`、`userid`、`ms_open_id` 等任何其他敏感字段**。\n\n---\n\n### `contact_lookup_by_phone` — 按手机号批量查找用户\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `phones` 单次最多 50 个，超限时分批查询，**禁止自行截断**\n- 手机号格式非法 / 用户不存在 / 跨企业 时按 `error_dictionary.md` 指引处理\n\n---\n\n### `contact_lookup_by_email` — 按邮箱批量查找用户\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `emails` 单次最多 50 个，超限时分批查询，**禁止自行截断**\n\n---\n\n## 受邀人管理\n\n> 仅**会议主持人**可操作；`remove` / `replace` 属于不可逆操作，调用前**必须**先调 `get_meeting_invitees` 向用户展示当前列表并获得明确同意（详见 SKILL.md 场景11）。\n\n### `meeting_invitees_add` — 添加受邀人\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `invitees` 为 open_id 数组，单次最多 100 个\n- 仅增量添加，已在受邀列表中的成员会被去重忽略\n\n---\n\n### `meeting_invitees_remove` — 移除受邀人\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- 移除操作不可逆，调用前必须二次确认\n- 不在受邀列表中的 open_id 会被忽略\n\n---\n\n### `meeting_invitees_replace` — 替换受邀人\n\n#### 调用示例\n\n```bash\n# 整体替换为新列表\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"meeting_invitees_replace\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_xxx\", \"open_id_yyy\"]\n  }\n}'\n\n# 清空所有受邀人（传空数组）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"meeting_invitees_replace\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": []\n  }\n}'\n```\n\n#### 注意事项\n\n- **`invitees` 传空数组将清空所有受邀人**，必须向用户强调影响并获得明确同意\n- 整体覆盖语义，不在新列表中的原受邀人会被全部移除\n- 局部替换场景（\"用 X 换掉 Y\"）**推荐使用 `remove` + `add` 组合**，避免误清空其他成员\n\n---\n\n## 会中控制\n\n> 会中控制工具用于**进行中**的会议；`meeting_control_kick` 是破坏性操作，必须严格二次确认（详见 SKILL.md 场景12）。\n\n### `meeting_control_call` — 呼叫成员入会\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `users` 为 open_id 数组，单次最多 20 个\n- 被叫方占线 / 用户已在会中 / 无呼叫权限等错误按 `error_dictionary.md` 指引处理\n\n---\n\n### `meeting_control_kick` — 踢出会议成员\n\n#### 调用示例\n\n```bash\n# 三类成员可同时传（users / sip_users / pstn_users 至少一个非空，三者总数 ≤ 20）\n# 具体分桶规则见下方\"字段路由表\"，按 get_meeting_participants 返回的 instanceid 判定\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"meeting_control_kick\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"users\": [\"open_id_aaa\"],\n    \"sip_users\": [\"ms_open_id_sip_yyy\"],\n    \"pstn_users\": [\"ms_open_id_pstn_xxx\"],\n    \"allow_rejoin\": true\n  }\n}'\n```\n\n#### 注意事项\n\n- `users` / `sip_users` / `pstn_users` **至少一个非空**，三者总数 **≤ 20**\n- `allow_rejoin` 传`false`（不允许重新加入）；传 `true` 表示**允许**被踢者重新加入。必须向用户明确确认取值\n- 不允许踢自己；非主持人 / 联席主持人无权限\n- 调用前必须向用户**完整展示**被踢名单 + `allow_rejoin` 值并获得明确同意\n\n#### 字段路由表（强制，按 `get_meeting_participants` 返回的 `instanceid` 判定）\n\n| `instanceid` | 入参字段 | 使用的 id 字段 |\n|---|---|---|\n| `PSTN`（电话入会） | `pstn_users` | **`ms_open_id`** |\n| `SIP`（SIP 设备） | `sip_users` | **`ms_open_id`** |\n| 其他（`Mac` / `Windows` / `iOS` / `Android` / `Web` 等） | `users` | **`open_id`** |\n\n**硬规则（跨多轮会话同样适用，禁止凭印象/惯性分类）**：\n\n- ⛔ 凡 `instanceid ∈ {PSTN, SIP}` 的成员，**严禁放入 `users`**，必须走 `pstn_users` / `sip_users` 并使用 `ms_open_id`。\n- ⛔ 凡某成员 **`open_id` 为空字符串**（PSTN/SIP 入会成员的典型特征），**必属** PSTN/SIP，**严禁放入 `users`**。\n- ⛔ **禁止默认把所有人塞进 `users`**：每个待踢成员都必须逐一查 `instanceid` 后再分桶。\n\n**分桶前数据清洗**：\n\n- **过滤历史记录**：剔除 `get_meeting_participants` 中 `left_time != null` 的已离会条目，仅对在会成员操作。\n- **跳过空 id**：建立 id 索引时，`open_id` / `ms_open_id` 为空串的键一律跳过。\n- **去重**：同一成员可能出现多条记录，按 id 去重。\n\n> ⚠️ **常见失败根因**：把 PSTN/SIP 成员误塞进 `users`、或对其使用了空的 `open_id`，会导致服务端**静默踢出失败**（接口返回成功但成员仍在会）。务必严格按上表核对 `instanceid` 与 id 字段。\n\n---\n\n## 反馈\n\n### `submit_feedback` — 提交反馈（Agent 意见箱）\n\n> 由 Agent 调用，用于上报工具缺失、工具报错、能力不足、结果异常或改进建议。\n> 参数定义、枚举、长度限制、关联字段条件必填等约束以工具自身的 MCP schema 为准（通过 `tools/list` 获取）；调用时机与输出规范详见 SKILL.md 场景8。\n\n#### 调用示例\n\n```bash\n# 1. 找不到对应工具\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"tool_not_found\",\n    \"intent\": \"订阅会议变更事件，实时感知会议被修改/取消\"\n  }\n}'\n\n# 2. 调用工具报错\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"tool_error\",\n    \"intent\": \"查询某场会议的参会成员明细\",\n    \"actions_tried\": \"调用 get_meeting_participants(meeting_id=xxx)\",\n    \"result\": \"返回 9042 无权限\",\n    \"tool_name\": \"get_meeting_participants\",\n    \"error_code\": \"9042\"\n  }\n}'\n\n# 3. 工具能力/参数不足\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"tool_inadequate\",\n    \"intent\": \"按时间范围筛选用户的未来会议列表\",\n    \"actions_tried\": \"调用 get_user_meetings\",\n    \"result\": \"工具不支持 start_time / end_time 参数，无法按时间过滤\",\n    \"tool_name\": \"get_user_meetings\"\n  }\n}'\n\n# 4. 结果不符预期\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"unexpected_result\",\n    \"intent\": \"获取某场会议的智能纪要\",\n    \"actions_tried\": \"调用 get_smart_minutes(record_file_id=xxx)\",\n    \"result\": \"返回空内容，但用户确认会议已生成纪要\",\n    \"tool_name\": \"get_smart_minutes\"\n  }\n}'\n\n# 5. 一般性建议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"suggestion\",\n    \"intent\": \"希望 get_records_list 支持按会议主题模糊搜索\"\n  }\n}'\n```\n\n---\n\n## 相关文档\n\n- **SKILL.md** — 完整的业务规范与触发场景（时间处理、敏感操作、错误处理等通用规则以 SKILL.md 为准）\n- **error_dictionary.md** — 错误处理指引\n- **version_management.md** — 版本管理指引\n\nFile v1.0.15:references/error_dictionary.md\n\n# 错误字典\n\n> 当工具调用返回错误时，**必须**按以下步骤处理，禁止直接将原始错误抛给用户。\n\n## 处理步骤\n\n1. 工具返回错误响应（含错误码、错误信息等）\n2. **立即查阅**本字典，根据错误信息匹配对应条目\n3. 向用户展示：错误原因（来自字典）、建议操作，并附上追踪字段（`X-Tc-Trace` / `rpcUuid`）供排查\n4. 若字典中无对应条目，则原样展示错误信息，并附上追踪字段\n\n## 禁止行为\n\n- **禁止在未查阅本字典的情况下**，直接将原始错误信息抛给用户\n- **禁止自行猜测错误原因**，必须以字典内容为准\n- **禁止重复调用已明确失败的接口**\n\n---\n\n---\n\n## 网络与异常错误\n\n> 当 MCP 工具调用出现网络不通、连接超时、请求失败或其他非预期错误时，按以下指引处理。\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|----------|\n| 网络不通 / 连接超时 / Connection refused / URLError / timeout | 网络异常 | 请检查网络环境；若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n| MCP请求失败 / HTTP 请求失败 / 创建请求失败 | 服务连接异常 | 若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n| 其他非预期异常 | 未知异常 | 展示原始错误信息；若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n\n---\n\n## 通用错误\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|----------|\n| 每天总接口调用次数超过限制 | 限频 | 告知用户已触发每日调用限制，**当天不能再调用该工具**，请明天再试 |\n| 每分钟总接口调用次数超过限制 | 限频 | 告知用户已触发每分钟调用限制，**等待 1 分钟后再重试** |\n| 每分钟单个接口调用次数超过限制 | 限频 | 告知用户已触发每分钟单接口限制，**等待 1 分钟后再重试** |\n| 鉴权失败 / Token 无效 | 鉴权失败 | 告知用户 Token 未配置或已失效，请访问 https://meeting.tencent.com/ai-skill 重新获取 Token 并配置环境变量 `TENCENT_MEETING_TOKEN` |\n\n---\n\n## 会议管理工具\n\n### `get_meeting` — 查询会议详情\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议信息不存在 | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 会议号无效 | 数据不存在 | 告知用户会议号无效，可能已被回收或不存在，请确认会议号 |\n| 查询实时转写失败 | 传参错误 | 检查传入的参数是否符合工具说明，meeting_id 必须为纯数字（uint64） |\n\n---\n\n### `get_meeting_by_code` — 通过会议号查询\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议号无效 | 数据不存在 | 告知用户会议号无效，请确认会议号是否正确（最少 9 位纯数字） |\n| 会议信息不存在 | 数据不存在 | 告知用户会议信息不存在，请确认会议号 |\n| MEETING NOT EXIST | 数据不存在 | 告知用户会议信息不存在，请确认会议号 |\n| 参数异常 | 传参错误 | 会议号（meeting_code）必须是**最少 9 位的纯数字**，请检查后重试 |\n\n---\n\n### `schedule_meeting` — 创建会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| start_time or end_time illegal | 传参错误 | 检查会议开始/结束时间格式，必须为 ISO 8601 格式（如 `2026-03-25T15:00:00+08:00`），且结束时间必须晚于开始时间 |\n| 时间设置错误 | 传参错误 | 检查会议时间设置，开始时间不能早于当前时间，结束时间必须晚于开始时间 |\n\n---\n\n### `update_meeting` — 修改会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议已开始，不能修改会议信息 | 操作限制 | 告知用户会议已开始，**无法修改**，如需调整请等会议结束后重新创建 |\n\n---\n\n### `cancel_meeting` — 取消会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| MEETING CANCLED | 操作限制 | 告知用户该会议已经被取消，无需重复操作 |\n| MEETING NOT EXIST | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 已开始的会议不能取消 | 操作限制 | 告知用户会议已开始，**无法取消**，如需结束请前往会议中操作 |\n| 该操作者可能没有对应的操作权限 | 权限问题 | 告知用户只有**会议创建者**才能取消会议 |\n| meetingId必须是整型 | 传参错误 | meeting_id 必须为纯数字（uint64），请检查参数格式后重试 |\n\n---\n\n## 会议成员工具\n\n### `get_meeting_participants` — 获取参会成员明细\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 无权限操作 | 权限问题 | 告知用户仅限**会议创建者、主持人、联席主持人**（且与创会者同企业）才能查看参会成员 |\n| 周期性会议查询sub_meeting_id参数不可为空 | 传参错误 | 查询周期性会议参会成员时，必须传入 `sub_meeting_id`，可通过 `get_meeting` 获取 `current_sub_meeting_id` |\n| subMeetingId is illegal | 传参错误 | `sub_meeting_id` 格式非法，请检查参数值是否正确 |\n| illegal meeting_id, must be numeric characters | 传参错误 | meeting_id 必须为纯数字（uint64），请检查参数格式 |\n| 查询时间范围不得大于90天 | 传参错误 | 查询时间范围不得超过 **90 天**，请缩小时间范围后重试 |\n| 会议信息不存在 | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n\n---\n\n### `get_meeting_invitees` — 获取受邀成员列表\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 无权限操作 | 权限问题 | 告知用户仅限**会议创建者**才能查询受邀成员列表 |\n\n---\n\n### `get_waiting_room` — 获取等候室成员\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 无权限操作 | 权限问题 | 告知用户仅限**会议创建者、主持人、联席主持人**才能查询等候室成员 |\n\n### `manage_waiting_room` — 管理会中等候室成员\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 没有权限 | 权限问题 | 告知用户操作者需为**会议创建者、主持人、联席主持人**，并具备 `MANAGE_MEETING` 权限 |\n| 操作失败，会议人数已达上限 | 操作限制 | 当前在 `operate_type=enter-meeting` 时较常见，需先释放会议名额后再重试 |\n| 参数非法 | 传参错误 | 请检查参数 |\n| 无权限进行该操作 | 权限问题 | 告知用户当前账号无权限进行该操作，建议检查操作者身份或资源归属 |\n\n---\n\n### `get_user_meetings` — 查询用户会议列表\n\n> 通用限频错误请参考上方「通用错误」章节。\n\n---\n\n## 录制相关工具\n\n### `get_records_list` — 查询录制列表\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 参数非法，请对照接口文档检查您的参数 | 传参错误 | 检查 `meeting_code` 参数是否正确（最少 9 位纯数字），或检查时间参数格式是否为 ISO 8601 |\n| 查询时间范围不得大于31天且开始时间必须早于结束时间 | 传参错误 | 查询时间范围不得超过 **31 天**，且开始时间必须早于结束时间，请调整后重试 |\n| MCP 查询起始时间不得早于 1 年前 | 传参错误 | 查询起始时间不得早于 **1 年前**，请调整 `start_time` 后重试 |\n| 查询起始时间必须早于当前时间 | 传参错误 | `start_time` 不能晚于当前时间，请检查时间参数 |\n| 非法的meeting_id参数 | 传参错误 | meeting_id 必须为纯数字（uint64），请检查参数格式 |\n\n---\n\n### `get_record_addresses` — 获取录制下载地址\n\n| 错误信息 | 问题类型 | 处理指引                                                                        |\n|---------|---------|-----------------------------------------------------------------------------|\n| meeting_record_id为必填参数 | 传参错误 | `meeting_record_id` 为必填参数，需通过 `get_records_list` 获取后传入，且必须为非 0 的纯数字（uint64） |\n| 非法的meeting_record_id参数 | 传参错误 | `meeting_record_id` 格式非法，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取    |\n| 参数非法，请对照接口文档检查您的参数 | 传参错误 | 检查所有参数格式，`meeting_record_id` 必须为非 0 的纯数字（uint64）                            |\n| 录制权限校验失败 | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户没有权限查看该会议的录制，仅限有权限的成员访问                               |\n\n---\n\n### `get_transcripts_details` — 查询转写详情\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 找不到会议录制文件 | 数据不存在 | 检查 `record_file_id` 是否正确，需通过 `get_records_list` 重新获取有效的 `record_file_id` |\n| Invalid RecordFileId | 传参错误 | `record_file_id` 无效，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 纪要无内容 | 数据不存在 | 该会议暂无转写内容，可能未开启转写功能 |\n| 纪要不存在 | 数据不存在 | 该会议的纪要不存在，请确认会议是否已生成转写 |\n| 该录制文件未开启转写 | 操作限制 | 告知用户该录制文件未开启转写功能，无法获取转写内容 |\n| 录制文件已经被删除 | 数据不存在 | 告知用户录制文件已被删除，无法获取转写内容 |\n| oauth corp cannot query minutes | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户当前账号**暂无权限**使用转写查询工具 |\n| 获取会议纪要错误 | 其他问题 | 服务端异常，可稍后重试；若持续失败请联系腾讯会议支持 |\n\n---\n\n### `get_transcripts_paragraphs` — 查询转写段落列表\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 找不到会议录制文件 | 数据不存在 | 检查 `record_file_id` 是否正确，需通过 `get_records_list` 重新获取 |\n| Invalid RecordFileId | 传参错误 | `record_file_id` 无效，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 纪要不存在 | 数据不存在 | 该会议的纪要不存在，请确认会议是否已生成转写 |\n| oauth corp cannot query minutes | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户当前账号**暂无权限**使用该工具 |\n\n---\n\n### `search_transcripts` — 搜索转写内容\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 找不到会议录制文件 | 数据不存在 | 检查 `record_file_id` 是否正确，需通过 `get_records_list` 重新获取 |\n| record_file_id is invalid | 传参错误 | `record_file_id` 无效，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| oauth corp cannot query minutes | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户当前账号**暂无权限**使用该工具 |\n\n---\n\n### `get_smart_minutes` — 获取智能纪要\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| record_file_id参数查询不到数据 | 传参错误 | 检查传入的是否为 `record_file_id`（非 `meeting_record_id`），需通过 `get_records_list` 获取正确的 `record_file_id` |\n| record_file_id参数错误 | 传参错误 | `record_file_id` 格式错误，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 转写暂未生成，请稍后再试 | 其他问题 | 告知用户智能纪要正在生成中，**不要重复调用**，等待 **5 分钟**后再尝试 |\n| 智能化数据生成中 | 其他问题 | 告知用户智能化数据正在生成中，请稍后再试 |\n| 智能化开关已关闭 | 操作限制 | 告知用户智能化功能开关未打开，需前往腾讯会议设置中开启后再使用 |\n| 暂无智能化数据，请重新生成 | 数据不存在 | 告知用户暂无智能化数据，请前往腾讯会议客户端重新生成后再查询 |\n\n---\n\n### `apply_record_permission_prepare` — 申请录制权限-预览\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_record_id为必填参数 | 传参错误 | `meeting_record_id` 为必填参数，需通过 `get_records_list` 获取后传入，且必须为非 0 的纯数字（uint64） |\n| 非法的meeting_record_id参数 | 传参错误 | `meeting_record_id` 格式非法，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 录制不存在 | 数据不存在 | 告知用户该录制不存在或已被删除，无法发起权限申请 |\n| 已有进行中的申请 | 操作限制 | 告知用户该录制存在尚未完结的权限申请，请等待审批结果或前往审批链接查看进度，**不要重复发起申请** |\n| 当前用户已具备录制权限 | 操作限制 | 告知用户当前账号已具备录制权限，无需重复申请，可直接访问对应录制资源 |\n| 录制所有者不允许申请权限 | 权限问题 | 告知用户该录制所有者已关闭权限申请通道，请直接联系录制所有者获取访问权限 |\n\n---\n\n### `apply_record_permission_commit` — 申请录制权限-提交\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_record_id为必填参数 | 传参错误 | `meeting_record_id` 为必填参数，且必须与 prepare 阶段一致 |\n| 非法的meeting_record_id参数 | 传参错误 | `meeting_record_id` 格式非法，必须为非 0 的纯数字（uint64） |\n| 申请预览已过期 | 操作限制 | 告知用户预览信息已过期，需要**重新调用 `apply_record_permission_prepare`** 获取最新预览并请用户重新确认 |\n| 已有进行中的申请 | 操作限制 | 告知用户该录制存在尚未完结的权限申请，**不要重复提交**，请前往审批链接查看进度 |\n| 当前用户已具备录制权限 | 操作限制 | 告知用户当前账号已具备录制权限，无需重复申请 |\n| 提交申请失败，请稍后重试 | 其他问题 | 服务端异常，告知用户稍后重试；若持续失败请联系腾讯会议支持 |\n\n---\n\n## 通讯录工具\n\n### `contact_search` — 搜索企业通讯录\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| username为必填参数 | 传参错误 | `username` 为必填字段，请补全用户名关键字 |\n| 参数非法，请对照接口文档检查您的参数 | 传参错误 | 检查 `username` / `job_title` / `department_name` 参数格式与长度 |\n| 未找到匹配成员 / 查询结果为空 | 数据不存在 | 告知用户**未找到匹配成员**，可能原因：姓名拼写不一致 / 跨企业用户 / 用户未加入通讯录；建议换关键字或改用 `contact_lookup_by_phone` / `contact_lookup_by_email` |\n| 通讯录搜索权限未开放 / 企业未开启通讯录搜索 | 权限问题 | 告知用户**所在企业未开启通讯录搜索能力**，需联系企业管理员开通后再使用 |\n| 跨企业不允许查询 | 权限问题 | 告知用户**不允许跨企业查询**，仅可搜索本企业成员 |\n| 无权限操作 | 权限问题 | 告知用户当前账号暂无通讯录搜索权限，请联系企业管理员开通 |\n\n---\n\n### `contact_lookup_by_phone` — 按手机号批量查找用户\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| phones为必填参数 | 传参错误 | `phones` 为必填字段，必须传入非空手机号数组 |\n| phones数量超过限制 / 最多支持50个 | 传参错误 | 单次最多 **50 个**手机号，请**分批查询**，禁止自行截断 |\n| 手机号格式非法 / Invalid phone | 传参错误 | 检查手机号格式（如需国家码请加 `+` 前缀），请用户更正后重试 |\n| 用户不存在 / 查询不到对应用户 | 数据不存在 | 告知用户**部分手机号未匹配到企业用户**，可能为跨企业或非企业成员，逐一回显未命中清单（手机号脱敏 `138****5678`） |\n| 跨企业不允许查询 | 权限问题 | 告知用户**不允许跨企业查询**，仅可查找本企业成员 |\n\n---\n\n### `contact_lookup_by_email` — 按邮箱批量查找用户\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| emails为必填参数 | 传参错误 | `emails` 为必填字段，必须传入非空邮箱数组 |\n| emails数量超过限制 / 最多支持50个 | 传参错误 | 单次最多 **50 个**邮箱，请**分批查询**，禁止自行截断 |\n| 邮箱格式非法 / Invalid email | 传参错误 | 检查邮箱格式是否符合 RFC 5322，请用户更正后重试 |\n| 用户不存在 / 查询不到对应用户 | 数据不存在 | 告知用户**部分邮箱未匹配到企业用户**，逐一回显未命中清单（邮箱脱敏 `u***@example.com`） |\n| 跨企业不允许查询 | 权限问题 | 告知用户**不允许跨企业查询**，仅可查找本企业成员 |\n\n---\n\n## 受邀人管理工具\n\n> `meeting_invitees_add` / `meeting_invitees_remove` / `meeting_invitees_replace` 共用以下错误码字典。\n\n### `meeting_invitees_*` — 受邀人变更通用错误\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_id为必填参数 | 传参错误 | `meeting_id` 必填，且必须为纯数字（uint64） |\n| invitees为必填参数 | 传参错误 | `meeting_invitees_add` / `meeting_invitees_remove` 的 `invitees` 必填且非空；`meeting_invitees_replace` 允许传空数组（语义为清空） |\n| invitees数量超过限制 / 最多支持100个 | 传参错误 | 单次最多 **100 个** open_id，请**分批操作**，禁止自行截断 |\n| 无权限操作 / 仅主持人可操作 | 权限问题 | 告知用户**仅会议主持人**可变更受邀人，非主持人请联系主持人操作 |\n| 会议不存在 / MEETING NOT EXIST | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 会议已结束，不能修改受邀人 | 操作限制 | 告知用户**会议已结束**，无法修改受邀人 |\n| 会议已取消 / MEETING CANCLED | 操作限制 | 告知用户会议已取消，无法操作 |\n| 用户不存在 / open_id 无效 | 传参错误 | 部分 open_id 无效，可能为跨企业用户或已离职，向用户回显无效清单后由用户确认是否继续 |\n| 用户不在受邀列表 | 操作限制 | （`remove` 场景）部分待移除成员不在当前受邀列表，已被自动忽略，向用户告知最终结果 |\n\n> **注意**：`replace` 传空数组语义为**清空所有受邀人**，工具不会报错，但 Skill 层必须在调用前向用户强调影响。\n\n---\n\n## 会中控制工具\n\n### `meeting_control_call` — 呼叫成员入会\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_id为必填参数 | 传参错误 | `meeting_id` 必填，且必须为纯数字（uint64） |\n| users为必填参数 | 传参错误 | `users` 必填且非空（open_id 数组） |\n| users数量超过限制 / 最多支持20个 | 传参错误 | 单次最多 **20 个** open_id，请**分批呼叫**，禁止自行截断 |\n| 会议未开始 / 会议未进行中 | 操作限制 | 告知用户**会议尚未开始或已结束**，无法发起呼叫 |\n| 无权限操作 / 仅主持人可呼叫 | 权限问题 | 告知用户**仅主持人 / 联席主持人**可发起会中呼叫 |\n| 用户已在会中 | 操作限制 | 告知用户**目标成员已在会中**，无需重复呼叫 |\n| 被叫方占线 / 被叫方拒接 / 呼叫超时 | 其他问题 | 告知用户该成员**当前无法应答**，可稍后重试或改用其他方式联系 |\n| 该用户不支持被呼叫 | 操作限制 | 告知用户**目标成员当前终端不支持被呼叫**（如未登录腾讯会议客户端） |\n| 用户不存在 / open_id 无效 | 传参错误 | 部分 open_id 无效，向用户回显无效清单 |\n\n---\n\n### `meeting_control_kick` — 踢出会议成员\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_id为必填参数 | 传参错误 | `meeting_id` 必填，且必须为纯数字（uint64） |\n| users/sip_users/pstn_users至少一个非空 | 传参错误 | 三个数组必须**至少一个非空**，请补全待踢成员列表 |\n| 用户数量超过限制 / 总数最多20 | 传参错误 | `users` + `sip_users` + `pstn_users` 三者**总数 ≤ 20**，请**分批踢出**，禁止自行截断 |\n| 会议未开始 / 会议未进行中 | 操作限制 | 告知用户**会议尚未开始或已结束**，无法踢人 |\n| 无权限操作 / 仅主持人可踢人 | 权限问题 | 告知用户**仅主持人 / 联席主持人**可踢人 |\n| 不允许踢自己 | 操作限制 | 告知用户**不能将自己踢出会议**，如需离会请直接退出 |\n| 用户不在会议中 / 用户已离开 | 操作限制 | 告知用户**目标成员已不在会议中**，无需踢出；若批量操作可继续踢其他成员 |\n| 用户不存在 / open_id 无效 | 传参错误 | 部分 open_id / ms_open_id 无效，向用户回显无效清单后由用户确认 |\n| 不能踢出主持人 | 操作限制 | 告知用户**不能踢出当前主持人**，如需替换主持人请先转交主持权 |\n\n---\n\nFile v1.0.15:references/feedback_rules.md\n\n# submit_feedback 触发规则\n\n## 概述\n\n本文档定义了 `submit_feedback` 工具的强制触发机制和信息补全引导规则。\n\n## 核心原则\n\n### 触发原则\n- **零容忍机制**：符合触发条件时必须100%触发反馈上报\n- **优先级最高**：反馈上报优先级高于其他任务处理\n- **立即暂停**：发现问题后立即暂停当前任务流程\n\n### 信息补全原则\n- **禁止编造**：严禁模型自行编造或猜测缺失的参数值\n- **引导补全**：必须引导用户提供缺失的必要信息\n\n## 触发条件\n\n### 1. 工具缺失（category=tool_not_found）\n**标准**：用户请求的功能在当前工具集中完全不存在\n\n### 2. 工具报错（category=tool_error）\n**标准**：任何工具调用返回非成功状态（错误码 ≠ 0）\n\n### 3. 能力不足（category=tool_inadequate）\n**标准**：工具存在但参数限制或功能范围无法满足用户需求\n\n### 4. 结果不符预期（category=unexpected_result）\n**标准**：工具调用成功但返回结果与用户预期明显不一致\n\n### 5. 改进建议（category=suggestion）\n**标准**：发现工具集有明显改进空间或新增功能需求\n\n## 参数补全引导规则\n\n### 引导流程\n```\n检测到参数不全 → 明确告知缺失信息 → 引导用户补充 → 用户提供信息 → 调用submit_feedback\n                                 ↘ 用户无法提供 → 暂不上报，记录原因\n```\n\n### 条件必填参数\n- **category=tool_error**：必须引导用户提供 `tool_name` 和 `error_code`\n- **category=tool_inadequate/unexpected_result**：必须引导用户提供 `tool_name`\n- **intent描述不清**：引导用户明确描述原本想完成什么任务\n\n## 触发流程\n\n### 标准流程\n1. **检测问题**：识别符合触发条件的情况\n2. **暂停任务**：立即暂停当前任务处理\n3. **明确描述**：清晰描述发现的具体问题\n4. **询问上报**：使用固定句式\"检测到[具体问题]，是否需要通过submit_feedback上报反馈以改进工具集？\"\n5. **用户确认**：获得用户明确同意后调用工具\n6. **继续任务**：根据用户选择继续或取消原任务\n\n## 示例场景\n\n### ✅ 正确引导示例\n**用户**：\"我要反馈工具报错\"\n**模型**：\"检测到工具报错问题，需要上报反馈。请提供以下信息：\n1. 具体是哪个工具报错？（tool_name）\n2. 返回的错误码是什么？（error_code）\n3. 您原本想完成什么任务？（intent）\"\n\n### ❌ 错误行为示例\n**用户**：\"我要反馈工具报错\"  \n**模型**：\"检测到工具报错问题，将为您上报反馈（假设是get_meeting工具，错误码9042）\" ← **禁止自行编造**\n\n## 注意事项\n\n### 内容规范\n- **客观性**：如实描述问题，禁止主观判断\n- **最小化**：仅包含必要信息，遵循隐私保护\n- **防滥用**：同一问题单次会话只上报一次\n\n### 隐私保护\n- 反馈内容必须严格按隐私政策完成脱敏\n- 严禁包含未脱敏的隐私信息\n\n## 输出规范\n\n### 成功上报\n```\n已通过submit_feedback记录该反馈（反馈ID：xxxxx），我们将持续改进工具集。\n```\n\n### 用户拒绝\n```\n已取消反馈上报，将继续处理原任务。\n```\n\n### 信息不全引导\n```\n检测到反馈信息不全，需要您补充以下信息才能上报：\n- [缺失的具体参数和说明]\n请提供相关信息后重新尝试反馈。\n```\n\nFile v1.0.15:references/privacy_policy.md\n\n# 通用隐私保护规范\n\n> 本文件定义了 MCP 技能的通用隐私保护规则，所有涉及用户隐私信息的场景**必须遵守**。\n\n---\n\n## 一、隐私信息分类\n\n### 通用隐私类型\n以下信息属于通用隐私范畴，**严禁在对外上报、日志、反馈等场景中明文透露**：\n\n| 隐私类型 | 说明 | 示例 |\n|---------|------|------|\n| 个人身份信息 | 真实姓名、昵称、用户ID等 | `张三`、`user123` |\n| 联系方式 | 手机号、邮箱、地址等 | `13800138000`、`user@example.com` |\n| 数字标识 | 账号、编号、代码等 | `A123456789`、`MEETING-001` |\n| 网络标识 | URL、链接、路径等 | `https://example.com/private` |\n| 业务内容 | 主题、标题、描述等 | `内部会议讨论`、`项目计划` |\n| 人员信息 | 参与者、联系人、成员等 | `参会人员列表` |\n\n### 领域特定隐私类型\n各技能可根据业务特点定义额外的隐私类型，但必须遵循本规范的基本原则。\n\n---\n\n## 二、脱敏规则\n\n### 脱敏原则\n\n1. **先脱敏再输出**：脱敏必须在向用户展示或对外上报之前完成，禁止以未脱敏的原始内容输出\n2. **最小化引用**：如非必要，优先不引用隐私信息；如必须引用，必须脱敏\n3. **按类型脱敏**：标识类信息保留首尾部分字符，语义类信息全部遮盖\n4. **可配置性**：各技能可根据需要调整脱敏规则，但必须保持一致性\n\n### 通用脱敏方式\n\n**标识类信息**（较长、可保留首尾辨识）：\n- 手机号：保留前3后4位，中间用 `****` 替代 → `138****5678`\n- 邮箱：保留用户名首字符和域名，中间用 `***` 替代 → `u***@example.com`\n- 数字编号：保留首尾段，中间用 `***` 替代 → `ABC-***-XYZ`\n- 用户姓名：保留姓氏，名字用 `**` 替代 → `张**`\n\n**语义类信息**（短文本、保留任何部分均可能泄露语义）：全部用 `***` 替代\n- 主题内容：`主题：***`\n- 人员列表：`参与人：***`\n- 业务描述：`描述：***`\n\n**网络标识类**：\n- URL链接：保留域名，路径用 `****` 替代 → `https://example.com/****`\n\n---\n\n## 三、用户确认规则\n\n当需要向用户展示敏感内容或执行敏感操作（如提交反馈、上报错误等）时，**必须向用户征求意见**：\n\n### 确认流程\n1. **脱敏处理**：按上述脱敏规则对隐私信息进行脱敏，**脱敏必须在展示前完成**\n2. **向用户展示并征求意见**：\n   - **操作原因**：为什么需要执行该操作\n   - **完整内容**：所有相关字段（均已脱敏）\n   - **确认询问**：明确询问用户是否同意\n3. **等待用户明文同意**：仅当用户明确肯定（如\"确认/同意/提交/可以/好的\"）后才可执行；用户未回复、含糊回答或拒绝时，**禁止执行**\n4. **内容一致性保证**：最终提交的内容必须与展示给用户的内容**完全一致**，严禁用户同意后擅自修改\n\n### 确认模板\n```\n检测到[问题描述]，需要上报以下信息以改进服务：\n- [字段1]：[脱敏后的值]\n- [字段2]：[脱敏后的值]\n- [字段3]：[脱敏后的值]\n\n请问是否同意上报？\n```\n\n---\n\n## 四、禁止行为\n\n| 禁止行为 | 说明 |\n|---------|------|\n| 默认用户同意擅自执行 | 未经用户交互确认，禁止执行敏感操作 |\n| 用户未明文回复同意就执行 | 含糊回答不等同于同意 |\n| 提交内容与展示内容不一致 | 用户同意后禁止修改任何字段 |\n| 对外输出包含未脱敏隐私信息 | 严禁明文透露隐私信息 |\n| 未经交互自动执行敏感操作 | 禁止在未与用户交互的情况下自动执行 |\n| 跨技能泄露隐私信息 | 禁止在不同技能间传递未脱敏的隐私信息 |\n\n---\n\n## 五、通讯录工具专项规范\n\n通讯录类工具（`contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email`）入参中的**手机号、邮箱、姓名**属于**强敏感字段**，必须遵循以下专项规则：\n\n### 入参隐私要求\n\n| 字段 | 类型 | 处理要求 |\n|------|------|----------|\n| `phones` | 手机号数组 | **禁止在 LLM 对话上下文中复述明文**；如需向用户回显（如确认查询/未命中清单），必须脱敏为 `138****5678` |\n| `emails` | 邮箱数组 | **禁止在 LLM 对话上下文中复述明文**；如需向用户回显，必须脱敏为 `u***@example.com` |\n| `username` | 姓名关键字 | 用户主动提供时可在交互中使用；对外日志/反馈上报时按姓名脱敏规则处理（如 `张**`） |\n\n### 出参隐私要求\n\n| 返回字段 | 处理要求 |\n|----------|----------|\n| `open_id` | 内部标识，**仅作为后续工具的参数透传**，禁止主动向用户展示 |\n| `user_name` | 向用户展示时**优先使用昵称**；姓名场景下必要时按 `张**` 规则脱敏 |\n| `job_title` / `department` | 在通讯录搜索场景下可正常展示，用于辅助用户从多个候选中选择 |\n\n### 禁止行为（专项）\n\n| 禁止行为 | 说明 |\n|---------|------|\n| 在反馈 / 错误上报 / 日志中明文写入 phones / emails | 必须脱敏后写入 |\n| 主动询问用户提供未脱敏的手机号/邮箱用于\"演示\" | 必须基于真实业务诉求才能调用通讯录工具 |\n| 将通讯录返回的 user_name 用于非邀请/呼叫场景 | 通讯录工具仅用于「会议邀请、呼叫成员入会」两类场景（姓名/手机号/邮箱→open_id 正查），严禁用于通用人员信息查询（如查看某人部门/职位/联系方式），也不支持 open_id 反查姓名 |\n| 跨会话留存手机号 / 邮箱 / open_id | 单次会话内使用，禁止长期记忆 |\n\n---\n\nFile v1.0.15:references/version_management.md\n\n# 版本管理指引\n\n> 当 MCP 响应中出现版本相关提示时，必须按本文件指引处理。\n\n---\n\n## 总体规则\n\n服务端（MCP Server）的版本检查仅做**提示**，不会拦截业务请求：\n\n- 服务端会校验 `X-Skill-Version` 是否落后于最新版本；\n- 若存在更新版本，会随业务响应一起返回提示信息；\n- 不区分大版本/小版本，只要存在更新版本就会提示一次；\n- 是否更新由 Skill 本地结合用户偏好决定。\n\n---\n\n## 收到“有新版本可更新”提示时的处理流程\n\n按以下顺序处理：\n\n1. **必须调用 `get_skill_update_preference` 工具查询本地偏好与 snooze 决策**（传入 `latest_version=hints 中的最新版本号`）：\n   - **禁止自行读取或解析 `~/.tencent-meeting-mcp/update-state.json` 做时间戳运算**，必须以本工具返回为准。\n   - 根据返回的 `shouldPrompt` 与 `reason` 决定下一步：\n     - `shouldPrompt=false` 且 `reason=disabled`：用户已选择“不再提醒”，**静默忽略**。\n     - `shouldPrompt=false` 且 `reason=auto_upgrade`：用户已预授权“默认自动更新”，可直接调用 `check_skill_version` 获取安装地址并执行安装，**无需再次询问**。\n     - `shouldPrompt=false` 且 `reason=snoozed`：仍处于“暂不更新”静默期（可参考 `snooze.remainingSeconds` 查看剩余时间），**静默忽略**。\n     - `shouldPrompt=true`（`reason ∈ {no_snooze, expired, version_changed}`）：进入下一步询问用户。\n2. **需要询问时向用户展示选项**（带上当前版本与最新版本号）：\n   - 立即更新\n   - 暂不更新（本次跳过）\n   - 以后自动更新\n   - 不再提醒\n3. **根据用户选择执行**（详见下一节）。\n\n---\n\n## 用户偏好的「四态互斥」约束\n\n用户的版本更新偏好任意时刻仅处于以下其中一个状态，写入函数会自动维护互斥关系，模型无需感知：\n\n| 状态 | 含义 | `optionalUpdateCheck` | `autoUpgrade` | `snooze` |\n|---|---|---|---|---|\n| A | 默认询问 | `true` | `false` | `null` |\n| B | 暂不更新 | `true` | `false` | `{...}` |\n| C | 自动更新 | `true` | `true` | `null` |\n| D | 永不更新 | `false` | `false` | `null` |\n\n**最近一次操作生效**：任意 `set_skill_update_preference` 写入入口在切换到目标状态时，会同步清空其它互斥字段，\n即用户最近一次「暂不更新 / 自动更新 / 永不更新 / 恢复提醒」的意图始终压过此前的偏好，\n不会出现「snooze + autoUpgrade」「snooze + 永不更新」等不可达组合。\n\n---\n\n## 用户选择对应的本地操作\n\n| 用户选择 | 动作 | 切换到 |\n|---|---|---|\n| 立即更新 | 调用 `check_skill_version`（建议传 `output_format=json`）获取安装地址并执行安装；安装完成后提示用户重新开始新对话 | — |\n| 暂不更新 | 调用 `set_skill_update_preference`，`action=snooze`、`version=最新版本`（静默时长由本地脚本决定，模型无需关心） | B |\n| 以后自动更新 | 调用 `set_skill_update_preference`，`action=auto_upgrade` | C |\n| 不再提醒 | 调用 `set_skill_update_preference`，`action=disable_optional_check` | D |\n| 希望恢复提醒 | 调用 `set_skill_update_preference`，`action=enable_optional_check` | A |\n\n> `set_skill_update_preference` 仅修改当前设备的本地偏好，不会影响其他设备，也不会上报到 MCP Server。\n> `get_skill_update_preference` 是唯一授权的“是否提示”决策入口，模型不得跳过该工具自行判断 snooze 是否过期。\n\n---\n\n## 禁止行为\n\n- **禁止自行修改请求头中的 `X-Skill-Version`** 来绕过检查\n- **禁止跳过 `check_skill_version` 工具调用**，直接使用响应中的链接（链接可能过期）\n- **禁止在用户未确认的情况下自动执行更新**（`autoUpgrade=true` 场景除外，那是用户明确预授权过的）\n- **禁止重复打扰用户**：用户已设置 `disable_optional_check` 或处于 `snooze` 静默期内时，**必须保持静默**\n- **禁止自行解析 `update-state.json` 做时间戳判断**：是否提示必须以 `get_skill_update_preference` 工具返回为准\n\nFile v1.0.15:skill-card.md\n\n## Description:\n\n腾讯会议 provides an agent with Tencent Meeting workflows for scheduling, updating, canceling, searching, and controlling meetings, plus participant, invitee, waiting-room, recording, transcript, smart-minutes, Yuanbao-minutes, contact-resolution, permission-request, version-check, and feedback actions.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[wemeeting](https://clawhub.ai/user/wemeeting)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nEmployees and external Tencent Meeting users use this skill to manage meetings, attendees, recordings, transcripts, minutes, and meeting-related permissions from an agent. Developers and operators can also use it to route Tencent Meeting MCP tool calls through a local Python command wrapper.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can manage Tencent meetings, access meeting-derived content, resolve enterprise contacts for meeting actions, and change participant state.\n\nMitigation: Install only with a Tencent Meeting token scoped for those abilities, confirm sensitive meeting changes with the user, and avoid using contact tools for general personnel lookup.\n\nRisk: The update flow can execute an installation from a server-provided address when auto-upgrade has been enabled.\n\nMitigation: Leave auto-upgrade disabled unless the remote update channel is trusted, review update prompts manually, and validate new artifacts before use.\n\nRisk: Meeting topics, participants, contact details, recordings, transcripts, and feedback may contain sensitive information.\n\nMitigation: Apply the bundled privacy rules: minimize disclosure, mask phone numbers and email addresses, and require explicit user confirmation before submitting feedback or permission requests.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/wemeeting/skills/tencent-meeting-skill)\n- [Publisher Profile](https://clawhub.ai/user/wemeeting)\n- [Tencent Meeting](https://meeting.tencent.com/)\n- [Tencent Meeting MCP Token Endpoint](https://mcp.meeting.tencent.com/mcp/wemeet-open/v1)\n- [API References](artifact/references/api_references.md)\n- [Error Dictionary](artifact/references/error_dictionary.md)\n- [Version Management](artifact/references/version_management.md)\n- [Privacy Policy](artifact/references/privacy_policy.md)\n- [Feedback Rules](artifact/references/feedback_rules.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, API calls]\n\n**Output Format:** [Markdown and text guidance with JSON-formatted MCP tool arguments and shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires python3 and TENCENT_MEETING_TOKEN; calls the Tencent Meeting MCP endpoint configured in the artifact.]\n\n## Skill Version(s):\n\n1.0.15 (source: server release evidence and artifact config.json)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.15:config.json\n\n{\n  \"name\": \"tencent-meeting-mcp\",\n  \"version\": \"v1.0.15\",\n  \"baseUrl\": \"https://mcp.meeting.tencent.com/mcp/wemeet-open/v1\"\n}\n\nArchive v1.0.14: 14 files, 46770 bytes\n\nFiles: config.json (126b), references/api_references.md (27009b), references/error_dictionary.md (22248b), references/feedback_rules.md (3454b), references/privacy_policy.md (5722b), references/version_management.md (4226b), scripts/local_tools.py (9019b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6661b), scripts/update_state.py (11772b), scripts/utils.py (1526b), skill-card.md (2739b), SKILL.md (37618b), _meta.json (141b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: tencent-meeting-mcp\ndescription: \"腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、会中踢出成员（支持普通成员/SIP/PSTN，可选是否允许重新加入）、时间转换与版本检查、Agent意见箱反馈上报。当用户需要预约或管理腾讯会议、查看参会人员、查询会议录制或转写内容、获取智能纪要、通过姓名/手机号/邮箱定位企业成员、管理会议受邀人、会中呼叫或踢人时使用；当用户访问录制相关内容（播放地址/转写/智能纪要）出现无权限错误时，自动发起录制权限申请流程；当用户仅提供姓名/手机号/邮箱、且已明确要邀请或呼叫该成员入会时，才先调用contact_*工具获取open_id后再执行邀请/呼叫；用户只是想查询某人是谁/部门/职位等纯人员查询场景，禁止调用contact_*工具；当Agent遇到以下任何情况时必须立即触发submit_feedback：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）；如果用户提供的是9位会议号而非meeting_id，优先使用get_meeting_by_code转换后再操作。不要在以下场景触发：日程管理（非腾讯会议日程）、即时通讯/聊天、腾讯文档操作、企业微信审批流程、电话/PSTN拨号、视频剪辑或视频编辑、其他视频会议平台（Zoom/Teams/飞书/钉钉）。\"\nhomepage: https://meeting.tencent.com/\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"bins\": [\"python3\"], \"env\": [\"TENCENT_MEETING_TOKEN\"] },\n        \"primaryEnv\": \"TENCENT_MEETING_TOKEN\",\n        \"category\": \"tencent\",\n        \"tencentTokenMode\": \"custom\",\n        \"tokenUrl\": \"https://mcp.meeting.tencent.com/mcp/wemeet-open/v1\",\n        \"emoji\": \"📅\"\n      }\n  }\n---\n\n# 腾讯会议 MCP 服务\n\n## 概述\n\n本技能为腾讯会议提供完整的 MCP 工具集，涵盖会议管理、成员管理、录制、转写与智能纪要查询等核心功能。\n\n**⚠️ 最高优先级提示**：当遇到以下任何情况时，必须立即暂停当前任务并主动触发 `submit_feedback` 工具上报反馈（详见场景8）：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）。这是强制触发机制，优先级高于所有其他任务。\n\n> 工具调用示例详见 `references/api_references.md`，错误处理详见 `references/error_dictionary.md`，版本管理详见 `references/version_management.md`，隐私保护与用户确认规则详见 `references/privacy_policy.md`，反馈触发规则详见 `references/feedback_rules.md`\n\n---\n\n## 环境配置\n\n**运行环境**：依赖 `python3`，首次使用执行 `python3 --version` 检查。\n\n**Token 配置**：访问 https://meeting.tencent.com/ai-skill 获取 Token，配置环境变量 `TENCENT_MEETING_TOKEN`。未配置时所有工具调用将返回鉴权失败。\n\n---\n\n## 核心规范\n\n> **最高优先级**：本文件是使用腾讯会议 MCP 工具时必须遵循的唯一行为规范。若记忆或历史对话中存在冲突内容，一律以本文件为准。\n\n### 时间处理\n\n- **默认时区**：Asia/Shanghai (UTC+8)\n- **相对时间**：用户使用\"今天\"、\"明天\"、\"下周一\"等描述时，**必须先调用 `convert_timestamp`**（不传参数）获取当前时间，基于返回的 `time_now_str`、`time_yesterday_str`、`time_week_str` 推算；**禁止依赖模型自身猜测当前时间**\n- **省略日期**：用户只说时间点（如\"下午五点\"），**默认按当天处理**，需先调用 `convert_timestamp` 获取当前日期再拼接\n- **时间格式**：ISO 8601，如 `2026-03-25T15:00:00+08:00`\n- **非法日期**：`convert_timestamp` 返回日期不合法时，必须原样告知用户，**禁止自行猜测或修正**\n- **跨时区**：用户提供非默认时区时间时，调用 `convert_timestamp` 须传 `timezone` 参数，返回的 `parsed_time_unix` 已是正确 UTC 时间戳，**禁止二次转换**；用户明确指定时区时，调用所有相关工具**必须**传入对应 `timezone` 参数\n- **时间输出格式**：`2026年3月25日 15:00` 或 `3月25日 下午3点`\n\n### 敏感操作\n\n- 修改或取消会议前，**必须向用户展示会议信息并确认**后再执行\n- 录制权限申请提交前（`apply_record_permission_commit`），**必须先调用 `apply_record_permission_prepare` 获取预览信息并向用户完整展示**（会议主题、录制所有者、申请人、申请类型等），获得用户明确同意后再调用 commit 工具；详见场景9\n- 提交反馈（`submit_feedback`）前，**必须按场景8的二次确认流程获得用户明文同意**后再调用；反馈内容**严禁包含未脱敏的隐私信息**，详见 `references/privacy_policy.md`\n- 受邀人变更（`meeting_invitees_remove` / `meeting_invitees_replace`）前，**必须先调用 `get_meeting_invitees` 展示当前受邀人列表**，明确告知用户将被移除/替换的成员，获得明确同意后再执行；`replace` 传空数组会清空所有受邀人，**必须二次强调**；详见场景11\n- 会中踢人（`meeting_control_kick`）前，**必须向用户完整展示被踢成员名单与 `allow_rejoin` 值**（true=允许重新加入 / false=禁止重新加入），获得明确同意后再执行；详见场景12\n- 会中呼叫（`meeting_control_call`）涉及对成员发起电话/客户端呼叫，**必须向用户展示被呼叫成员名单并确认**后再执行；详见场景12\n- 调用这些通讯录工具前，**必须先完成意图判定**： `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 这些通讯录工具前，必须先在内部完成意图判定并满足以下全部条件，否则一律禁止调用：\n  1. 本轮请求**显式包含**邀请入会 / 添加受邀人 / 呼叫入会动作；\n  2. 解析出的 open_id 将**在同一轮内立即**喂给 schedule_meeting / update_meeting / meeting_invitees_* / meeting_control_call等工具。\n  只要用户说的是\"查找 / 搜索 / 查一下 / 看看 / 是谁 / 哪个部门 / 联系方式\"等\n  **纯查询表述且不伴随上述动作**，立即停止，使用固定拒绝话术（见场景10反例），\n  **严禁调用任何 contact_* 工具**。\n- 通讯录工具入参中的手机号、邮箱属于强敏感信息，**禁止在对话或日志中复述明文**；返回的成员姓名向用户展示时优先使用昵称，必要时按 `references/privacy_policy.md` 脱敏\n- 无法查询到会议时，先确认会议号正确性或是否为本人创建\n\n### 追踪信息\n\n所有工具返回的 `X-Tc-Trace` 或 `rpcUuid` 字段，**必须明确展示**给用户\n\n### 错误处理\n\n- 工具调用失败或返回错误时，**必须查阅 `references/error_dictionary.md`** 并按对应指引处理\n- 若错误字典中**未收录**该错误，或按指引处理后仍无法满足用户诉求，**必须立即通过 `submit_feedback` 上报**（详见场景8的强制触发机制）\n\n### 客户端环境标识\n\n调用每个工具时，必须在 arguments 中附带 `_client_info` 对象（`os`、`agent`、`model`）。此参数由模型自动填入，**不需要向用户询问**\n\n### 版本管理\n\n- MCP 响应中出现版本相关提示时，**必须查阅 `references/version_management.md`** 并按对应指引处理\n- `check_skill_version` 触发场景：用户询问新版本、疑似已知问题、MCP 响应提示有可更新版本；更新后建议重新开始对话，确保新版本规则生效\n\n---\n\n## 不触发场景\n\n腾讯文档、通用日程、即时通讯、企业微信审批/打卡、电话/PSTN、视频剪辑、其他会议平台（Zoom/Teams/飞书/钉钉）\n\n---\n\n## 通用规则\n\n1. **Meeting Code 转换**：用户提供的会议号需通过 `get_meeting_by_code` 转换为 meeting_id 后才能调用其他工具\n2. **用户标识前置（仅限邀请/呼叫场景）**：**当且仅当**用户已表达明确的「会议邀请 / 添加受邀人 / 会中呼叫入会」意图、却只提供了姓名/手机号/邮箱（未提供 open_id）时，才调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 解析出 open_id，并**立即**用于 `schedule_meeting` / `update_meeting` / `meeting_invitees_*` / `meeting_control_call`。\n   ⛔ 前置判定：若本轮无\"邀请/添加受邀人/呼叫入会\"动作，直接禁止调用 contact_*，\n   - ⛔ **纯人员查询不适用本规则**：用户只是想\"搜一下/查一下某人是谁、看其部门/职位/联系方式\"而无任何后续会议动作时，**禁止调用任何 `contact_*` 工具**，应直接告知\"查询通讯录人员信息不在本服务范围内\"。\n   - ⛔ **踢人不适用本规则**：踢人所需的 `open_id` / `ms_open_id` 一律取自 `get_meeting_participants`，**严禁**用 `contact_*` 反查（详见场景12）。\n3. **年份默认值**：未指定年份时使用当前年份，禁止使用过去年份\n4. **参数格式错误**：提示用户修改，**禁止主动修改用户输入的参数值**\n5. **分页查询**：统一使用 `page_token`/`page_size` 分页，根据 `has_more` 判断是否继续，为 `true` 时用 `next_page_token` 翻页\n6. **返回昵称优先**：返回主持人、参会者、受邀人时，若无特殊要求只返回用户昵称，不返回用户 ID\n7. **批量上限**：`invitees` ≤ 100；`meeting_control_call.users` ≤ 20；`meeting_control_kick.users + sip_users + pstn_users` 三者总数 ≤ 20；`contact_lookup_by_phone.phones` / `contact_lookup_by_email.emails` ≤ 50。超限时必须告知用户分批处理，**禁止自行截断**\n\n---\n\n## 业务场景\n\n### 场景1：创建会议\n\n**触发条件**\n用户要求预约、创建、安排一场腾讯会议\n\n**处理流程**\n1. 调用 `convert_timestamp` 获取当前时间（涉及相对时间时）\n2. 确认必填信息：会议主题、开始时间、结束时间\n3. 若用户提到邀请成员（仅有姓名/手机号/邮箱），先调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 获取 open_id 列表\n4. 调用 `schedule_meeting` 创建会议，可选传入 `invitees`（open_id 数组，最多 100）\n\n**注意事项**\n- 未提及结束时间默认 1 小时，提示用户可修改\n- 周期性会议重复次数默认 50 次，提示用户可修改\n- 缺少会议主题时工具直接报错，必须提示用户输入\n- 创建时若传入 `invitees`，必须先向用户确认邀请名单（昵称展示）后再执行\n- 创建后如需追加/修改受邀人，使用 `meeting_invitees_add` / `meeting_invitees_remove` / `meeting_invitees_replace`\n\n**输出规范**\n展示创建成功的会议主题、时间、会议号、受邀人数（若有）及追踪信息\n\n---\n\n### 场景2：修改会议\n\n**触发条件**\n用户要求修改、更新已有会议信息（含受邀人增删替换）\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting` 查询当前会议信息；如需修改受邀人，加调 `get_meeting_invitees` 查看当前列表\n3. 若用户提到邀请成员（仅有姓名/手机号/邮箱），先调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 获取 open_id 列表\n4. 向用户展示**完整变更摘要**（含基础信息变更 + 受邀人变更），确认后调用 `update_meeting` 执行修改\n\n**注意事项**\n- 修改前必须二次确认（见核心规范\"敏感操作\"）\n- 可修改：主题、时间、密码、时区、会议类型、入会限制、等候室、周期性规则、受邀人等\n- 若同时修改会议信息和受邀人，需在 `update_meeting` 中传入 `invitees` + `invitees_operate_type`（字符串枚举：`\"add\"`=增量添加 / `\"remove\"`=批量移除 / `\"replace\"`=整体替换），并在确认摘要中**一次性展示所有变更**\n- `invitees` 与 `invitees_operate_type` **必须成对出现**，缺一报参数错误\n- 仅做受邀人变更（无其他字段修改）时，**推荐使用** `meeting_invitees_add` / `_remove` / `_replace` 专用工具，语义更清晰\n\n**输出规范**\n展示修改后的会议信息（含受邀人变化）及追踪信息，提示用户确认变更\n\n---\n\n### 场景3：取消会议\n\n**触发条件**\n用户要求取消、删除已有会议\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting` 查询当前会议信息\n3. 向用户展示待取消信息，确认后调用 `cancel_meeting` 执行取消\n\n**注意事项**\n- 取消前必须二次确认（见核心规范\"敏感操作\"）\n\n**输出规范**\n展示取消成功提示及追踪信息\n\n---\n\n### 场景4：查询会议信息\n\n**触发条件**\n用户要求查看会议详情、参会人员、受邀成员、等候室成员、会议录制信息等\n\n**处理流程**\n- 有 meeting_id → 直接调用 `get_meeting`\n- 有会议号 → `get_meeting_by_code` → `get_meeting`\n- 查看参会人员 → `get_meeting_participants`\n- 查看受邀成员 → `get_meeting_invitees`\n- 查看等候室成员 → `get_waiting_room`\n- 导出参会成员统计（含累计参会时长、会议互动行为等统计） → `export_participants` → 获取 `job_id` → `get_job_result` 查询下载链接\n\n**注意事项**\n- `export_participants` 为异步导出，返回 `job_id`，需通过 `get_job_result` 轮询任务状态\n- `get_job_result` 返回 status：1-成功（可获取下载链接，有效期2小时）、2-失败（查看 error_msg）、3-处理中（稍后重试）\n- 导出适用于需要完整参会统计数据（如考勤分析）的场景，普通查看参会人员使用 `get_meeting_participants` 即可\n\n**输出规范**\n展示会议基本信息、人员列表、会议录制信息等，附带追踪信息\n\n---\n\n### 场景5：会中控制\n\n**触发条件**\n用户要求管理会中等候室成员\n\n**处理流程**\n- 管理会中等候室成员 → `manage_waiting_room`\n\n**输出规范**\n展示操作结果，附带追踪信息\n\n---\n\n### 场景6：查询用户会议列表\n\n**触发条件**\n用户要求查看自己的会议列表、近期会议、我的会议\n\n**处理流程**\n1. **参数判断逻辑**：\n   - 当提供的参数**只有时间**（如start_time/end_time）：**列表优先**\n     - 进行中/未开始：调用 `get_user_meetings`\n     - 已结束：调用 `get_user_ended_meetings`\n   - 有其他参数（会议主题、会议号、创建人、参与者等）：**搜索优先**\n     - 调用 `search_meetings` 进行精确过滤\n2. 查询今天的全部会议：**同时调用两者，结果聚合去重**\n\n**注意事项**\n- `get_user_meetings` 仅包含未开始/进行中的会议，`get_user_ended_meetings` 仅包含已结束会议\n- `search_meetings` 支持按关键词(q)、搜索字段(q_fields)、会议号、日期窗口等过滤，数据按分页返回\n- `search_meetings` 的 `from`/`to` 参数使用 ISO 8601 格式（如 `2026-03-20T00:00:00+08:00`），按用户输入原值透传\n\n**输出规范**\n按时间排列展示会议列表（包含录制信息等），标注状态（未开始/进行中/已结束）\n\n---\n\n### 场景7：查询录制与转写\n\n**触发条件**\n用户要求查看录制、转写内容、搜索关键词或获取智能纪要\n\n**处理流程**\n1. 根据用户意图选择获取录制信息的途径：\n    - **查指定会议的录制（含权限状态）**：使用会议查询工具，响应中每个会议携带 `records` 数组（含 `meeting_record_id` / `state` / `permission_status` 等）。按以下方式定位具体会议：\n        - 按会议主题或主持人搜索 → `search_meetings`\n        - 有会议号 → `get_meeting_by_code`（按会议号精确查）\n        - 有 meeting_id → `get_meeting`（按会议ID精确查）\n        - 按时间查近期会议 → `get_user_meetings`（未开始/进行中）或 `get_user_ended_meetings`（已结束）\n    - **指定关键词查录制**：用户给出主题、创建者、内容等关键词想搜索匹配的录制 → `search_records`\n    - **未指定某场会议、想找自己的录制**：优先用 `get_records_list`（按时间范围或默认查，仅返回用户有权限的录制文件）\n2. 根据需求选择后续操作：\n   - 获取播放录制 → `get_record_addresses`\n   - 转写全文 → `get_transcripts_paragraphs` 获取段落 ID → `get_transcripts_details` 获取文本\n   - 搜索关键词 → `search_transcripts`\n   - 智能纪要 → `get_smart_minutes`（优先推荐）\n\n**注意事项**\n- 获取会议内容时的推荐优先级：`get_smart_minutes` > `get_transcripts_details` > `get_record_addresses`\n- `get_records_list` 未传 meeting_id/meeting_code 时，`start_time` 和 `end_time` 必须同时传入\n- `get_records_list` 按时间查询：范围不超过 31 天，起始不早于 1 年前\n- `search_records` 支持按关键词(q)、搜索字段(q_fields)、会议ID/会议号、日期窗口、文件类型等过滤，数据按分页返回\n- `search_records` 的 `from`/`to` 参数使用 ISO 8601 格式（如 `2026-03-20T00:00:00+08:00`），按用户输入原值透传\n- `search_transcripts` 中文关键词需 urlencode\n- **录制状态限制**：`state` 为「录制中」或「转码中」的录制文件**不可查看内容、不可申请权限**（场景6的播放/转写/搜索/纪要、场景8的权限申请均不可对这类文件执行）。遇到此类状态时，应告知用户该录制尚未就绪、需等待变为「转码完成」后再操作\n\n**输出规范**\n展示录制列表/播放地址/转写内容/智能纪要，附带追踪信息\n\n---\n\n### 场景8：提交反馈（Agent 意见箱）\n\n**触发条件（强制触发 - 优先级最高）**\nAgent 在执行腾讯会议相关任务过程中遇到以下任何情况时，**必须立即暂停当前任务**并主动询问用户是否调用 `submit_feedback` 上报反馈：\n- **工具缺失**：用户请求的功能在当前工具集中完全不存在\n- **工具报错**：任何工具调用返回非成功状态\n- **能力不足**：工具存在但参数限制或功能范围无法满足用户需求\n- **结果不符预期**：工具调用成功但返回结果与用户预期明显不一致\n- **改进建议**：发现工具集有明显改进空间或新增功能需求\n\n**强制触发机制**\n- **立即暂停**：必须立即暂停当前任务流程\n- **明确询问**：必须询问用户是否上报反馈\n- **二次确认**：必须获得用户明确同意后才调用工具\n\n**详细触发规则**：详见 `references/feedback_rules.md`\n\n**输出规范**\n上报成功后，向用户简要告知已记录该反馈（含 `feedback_id`）；用户拒绝或未确认时，告知用户\"已取消反馈上报\"。\n\n---\n\n### 场景9：录制权限申请\n\n**触发条件**\n- 用户主动请求\"申请录制权限\"、\"申请查看录制\"\n- 调用录制相关工具（`get_record_addresses`/`get_transcripts_details`/`get_transcripts_paragraphs`/`search_transcripts`/`get_smart_minutes`）返回**录制权限不足**类错误（如\"录制权限校验失败\"、\"无权限查看录制\"）时，**自动**进入该流程\n\n**处理流程（必须两步完成，严禁跳过预览步骤）**\n1. 调用 `apply_record_permission_prepare` 获取申请预览信息（包含会议标题 `subject`、录制所有者 `file_owner`、申请人 `applicant`、申请类型 `approval_name` 等）\n2. **向用户完整展示预览信息**，明确说明\"即将向录制所有者发起录制权限申请\"，**等待用户明确确认（如\"同意\"、\"申请\"、\"确认提交\"）**\n3. 用户确认后调用 `apply_record_permission_commit` 正式提交申请\n4. 提交成功后，向用户展示审批状态 `status`、审批说明 `message`，以及**审批链接 `approval_url`** 供用户跟进审批进度\n\n**注意事项**\n- `meeting_record_id` 为必填，应从上下文中获取，**严禁伪造**；来源优先级：会议查询响应中的 `records[].meeting_record_id`（场景4/5）> `get_records_list` 返回结果\n- prepare 返回的 `expires_in` 表示预览有效期（秒），用户长时间未确认（接近过期）时建议重新调用 prepare\n- 用户明确拒绝或未确认时，**严禁**调用 commit 工具；告知用户\"已取消录制权限申请\"\n- 提交申请前必须二次确认（见核心规范\"敏感操作\"）\n\n**输出规范**\n- prepare 阶段：清晰列出\"会议标题/录制所有者/申请人/申请说明\"，并询问用户是否提交申请\n- commit 阶段：展示申请结果（unique_id/status/message），突出展示审批链接 `approval_url`，附带追踪信息\n\n---\n\n### 场景10：通讯录解析用户（仅服务于邀请/呼叫，非通用搜索）\n\n**触发条件（强约束）**\n用户已表达明确的「会议邀请 / 添加受邀人 / 会中呼叫入会」意图，**且**仅提供姓名/手机号/邮箱（未提供 open_id），需要将其解析为 open_id 以便立即用于会议动作。\n\n> ⛔ **调用前必过自检清单（任一为「否」即禁止调用 `contact_*` 工具）**：\n> 1. 当前对话是否已锁定一个具体的会议动作（邀请 / 添加受邀人 / 呼叫入会）？\n> 2. 拿到 open_id 后，是否会**立即**喂给 `schedule_meeting` / `update_meeting` / `meeting_invitees_*` / `meeting_control_call` 的入参？\n> 3. 用户是否只是想\"查人/看某人信息/搜一下是谁\"？（若是 → **立即停止**，回复\"查询通讯录人员信息不在本服务范围内，如需邀请或呼叫该成员入会我可以帮您操作\"）\n> 4. 本轮的邀请/呼叫意图，是否来自**用户当前这句话本身**，而非\"上一轮刚做过邀请\"的惯性延续？（若是惯性 → 判定为纯查询，禁止调用）\n>\n> 📌 **反面触发词**：当用户指令出现\"搜索 / 查找 / 查一下 / 看看 / 是谁 / 什么部门 / 什么职位 / 联系方式\"等词，**且不伴随**邀请或呼叫动作时，一律判定为纯查询场景，禁止调用任何 `contact_*` 工具。\n\n**处理流程**\n1. 按用户提供的信息选择工具：\n   - 仅有**姓名**（可附职位/部门）→ `contact_search`（必填 `username`，可选 `job_title` / `department_name` 缩小范围）\n   - 有**手机号**（1~50 个）→ `contact_lookup_by_phone`\n   - 有**邮箱**（1~50 个）→ `contact_lookup_by_email`\n2. 拿到 `open_id` 后，再用于后续工具（`schedule_meeting` / `update_meeting` / `meeting_invitees_*` / `meeting_control_*`）\n\n**注意事项**\n- **`contact_*` 工具调用场景白名单（强约束）**：`contact_*` 工具 **仅可用于以下两类场景**，用于将姓名解析为 `open_id`：\n    1. **会议邀请**：`schedule_meeting` / `update_meeting` / `meeting_invitees_add` / `meeting_invitees_replace` 的受邀人入参解析\n    2. **呼叫成员入会**：`meeting_control_call` 的 `users` 入参解析\n    \n- **严禁在其他场景下调用 `contact_*` 工具**，包括但不限于：仅为查看某人部门/职位/联系方式、好奇某人信息、为通用人员搜索目的、为踢人提供 open_id（应用 `get_meeting_participants`，详见场景12），**不得将通讯录工具作为通用人员信息查询接口使用**。\n- **`username` 为必填（强约束）**：`contact_search` 的 `username` 参数为**必填**，缺失时工具会直接报错。**严禁模型自行猜测、编造或截取一个名字调用工具**；必须先与用户确认要查找的用户名后再执行。\n- **结果较多时建议追加过滤**：当仅按 `username` 查询返回的成员较多（如同名情况）时，**应建议用户补充 `job_title` 或 `department_name`** 进一步过滤后再次调用 `contact_search`，提升匹配精准度，减少候选项；不得在用户未确认的情况下自行选择某一条。\n- **唯一命中的返回特性**：当 `contact_search` 搜索结果**只有一条**时，工具仅返回该成员的 `open_id` 字段，**不会返回 `user_name` / `job_title` / `department` 等其他成员信息**。此时模型可直接将该 `open_id` 用于后续工具（如 `meeting_invitees_add` / `meeting_control_call`），**无需也无法**基于该响应向用户展示部门/职位等字段；如确需展示成员名称用于二次确认，应使用用户原始口径中的姓名，**严禁伪造**职位/部门信息。\n- **多结果必须由用户确认（强约束）**：当 `contact_search` 返回**多条候选结果**（典型如同名/同部门成员）时，**严禁**模型基于职位、部门、入职时间、匹配度等任何维度**自行选择**某一条继续后续操作（如 `meeting_invitees_add` / `meeting_control_call` / `meeting_control_kick` 等）。必须将候选项的关键信息以**清晰列表**形式展示给用户（仅展示昵称 + 职位 / 部门），并明确询问\"请确认要选择哪一项\"，待用户**明确指定**后再继续执行。**即便其中某条结果看起来\"明显更匹配\"，也必须等待用户确认，不得跳过该步骤**。\n- **隐私展示白名单（强约束）**：通讯录返回的数据可能包含工号、手机号、邮箱等敏感字段。**向用户展示时仅允许出现「姓名（昵称）/ 部门 / 职位」三类字段**，**严禁擅自展示工号、手机号、邮箱、`open_id`、`userid`、`ms_open_id` 等任何其他敏感字段**，即便用户的初始输入中包含某项敏感字段也不得在搜索响应中回显原文（如需回显须按 `references/privacy_policy.md` 脱敏）。\n- 手机号、邮箱属于强敏感信息，调用前**禁止在对话中复述明文**，必要时按 `references/privacy_policy.md` 脱敏展示\n- 单次最多 50 个手机号/邮箱，超限时分批查询，**严禁自行截断**\n- 查询不到用户时，可能是跨企业、用户未加入通讯录、企业关闭了通讯录搜索权限等原因，原样告知用户，禁止猜测\n\n**输出规范**\n- 展示命中成员时**仅允许**「昵称 / 职位 / 部门」三个字段，禁止展示工号、手机号、邮箱、open_id 等敏感字段\n- `open_id` 作为内部参数使用，向用户展示时优先昵称\n- 唯一命中时由于工具仅返回 `open_id`，应直接进入后续操作流程（按需向用户用其原始口径中的姓名做二次确认），**严禁伪造部门/职位信息**\n\n---\n\n### 场景11：管理会议受邀人\n\n**触发条件**\n用户要求查看、添加、移除、替换已有会议的受邀成员\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting_invitees` 查询当前受邀人列表\n3. 若用户仅提供姓名/手机号/邮箱，按场景9获取 open_id\n4. 根据需求选择工具：\n   - **添加** → `meeting_invitees_add`（增量添加，不影响已有）\n   - **移除** → `meeting_invitees_remove`（按 open_id 精确移除）\n   - **整体替换** → `meeting_invitees_replace`（用新列表完全覆盖；传空数组表示**清空所有受邀人**）\n5. 向用户展示变更摘要（**新增 / 移除 / 替换前 → 替换后**，均用昵称展示），获得明确同意后再执行\n\n**注意事项**\n- 仅**会议主持人**可操作受邀人变更，非主持人会返回权限错误\n- `remove` / `replace` 属于不可逆操作，二次确认是强制要求（见核心规范\"敏感操作\"）\n- `replace` 传空数组将**清空全部受邀人**，必须向用户强调影响并获得明确同意\n- 单次最多 100 个 open_id，超限时分批 `add`，**严禁自行截断**\n- 若用户希望\"用 X 替换 Y\"这类局部替换，**推荐组合使用** `remove` + `add` 两步操作，避免误用 `replace` 清空其他成员\n\n**输出规范（强约束 - 受邀人变更专用回复模板）**\n\n执行 `meeting_invitees_add` / `meeting_invitees_remove` / `meeting_invitees_replace` 成功后，回复**必须**严格按以下模板组织字段，且**仅展示这些字段**：\n\n- **会议主题**\n- **会议时间**（开始时间 ~ 结束时间，含时区）\n- **会议号**（`meeting_code`，**严禁**展示 `meeting_id`）\n- **入会链接**（`join_url`）\n- **已邀请成员**（操作完成后**当前完整**的受邀成员列表）\n\n附带 `X-Tc-Trace` / `rpcUuid` 追踪信息。\n\n「已邀请成员」展示规则（严格遵守）：\n1. **必须展示通讯录中的姓名**（如 `张三`），**严禁**直接展示 `open_id` / `userid` / `ms_open_id` / 花名 / 邮箱前缀等任何内部标识\n2. 姓名来源**仅限以下两种**，按优先级回退：\n   - 优先使用 `get_meeting_invitees` 响应中的 `user_name` 字段（变更操作后**应再次调用** `get_meeting_invitees` 获取最新完整列表，从中读取 `user_name`）\n   - 次选使用本轮对话中用户原始口径里的姓名（如用户输入\"加上张三\"，则该 `open_id` 对应\"张三\"）\n   - **严禁**调用 `contact_search` 反查 `open_id` 取姓名（该工具仅支持姓名→open_id 正查，不支持反查）\n3. 若以上两种来源均无法获得姓名，标注为 `未知成员`，**禁止回退到打印 `open_id`**\n4. 当且仅当用户**明确**要求\"展示 ID / 原始字段\"时，才可附带展示 `open_id`\n5. 会议主题、会议号、入会链接等基础字段若变更接口响应未直接返回，**应通过 `get_meeting --meeting-id` 补齐**，不得遗漏字段或用 `-` / `N/A` 占位\n\n---\n\n### 场景12：会中控制（呼叫 / 踢人）\n\n**触发条件**\n用户要求在进行中的会议中：呼叫某成员加入、踢出某成员\n\n**处理流程（呼叫）**\n1. 确认会议正在进行（用户口径或先调 `get_meeting` 校验状态）\n2. 若用户仅提供姓名/手机号/邮箱，按场景9获取 open_id\n3. 向用户展示**被呼叫成员名单**（昵称），获得明确同意\n4. 调用 `meeting_control_call`（`users` 最多 20 个 open_id）\n\n**处理流程（踢人）**\n1. 确认会议正在进行\n2. **必须先调用 `get_meeting_participants`** 查询当前参会成员，从其返回结果中定位待踢成员；**严禁使用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 的返回值作为踢人入参**\n3. **【字段路由表 — 强制，按 `get_meeting_participants` 返回的 `instanceid` 判定，禁止凭印象分类】**\n\n   | `instanceid` | 入参字段 | 使用的 id 字段 |\n      |---|---|---|\n   | `PSTN`（电话入会） | `pstn_users` | **`ms_open_id`** |\n   | `SIP`（SIP 设备） | `sip_users` | **`ms_open_id`** |\n   | 其他（`Mac` / `Windows` / `iOS` / `Android` / `Web` 等） | `users` | **`open_id`** |\n\n   **硬规则（必须遵守，跨多轮会话同样适用）**：\n    - ⛔ 凡 `instanceid ∈ {PSTN, SIP}` 的成员，**严禁放入 `users`**；必须走 `pstn_users` / `sip_users` 并使用 `ms_open_id`。\n    - ⛔ 凡某成员 **`open_id` 为空字符串**（PSTN/SIP 入会成员的典型特征），**必属** PSTN/SIP，**严禁放入 `users`**，必须按 `instanceid` 走对应字段。\n    - ⛔ **禁止默认把所有人塞进 `users`**：每个待踢成员都必须逐一查 `instanceid` 后再分桶，尤其在多轮会话上下文较长时，**不得凭记忆或惯性归类**。\n4. **数据清洗（建索引/分桶前必做）**：\n    - **只认在会成员**：`get_meeting_participants` 会返回带 `left_time`（非 null）的历史离会记录，**必须过滤掉 `left_time != null` 的条目**，避免误匹配/误踢已离会成员。\n    - **跳过空 id**：建立 id→成员 索引时，`open_id` / `ms_open_id` 为空字符串的键一律跳过，避免空串互相覆盖。\n    - **去重**：同一成员可能出现多条记录，按 id 去重。\n5. **`users` / `sip_users` / `pstn_users` 至少一个非空，三者总数 ≤ 20**\n6. 询问用户 `allow_rejoin`（是否允许被踢成员重新加入，默认 `true`=允许）\n7. 向用户**完整展示**被踢名单 + `allow_rejoin` 取值，获得明确同意后调用 `meeting_control_kick`\n\n**注意事项**\n- 踢人是会中破坏性操作，二次确认是强制要求（见核心规范\"敏感操作\"）\n- **不允许踢自己**；非主持人 / 联席主持人无权限\n- 已离开的成员、被叫方占线/拒接等场景，按 `references/error_dictionary.md` 指引向用户告知\n- 单次最多 20 个，超限分批，**严禁自行截断**\n- 若 `get_meeting_participants` 中查不到用户口径所指的成员，应原样告知用户\"该成员当前不在会议中\"，**严禁回退到 `contact_search` 反查 open_id 后强行踢人**\n\n**输出规范**\n- 呼叫：展示成功呼叫的成员清单（昵称）+ 失败成员及原因 + 追踪信息\n- 踢人：展示成功踢出的成员清单（昵称）+ `allow_rejoin` 结果 + 失败成员及原因 + 追踪信息\n\n---\n\n## 工具索引\n\n| 工具 | 说明 | 所属场景 |\n|------|------|-------------------|\n| `convert_timestamp` | 时间转换，获取当前/相对时间，UTC 时间戳转换 | 场景1（前置）、核心规范-时间处理 |\n| `schedule_meeting` | 创建会议，支持普通/周期性会议，可选 `invitees` 一并指定受邀人 | 场景1 |\n| `update_meeting` | 修改会议信息，可选 `invitees` + `invitees_operate_type` 同步增删替换受邀人 | 场景2、场景11 |\n| `cancel_meeting` | 取消会议，支持子会议/整场周期性会议 | 场景3 |\n| `get_meeting` | 通过 meeting_id 查询会议详情 | 场景2/3/4 |\n| `get_meeting_by_code` | 通过会议号转换为 meeting_id | 通用规则-Code转换 |\n| `get_meeting_participants` | 获取参会成员明细 | 场景4 |\n| `get_meeting_invitees` | 获取受邀成员列表 | 场景4、场景11（变更前展示） |\n| `get_waiting_room` | 查询等候室成员 | 场景4 |\n| `export_participants` | 异步导出参会成员统计（含累计参会时长、会议互动行为等统计），返回 job_id | 场景4 |\n| `get_job_result` | 获取异步导出任务结果（状态、下载链接） | 场景4 |\n| `manage_waiting_room` | 管理会中等候室成员 | 场景5 |\n| `get_user_meetings` | 查询未开始/进行中的会议列表 | 场景6 |\n| `get_user_ended_meetings` | 查询已结束的历史会议列表 | 场景6 |\n| `search_meetings` | 搜索会议列表，支持关键词、搜索字段、会议号、时间窗口等过滤 | 场景6 |\n| `get_records_list` | 查询录制文件列表 | 场景7 |\n| `search_records` | 搜索录制文件，支持关键词、搜索字段、时间窗口、会议、文件类型等过滤 | 场景7 |\n| `get_record_addresses` | 获取录制播放地址 | 场景7 |\n| `get_transcripts_paragraphs` | 获取转写段落 ID 列表 | 场景7 |\n| `get_transcripts_details` | 通过 pid 获取转写文本 | 场景7 |\n| `search_transcripts` | 搜索转写关键词 | 场景7 |\n| `get_smart_minutes` | 获取 AI 智能纪要 | 场景7 |\n| `apply_record_permission_prepare` | 录制权限申请-预览，展示申请的会议标题/所有者/申请人等信息供用户确认 | 场景9 |\n| `apply_record_permission_commit` | 录制权限申请-提交，用户确认后正式发起申请，返回审批链接 | 场景9 |\n| `contact_search` | 按姓名/职位/部门搜索企业通讯录成员（仅限会议邀请、呼叫入会场景），返回 open_id | 场景10 |\n| `contact_lookup_by_phone` | 按手机号批量查找企业用户（仅限会议邀请、呼叫入会场景）（最多 50），返回 open_id | 场景10 |\n| `contact_lookup_by_email` | 按邮箱批量查找企业用户（仅限会议邀请、呼叫入会场景）（最多 50），返回 open_id | 场景10 |\n| `meeting_invitees_add` | 向已创建会议增量添加受邀人（最多 100，仅主持人可操作） | 场景11 |\n| `meeting_invitees_remove` | 从会议中移除指定受邀人（仅主持人可操作） | 场景11 |\n| `meeting_invitees_replace` | 用新列表整体替换会议受邀人（传空数组=清空，仅主持人可操作） | 场景11 |\n| `meeting_control_call` | 会中批量呼叫成员入会（最多 20） | 场景12 |\n| `meeting_control_kick` | 会中踢出成员，支持普通/SIP/PSTN，可选 `allow_rejoin` | 场景12 |\n| `submit_feedback` | Agent 意见箱，主动上报工具缺失/错误/能力不足/结果异常/建议（强制触发场景） | 场景8 |\n| `check_skill_version` | 检查技能版本更新 | 核心规范-版本管理 |\n| `get_skill_update_preference` | 查询本地更新偏好与 snooze 决策（是否需要弹出更新提示） | 核心规范-版本管理 |\n| `set_skill_update_preference` | 设置本地更新偏好（snooze 暂不更新 / auto_upgrade / disable_optional_check / enable_optional_check） | 核心规范-版本管理 |\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn7c9wqemzmqtst4fydbe2xyc182xfkf\",\n  \"slug\": \"tencent-meeting-skill\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1786442615682\n}\n\nFile v1.0.14:references/api_references.md\n\n# 腾讯会议 MCP 工具调用示例\n\n本文件提供各工具的调用示例。参数说明已集成到 MCP 工具 Schema 中，可通过 `tools/list` 查看。\n\n---\n\n## 目录\n\n- [会议管理](#会议管理)\n  - [创建会议](#schedule_meeting--创建会议)\n  - [修改会议](#update_meeting--修改会议)\n  - [取消会议](#cancel_meeting--取消会议)\n  - [查询会议详情](#get_meeting--查询会议详情)\n  - [通过会议号查询](#get_meeting_by_code--通过会议号查询)\n- [成员管理](#成员管理)\n  - [获取参会成员明细](#get_meeting_participants--获取参会成员明细)\n  - [获取受邀成员列表](#get_meeting_invitees--获取受邀成员列表)\n  - [查询等候室成员](#get_waiting_room--查询等候室成员)\n  - [管理会中等候室成员](#manage_waiting_room--管理会中等候室成员)\n  - [查询用户会议列表](#get_user_meetings--查询用户会议列表)\n  - [查询已结束会议](#get_user_ended_meetings--查询已结束会议)\n  - [搜索会议列表](#search_meetings--搜索会议列表)\n  - [导出参会成员统计](#export_participants--导出参会成员统计)\n  - [获取异步任务结果](#get_job_result--获取异步任务结果)\n- [录制与转写](#录制与转写)\n  - [查询录制列表](#get_records_list--查询录制列表)\n  - [搜索录制文件](#search_records--搜索录制文件)\n  - [获取录制下载地址](#get_record_addresses--获取录制下载地址)\n  - [查询转写详情](#get_transcripts_details--查询转写详情)\n  - [查询转写段落](#get_transcripts_paragraphs--查询转写段落)\n  - [搜索转写内容](#search_transcripts--搜索转写内容)\n  - [获取智能纪要](#get_smart_minutes--获取智能纪要)\n- [录制权限申请](#录制权限申请)\n  - [申请录制权限-预览](#apply_record_permission_prepare--申请录制权限-预览)\n  - [申请录制权限-提交](#apply_record_permission_commit--申请录制权限-提交)\n- [通讯录](#通讯录)\n    - [搜索企业通讯录](#contact_search--搜索企业通讯录)\n    - [按手机号批量查找用户](#contact_lookup_by_phone--按手机号批量查找用户)\n    - [按邮箱批量查找用户](#contact_lookup_by_email--按邮箱批量查找用户)\n- [受邀人管理](#受邀人管理)\n    - [添加受邀人](#meeting_invitees_add--添加受邀人)\n    - [移除受邀人](#meeting_invitees_remove--移除受邀人)\n    - [替换受邀人](#meeting_invitees_replace--替换受邀人)\n- [会中控制](#会中控制)\n    - [呼叫成员入会](#meeting_control_call--呼叫成员入会)\n    - [踢出会议成员](#meeting_control_kick--踢出会议成员)\n- [反馈](#反馈)\n  - [提交反馈（Agent 意见箱）](#submit_feedback--提交反馈agent-意见箱)\n\n---\n\n## 会议管理\n\n### `schedule_meeting` — 创建会议\n\n#### 调用示例\n\n```bash\n# 普通会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品周会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\"\n  }\n}'\n\n# 周期性会议（每周开会，共重复5次）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"每周例会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"meeting_type\": 1,\n    \"recurring_rule\": {\n      \"recurring_type\": 2,\n      \"until_type\": 1,\n      \"until_count\": 5\n    }\n  }\n}'\n\n# 创建会议时同时指定受邀人（invitees 为 open_id 数组，最多 100）\n# open_id 需先通过 contact_search / contact_lookup_by_phone / contact_lookup_by_email 获取\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品评审会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"invitees\": [\"open_id_xxx\", \"open_id_yyy\"]\n  }\n}'\n```\n\n---\n\n### `update_meeting` — 修改会议\n\n#### 调用示例\n\n```bash\n# 修改非周期性会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"subject\": \"新主题\",\n    \"start_time\": \"2026-03-25T16:00:00+08:00\",\n    \"end_time\": \"2026-03-25T17:00:00+08:00\"\n  }\n}'\n\n# 修改周期性会议其中一场子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"start_time\": \"2026-03-26T10:00:00+08:00\",\n    \"end_time\": \"2026-03-26T11:00:00+08:00\",\n    \"meeting_type\": 1,\n    \"recurring_rule\": {\n      \"sub_meeting_id\": \"yyy\"\n    }\n  }\n}'\n\n# 修改会议时同步增量添加受邀人（invitees_operate_type=\"add\"）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_aaa\", \"open_id_bbb\"],\n    \"invitees_operate_type\": \"add\"\n  }\n}'\n\n# 修改会议时同步整体替换受邀人（invitees_operate_type=\"replace\"，传空数组=清空）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_ccc\"],\n    \"invitees_operate_type\": \"replace\"\n  }\n}'\n```\n\n> `invitees_operate_type` 取值（字符串枚举）：`\"add\"`（增量添加）/ `\"remove\"`（批量移除）/ `\"replace\"`（整体替换）。\n> `invitees` 与 `invitees_operate_type` 必须**成对出现**，缺一报参数错误。\n> 仅做受邀人变更（无其他字段修改）时，推荐使用 `meeting_invitees_add` / `_remove` / `_replace` 专用工具。\n\n---\n\n### `cancel_meeting` — 取消会议\n\n#### 调用示例\n\n```bash\n# 取消普通会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\"\n  }\n}'\n\n# 取消周期性会议的某个子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"sub_meeting_id\": \"yyy\"\n  }\n}'\n\n# 取消整场周期性会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"meeting_type\": 1\n  }\n}'\n```\n\n---\n\n### `get_meeting` — 查询会议详情\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_meeting_by_code` — 通过会议号查询\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n## 成员管理\n\n### `get_meeting_participants` — 获取参会成员明细\n\n#### 调用示例\n\n```bash\n# 分页接续：首次不传 page_token；响应 has_more=true 时，将 next_page_token 回填继续翻页\n# 可选按参会时间过滤：叠加传 start_time / end_time 即可\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_meeting_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"page_size\": 20,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n```\n\n---\n\n### `get_meeting_invitees` — 获取受邀成员列表\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_waiting_room` — 查询等候室成员\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `manage_waiting_room` — 管理会中等候室成员\n\n#### 调用示例\n\n```bash\n# 将等候室成员移入会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"enter-meeting\"\n  }\n}'\n\n# 将会中成员移入等候室\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"back-to-waiting\"\n  }\n}'\n\n# 将等候室成员移出等候室，并允许再次加入会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"expel\",\n    \"allow_rejoin\": true\n  }\n}'\n```\n\n---\n\n### `get_user_meetings` — 查询用户会议列表\n\n#### 调用示例\n\n```bash\n# 分页接续：首次不传 page_token；has_more=true 时，回填上次的 next_page_token 继续翻页\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_user_meetings\",\n  \"arguments\": {\n    \"is_show_all_sub_meetings\": 0,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n```\n\n---\n\n### `get_user_ended_meetings` — 查询已结束会议\n\n#### 调用示例\n\n```bash\n# 时间窗口 + 分页接续：首次不传 page_token；has_more=true 时回填继续翻页\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_user_ended_meetings\",\n  \"arguments\": {\n    \"start_time\": \"2026-03-25T00:00:00+08:00\",\n    \"end_time\": \"2026-03-25T23:59:59+08:00\",\n    \"page_size\": 10,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n```\n\n---\n\n### `search_meetings` — 搜索会议列表\n\n> `q_fields` 取值：`subject`（主题，分词匹配）/ `creator`（创建人昵称，模糊匹配）/ `note`（备注，模糊匹配）/ `all`（所有字段）。`page_size` 上限 30。\n\n#### 调用示例\n\n```bash\n# 关键词搜索（q_fields 按需切换：subject / creator / note / all）+ 分页接续\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_meetings\",\n  \"arguments\": {\n    \"q\": \"产品周会\",\n    \"q_fields\": \"subject\",\n    \"page_size\": 30,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n\n# 按会议号精准查询\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_meetings\",\n  \"arguments\": {\n    \"meeting_code\": \"904854736\"\n  }\n}'\n\n# 按时间窗口筛选\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_meetings\",\n  \"arguments\": {\n    \"from\": \"2026-03-20T00:00:00+08:00\",\n    \"to\": \"2026-03-25T23:59:59+08:00\",\n    \"page_size\": 30\n  }\n}'\n```\n\n---\n\n### `export_participants` — 导出参会成员统计\n\n> 异步导出参会成员统计数据（含累计参会时长、会议互动行为等统计），适用于考勤分析等场景。返回 `job_id`，需通过 `get_job_result` 查询导出结果。\n\n#### 调用示例\n\n```bash\n# 基础导出（默认 xlsx 格式）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\"\n  }\n}'\n\n# 指定导出为 json 格式\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"file_type\": \"json\"\n  }\n}'\n\n# 周期性会议导出某场子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"sub_meeting_id\": \"yyy\"\n  }\n}'\n\n# 按入会时间范围筛选导出\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"export_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"start_time\": \"2026-03-01T00:00:00+08:00\",\n    \"end_time\": \"2026-03-25T23:59:59+08:00\",\n    \"file_type\": \"xlsx\"\n  }\n}'\n```\n\n---\n\n### `get_job_result` — 获取异步任务结果\n\n> 通过 `export_participants` 等异步导出接口返回的 `job_id` 查询任务状态及下载链接。任务状态：1-成功（可获取下载链接，有效期2小时）、2-失败（查看 error_msg）、3-处理中（稍后重试）。\n\n#### 调用示例\n\n```bash\n# 查询导出任务结果\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_job_result\",\n  \"arguments\": {\n    \"job_id\": \"zzlWxxxxxxxxxxxxxxxxiTs\"\n  }\n}'\n```\n\n---\n\n## 录制与转写\n\n### `get_records_list` — 查询录制列表\n\n> **三种查询模式互斥**：`start_time + end_time`（时间跨度 ≤ 31 天，可翻页）/ `meeting_id`（无需时间）/ `meeting_code`（无需时间）。同一次调用只使用其中一种。\n\n#### 调用示例\n\n```bash\n# 按时间范围查询 + 分页接续（跨度 ≤ 31 天）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_records_list\",\n  \"arguments\": {\n    \"start_time\": \"2026-03-25T00:00:00+08:00\",\n    \"end_time\": \"2026-03-25T23:59:59+08:00\",\n    \"page_size\": 10,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n\n# 按会议 ID 查询（无需传时间）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_records_list\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\"\n  }\n}'\n\n# 按会议号查询（无需传时间）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_records_list\",\n  \"arguments\": {\n    \"meeting_code\": \"904854736\"\n  }\n}'\n```\n\n---\n\n### `search_records` — 搜索录制文件\n\n> `q_fields` 取值分为两类，**snippet 返回行为不同**：\n> - **返回 snippet**：`transcript_content`（转写原文）/ `smart_minutes`（智能纪要）/ `timeline`（时间轴），均为分词匹配\n> - **不返回 snippet**：`subject`（主题，分词匹配）/ `creator`（创建人昵称，模糊匹配）/ `all`（所有字段，按各字段自身方式匹配）\n>\n> `page_size` 上限 30。可用 `meeting_id` / `meeting_code` 精准定位；`file_type` 可选 `video` 等。\n\n#### 调用示例\n\n```bash\n# 关键词搜索（q_fields 按需切换）+ 分页接续\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"q\": \"技术架构\",\n    \"q_fields\": \"transcript_content\",\n    \"page_size\": 20,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'\n\n# 按会议 ID / 会议号定位（二选一）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"page_size\": 20\n  }\n}'\n\n# 按时间窗口 + 文件类型筛选\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"search_records\",\n  \"arguments\": {\n    \"from\": \"2026-03-20T00:00:00+08:00\",\n    \"to\": \"2026-03-25T23:59:59+08:00\",\n    \"file_type\": \"video\",\n    \"page_size\": 20\n  }\n}'\n```\n\n---\n\n### `get_record_addresses` — 获取录制下载地址\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_transcripts_details` — 查询转写详情\n\n参数以 MCP schema 为准（`tools/list`）；`pid` 为字符串型起始段落号（首页传 `\"0\"`），`limit` 为数字型。\n\n---\n\n### `get_transcripts_paragraphs` — 查询转写段落\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `search_transcripts` — 搜索转写内容\n\n参数以 MCP schema 为准（`tools/list`）。\n\n---\n\n### `get_smart_minutes` — 获取智能纪要\n\n参数以 MCP schema 为准（`tools/list`）；可选 `lang`（默认 `default` 原文，可传 `en` 等指定翻译语言）与 `pwd`（录制文件访问密码，仅当录制设置了密码时需要）。\n\n---\n\n## 录制权限申请\n\n> 录制权限申请采用 **两步流程**：先调用 `apply_record_permission_prepare` 获取预览信息向用户展示并确认，\n> 用户明确同意后再调用 `apply_record_permission_commit` 正式提交。**严禁跳过预览阶段直接提交申请。**\n> 触发场景：用户访问录制相关内容（下载地址/转写/智能纪要）出现无权限错误，或用户主动请求申请录制权限。\n\n### `apply_record_permission_prepare` — 申请录制权限-预览\n\n参数以 MCP schema 为准（`tools/list`）；推荐同时携带 `meeting_id`（若已知），便于服务端校验。\n\n#### 返回字段说明\n\n| 字段 | 说明 |\n|------|------|\n| `preview.meeting_record_id` | 会议录制 ID |\n| `preview.approval_name` | 申请类型文案 |\n| `preview.subject` | 会议标题 |\n| `preview.file_owner` | 录制所有者名称 |\n| `preview.apply_note` | 权限申请备注信息 |\n| `preview.applicant` | 申请人名称 |\n| `expires_in` | 预览有效期（秒），接近过期时建议重新调用 |\n\n> **调用后必须**：向用户完整展示预览信息（标题/录制所有者/申请人/申请说明），等待用户明确同意后再调用 commit 工具。\n\n---\n\n### `apply_record_permission_commit` — 申请录制权限-提交\n\n> **前置条件**：已调用 prepare 工具向用户展示预览信息，并获得用户明确同意。\n\n参数与 `apply_record_permission_prepare` 保持一致（若 prepare 传了 `meeting_id`，commit 也应传）。\n\n#### 返回字段说明\n\n| 字段 | 说明 |\n|------|------|\n| `unique_id` | 申请 ID |\n| `status` | 审批状态 |\n| `message` | 审批状态描述 |\n| `approval_url` | 审批链接（**必须展示给用户**，便于跟进审批进度） |\n| `share_text` | 申请说明描述 |\n\n## 通讯录\n\n> **调用场景白名单（强约束）**：通讯录工具（`contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email`）**仅可用于以下两类场景**，用于将姓名/手机号/邮箱**正向解析**为 `open_id`：\n> 1. **会议邀请**：将姓名/手机号/邮箱解析为 `open_id`，用于 `schedule_meeting` / `update_meeting` / `meeting_invitees_add` / `meeting_invitees_replace` 的受邀人入参\n> 2. **呼叫成员入会**：将姓名/手机号/邮箱解析为 `open_id`，用于 `meeting_control_call` 的 `users` 入参\n>\n> **严禁在其他场景下调用通讯录工具**，包括但不限于：仅为查看某人部门/职位/联系方式、好奇某人信息、为通用人员搜索目的、为踢人提供 open_id（应改用 `get_meeting_participants`，详见 `SKILL.md` 场景12）、**将 `open_id` 反查为姓名**（通讯录工具仅支持姓名/手机号/邮箱 → `open_id` 的正向查询，**不支持** `open_id` 反查；姓名回填应使用 `get_meeting_invitees` / `get_meeting_participants` 响应中自带的 `user_name`）。**不得将通讯录作为通用人员信息查询接口使用**。\n>\n> **隐私要点**：手机号、邮箱属于强敏感字段，调用前禁止在对话/日志中复述明文；返回的成员姓名向用户展示时优先使用昵称，必要时按 `privacy_policy.md` 脱敏。\n\n### `contact_search` — 搜索企业通讯录\n\n参数以 MCP schema 为准（`tools/list`）；`username` 必填，同名较多时叠加 `department_name` / `job_title` 过滤后再次调用。\n\n#### 返回字段说明\n\n| 字段 | 说明 |\n|------|------|\n| `members[].open_id` | 成员 open_id（用于后续工具） |\n| `members[].user_name` | 用户名（向用户展示时按隐私规则处理） |\n| `members[].job_title` | 职位 |\n| `members[].department` | 部门 |\n\n> **唯一命中的返回特性**：当搜索结果**只有一条**时，工具仅返回该成员的 `open_id` 字段，**不会返回 `user_name` / `job_title` / `department` 等其他成员信息**。模型可直接将该 `open_id` 用于后续工具（如会议邀请、呼叫入会），**无需也无法**基于该响应向用户展示部门/职位等字段；**严禁基于该响应伪造部门/职位信息**。\n\n#### 使用约束（强约束）\n\n- **`username` 为必填**：缺失会直接报错，**严禁模型自行猜测/编造姓名**，必须先与用户确认要查找的用户名后再调用。\n- **结果较多时建议追加过滤**：仅按 `username` 命中较多（如同名）时，应建议用户补充 `job_title` 或 `department_name` 进一步过滤后**再次调用** `contact_search`，提升匹配精准度。\n- **多结果必须由用户确认（强约束）**：命中多人时**必须向用户展示候选列表（昵称 + 职位 / 部门）由用户选择**，**严禁**模型基于职位、部门、入职时间、匹配度等任何维度**自行选择**某一条继续后续操作。**即便其中某条结果看起来\"明显更匹配\"，也必须等待用户明确指定，不得跳过该步骤**。\n- **隐私展示白名单**：向用户展示时**仅允许**「姓名（昵称）/ 部门 / 职位」三类字段，**严禁擅自展示工号、手机号、邮箱、`open_id`、`userid`、`ms_open_id` 等任何其他敏感字段**。\n\n---\n\n### `contact_lookup_by_phone` — 按手机号批量查找用户\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `phones` 单次最多 50 个，超限时分批查询，**禁止自行截断**\n- 手机号格式非法 / 用户不存在 / 跨企业 时按 `error_dictionary.md` 指引处理\n\n---\n\n### `contact_lookup_by_email` — 按邮箱批量查找用户\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `emails` 单次最多 50 个，超限时分批查询，**禁止自行截断**\n\n---\n\n## 受邀人管理\n\n> 仅**会议主持人**可操作；`remove` / `replace` 属于不可逆操作，调用前**必须**先调 `get_meeting_invitees` 向用户展示当前列表并获得明确同意（详见 SKILL.md 场景11）。\n\n### `meeting_invitees_add` — 添加受邀人\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `invitees` 为 open_id 数组，单次最多 100 个\n- 仅增量添加，已在受邀列表中的成员会被去重忽略\n\n---\n\n### `meeting_invitees_remove` — 移除受邀人\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- 移除操作不可逆，调用前必须二次确认\n- 不在受邀列表中的 open_id 会被忽略\n\n---\n\n### `meeting_invitees_replace` — 替换受邀人\n\n#### 调用示例\n\n```bash\n# 整体替换为新列表\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"meeting_invitees_replace\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_xxx\", \"open_id_yyy\"]\n  }\n}'\n\n# 清空所有受邀人（传空数组）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"meeting_invitees_replace\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": []\n  }\n}'\n```\n\n#### 注意事项\n\n- **`invitees` 传空数组将清空所有受邀人**，必须向用户强调影响并获得明确同意\n- 整体覆盖语义，不在新列表中的原受邀人会被全部移除\n- 局部替换场景（\"用 X 换掉 Y\"）**推荐使用 `remove` + `add` 组合**，避免误清空其他成员\n\n---\n\n## 会中控制\n\n> 会中控制工具用于**进行中**的会议；`meeting_control_kick` 是破坏性操作，必须严格二次确认（详见 SKILL.md 场景12）。\n\n### `meeting_control_call` — 呼叫成员入会\n\n参数以 MCP schema 为准（`tools/list`）。\n\n#### 注意事项\n\n- `users` 为 open_id 数组，单次最多 20 个\n- 被叫方占线 / 用户已在会中 / 无呼叫权限等错误按 `error_dictionary.md` 指引处理\n\n---\n\n### `meeting_control_kick` — 踢出会议成员\n\n#### 调用示例\n\n```bash\n# 三类成员可同时传（users / sip_users / pstn_users 至少一个非空，三者总数 ≤ 20）\n# 具体分桶规则见下方\"字段路由表\"，按 get_meeting_participants 返回的 instanceid 判定\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"meeting_control_kick\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"users\": [\"open_id_aaa\"],\n    \"sip_users\": [\"ms_open_id_sip_yyy\"],\n    \"pstn_users\": [\"ms_open_id_pstn_xxx\"],\n    \"allow_rejoin\": true\n  }\n}'\n```\n\n#### 注意事项\n\n- `users` / `sip_users` / `pstn_users` **至少一个非空**，三者总数 **≤ 20**\n- `allow_rejoin` 传`false`（不允许重新加入）；传 `true` 表示**允许**被踢者重新加入。必须向用户明确确认取值\n- 不允许踢自己；非主持人 / 联席主持人无权限\n- 调用前必须向用户**完整展示**被踢名单 + `allow_rejoin` 值并获得明确同意\n\n#### 字段路由表（强制，按 `get_meeting_participants` 返回的 `instanceid` 判定）\n\n| `instanceid` | 入参字段 | 使用的 id 字段 |\n|---|---|---|\n| `PSTN`（电话入会） | `pstn_users` | **`ms_open_id`** |\n| `SIP`（SIP 设备） | `sip_users` | **`ms_open_id`** |\n| 其他（`Mac` / `Windows` / `iOS` / `Android` / `Web` 等） | `users` | **`open_id`** |\n\n**硬规则（跨多轮会话同样适用，禁止凭印象/惯性分类）**：\n\n- ⛔ 凡 `instanceid ∈ {PSTN, SIP}` 的成员，**严禁放入 `users`**，必须走 `pstn_users` / `sip_users` 并使用 `ms_open_id`。\n- ⛔ 凡某成员 **`open_id` 为空字符串**（PSTN/SIP 入会成员的典型特征），**必属** PSTN/SIP，**严禁放入 `users`**。\n- ⛔ **禁止默认把所有人塞进 `users`**：每个待踢成员都必须逐一查 `instanceid` 后再分桶。\n\n**分桶前数据清洗**：\n\n- **过滤历史记录**：剔除 `get_meeting_participants` 中 `left_time != null` 的已离会条目，仅对在会成员操作。\n- **跳过空 id**：建立 id 索引时，`open_id` / `ms_open_id` 为空串的键一律跳过。\n- **去重**：同一成员可能出现多条记录，按 id 去重。\n\n> ⚠️ **常见失败根因**：把 PSTN/SIP 成员误塞进 `users`、或对其使用了空的 `open_id`，会导致服务端**静默踢出失败**（接口返回成功但成员仍在会）。务必严格按上表核对 `instanceid` 与 id 字段。\n\n---\n\n## 反馈\n\n### `submit_feedback` — 提交反馈（Agent 意见箱）\n\n> 由 Agent 调用，用于上报工具缺失、工具报错、能力不足、结果异常或改进建议。\n> 参数定义、枚举、长度限制、关联字段条件必填等约束以工具自身的 MCP schema 为准（通过 `tools/list` 获取）；调用时机与输出规范详见 SKILL.md 场景8。\n\n#### 调用示例\n\n```bash\n# 1. 找不到对应工具\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"tool_not_found\",\n    \"intent\": \"订阅会议变更事件，实时感知会议被修改/取消\"\n  }\n}'\n\n# 2. 调用工具报错\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"tool_error\",\n    \"intent\": \"查询某场会议的参会成员明细\",\n    \"actions_tried\": \"调用 get_meeting_participants(meeting_id=xxx)\",\n    \"result\": \"返回 9042 无权限\",\n    \"tool_name\": \"get_meeting_participants\",\n    \"error_code\": \"9042\"\n  }\n}'\n\n# 3. 工具能力/参数不足\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"tool_inadequate\",\n    \"intent\": \"按时间范围筛选用户的未来会议列表\",\n    \"actions_tried\": \"调用 get_user_meetings\",\n    \"result\": \"工具不支持 start_time / end_time 参数，无法按时间过滤\",\n    \"tool_name\": \"get_user_meetings\"\n  }\n}'\n\n# 4. 结果不符预期\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"unexpected_result\",\n    \"intent\": \"获取某场会议的智能纪要\",\n    \"actions_tried\": \"调用 get_smart_minutes(record_file_id=xxx)\",\n    \"result\": \"返回空内容，但用户确认会议已生成纪要\",\n    \"tool_name\": \"get_smart_minutes\"\n  }\n}'\n\n# 5. 一般性建议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"submit_feedback\",\n  \"arguments\": {\n    \"category\": \"suggestion\",\n    \"intent\": \"希望 get_records_list 支持按会议主题模糊搜索\"\n  }\n}'\n```\n\n---\n\n## 相关文档\n\n- **SKILL.md** — 完整的业务规范与触发场景（时间处理、敏感操作、错误处理等通用规则以 SKILL.md 为准）\n- **error_dictionary.md** — 错误处理指引\n- **version_management.md** — 版本管理指引\n\nFile v1.0.14:references/error_dictionary.md\n\n# 错误字典\n\n> 当工具调用返回错误时，**必须**按以下步骤处理，禁止直接将原始错误抛给用户。\n\n## 处理步骤\n\n1. 工具返回错误响应（含错误码、错误信息等）\n2. **立即查阅**本字典，根据错误信息匹配对应条目\n3. 向用户展示：错误原因（来自字典）、建议操作，并附上追踪字段（`X-Tc-Trace` / `rpcUuid`）供排查\n4. 若字典中无对应条目，则原样展示错误信息，并附上追踪字段\n\n## 禁止行为\n\n- **禁止在未查阅本字典的情况下**，直接将原始错误信息抛给用户\n- **禁止自行猜测错误原因**，必须以字典内容为准\n- **禁止重复调用已明确失败的接口**\n\n---\n\n---\n\n## 网络与异常错误\n\n> 当 MCP 工具调用出现网络不通、连接超时、请求失败或其他非预期错误时，按以下指引处理。\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|----------|\n| 网络不通 / 连接超时 / Connection refused / URLError / timeout | 网络异常 | 请检查网络环境；若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n| MCP请求失败 / HTTP 请求失败 / 创建请求失败 | 服务连接异常 | 若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n| 其他非预期异常 | 未知异常 | 展示原始错误信息；若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n\n---\n\n## 通用错误\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|----------|\n| 每天总接口调用次数超过限制 | 限频 | 告知用户已触发每日调用限制，**当天不能再调用该工具**，请明天再试 |\n| 每分钟总接口调用次数超过限制 | 限频 | 告知用户已触发每分钟调用限制，**等待 1 分钟后再重试** |\n| 每分钟单个接口调用次数超过限制 | 限频 | 告知用户已触发每分钟单接口限制，**等待 1 分钟后再重试** |\n| 鉴权失败 / Token 无效 | 鉴权失败 | 告知用户 Token 未配置或已失效，请访问 https://meeting.tencent.com/ai-skill 重新获取 Token 并配置环境变量 `TENCENT_MEETING_TOKEN` |\n\n---\n\n## 会议管理工具\n\n### `get_meeting` — 查询会议详情\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议信息不存在 | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 会议号无效 | 数据不存在 | 告知用户会议号无效，可能已被回收或不存在，请确认会议号 |\n| 查询实时转写失败 | 传参错误 | 检查传入的参数是否符合工具说明，meeting_id 必须为纯数字（uint64） |\n\n---\n\n### `get_meeting_by_code` — 通过会议号查询\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议号无效 | 数据不存在 | 告知用户会议号无效，请确认会议号是否正确（最少 9 位纯数字） |\n| 会议信息不存在 | 数据不存在 | 告知用户会议信息不存在，请确认会议号 |\n| MEETING NOT EXIST | 数据不存在 | 告知用户会议信息不存在，请确认会议号 |\n| 参数异常 | 传参错误 | 会议号（meeting_code）必须是**最少 9 位的纯数字**，请检查后重试 |\n\n---\n\n### `schedule_meeting` — 创建会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| start_time or end_time illegal | 传参错误 | 检查会议开始/结束时间格式，必须为 ISO 8601 格式（如 `2026-03-25T15:00:00+08:00`），且结束时间必须晚于开始时间 |\n| 时间设置错误 | 传参错误 | 检查会议时间设置，开始时间不能早于当前时间，结束时间必须晚于开始时间 |\n\n---\n\n### `update_meeting` — 修改会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议已开始，不能修改会议信息 | 操作限制 | 告知用户会议已开始，**无法修改**，如需调整请等会议结束后重新创建 |\n\n---\n\n### `cancel_meeting` — 取消会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| MEETING CANCLED | 操作限制 | 告知用户该会议已经被取消，无需重复操作 |\n| MEETING NOT EXIST | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 已开始的会议不能取消 | 操作限制 | 告知用户会议已开始，**无法取消**，如需结束请前往会议中操作 |\n| 该操作者可能没有对应的操作权限 | 权限问题 | 告知用户只有**会议创建者**才能取消会议 |\n| meetingId必须是整型 | 传参错误 | meeting_id 必须为纯数字（uint64），请检查参数格式后重试 |\n\n---\n\n## 会议成员工具\n\n### `get_meeting_participants` — 获取参会成员明细\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 无权限操作 | 权限问题 | 告知用户仅限**会议创建者、主持人、联席主持人**（且与创会者同企业）才能查看参会成员 |\n| 周期性会议查询sub_meeting_id参数不可为空 | 传参错误 | 查询周期性会议参会成员时，必须传入 `sub_meeting_id`，可通过 `get_meeting` 获取 `current_sub_meeting_id` |\n| subMeetingId is illegal | 传参错误 | `sub_meeting_id` 格式非法，请检查参数值是否正确 |\n| illegal meeting_id, must be numeric characters | 传参错误 | meeting_id 必须为纯数字（uint64），请检查参数格式 |\n| 查询时间范围不得大于90天 | 传参错误 | 查询时间范围不得超过 **90 天**，请缩小时间范围后重试 |\n| 会议信息不存在 | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n\n---\n\n### `get_meeting_invitees` — 获取受邀成员列表\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 无权限操作 | 权限问题 | 告知用户仅限**会议创建者**才能查询受邀成员列表 |\n\n---\n\n### `get_waiting_room` — 获取等候室成员\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 无权限操作 | 权限问题 | 告知用户仅限**会议创建者、主持人、联席主持人**才能查询等候室成员 |\n\n### `manage_waiting_room` — 管理会中等候室成员\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 没有权限 | 权限问题 | 告知用户操作者需为**会议创建者、主持人、联席主持人**，并具备 `MANAGE_MEETING` 权限 |\n| 操作失败，会议人数已达上限 | 操作限制 | 当前在 `operate_type=enter-meeting` 时较常见，需先释放会议名额后再重试 |\n| 参数非法 | 传参错误 | 请检查参数 |\n| 无权限进行该操作 | 权限问题 | 告知用户当前账号无权限进行该操作，建议检查操作者身份或资源归属 |\n\n---\n\n### `get_user_meetings` — 查询用户会议列表\n\n> 通用限频错误请参考上方「通用错误」章节。\n\n---\n\n## 录制相关工具\n\n### `get_records_list` — 查询录制列表\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 参数非法，请对照接口文档检查您的参数 | 传参错误 | 检查 `meeting_code` 参数是否正确（最少 9 位纯数字），或检查时间参数格式是否为 ISO 8601 |\n| 查询时间范围不得大于31天且开始时间必须早于结束时间 | 传参错误 | 查询时间范围不得超过 **31 天**，且开始时间必须早于结束时间，请调整后重试 |\n| MCP 查询起始时间不得早于 1 年前 | 传参错误 | 查询起始时间不得早于 **1 年前**，请调整 `start_time` 后重试 |\n| 查询起始时间必须早于当前时间 | 传参错误 | `start_time` 不能晚于当前时间，请检查时间参数 |\n| 非法的meeting_id参数 | 传参错误 | meeting_id 必须为纯数字（uint64），请检查参数格式 |\n\n---\n\n### `get_record_addresses` — 获取录制下载地址\n\n| 错误信息 | 问题类型 | 处理指引                                                                        |\n|---------|---------|-----------------------------------------------------------------------------|\n| meeting_record_id为必填参数 | 传参错误 | `meeting_record_id` 为必填参数，需通过 `get_records_list` 获取后传入，且必须为非 0 的纯数字（uint64） |\n| 非法的meeting_record_id参数 | 传参错误 | `meeting_record_id` 格式非法，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取    |\n| 参数非法，请对照接口文档检查您的参数 | 传参错误 | 检查所有参数格式，`meeting_record_id` 必须为非 0 的纯数字（uint64）                            |\n| 录制权限校验失败 | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户没有权限查看该会议的录制，仅限有权限的成员访问                               |\n\n---\n\n### `get_transcripts_details` — 查询转写详情\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 找不到会议录制文件 | 数据不存在 | 检查 `record_file_id` 是否正确，需通过 `get_records_list` 重新获取有效的 `record_file_id` |\n| Invalid RecordFileId | 传参错误 | `record_file_id` 无效，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 纪要无内容 | 数据不存在 | 该会议暂无转写内容，可能未开启转写功能 |\n| 纪要不存在 | 数据不存在 | 该会议的纪要不存在，请确认会议是否已生成转写 |\n| 该录制文件未开启转写 | 操作限制 | 告知用户该录制文件未开启转写功能，无法获取转写内容 |\n| 录制文件已经被删除 | 数据不存在 | 告知用户录制文件已被删除，无法获取转写内容 |\n| oauth corp cannot query minutes | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户当前账号**暂无权限**使用转写查询工具 |\n| 获取会议纪要错误 | 其他问题 | 服务端异常，可稍后重试；若持续失败请联系腾讯会议支持 |\n\n---\n\n### `get_transcripts_paragraphs` — 查询转写段落列表\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 找不到会议录制文件 | 数据不存在 | 检查 `record_file_id` 是否正确，需通过 `get_records_list` 重新获取 |\n| Invalid RecordFileId | 传参错误 | `record_file_id` 无效，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 纪要不存在 | 数据不存在 | 该会议的纪要不存在，请确认会议是否已生成转写 |\n| oauth corp cannot query minutes | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户当前账号**暂无权限**使用该工具 |\n\n---\n\n### `search_transcripts` — 搜索转写内容\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 找不到会议录制文件 | 数据不存在 | 检查 `record_file_id` 是否正确，需通过 `get_records_list` 重新获取 |\n| record_file_id is invalid | 传参错误 | `record_file_id` 无效，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| oauth corp cannot query minutes | 权限问题 | 可尝试发起申请录制权限，若无法申请则告知用户当前账号**暂无权限**使用该工具 |\n\n---\n\n### `get_smart_minutes` — 获取智能纪要\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| record_file_id参数查询不到数据 | 传参错误 | 检查传入的是否为 `record_file_id`（非 `meeting_record_id`），需通过 `get_records_list` 获取正确的 `record_file_id` |\n| record_file_id参数错误 | 传参错误 | `record_file_id` 格式错误，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 转写暂未生成，请稍后再试 | 其他问题 | 告知用户智能纪要正在生成中，**不要重复调用**，等待 **5 分钟**后再尝试 |\n| 智能化数据生成中 | 其他问题 | 告知用户智能化数据正在生成中，请稍后再试 |\n| 智能化开关已关闭 | 操作限制 | 告知用户智能化功能开关未打开，需前往腾讯会议设置中开启后再使用 |\n| 暂无智能化数据，请重新生成 | 数据不存在 | 告知用户暂无智能化数据，请前往腾讯会议客户端重新生成后再查询 |\n\n---\n\n### `apply_record_permission_prepare` — 申请录制权限-预览\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_record_id为必填参数 | 传参错误 | `meeting_record_id` 为必填参数，需通过 `get_records_list` 获取后传入，且必须为非 0 的纯数字（uint64） |\n| 非法的meeting_record_id参数 | 传参错误 | `meeting_record_id` 格式非法，必须为非 0 的纯数字（uint64），请通过 `get_records_list` 重新获取 |\n| 录制不存在 | 数据不存在 | 告知用户该录制不存在或已被删除，无法发起权限申请 |\n| 已有进行中的申请 | 操作限制 | 告知用户该录制存在尚未完结的权限申请，请等待审批结果或前往审批链接查看进度，**不要重复发起申请** |\n| 当前用户已具备录制权限 | 操作限制 | 告知用户当前账号已具备录制权限，无需重复申请，可直接访问对应录制资源 |\n| 录制所有者不允许申请权限 | 权限问题 | 告知用户该录制所有者已关闭权限申请通道，请直接联系录制所有者获取访问权限 |\n\n---\n\n### `apply_record_permission_commit` — 申请录制权限-提交\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_record_id为必填参数 | 传参错误 | `meeting_record_id` 为必填参数，且必须与 prepare 阶段一致 |\n| 非法的meeting_record_id参数 | 传参错误 | `meeting_record_id` 格式非法，必须为非 0 的纯数字（uint64） |\n| 申请预览已过期 | 操作限制 | 告知用户预览信息已过期，需要**重新调用 `apply_record_permission_prepare`** 获取最新预览并请用户重新确认 |\n| 已有进行中的申请 | 操作限制 | 告知用户该录制存在尚未完结的权限申请，**不要重复提交**，请前往审批链接查看进度 |\n| 当前用户已具备录制权限 | 操作限制 | 告知用户当前账号已具备录制权限，无需重复申请 |\n| 提交申请失败，请稍后重试 | 其他问题 | 服务端异常，告知用户稍后重试；若持续失败请联系腾讯会议支持 |\n\n---\n\n## 通讯录工具\n\n### `contact_search` — 搜索企业通讯录\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| username为必填参数 | 传参错误 | `username` 为必填字段，请补全用户名关键字 |\n| 参数非法，请对照接口文档检查您的参数 | 传参错误 | 检查 `username` / `job_title` / `department_name` 参数格式与长度 |\n| 未找到匹配成员 / 查询结果为空 | 数据不存在 | 告知用户**未找到匹配成员**，可能原因：姓名拼写不一致 / 跨企业用户 / 用户未加入通讯录；建议换关键字或改用 `contact_lookup_by_phone` / `contact_lookup_by_email` |\n| 通讯录搜索权限未开放 / 企业未开启通讯录搜索 | 权限问题 | 告知用户**所在企业未开启通讯录搜索能力**，需联系企业管理员开通后再使用 |\n| 跨企业不允许查询 | 权限问题 | 告知用户**不允许跨企业查询**，仅可搜索本企业成员 |\n| 无权限操作 | 权限问题 | 告知用户当前账号暂无通讯录搜索权限，请联系企业管理员开通 |\n\n---\n\n### `contact_lookup_by_phone` — 按手机号批量查找用户\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| phones为必填参数 | 传参错误 | `phones` 为必填字段，必须传入非空手机号数组 |\n| phones数量超过限制 / 最多支持50个 | 传参错误 | 单次最多 **50 个**手机号，请**分批查询**，禁止自行截断 |\n| 手机号格式非法 / Invalid phone | 传参错误 | 检查手机号格式（如需国家码请加 `+` 前缀），请用户更正后重试 |\n| 用户不存在 / 查询不到对应用户 | 数据不存在 | 告知用户**部分手机号未匹配到企业用户**，可能为跨企业或非企业成员，逐一回显未命中清单（手机号脱敏 `138****5678`） |\n| 跨企业不允许查询 | 权限问题 | 告知用户**不允许跨企业查询**，仅可查找本企业成员 |\n\n---\n\n### `contact_lookup_by_email` — 按邮箱批量查找用户\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| emails为必填参数 | 传参错误 | `emails` 为必填字段，必须传入非空邮箱数组 |\n| emails数量超过限制 / 最多支持50个 | 传参错误 | 单次最多 **50 个**邮箱，请**分批查询**，禁止自行截断 |\n| 邮箱格式非法 / Invalid email | 传参错误 | 检查邮箱格式是否符合 RFC 5322，请用户更正后重试 |\n| 用户不存在 / 查询不到对应用户 | 数据不存在 | 告知用户**部分邮箱未匹配到企业用户**，逐一回显未命中清单（邮箱脱敏 `u***@example.com`） |\n| 跨企业不允许查询 | 权限问题 | 告知用户**不允许跨企业查询**，仅可查找本企业成员 |\n\n---\n\n## 受邀人管理工具\n\n> `meeting_invitees_add` / `meeting_invitees_remove` / `meeting_invitees_replace` 共用以下错误码字典。\n\n### `meeting_invitees_*` — 受邀人变更通用错误\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_id为必填参数 | 传参错误 | `meeting_id` 必填，且必须为纯数字（uint64） |\n| invitees为必填参数 | 传参错误 | `meeting_invitees_add` / `meeting_invitees_remove` 的 `invitees` 必填且非空；`meeting_invitees_replace` 允许传空数组（语义为清空） |\n| invitees数量超过限制 / 最多支持100个 | 传参错误 | 单次最多 **100 个** open_id，请**分批操作**，禁止自行截断 |\n| 无权限操作 / 仅主持人可操作 | 权限问题 | 告知用户**仅会议主持人**可变更受邀人，非主持人请联系主持人操作 |\n| 会议不存在 / MEETING NOT EXIST | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 会议已结束，不能修改受邀人 | 操作限制 | 告知用户**会议已结束**，无法修改受邀人 |\n| 会议已取消 / MEETING CANCLED | 操作限制 | 告知用户会议已取消，无法操作 |\n| 用户不存在 / open_id 无效 | 传参错误 | 部分 open_id 无效，可能为跨企业用户或已离职，向用户回显无效清单后由用户确认是否继续 |\n| 用户不在受邀列表 | 操作限制 | （`remove` 场景）部分待移除成员不在当前受邀列表，已被自动忽略，向用户告知最终结果 |\n\n> **注意**：`replace` 传空数组语义为**清空所有受邀人**，工具不会报错，但 Skill 层必须在调用前向用户强调影响。\n\n---\n\n## 会中控制工具\n\n### `meeting_control_call` — 呼叫成员入会\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_id为必填参数 | 传参错误 | `meeting_id` 必填，且必须为纯数字（uint64） |\n| users为必填参数 | 传参错误 | `users` 必填且非空（open_id 数组） |\n| users数量超过限制 / 最多支持20个 | 传参错误 | 单次最多 **20 个** open_id，请**分批呼叫**，禁止自行截断 |\n| 会议未开始 / 会议未进行中 | 操作限制 | 告知用户**会议尚未开始或已结束**，无法发起呼叫 |\n| 无权限操作 / 仅主持人可呼叫 | 权限问题 | 告知用户**仅主持人 / 联席主持人**可发起会中呼叫 |\n| 用户已在会中 | 操作限制 | 告知用户**目标成员已在会中**，无需重复呼叫 |\n| 被叫方占线 / 被叫方拒接 / 呼叫超时 | 其他问题 | 告知用户该成员**当前无法应答**，可稍后重试或改用其他方式联系 |\n| 该用户不支持被呼叫 | 操作限制 | 告知用户**目标成员当前终端不支持被呼叫**（如未登录腾讯会议客户端） |\n| 用户不存在 / open_id 无效 | 传参错误 | 部分 open_id 无效，向用户回显无效清单 |\n\n---\n\n### `meeting_control_kick` — 踢出会议成员\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| meeting_id为必填参数 | 传参错误 | `meeting_id` 必填，且必须为纯数字（uint64） |\n| users/sip_users/pstn_users至少一个非空 | 传参错误 | 三个数组必须**至少一个非空**，请补全待踢成员列表 |\n| 用户数量超过限制 / 总数最多20 | 传参错误 | `users` + `sip_users` + `pstn_users` 三者**总数 ≤ 20**，请**分批踢出**，禁止自行截断 |\n| 会议未开始 / 会议未进行中 | 操作限制 | 告知用户**会议尚未开始或已结束**，无法踢人 |\n| 无权限操作 / 仅主持人可踢人 | 权限问题 | 告知用户**仅主持人 / 联席主持人**可踢人 |\n| 不允许踢自己 | 操作限制 | 告知用户**不能将自己踢出会议**，如需离会请直接退出 |\n| 用户不在会议中 / 用户已离开 | 操作限制 | 告知用户**目标成员已不在会议中**，无需踢出；若批量操作可继续踢其他成员 |\n| 用户不存在 / open_id 无效 | 传参错误 | 部分 open_id / ms_open_id 无效，向用户回显无效清单后由用户确认 |\n| 不能踢出主持人 | 操作限制 | 告知用户**不能踢出当前主持人**，如需替换主持人请先转交主持权 |\n\n---\n\nFile v1.0.14:references/feedback_rules.md\n\n# submit_feedback 触发规则\n\n## 概述\n\n本文档定义了 `submit_feedback` 工具的强制触发机制和信息补全引导规则。\n\n## 核心原则\n\n### 触发原则\n- **零容忍机制**：符合触发条件时必须100%触发反馈上报\n- **优先级最高**：反馈上报优先级高于其他任务处理\n- **立即暂停**：发现问题后立即暂停当前任务流程\n\n### 信息补全原则\n- **禁止编造**：严禁模型自行编造或猜测缺失的参数值\n- **引导补全**：必须引导用户提供缺失的必要信息\n\n## 触发条件\n\n### 1. 工具缺失（category=tool_not_found）\n**标准**：用户请求的功能在当前工具集中完全不存在\n\n### 2. 工具报错（category=tool_error）\n**标准**：任何工具调用返回非成功状态（错误码 ≠ 0）\n\n### 3. 能力不足（category=tool_inadequate）\n**标准**：工具存在但参数限制或功能范围无法满足用户需求\n\n### 4. 结果不符预期（category=unexpected_result）\n**标准**：工具调用成功但返回结果与用户预期明显不一致\n\n### 5. 改进建议（category=suggestion）\n**标准**：发现工具集有明显改进空间或新增功能需求\n\n## 参数补全引导规则\n\n### 引导流程\n```\n检测到参数不全 → 明确告知缺失信息 → 引导用户补充 → 用户提供信息 → 调用submit_feedback\n                                 ↘ 用户无法提供 → 暂不上报，记录原因\n```\n\n### 条件必填参数\n- **category=tool_error**：必须引导用户提供 `tool_name` 和 `error_code`\n- **category=tool_inadequate/unexpected_result**：必须引导用户提供 `tool_name`\n- **intent描述不清**：引导用户明确描述原本想完成什么任务\n\n## 触发流程\n\n### 标准流程\n1. **检测问题**：识别符合触发条件的情况\n2. **暂停任务**：立即暂停当前任务处理\n3. **明确描述**：清晰描述发现的具体问题\n4. **询问上报**：使用固定句式\"检测到[具体问题]，是否需要通过submit_feedback上报反馈以改进工具集？\"\n5. **用户确认**：获得用户明确同意后调用工具\n6. **继续任务**：根据用户选择继续或取消原任务\n\n## 示例场景\n\n### ✅ 正确引导示例\n**用户**：\"我要反馈工具报错\"\n**模型**：\"检测到工具报错问题，需要上报反馈。请提供以下信息：\n1. 具体是哪个工具报错？（tool_name）\n2. 返回的错误码是什么？（error_code）\n3. 您原本想完成什么任务？（intent）\"\n\n### ❌ 错误行为示例\n**用户**：\"我要反馈工具报错\"  \n**模型**：\"检测到工具报错问题，将为您上报反馈（假设是get_meeting工具，错误码9042）\" ← **禁止自行编造**\n\n## 注意事项\n\n### 内容规范\n- **客观性**：如实描述问题，禁止主观判断\n- **最小化**：仅包含必要信息，遵循隐私保护\n- **防滥用**：同一问题单次会话只上报一次\n\n### 隐私保护\n- 反馈内容必须严格按隐私政策完成脱敏\n- 严禁包含未脱敏的隐私信息\n\n## 输出规范\n\n### 成功上报\n```\n已通过submit_feedback记录该反馈（反馈ID：xxxxx），我们将持续改进工具集。\n```\n\n### 用户拒绝\n```\n已取消反馈上报，将继续处理原任务。\n```\n\n### 信息不全引导\n```\n检测到反馈信息不全，需要您补充以下信息才能上报：\n- [缺失的具体参数和说明]\n请提供相关信息后重新尝试反馈。\n```\n\nFile v1.0.14:references/privacy_policy.md\n\n# 通用隐私保护规范\n\n> 本文件定义了 MCP 技能的通用隐私保护规则，所有涉及用户隐私信息的场景**必须遵守**。\n\n---\n\n## 一、隐私信息分类\n\n### 通用隐私类型\n以下信息属于通用隐私范畴，**严禁在对外上报、日志、反馈等场景中明文透露**：\n\n| 隐私类型 | 说明 | 示例 |\n|---------|------|------|\n| 个人身份信息 | 真实姓名、昵称、用户ID等 | `张三`、`user123` |\n| 联系方式 | 手机号、邮箱、地址等 | `13800138000`、`user@example.com` |\n| 数字标识 | 账号、编号、代码等 | `A123456789`、`MEETING-001` |\n| 网络标识 | URL、链接、路径等 | `https://example.com/private` |\n| 业务内容 | 主题、标题、描述等 | `内部会议讨论`、`项目计划` |\n| 人员信息 | 参与者、联系人、成员等 | `参会人员列表` |\n\n### 领域特定隐私类型\n各技能可根据业务特点定义额外的隐私类型，但必须遵循本规范的基本原则。\n\n---\n\n## 二、脱敏规则\n\n### 脱敏原则\n\n1. **先脱敏再输出**：脱敏必须在向用户展示或对外上报之前完成，禁止以未脱敏的原始内容输出\n2. **最小化引用**：如非必要，优先不引用隐私信息；如必须引用，必须脱敏\n3. **按类型脱敏**：标识类信息保留首尾部分字符，语义类信息全部遮盖\n4. **可配置性**：各技能可根据需要调整脱敏规则，但必须保持一致性\n\n### 通用脱敏方式\n\n**标识类信息**（较长、可保留首尾辨识）：\n- 手机号：保留前3后4位，中间用 `****` 替代 → `138****5678`\n- 邮箱：保留用户名首字符和域名，中间用 `***` 替代 → `u***@example.com`\n- 数字编号：保留首尾段，中间用 `***` 替代 → `ABC-***-XYZ`\n- 用户姓名：保留姓氏，名字用 `**` 替代 → `张**`\n\n**语义类信息**（短文本、保留任何部分均可能泄露语义）：全部用 `***` 替代\n- 主题内容：`主题：***`\n- 人员列表：`参与人：***`\n- 业务描述：`描述：***`\n\n**网络标识类**：\n- URL链接：保留域名，路径用 `****` 替代 → `https://example.com/****`\n\n---\n\n## 三、用户确认规则\n\n当需要向用户展示敏感内容或执行敏感操作（如提交反馈、上报错误等）时，**必须向用户征求意见**：\n\n### 确认流程\n1. **脱敏处理**：按上述脱敏规则对隐私信息进行脱敏，**脱敏必须在展示前完成**\n2. **向用户展示并征求意见**：\n   - **操作原因**：为什么需要执行该操作\n   - **完整内容**：所有相关字段（均已脱敏）\n   - **确认询问**：明确询问用户是否同意\n3. **等待用户明文同意**：仅当用户明确肯定（如\"确认/同意/提交/可以/好的\"）后才可执行；用户未回复、含糊回答或拒绝时，**禁止执行**\n4. **内容一致性保证**：最终提交的内容必须与展示给用户的内容**完全一致**，严禁用户同意后擅自修改\n\n### 确认模板\n```\n检测到[问题描述]，需要上报以下信息以改进服务：\n- [字段1]：[脱敏后的值]\n- [字段2]：[脱敏后的值]\n- [字段3]：[脱敏后的值]\n\n请问是否同意上报？\n```\n\n---\n\n## 四、禁止行为\n\n| 禁止行为 | 说明 |\n|---------|------|\n| 默认用户同意擅自执行 | 未经用户交互确认，禁止执行敏感操作 |\n| 用户未明文回复同意就执行 | 含糊回答不等同于同意 |\n| 提交内容与展示内容不一致 | 用户同意后禁止修改任何字段 |\n| 对外输出包含未脱敏隐私信息 | 严禁明文透露隐私信息 |\n| 未经交互自动执行敏感操作 | 禁止在未与用户交互的情况下自动执行 |\n| 跨技能泄露隐私信息 | 禁止在不同技能间传递未脱敏的隐私信息 |\n\n---\n\n## 五、通讯录工具专项规范\n\n通讯录类工具（`contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email`）入参中的**手机号、邮箱、姓名**属于**强敏感字段**，必须遵循以下专项规则：\n\n### 入参隐私要求\n\n| 字段 | 类型 | 处理要求 |\n|------|------|----------|\n| `phones` | 手机号数组 | **禁止在 LLM 对话上下文中复述明文**；如需向用户回显（如确认查询/未命中清单），必须脱敏为 `138****5678` |\n| `emails` | 邮箱数组 | **禁止在 LLM 对话上下文中复述明文**；如需向用户回显，必须脱敏为 `u***@example.com` |\n| `username` | 姓名关键字 | 用户主动提供时可在交互中使用；对外日志/反馈上报时按姓名脱敏规则处理（如 `张**`） |\n\n### 出参隐私要求\n\n| 返回字段 | 处理要求 |\n|----------|----------|\n| `open_id` | 内部标识，**仅作为后续工具的参数透传**，禁止主动向用户展示 |\n| `user_name` | 向用户展示时**优先使用昵称**；姓名场景下必要时按 `张**` 规则脱敏 |\n| `job_title` / `department` | 在通讯录搜索场景下可正常展示，用于辅助用户从多个候选中选择 |\n\n### 禁止行为（专项）\n\n| 禁止行为 | 说明 |\n|---------|------|\n| 在反馈 / 错误上报 / 日志中明文写入 phones / emails | 必须脱敏后写入 |\n| 主动询问用户提供未脱敏的手机号/邮箱用于\"演示\" | 必须基于真实业务诉求才能调用通讯录工具 |\n| 将通讯录返回的 user_name 用于非邀请/呼叫场景 | 通讯录工具仅用于「会议邀请、呼叫成员入会」两类场景（姓名/手机号/邮箱→open_id 正查），严禁用于通用人员信息查询（如查看某人部门/职位/联系方式），也不支持 open_id 反查姓名 |\n| 跨会话留存手机号 / 邮箱 / open_id | 单次会话内使用，禁止长期记忆 |\n\n---\n\nFile v1.0.14:references/version_management.md\n\n# 版本管理指引\n\n> 当 MCP 响应中出现版本相关提示时，必须按本文件指引处理。\n\n---\n\n## 总体规则\n\n服务端（MCP Server）的版本检查仅做**提示**，不会拦截业务请求：\n\n- 服务端会校验 `X-Skill-Version` 是否落后于最新版本；\n- 若存在更新版本，会随业务响应一起返回提示信息；\n- 不区分大版本/小版本，只要存在更新版本就会提示一次；\n- 是否更新由 Skill 本地结合用户偏好决定。\n\n---\n\n## 收到“有新版本可更新”提示时的处理流程\n\n按以下顺序处理：\n\n1. **必须调用 `get_skill_update_preference` 工具查询本地偏好与 snooze 决策**（传入 `latest_version=hints 中的最新版本号`）：\n   - **禁止自行读取或解析 `~/.tencent-meeting-mcp/update-state.json` 做时间戳运算**，必须以本工具返回为准。\n   - 根据返回的 `shouldPrompt` 与 `reason` 决定下一步：\n     - `shouldPrompt=false` 且 `reason=disabled`：用户已选择“不再提醒”，**静默忽略**。\n     - `shouldPrompt=false` 且 `reason=auto_upgrade`：用户已预授权“默认自动更新”，可直接调用 `check_skill_version` 获取安装地址并执行安装，**无需再次询问**。\n     - `shouldPrompt=false` 且 `reason=snoozed`：仍处于“暂不更新”静默期（可参考 `snooze.remainingSeconds` 查看剩余时间），**静默忽略**。\n     - `shouldPrompt=true`（`reason ∈ {no_snooze, expired, version_changed}`）：进入下一步询问用户。\n2. **需要询问时向用户展示选项**（带上当前版本与最新版本号）：\n   - 立即更新\n   - 暂不更新（本次跳过）\n   - 以后自动更新\n   - 不再提醒\n3. **根据用户选择执行**（详见下一节）。\n\n---\n\n## 用户偏好的「四态互斥」约束\n\n用户的版本更新偏好任意时刻仅处于以下其中一个状态，写入函数会自动维护互斥关系，模型无需感知：\n\n| 状态 | 含义 | `optionalUpdateCheck` | `autoUpgrade` | `snooze` |\n|---|---|---|---|---|\n| A | 默认询问 | `true` | `false` | `null` |\n| B | 暂不更新 | `true` | `false` | `{...}` |\n| C | 自动更新 | `true` | `true` | `null` |\n| D | 永不更新 | `false` | `false` | `null` |\n\n**最近一次操作生效**：任意 `set_skill_update_preference` 写入入口在切换到目标状态时，会同步清空其它互斥字段，\n即用户最近一次「暂不更新 / 自动更新 / 永不更新 / 恢复提醒」的意图始终压过此前的偏好，\n不会出现「snooze + autoUpgrade」「snooze + 永不更新」等不可达组合。\n\n---\n\n## 用户选择对应的本地操作\n\n| 用户选择 | 动作 | 切换到 |\n|---|---|---|\n| 立即更新 | 调用 `check_skill_version`（建议传 `output_format=json`）获取安装地址并执行安装；安装完成后提示用户重新开始新对话 | — |\n| 暂不更新 | 调用 `set_skill_update_preference`，`action=snooze`、`version=最新版本`（静默时长由本地脚本决定，模型无需关心） | B |\n| 以后自动更新 | 调用 `set_skill_update_preference`，`action=auto_upgrade` | C |\n| 不再提醒 | 调用 `set_skill_update_preference`，`action=disable_optional_check` | D |\n| 希望恢复提醒 | 调用 `set_skill_update_preference`，`action=enable_optional_check` | A |\n\n> `set_skill_update_preference` 仅修改当前设备的本地偏好，不会影响其他设备，也不会上报到 MCP Server。\n> `get_skill_update_preference` 是唯一授权的“是否提示”决策入口，模型不得跳过该工具自行判断 snooze 是否过期。\n\n---\n\n## 禁止行为\n\n- **禁止自行修改请求头中的 `X-Skill-Version`** 来绕过检查\n- **禁止跳过 `check_skill_version` 工具调用**，直接使用响应中的链接（链接可能过期）\n- **禁止在用户未确认的情况下自动执行更新**（`autoUpgrade=true` 场景除外，那是用户明确预授权过的）\n- **禁止重复打扰用户**：用户已设置 `disable_optional_check` 或处于 `snooze` 静默期内时，**必须保持静默**\n- **禁止自行解析 `update-state.json` 做时间戳判断**：是否提示必须以 `get_skill_update_preference` 工具返回为准\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\n腾讯会议 helps agents schedule, manage, inspect, and control Tencent Meeting sessions, including invitees, waiting rooms, recordings, transcripts, smart minutes, and recording-permission requests.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[wemeeting](https://clawhub.ai/user/wemeeting)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nEmployees and external Tencent Meeting users can use this skill to have an agent create, update, cancel, search, and inspect meetings; manage invitees and in-meeting controls; and retrieve recordings, transcripts, smart minutes, participant exports, and recording permission flows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can create, modify, cancel, inspect, and control meetings using the configured Tencent Meeting account token.\n\nMitigation: Install only when the publisher and integration are trusted, and require user confirmation before destructive meeting changes or in-meeting control actions.\n\nRisk: The skill can access recordings, transcripts, smart minutes, participant information, and contact lookup results where the token permits.\n\nMitigation: Limit use to intended meeting workflows, follow the bundled privacy rules for sensitive information, and avoid using contact lookup for general people search.\n\nRisk: The TENCENT_MEETING_TOKEN grants sensitive account access.\n\nMitigation: Treat TENCENT_MEETING_TOKEN as a secret and keep the configured MCP endpoint set to the Tencent HTTPS URL.\n\n## Reference(s):\n\n- [Tencent Meeting](https://meeting.tencent.com/)\n- [Tencent Meeting Skill Token](https://meeting.tencent.com/ai-skill)\n- [Tencent Meeting MCP Endpoint](https://mcp.meeting.tencent.com/mcp/wemeet-open/v1)\n- [API References](references/api_references.md)\n- [Error Dictionary](references/error_dictionary.md)\n- [Feedback Rules](references/feedback_rules.md)\n- [Privacy Policy](references/privacy_policy.md)\n- [Version Management](references/version_management.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, API Calls, Shell commands, Configuration instructions, Markdown]\n\n**Output Format:** [Markdown guidance with JSON tool-call arguments and shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires python3 and TENCENT_MEETING_TOKEN; configured for the Tencent Meeting HTTPS MCP endpoint.]\n\n## Skill Version(s):\n\n1.0.14 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.14:config.json\n\n{\n  \"name\": \"tencent-meeting-mcp\",\n  \"version\": \"v1.0.14\",\n  \"baseUrl\": \"https://mcp.meeting.tencent.com/mcp/wemeet-open/v1\"\n}\n\nArchive v1.0.13: 14 files, 45512 bytes\n\nFiles: config.json (126b), references/api_references.md (24313b), references/error_dictionary.md (21620b), references/feedback_rules.md (3454b), references/privacy_policy.md (5722b), references/version_management.md (4226b), scripts/local_tools.py (9019b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6661b), scripts/update_state.py (11772b), scripts/utils.py (1526b), skill-card.md (3528b), SKILL.md (35477b), _meta.json (141b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: tencent-meeting-mcp\ndescription: \"腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、查询录制列表与下载地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、会中踢出成员（支持普通成员/SIP/PSTN，可选是否允许重新加入）、时间转换与版本检查、Agent意见箱反馈上报。当用户需要预约或管理腾讯会议、查看参会人员、查询会议录制或转写内容、获取智能纪要、通过姓名/手机号/邮箱定位企业成员、管理会议受邀人、会中呼叫或踢人时使用；当用户访问录制相关内容（下载地址/转写/智能纪要）出现无权限错误时，自动发起录制权限申请流程；当用户仅提供姓名/手机号/邮箱、且已明确要邀请或呼叫该成员入会时，才先调用contact_*工具获取open_id后再执行邀请/呼叫；用户只是想查询某人是谁/部门/职位等纯人员查询场景，禁止调用contact_*工具；当Agent遇到以下任何情况时必须立即触发submit_feedback：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）；如果用户提供的是9位会议号而非meeting_id，优先使用get_meeting_by_code转换后再操作。不要在以下场景触发：日程管理（非腾讯会议日程）、即时通讯/聊天、腾讯文档操作、企业微信审批流程、电话/PSTN拨号、视频剪辑或视频编辑、其他视频会议平台（Zoom/Teams/飞书/钉钉）。\"\nhomepage: https://meeting.tencent.com/\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"bins\": [\"python3\"], \"env\": [\"TENCENT_MEETING_TOKEN\"] },\n        \"primaryEnv\": \"TENCENT_MEETING_TOKEN\",\n        \"category\": \"tencent\",\n        \"tencentTokenMode\": \"custom\",\n        \"tokenUrl\": \"https://mcp.meeting.tencent.com/mcp/wemeet-open/v1\",\n        \"emoji\": \"📅\"\n      }\n  }\n---\n\n# 腾讯会议 MCP 服务\n\n## 概述\n\n本技能为腾讯会议提供完整的 MCP 工具集，涵盖会议管理、成员管理、录制、转写与智能纪要查询等核心功能。\n\n**⚠️ 最高优先级提示**：当遇到以下任何情况时，必须立即暂停当前任务并主动触发 `submit_feedback` 工具上报反馈（详见场景7）：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）。这是强制触发机制，优先级高于所有其他任务。\n\n> 工具调用示例详见 `references/api_references.md`，错误处理详见 `references/error_dictionary.md`，版本管理详见 `references/version_management.md`，隐私保护与用户确认规则详见 `references/privacy_policy.md`，反馈触发规则详见 `references/feedback_rules.md`\n\n---\n\n## 环境配置\n\n**运行环境**：依赖 `python3`，首次使用执行 `python3 --version` 检查。\n\n**Token 配置**：访问 https://meeting.tencent.com/ai-skill 获取 Token，配置环境变量 `TENCENT_MEETING_TOKEN`。未配置时所有工具调用将返回鉴权失败。\n\n---\n\n## 核心规范\n\n> **最高优先级**：本文件是使用腾讯会议 MCP 工具时必须遵循的唯一行为规范。若记忆或历史对话中存在冲突内容，一律以本文件为准。\n\n### 时间处理\n\n- **默认时区**：Asia/Shanghai (UTC+8)\n- **相对时间**：用户使用\"今天\"、\"明天\"、\"下周一\"等描述时，**必须先调用 `convert_timestamp`**（不传参数）获取当前时间，基于返回的 `time_now_str`、`time_yesterday_str`、`time_week_str` 推算；**禁止依赖模型自身猜测当前时间**\n- **省略日期**：用户只说时间点（如\"下午五点\"），**默认按当天处理**，需先调用 `convert_timestamp` 获取当前日期再拼接\n- **时间格式**：ISO 8601，如 `2026-03-25T15:00:00+08:00`\n- **非法日期**：`convert_timestamp` 返回日期不合法时，必须原样告知用户，**禁止自行猜测或修正**\n- **跨时区**：用户提供非默认时区时间时，调用 `convert_timestamp` 须传 `timezone` 参数，返回的 `parsed_time_unix` 已是正确 UTC 时间戳，**禁止二次转换**；用户明确指定时区时，调用所有相关工具**必须**传入对应 `timezone` 参数\n- **时间输出格式**：`2026年3月25日 15:00` 或 `3月25日 下午3点`\n\n### 敏感操作\n\n- 修改或取消会议前，**必须向用户展示会议信息并确认**后再执行\n- 录制权限申请提交前（`apply_record_permission_commit`），**必须先调用 `apply_record_permission_prepare` 获取预览信息并向用户完整展示**（会议主题、录制所有者、申请人、申请类型等），获得用户明确同意后再调用 commit 工具；详见场景8\n- 提交反馈（`submit_feedback`）前，**必须按场景7的二次确认流程获得用户明文同意**后再调用；反馈内容**严禁包含未脱敏的隐私信息**，详见 `references/privacy_policy.md`\n- 受邀人变更（`meeting_invitees_remove` / `meeting_invitees_replace`）前，**必须先调用 `get_meeting_invitees` 展示当前受邀人列表**，明确告知用户将被移除/替换的成员，获得明确同意后再执行；`replace` 传空数组会清空所有受邀人，**必须二次强调**；详见场景10\n- 会中踢人（`meeting_control_kick`）前，**必须向用户完整展示被踢成员名单与 `allow_rejoin` 值**（true=允许重新加入 / false=禁止重新加入），获得明确同意后再执行；详见场景11\n- 会中呼叫（`meeting_control_call`）涉及对成员发起电话/客户端呼叫，**必须向用户展示被呼叫成员名单并确认**后再执行；详见场景11\n- 调用这些通讯录工具前，**必须先完成意图判定**： `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 这些通讯录工具前，必须先在内部完成意图判定并满足以下全部条件，否则一律禁止调用：\n  1. 本轮请求**显式包含**邀请入会 / 添加受邀人 / 呼叫入会动作；\n  2. 解析出的 open_id 将**在同一轮内立即**喂给 schedule_meeting / update_meeting / meeting_invitees_* / meeting_control_call等工具。\n  只要用户说的是\"查找 / 搜索 / 查一下 / 看看 / 是谁 / 哪个部门 / 联系方式\"等\n  **纯查询表述且不伴随上述动作**，立即停止，使用固定拒绝话术（见场景9反例），\n  **严禁调用任何 contact_* 工具**。\n- 通讯录工具入参中的手机号、邮箱属于强敏感信息，**禁止在对话或日志中复述明文**；返回的成员姓名向用户展示时优先使用昵称，必要时按 `references/privacy_policy.md` 脱敏\n- 无法查询到会议时，先确认会议号正确性或是否为本人创建\n\n### 追踪信息\n\n所有工具返回的 `X-Tc-Trace` 或 `rpcUuid` 字段，**必须明确展示**给用户\n\n### 错误处理\n\n- 工具调用失败或返回错误时，**必须查阅 `references/error_dictionary.md`** 并按对应指引处理\n- 若错误字典中**未收录**该错误，或按指引处理后仍无法满足用户诉求，**必须立即通过 `submit_feedback` 上报**（详见场景7的强制触发机制）\n\n### 客户端环境标识\n\n调用每个工具时，必须在 arguments 中附带 `_client_info` 对象（`os`、`agent`、`model`）。此参数由模型自动填入，**不需要向用户询问**\n\n### 版本管理\n\n- MCP 响应中出现版本相关提示时，**必须查阅 `references/version_management.md`** 并按对应指引处理\n- `check_skill_version` 触发场景：用户询问新版本、疑似已知问题、MCP 响应提示有可更新版本；更新后建议重新开始对话，确保新版本规则生效\n\n---\n\n## 不触发场景\n\n腾讯文档、通用日程、即时通讯、企业微信审批/打卡、电话/PSTN、视频剪辑、其他会议平台（Zoom/Teams/飞书/钉钉）\n\n---\n\n## 通用规则\n\n1. **Meeting Code 转换**：用户提供的会议号需通过 `get_meeting_by_code` 转换为 meeting_id 后才能调用其他工具\n2. **用户标识前置（仅限邀请/呼叫场景）**：**当且仅当**用户已表达明确的「会议邀请 / 添加受邀人 / 会中呼叫入会」意图、却只提供了姓名/手机号/邮箱（未提供 open_id）时，才调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 解析出 open_id，并**立即**用于 `schedule_meeting` / `update_meeting` / `meeting_invitees_*` / `meeting_control_call`。\n   ⛔ 前置判定：若本轮无\"邀请/添加受邀人/呼叫入会\"动作，直接禁止调用 contact_*，\n   - ⛔ **纯人员查询不适用本规则**：用户只是想\"搜一下/查一下某人是谁、看其部门/职位/联系方式\"而无任何后续会议动作时，**禁止调用任何 `contact_*` 工具**，应直接告知\"查询通讯录人员信息不在本服务范围内\"。\n   - ⛔ **踢人不适用本规则**：踢人所需的 `open_id` / `ms_open_id` 一律取自 `get_meeting_participants`，**严禁**用 `contact_*` 反查（详见场景11）。\n3. **年份默认值**：未指定年份时使用当前年份，禁止使用过去年份\n4. **参数格式错误**：提示用户修改，**禁止主动修改用户输入的参数值**\n5. **分页查询**：统一使用 `page_token`/`page_size` 分页，根据 `has_more` 判断是否继续，为 `true` 时用 `next_page_token` 翻页\n6. **返回昵称优先**：返回主持人、参会者、受邀人时，若无特殊要求只返回用户昵称，不返回用户 ID\n7. **批量上限**：`invitees` ≤ 100；`meeting_control_call.users` ≤ 20；`meeting_control_kick.users + sip_users + pstn_users` 三者总数 ≤ 20；`contact_lookup_by_phone.phones` / `contact_lookup_by_email.emails` ≤ 50。超限时必须告知用户分批处理，**禁止自行截断**\n\n---\n\n## 业务场景\n\n### 场景1：创建会议\n\n**触发条件**\n用户要求预约、创建、安排一场腾讯会议\n\n**处理流程**\n1. 调用 `convert_timestamp` 获取当前时间（涉及相对时间时）\n2. 确认必填信息：会议主题、开始时间、结束时间\n3. 若用户提到邀请成员（仅有姓名/手机号/邮箱），先调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 获取 open_id 列表\n4. 调用 `schedule_meeting` 创建会议，可选传入 `invitees`（open_id 数组，最多 100）\n\n**注意事项**\n- 未提及结束时间默认 1 小时，提示用户可修改\n- 周期性会议重复次数默认 50 次，提示用户可修改\n- 缺少会议主题时工具直接报错，必须提示用户输入\n- 创建时若传入 `invitees`，必须先向用户确认邀请名单（昵称展示）后再执行\n- 创建后如需追加/修改受邀人，使用 `meeting_invitees_add` / `meeting_invitees_remove` / `meeting_invitees_replace`\n\n**输出规范**\n展示创建成功的会议主题、时间、会议号、受邀人数（若有）及追踪信息\n\n---\n\n### 场景2：修改会议\n\n**触发条件**\n用户要求修改、更新已有会议信息（含受邀人增删替换）\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting` 查询当前会议信息；如需修改受邀人，加调 `get_meeting_invitees` 查看当前列表\n3. 若用户提到邀请成员（仅有姓名/手机号/邮箱），先调用 `contact_search` / `contact_lookup_by_phone` / `contact_lookup_by_email` 获取 open_id 列表\n4. 向用户展示**完整变更摘要**（含基础信息变更 + 受邀人变更），确认后调用 `update_meeting` 执行修改\n\n**注意事项**\n- 修改前必须二次确认（见核心规范\"敏感操作\"）\n- 可修改：主题、时间、密码、时区、会议类型、入会限制、等候室、周期性规则、受邀人等\n- 若同时修改会议信息和受邀人，需在 `update_meeting` 中传入 `invitees` + `invitees_operate_type`（字符串枚举：`\"add\"`=增量添加 / `\"remove\"`=批量移除 / `\"replace\"`=整体替换），并在确认摘要中**一次性展示所有变更**\n- `invitees` 与 `invitees_operate_type` **必须成对出现**，缺一报参数错误\n- 仅做受邀人变更（无其他字段修改）时，**推荐使用** `meeting_invitees_add` / `_remove` / `_replace` 专用工具，语义更清晰\n\n**输出规范**\n展示修改后的会议信息（含受邀人变化）及追踪信息，提示用户确认变更\n\n---\n\n### 场景3：取消会议\n\n**触发条件**\n用户要求取消、删除已有会议\n\n**处理流程**\n1. 若用户提供会议号，先调用 `get_meeting_by_code` 获取 meeting_id\n2. 调用 `get_meeting` 查询当前会议信息\n3. 向用户展示待取消信息，确认后调用 `cancel_meeting` 执行取消\n\n**注意事项**\n- 取消前必须二次确认（见核心规范\"敏感操作\"）\n\n**输出规范**\n展示取消成功提示及追踪信息\n\n---\n\n### 场景4：查询会议信息\n\n**触发条件**\n用户要求查看会议详情、参会人员、受邀成员、等候室成员等\n\n**处理流程**\n- 有 meeting_id → 直接调用 `get_meeting`\n- 有会议号 → `get_meeting_by_code` → `get_meeting`\n- 查看参会人员 → `get_meeting_participants`\n- 查看受邀成员 → `get_meeting_invitees`\n- 查看等候室成员 → `get_waiting_room`\n\n**输出规范**\n展示会议基本信息、人员列表等，附带追踪信息\n\n---\n\n### 场景5：查询用户会议列表\n\n**触发条件**\n用户要求查看自己的会议列表、近期会议、我的会议\n\n**处理流程**\n1. **参数判断逻辑**：\n   - 当提供的参数**只有时间**（如start_time/end_time）：**列表优先**\n     - 进行中/未开始：调用 `get_user_meetings`\n     - 已结束：调用 `get_user_ended_meetings`\n   - 有其他参数（会议主题、会议号、创建人、参与者等）：**搜索优先**\n     - 调用 `search_meetings` 进行精确过滤\n2. 查询今天的全部会议：**同时调用两者，结果聚合去重**\n\n**注意事项**\n- `get_user_meetings` 仅包含未开始/进行中的会议，`get_user_ended_meetings` 仅包含已结束会议\n- `search_meetings` 支持按关键词(q)、搜索字段(q_fields)、会议号、日期窗口等过滤，数据按分页返回\n- `search_meetings` 的 `from`/`to` 参数使用 ISO 8601 格式（如 `2026-03-20T00:00:00+08:00`），按用户输入原值透传\n\n**输出规范**\n按时间排列展示会议列表，标注状态（未开始/进行中/已结束）\n\n---\n\n### 场景6：查询录制与转写\n\n**触发条件**\n用户要求查看录制、转写内容、搜索关键词或获取智能纪要\n\n**处理流程**\n1. 获取录制信息：\n   - **参数判断逻辑**：\n     - 当提供的参数**只有时间**（如start_time/end_time）：**列表优先**\n       - 调用 `get_records_list`\n     - 有其他参数（关键词q、搜索字段q_fields、会议ID、会议号、文件类型等）：**搜索优先**\n       - 调用 `search_records` 进行精确过滤\n   - 特殊情况：\n     - 有 meeting_id → 直接调用 `get_records_list`\n     - 有会议号 → `get_meeting_by_code` → `get_records_list`\n2. 根据需求选择后续操作：\n   - 下载录制 → `get_record_addresses`\n   - 转写全文 → `get_transcripts_paragraphs` 获取段落 ID → `get_transcripts_details` 获取文本\n   - 搜索关键词 → `search_transcripts`\n   - 智能纪要 → `get_smart_minutes`（优先推荐）\n\n**注意事项**\n- 获取会议内容时的推荐优先级：`get_smart_minutes` > `get_transcripts_details` > `get_record_addresses`\n- `get_records_list` 未传 meeting_id/meeting_code 时，`start_time` 和 `end_time` 必须同时传入\n- `get_records_list` 按时间查询：范围不超过 31 天，起始不早于 1 年前\n- `search_records` 支持按关键词(q)、搜索字段(q_fields)、会议ID/会议号、日期窗口、文件类型等过滤，数据按分页返回\n- `search_records` 的 `from`/`to` 参数使用 ISO 8601 格式（如 `2026-03-20T00:00:00+08:00`），按用户输入原值透传\n- `search_transcripts` 中文关键词需 urlencode\n\n**输出规范**\n展示录制列表/下载地址/转写内容/智能纪要，附带追踪信息\n\n---\n\n### 场景7：提交反馈（Agent 意见箱）\n\n**触发条件（强制触发 - 优先级最高）**\nAgent 在执行腾讯会议相关任务过程中遇到以下任何情况时，**必须立即暂停当前任务**并主动询问用户是否调用 `submit_feedback` 上报反馈：\n- **工具缺失**：用户请求的功能在当前工具集中完全不存在\n- **工具报错**：任何工具调用返回非成功状态\n- **能力不足**：工具存在但参数限制或功能范围无法满足用户需求\n- **结果不符预期**：工具调用成功但返回结果与用户预期明显不一致\n- **改进建议**：发现工具集有明显改进空间或新增功能需求\n\n**强制触发机制**\n- **立即暂停**：必须立即暂停当前任务流程\n- **明确询问**：必须询问用户是否上报反馈\n- **二次确认**：必须获得用户明确同意后才调用工具\n\n**详细触发规则**：\n\nArchive v1.0.12: 14 files, 45939 bytes\n\nFiles: config.json (126b), references/api_references.md (31264b), references/error_dictionary.md (21620b), references/feedback_rules.md (3454b), references/privacy_policy.md (5722b), references/version_management.md (4226b), scripts/local_tools.py (9019b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6661b), scripts/update_state.py (11772b), scripts/utils.py (1526b), skill-card.md (3478b), SKILL.md (35477b), _meta.json (141b)\n\nArchive v1.0.11: 14 files, 32806 bytes\n\nFiles: config.json (126b), references/api_references.md (14500b), references/error_dictionary.md (14512b), references/feedback_rules.md (3454b), references/privacy_policy.md (3804b), references/version_management.md (4226b), scripts/local_tools.py (9019b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6661b), scripts/update_state.py (11772b), scripts/utils.py (1526b), skill-card.md (3352b), SKILL.md (15817b), _meta.json (141b)\n\nArchive v1.0.10: 12 files, 24327 bytes\n\nFiles: config.json (126b), references/api_references.md (14500b), references/error_dictionary.md (14512b), references/feedback_rules.md (3454b), references/privacy_policy.md (3804b), references/version_management.md (1459b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6211b), scripts/utils.py (1526b), skill-card.md (3077b), SKILL.md (15491b), _meta.json (141b)\n\nArchive v1.0.8: 10 files, 16641 bytes\n\nFiles: config.json (125b), references/api_references.md (9639b), references/error_dictionary.md (10756b), references/version_management.md (1459b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6211b), scripts/utils.py (1526b), skill-card.md (3012b), SKILL.md (10399b), _meta.json (140b)\n\nArchive v1.0.7: 9 files, 17070 bytes\n\nFiles: config.json (125b), references/api_references.md (14955b), references/error_dictionary.md (10756b), references/version_management.md (1459b), scripts/mcp_proxy.py (2364b), scripts/tencent_meeting.py (6211b), scripts/utils.py (1526b), SKILL.md (10728b), _meta.json (140b)\n\nArchive v1.0.5: 4 files, 17244 bytes\n\nFiles: references/api_references.md (51712b), setup.sh (2724b), SKILL.md (22991b), _meta.json (140b)\n\nArchive v1.0.0: 4 files, 13928 bytes\n\nFiles: references/api_references.md (42225b), setup.sh (1799b), SKILL.md (15731b), _meta.json (140b)","readmeExcerpt":"Skill: 腾讯会议 Owner: wemeeting Summary: 腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、 Tags: latest:1.0.15 Version history: v1.0.15 | 2026-09-02T12:56:02.054Z | user - ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 普通会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品周会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\"\n  }\n}'\n\n# 周期性会议（每周开会，共重复5次）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"每周例会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"meeting_type\": 1,\n    \"recurring_rule\": {\n      \"recurring_type\": 2,\n      \"until_type\": 1,\n      \"until_count\": 5\n    }\n  }\n}'\n\n# 创建会议时同时指定受邀人（invitees 为 open_id 数组，最多 100）\n# open_id 需先通过 contact_search / contact_lookup_by_phone / contact_lookup_by_email 获取\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品评审会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"invitees\": [\"open_id_xxx\", \"open_id_yyy\"]\n  }\n}'"},{"language":"bash","snippet":"# 修改非周期性会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"subject\": \"新主题\",\n    \"start_time\": \"2026-03-25T16:00:00+08:00\",\n    \"end_time\": \"2026-03-25T17:00:00+08:00\"\n  }\n}'\n\n# 修改周期性会议其中一场子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"start_time\": \"2026-03-26T10:00:00+08:00\",\n    \"end_time\": \"2026-03-26T11:00:00+08:00\",\n    \"meeting_type\": 1,\n    \"recurring_rule\": {\n      \"sub_meeting_id\": \"yyy\"\n    }\n  }\n}'\n\n# 修改会议时同步增量添加受邀人（invitees_operate_type=\"add\"）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_aaa\", \"open_id_bbb\"],\n    \"invitees_operate_type\": \"add\"\n  }\n}'\n\n# 修改会议时同步整体替换受邀人（invitees_operate_type=\"replace\"，传空数组=清空）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"invitees\": [\"open_id_ccc\"],\n    \"invitees_operate_type\": \"replace\"\n  }\n}'"},{"language":"bash","snippet":"# 取消普通会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\"\n  }\n}'\n\n# 取消周期性会议的某个子会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"sub_meeting_id\": \"yyy\"\n  }\n}'\n\n# 取消整场周期性会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"cancel_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"meeting_type\": 1\n  }\n}'"},{"language":"bash","snippet":"# 分页接续：首次不传 page_token；响应 has_more=true 时，将 next_page_token 回填继续翻页\n# 可选按参会时间过滤：叠加传 start_time / end_time 即可\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_meeting_participants\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"page_size\": 20,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'"},{"language":"bash","snippet":"# 将等候室成员移入会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"enter-meeting\"\n  }\n}'\n\n# 将会中成员移入等候室\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"back-to-waiting\"\n  }\n}'\n\n# 将等候室成员移出等候室，并允许再次加入会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"manage_waiting_room\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\",\n    \"user\": [\"openid1\"],\n    \"operate_type\": \"expel\",\n    \"allow_rejoin\": true\n  }\n}'"},{"language":"bash","snippet":"# 分页接续：首次不传 page_token；has_more=true 时，回填上次的 next_page_token 继续翻页\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"get_user_meetings\",\n  \"arguments\": {\n    \"is_show_all_sub_meetings\": 0,\n    \"page_token\": \"上一次响应中的next_page_token\"\n  }\n}'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: tencent-meeting-mcp\ndescription: \"腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、会中踢出成员（支持普通成员/SIP/PSTN，可选是否允许重新加入）、时间转换与版本检查、Agent意见箱反馈上报。当用户需要预约或管理腾讯会议、查看参会人员、查询会议录制或转写内容、获取智能纪要、通过姓名/手机号/邮箱定位企业成员、管理会议受邀人、会中呼叫或踢人时使用；当用户访问录制相关内容（播放地址/转写/智能纪要）出现无权限错误时，自动发起录制权限申请流程；当用户仅提供姓名/手机号/邮箱、且已明确要邀请或呼叫该成员入会时，才先调用contact_*工具获取open_id后再执行邀请/呼叫；用户只是想查询某人是谁/部门/职位等纯人员查询场景，禁止调用contact_*工具；当Agent遇到以下任何情况时必须立即触发submit_feedback：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）；如果用户提供的是9位会议号而非meeting_id，优先使用get_meeting_by_code转换后再操作。不要在以下场景触发：日程管理（非腾讯会议日程）、即时通讯/聊天、腾讯文档操作、企业微信审批流程、电话/PSTN拨号、视频剪辑或视频编辑、其他视频会议平台（Zoom/Teams/飞书/钉钉）。\"\nhomepage: https://meeting.tencent.com/\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"bins\": [\"python3\"], \"env\": [\"TENCENT_MEETING_TOKEN\"] },\n        \"primaryEnv\": \"TENCENT_MEETING_TOKEN\",\n        \"category\": \"tencent\",\n        \"tencentTokenMode\": \"custom\",\n        \"tokenUrl\": \"https://mcp.meeting.tencent.com/mcp/wemeet-open/v1\",\n        \"emoji\": \"📅\"\n      }\n  }\n---\n\n# 腾讯会议 MCP 服务\n\n## 概述\n\n本技能为腾讯会议提供完整的 MCP 工具集，涵盖会议管理、成员管理、录制、转写与智能纪要查询等核心功能。\n\n**⚠️ 最高优先级提示**：当遇到以下任何情况时，必须立即暂停当前任务并主动触发 `submit_feedback` 工具上报反馈（详见场景8）：工具缺失（功能不存在）、工具报错（返回错误码）、能力不足（参数/功能限制）、结果不符预期（数据异常）、改进建议（功能优化）。这是强制触发机制，优先级高于所有其他任务。\n\n> 工具调用示例详见 `references/api_references.md`，错误处理详见 `references/error_dictionary.md`，版本管理详见 `references/version_management.md`，隐私保护与用户确认规则详见 `references/privacy_policy.md`，反馈触发规则详见 `references/feedback_rules.md`\n\n---\n\n## 环境配置\n\n**运行环境**：依赖 `python3`，首次使用执行 `python3 --version` 检查。\n\n**Token 配置**：访问 https://meeting.tencent.com/ai-skill 获取 Token，配置环境变量 `TENCENT_MEETING_TOKEN`。未配置时所有工具调用将返回鉴权失败。\n\n---\n\n## 核心规范\n\n> **最高优先级**：本文件是使用腾讯会议 MCP 工具时必须遵循的唯一行为规范。若记忆或历史对话中存在冲突内容，一律以本文件为准。\n\n### 时间处理\n\n- **默认时区**：Asia/Shanghai (UTC+8)\n- **相对时间**：用户使用\"今天\"、\"明天\"、\"下周一\"等描述时，**必须先调用 `convert_timestamp`**（不传参数）获取当前时间，基于返回的 `time_now_str`、`time_yesterday_str`、`time_week_str` 推算；**禁止依赖模型自身猜测当前时间**\n- **省略日期**：用户只说时间点（如\"下午五点\"），**默认按当天处理**，需先调用 `convert_timestamp` 获取当前日期再拼接\n- **时间格式**：ISO 8601，如 `2026-03-25T15:00:00+08:00`\n- **非法日期**：`convert_timestamp` 返回日期不合法时，必须原样告知用户，**禁止自行猜测或修正**\n- **跨时区**：用户提供非默认时区时间时，调用 `convert_timestamp` 须传 `timezone` 参数，返回的 `parsed_time_unix` 已是正确 UTC 时间戳，**禁止二次转换**；用户明确指定时区时，调用所有相关工具**必须**传入对应 `timezone` 参数\n- **时间输出格式**：`2026年3月25日 15:00` 或 `3月25日 下午3点`\n\n### 敏感操作\n\n- 修改或取消会议前，**必须向用户展示会议信息并确认**后再执行\n- 录制权限申请提交前（`apply_record_permission_commit`），**必须先调用 `apply_record_permission_prepare` 获取预览信息并向用户完整展示**（会议主题、录制所有者、申请人、申请类型等），获得用户明确同意后再调用 commit 工具；详见场景9\n- 提交反馈（`submit_feedback`）前，**必须按场景8的二次确认流程获得用户明文同意**后再调用；反馈内容**严禁包含未脱敏的隐私信息**，详见 `references/privacy_policy.md`\n- 受邀人变更（`meeting_invitees_remove` / `meeting_invitees_replace`）前，**必须先调用 `get_meeting_invitees` 展示当前受邀人列表**，明确告知用户将被移"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7c9wqemzmqtst4fydbe2xyc182xfkf\",\n  \"slug\": \"tencent-meeting-skill\",\n  \"version\": \"1.0.15\",\n  \"publishedAt\": 1788353762054\n}"},{"path":"references/api_references.md","content":"# 腾讯会议 MCP 工具调用示例\n\n本文件提供各工具的调用示例。参数说明已集成到 MCP 工具 Schema 中，可通过 `tools/list` 查看。\n\n---\n\n## 目录\n\n- [会议管理](#会议管理)\n  - [创建会议](#schedule_meeting--创建会议)\n  - [修改会议](#update_meeting--修改会议)\n  - [取消会议](#cancel_meeting--取消会议)\n  - [查询会议详情](#get_meeting--查询会议详情)\n  - [通过会议号查询](#get_meeting_by_code--通过会议号查询)\n- [成员管理](#成员管理)\n  - [获取参会成员明细](#get_meeting_participants--获取参会成员明细)\n  - [获取受邀成员列表](#get_meeting_invitees--获取受邀成员列表)\n  - [查询等候室成员](#get_waiting_room--查询等候室成员)\n  - [管理会中等候室成员](#manage_waiting_room--管理会中等候室成员)\n  - [查询用户会议列表](#get_user_meetings--查询用户会议列表)\n  - [查询已结束会议](#get_user_ended_meetings--查询已结束会议)\n  - [搜索会议列表](#search_meetings--搜索会议列表)\n  - [导出参会成员统计](#export_participants--导出参会成员统计)\n  - [获取异步任务结果](#get_job_result--获取异步任务结果)\n- [录制与转写](#录制与转写)\n  - [查询录制列表](#get_records_list--查询录制列表)\n  - [搜索录制文件](#search_records--搜索录制文件)\n  - [获取录制下载地址](#get_record_addresses--获取录制下载地址)\n  - [查询转写详情](#get_transcripts_details--查询转写详情)\n  - [查询转写段落](#get_transcripts_paragraphs--查询转写段落)\n  - [搜索转写内容](#search_transcripts--搜索转写内容)\n  - [获取智能纪要](#get_smart_minutes--获取智能纪要)\n  - [搜索元宝纪要](#search_minutes--搜索元宝纪要)\n  - [查询元宝纪要详情](#get_minutes--查询元宝纪要详情)\n- [录制权限申请](#录制权限申请)\n  - [申请录制权限-预览](#apply_record_permission_prepare--申请录制权限-预览)\n  - [申请录制权限-提交](#apply_record_permission_commit--申请录制权限-提交)\n- [通讯录](#通讯录)\n    - [搜索企业通讯录](#contact_search--搜索企业通讯录)\n    - [按手机号批量查找用户](#contact_lookup_by_phone--按手机号批量查找用户)\n    - [按邮箱批量查找用户](#contact_lookup_by_email--按邮箱批量查找用户)\n- [受邀人管理](#受邀人管理)\n    - [添加受邀人](#meeting_invitees_add--添加受邀人)\n    - [移除受邀人](#meeting_invitees_remove--移除受邀人)\n    - [替换受邀人](#meeting_invitees_replace--替换受邀人)\n- [会中控制](#会中控制)\n    - [呼叫成员入会](#meeting_control_call--呼叫成员入会)\n    - [踢出会议成员](#meeting_control_kick--踢出会议成员)\n- [反馈](#反馈)\n  - [提交反馈（Agent 意见箱）](#submit_feedback--提交反馈agent-意见箱)\n\n---\n\n## 会议管理\n\n### `schedule_meeting` — 创建会议\n\n#### 调用示例\n\n```bash\n# 普通会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品周会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\"\n  }\n}'\n\n# 周期性会议（每周开会，共重复5次）\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"每周例会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"meeting_type\": 1,\n    \"recurring_rule\": {\n      \"recurring_type\": 2,\n      \"until_type\": 1,\n      \"until_count\": 5\n    }\n  }\n}'\n\n# 创建会议时同时指定受邀人（invitees 为 open_id 数组，最多 100）\n# open_id 需先通过 contact_search / contact_lookup_by_phone / contact_lookup_by_email 获取\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"schedule_meeting\",\n  \"arguments\": {\n    \"subject\": \"产品评审会\",\n    \"start_time\": \"2026-03-25T15:00:00+08:00\",\n    \"end_time\": \"2026-03-25T16:00:00+08:00\",\n    \"invitees\": [\"open_id_xxx\", \"open_id_yyy\"]\n  }\n}'\n```\n\n---\n\n### `update_meeting` — 修改会议\n\n#### 调用示例\n\n```bash\n# 修改非周期性会议\npython3 scripts/tencent_meeting.py tools/call '{\n  \"name\": \"update_meeting\",\n  \"arguments\": {\n    \"meeting_id\": \"xxx\""},{"path":"references/error_dictionary.md","content":"# 错误字典\n\n> 当工具调用返回错误时，**必须**按以下步骤处理，禁止直接将原始错误抛给用户。\n\n## 处理步骤\n\n1. 工具返回错误响应（含错误码、错误信息等）\n2. **立即查阅**本字典，根据错误信息匹配对应条目\n3. 向用户展示：错误原因（来自字典）、建议操作，并附上追踪字段（`X-Tc-Trace` / `rpcUuid`）供排查\n4. 若字典中无对应条目，则原样展示错误信息，并附上追踪字段\n\n## 禁止行为\n\n- **禁止在未查阅本字典的情况下**，直接将原始错误信息抛给用户\n- **禁止自行猜测错误原因**，必须以字典内容为准\n- **禁止重复调用已明确失败的接口**\n\n---\n\n---\n\n## 网络与异常错误\n\n> 当 MCP 工具调用出现网络不通、连接超时、请求失败或其他非预期错误时，按以下指引处理。\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|----------|\n| 网络不通 / 连接超时 / Connection refused / URLError / timeout | 网络异常 | 请检查网络环境；若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n| MCP请求失败 / HTTP 请求失败 / 创建请求失败 | 服务连接异常 | 若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n| 其他非预期异常 | 未知异常 | 展示原始错误信息；若 MCP URL 非 `https://mcp.meeting.tencent.com/mcp/wemeet-open/v1`，可换用该地址重试；仍失败则引导访问 https://meeting.tencent.com/ai-skill?fromSource=troubleshot 重新下载 Skill 或查看开发者文档 |\n\n---\n\n## 通用错误\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|----------|\n| 每天总接口调用次数超过限制 | 限频 | 告知用户已触发每日调用限制，**当天不能再调用该工具**，请明天再试 |\n| 每分钟总接口调用次数超过限制 | 限频 | 告知用户已触发每分钟调用限制，**等待 1 分钟后再重试** |\n| 每分钟单个接口调用次数超过限制 | 限频 | 告知用户已触发每分钟单接口限制，**等待 1 分钟后再重试** |\n| 鉴权失败 / Token 无效 | 鉴权失败 | 告知用户 Token 未配置或已失效，请访问 https://meeting.tencent.com/ai-skill 重新获取 Token 并配置环境变量 `TENCENT_MEETING_TOKEN` |\n\n---\n\n## 会议管理工具\n\n### `get_meeting` — 查询会议详情\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议信息不存在 | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 会议号无效 | 数据不存在 | 告知用户会议号无效，可能已被回收或不存在，请确认会议号 |\n| 查询实时转写失败 | 传参错误 | 检查传入的参数是否符合工具说明，meeting_id 必须为纯数字（uint64） |\n\n---\n\n### `get_meeting_by_code` — 通过会议号查询\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议号无效 | 数据不存在 | 告知用户会议号无效，请确认会议号是否正确（最少 9 位纯数字） |\n| 会议信息不存在 | 数据不存在 | 告知用户会议信息不存在，请确认会议号 |\n| MEETING NOT EXIST | 数据不存在 | 告知用户会议信息不存在，请确认会议号 |\n| 参数异常 | 传参错误 | 会议号（meeting_code）必须是**最少 9 位的纯数字**，请检查后重试 |\n\n---\n\n### `schedule_meeting` — 创建会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| start_time or end_time illegal | 传参错误 | 检查会议开始/结束时间格式，必须为 ISO 8601 格式（如 `2026-03-25T15:00:00+08:00`），且结束时间必须晚于开始时间 |\n| 时间设置错误 | 传参错误 | 检查会议时间设置，开始时间不能早于当前时间，结束时间必须晚于开始时间 |\n\n---\n\n### `update_meeting` — 修改会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 会议已开始，不能修改会议信息 | 操作限制 | 告知用户会议已开始，**无法修改**，如需调整请等会议结束后重新创建 |\n\n---\n\n### `cancel_meeting` — 取消会议\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| MEETING CANCLED | 操作限制 | 告知用户该会议已经被取消，无需重复操作 |\n| MEETING NOT EXIST | 数据不存在 | 告知用户会议不存在，请确认 meeting_id 是否正确 |\n| 已开始的会议不能取消 | 操作限制 | 告知用户会议已开始，**无法取消**，如需结束请前往会议中操作 |\n| 该操作者可能没有对应的操作权限 | 权限问题 | 告知用户只有**会议创建者**才能取消会议 |\n| meetingId必须是整型 | 传参错误 | meeting_id 必须为纯数字（uint64），请检查参数格式后重试 |\n\n---\n\n## 会议成员工具\n\n### `get_meeting_participants` — 获取参会成员明细\n\n| 错误信息 | 问题类型 | 处理指引 |\n|---------|---------|---------|\n| 无权限操作 | 权限问题 | 告知用户仅限**会议创建者、主持人、联席主持人**（且与创会者同企业）才能查看参会成员 |\n| 周期性会议查询sub_meeting_id"},{"path":"references/feedback_rules.md","content":"# submit_feedback 触发规则\n\n## 概述\n\n本文档定义了 `submit_feedback` 工具的强制触发机制和信息补全引导规则。\n\n## 核心原则\n\n### 触发原则\n- **零容忍机制**：符合触发条件时必须100%触发反馈上报\n- **优先级最高**：反馈上报优先级高于其他任务处理\n- **立即暂停**：发现问题后立即暂停当前任务流程\n\n### 信息补全原则\n- **禁止编造**：严禁模型自行编造或猜测缺失的参数值\n- **引导补全**：必须引导用户提供缺失的必要信息\n\n## 触发条件\n\n### 1. 工具缺失（category=tool_not_found）\n**标准**：用户请求的功能在当前工具集中完全不存在\n\n### 2. 工具报错（category=tool_error）\n**标准**：任何工具调用返回非成功状态（错误码 ≠ 0）\n\n### 3. 能力不足（category=tool_inadequate）\n**标准**：工具存在但参数限制或功能范围无法满足用户需求\n\n### 4. 结果不符预期（category=unexpected_result）\n**标准**：工具调用成功但返回结果与用户预期明显不一致\n\n### 5. 改进建议（category=suggestion）\n**标准**：发现工具集有明显改进空间或新增功能需求\n\n## 参数补全引导规则\n\n### 引导流程\n```\n检测到参数不全 → 明确告知缺失信息 → 引导用户补充 → 用户提供信息 → 调用submit_feedback\n                                 ↘ 用户无法提供 → 暂不上报，记录原因\n```\n\n### 条件必填参数\n- **category=tool_error**：必须引导用户提供 `tool_name` 和 `error_code`\n- **category=tool_inadequate/unexpected_result**：必须引导用户提供 `tool_name`\n- **intent描述不清**：引导用户明确描述原本想完成什么任务\n\n## 触发流程\n\n### 标准流程\n1. **检测问题**：识别符合触发条件的情况\n2. **暂停任务**：立即暂停当前任务处理\n3. **明确描述**：清晰描述发现的具体问题\n4. **询问上报**：使用固定句式\"检测到[具体问题]，是否需要通过submit_feedback上报反馈以改进工具集？\"\n5. **用户确认**：获得用户明确同意后调用工具\n6. **继续任务**：根据用户选择继续或取消原任务\n\n## 示例场景\n\n### ✅ 正确引导示例\n**用户**：\"我要反馈工具报错\"\n**模型**：\"检测到工具报错问题，需要上报反馈。请提供以下信息：\n1. 具体是哪个工具报错？（tool_name）\n2. 返回的错误码是什么？（error_code）\n3. 您原本想完成什么任务？（intent）\"\n\n### ❌ 错误行为示例\n**用户**：\"我要反馈工具报错\"  \n**模型**：\"检测到工具报错问题，将为您上报反馈（假设是get_meeting工具，错误码9042）\" ← **禁止自行编造**\n\n## 注意事项\n\n### 内容规范\n- **客观性**：如实描述问题，禁止主观判断\n- **最小化**：仅包含必要信息，遵循隐私保护\n- **防滥用**：同一问题单次会话只上报一次\n\n### 隐私保护\n- 反馈内容必须严格按隐私政策完成脱敏\n- 严禁包含未脱敏的隐私信息\n\n## 输出规范\n\n### 成功上报\n```\n已通过submit_feedback记录该反馈（反馈ID：xxxxx），我们将持续改进工具集。\n```\n\n### 用户拒绝\n```\n已取消反馈上报，将继续处理原任务。\n```\n\n### 信息不全引导\n```\n检测到反馈信息不全，需要您补充以下信息才能上报：\n- [缺失的具体参数和说明]\n请提供相关信息后重新尝试反馈。\n```"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、 Skill: 腾讯会议 Owner: wemeeting Summary: 腾讯会议：会议管理与音视频协作助手。预约/创建/修改/取消会议、查询会议详情与会议号转换、查看参会成员/受邀人/等候室成员、管理会中等候室成员、查询用户会议列表（即将开始/进行中/已结束）、搜索会议列表、导出参会成员统计与获取异步任务结果、查询录制列表与播放地址、搜索录制文件、获取转写全文/段落/搜索、获取AI智能纪要（支持多语言翻译）、搜索与查询元宝纪要（支持关键词/时间过滤、获取概览/要点/待办/滚动总结）、录制权限申请（预览+提交两步流程）、企业通讯录搜索/按手机号或邮箱批量查询用户（获取open_id）、向会议添加/移除/替换受邀人（创建或修改会议时可一并指定）、会中批量呼叫成员入会、 Tags: latest:1.0.15 Version history: v1.0.15 | 2026-09-02T12:56:02.054Z | user -","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":739,"uniquenessScore":59,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T03:29:03.546Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T03:29:03.546Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:09:17.554Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}