ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

飞书与腾讯会议API对接实践:从日程建会到纪要归档的全流程指南

飞书与腾讯会议API对接实践:从日程建会到纪要归档的全流程指南 我最早做飞书和腾讯会议对接实践起因特别朴素每周五下午市场部都要开周会会议链接永远在两天前的聊天记录里同事在飞书日程里点开一看要么链接过期要么会议号对不上一群人对着屏幕干等五分钟。这个场景我猜大多数公司都经历过。所以这篇文章我不打算讲那些虚的概念直接把飞书和腾讯会议打通这件事拆开揉碎从方案选型、权限准备、接口调用、回调处理到问题排查按我们实际趟过的路一步步写清楚给正在做同类对接的团队一个可以直接照抄的参考。先说清楚适用对象如果你是企业内部IT、效率工程团队、数字化运营或者有一定开发能力的业务负责人正在纠结飞书日程怎么自动创建腾讯会议腾讯会议纪要怎么回传到飞书文档机器人怎么把会议状态推到群里这篇正合适。文章里的代码和参数基于常见实践整理不同版本的API可能有细微差异动手时以官方最新文档为准。1. 先想清楚为什么要做这两个平台的对接1.1 两个平台割裂带来的真实痛点飞书和腾讯会议在企业里几乎是标配一个管办公协作一个管音视频会议。问题在于这两套体系天然割裂飞书侧有自己的日历、文档、机器人、审批流腾讯会议侧有独立的会议调度、云录制、转写、参与者管理。员工日常使用的时候感受最直接的麻烦有三个。第一个麻烦是会议链接管理混乱。组织者在飞书里建了日程但入会方式用的是腾讯会议于是会议链接要么写在日程备注里要么发在群里要么干脆记在Excel表格里。参会人到了点要找半天。遇到跨部门会议、外部客户会议这个信息传递更是灾难。第二个麻烦是会议状态不同步。腾讯会议这边会议延长了、取消了、提前结束了飞书日程完全不知道参会人还在按原计划等。第三个麻烦是会议资产无法沉淀。腾讯会议有云录制和转写文本但内容一直锁在会议平台里飞书文档、知识库、AIGC知识库这些真正需要内容沉淀的地方反而拿不到。这些痛点的本质是两个系统之间缺少一条自动化的数据通道。1.2 对接后能解决什么典型场景清单把飞书和腾讯会议对接起来之后可以解决的不只是链接同步这一个问题往大了说可以覆盖一条完整的会议生命周期。我结合跑过的场景列一份清单你可以对照自己的需求打勾飞书日程一键生成腾讯会议用户在飞书日历建日程时通过机器人指令或按钮触发自动在腾讯会议创建会议并把会议号、入会链接、密码写回日程描述同时推送到相关群里。会议状态自动通知腾讯会议的会议开始、结束、成员入会离会等事件通过回调实时推送飞书机器人把状态变化发到指定群不用人工盯。会议录制和纪要归档腾讯会议录制完成后服务端自动拉取录制文件和转写文本整理成结构化文档写入飞书云文档甚至挂载到知识库某个节点下。会议统计报表每天定时拉取腾讯会议的会议列表、参会人、时长生成表格发送到飞书群管理层直接看到数据。这些场景不需要同时全部落地从最痛的那个点切入就行。1.3 这个对接适合谁我的观察是适合做这件事的人分三类第一类是公司里有开发能力的IT或效率工程团队他们能独立完成API对接和系统维护第二类是使用低代码平台或iPaaS工具的运营人员用可视化连接器完成简单场景第三类是对技术有一定认知但主要靠外部工具和AI生成代码的业务骨干他们往往是推动需求落地的关键角色。不管哪一类搞清楚一个对接方案的整体架构比会抄一段代码重要得多。2. 对接方案怎么选三条路线一次讲透2.1 路线一开放平台API直连最正统的方案也是现在大多数企业采用的方案。原理很简单飞书开放平台和腾讯会议开放平台都提供了完整的企业API你写一个服务端程序同时调用两边接口把数据在两个平台之间搬运。飞书侧你会用到这些能力自建应用企业自建应用、获取tenant_access_token、日历API查询和更新日程、机器人API发消息到群、发卡片、云文档API创建文档、编辑blocks、事件订阅接收飞书侧的事件回调。腾讯会议侧你会用到企业自建应用凭证、创建会议API、查询会议API、查询录制文件API、回调通知接收会议状态事件。这个方案的好处是自由度最高任何场景都能实现数据完全在自己掌控中。坏处是开发和维护成本高你需要同时理解两套API体系、两套鉴权机制、两套回调协议还要考虑网络、异常、重试、部署。适用场景中期要建设完整会议管理体系的团队有开发资源不想被第三方平台绑定。2.2 路线二iPaaS和低代码平台中转不想写太多代码的话市面上成熟的iPaaS平台比如腾讯轻联等以及飞书生态里的自动化连接器已经内置了腾讯会议和飞书的连接器。你只需要在平台里配置触发条件和动作比如当飞书日历事件创建时调用腾讯会议创建会议再发飞书群消息。这个方案的优势非常明显搭建速度快、无代码可视化、平台帮你处理了鉴权和回调适合业务部门自己玩。劣势也很明显复杂逻辑不好实现比如自定义卡片、错误补偿、多系统联动、接口能力受限于连接器本身、数据经过第三方平台需要考虑合规要求、调试问题依赖平台支持。适用场景快速验证想法、中小团队、没有专职开发的业务部门。以我的经验低代码平台适合跑通飞书日程创建后生成腾讯会议链接并在群内通知这种轻量场景一旦要做会议归属映射、超时重试、跨系统状态补偿最后还是得回到API直连。2.3 路线三Webhook事件订阅加机器人组合严格来说这不算独立路线而是API直连方案的增强组合。真正让对接活起来的关键是事件驱动飞书侧通过事件订阅感知日程变化腾讯会议侧通过回调感知会议状态变化中间的服务端负责接收事件、处理逻辑、调用API、再通过机器人把结果推送出去。一个完整的对接架构通常是这样的飞书日程和腾讯会议之间没有直接连接中间有一个你自己的后端服务作为中转大脑。这个后端暴露两个HTTP端点一个接收飞书事件订阅一个接收腾讯会议回调同时它主动调用两个平台的API完成数据读写再通过飞书机器人把消息推给最终用户。这里最容易踩的坑是只做了API调用没做事件订阅导致每次都要靠定时任务轮询。轮询也不是不行但实时性差、接口压力大、代码逻辑复杂。我建议从设计阶段就把事件驱动放进去哪怕一开始场景简单也要给回调预留位置。下面用表格对比三条路线维度API直连iPaaS低代码API直连事件驱动开发成本较高低最高灵活度高中最高实时性依赖轮询或回调依赖平台依赖回调实时维护成本中低高适合场景一次性批量同步快速自动化长期运营、复杂联动3. 动手前先备齐这些账号、权限、密钥和回调地址3.1 飞书开放平台侧创建应用、开启机器人、申请权限飞书侧的准备工作核心是在飞书开放平台创建一个企业自建应用。登录开发者后台选择企业内应用创建成功后会拿到App ID和App Secret这两个值后面拿token要用一定要记好。创建应用之后有三件事必须做。第一开启机器人能力这样应用才能给群聊发消息。第二申请权限飞书的权限体系是按scope控制的不是所有接口开通就能用。以我们最常见的场景为例至少需要这几个读取和更新日历的权限calendar:calendar、获取日程详情的权限、发送消息的权限im:message、读取用户基本信息contact:user.base:readonly如果需要操作云文档还要申请云文档相关权限docx:document、drive:drive。特别注意权限申请后不是立即生效必须发布新版本并经过企业管理员审核通过。第三配置事件订阅。飞书事件订阅支持长连接和Webhook两种方式如果你的后端在公网可达直接配置请求地址URL。常用的订阅事件有日程变更事件calendar.event.changed、接收消息事件im.message.receive_v1、云文档内容变更事件。配置好之后飞书后台会发送一个验证请求你的服务端需要按照协议返回加密或明文格式的challenge才能通过验证。这里有一个实操细节飞书的Verification Token和Encrypt Key一定要保存好回调验签和消息解密都用得上。3.2 腾讯会议开放平台侧创建应用、获取企业凭证腾讯会议开放平台的接入方式和企业自建应用强相关。在企业账号下创建应用完成企业资质验证后你会拿到一组企业凭证通常包括企业IDAppId、Secret ID和Secret Key有些场景还会用到企业自建的OAuth配置。腾讯会议的API鉴权签名比飞书稍微复杂一点。调用接口时需要把请求参数、时间戳、随机数、密钥等信息组合起来做HMAC-SHA256签名不同版本API对签名字段的拼接方式有细微差异。第一次做的时候很容易在签名上报401、403我的建议是先用官方调试工具验证一遍人的逻辑是否对应再去写代码。腾讯会议侧同样需要配置回调通知URL。在应用配置里找到回调通知选项配置你的HTTPS地址然后勾选需要接收的事件类型。常用事件有会议开始、会议结束、参与者入会、参与者离会、云录制文件生成完成。配置后腾讯会议会向你的URL发送一条测试通知需要正确响应才算配置成功。这里的关键点是腾讯会议回调允许配置多个URL不同的环境测试、预发、生产最好分开配置避免互相干扰。3.3 网络条件与回调地址准备无论你选哪条路线后端服务都需要一个公网HTTPS地址来接收两个平台的回调。生产环境当然直接用公司域名加反向代理本地开发阶段回调地址无法从外网访问可以用内网穿透工具把本地服务映射到一个临时公网地址方便调试。注意这只是开发阶段的临时方案正式对接必须走合规的网络发布流程。还要注意出网网络策略。飞书和腾讯会议的API域名在企业里有时被防火墙或代理拦截表现就是请求超时、报network unavailable。遇到这种问题不要急着怀疑代码先跑一下网络诊断确认域名解析、TLS握手、代理白名单都正常。飞书后台自身也提供了网络诊断工具会提示你检查网络连通性。4. 核心流程实现从飞书到腾讯会议的三大闭环4.1 流程一在飞书日程里自动创建腾讯会议这是价值最高也最应该先做的场景。整体逻辑用户在飞书日历里建好日程然后通过机器人指令比如在群里发创建会议或者日程操作触发后端服务后端先调用腾讯会议API创建会议拿到会议号和入会链接再调用飞书日历API更新日程描述最后通过飞书机器人把入会信息推到群里。腾讯会议创建会议接口的核心参数包括发起者用户IDuserid、会议主题topic、开始时间、结束时间、会议类型、会议设置是否开启静音、是否开启等候室。其中开始和结束时间必须是Unix秒级时间戳比如2025年6月1日下午3点对应的时间戳是1748779200。飞书日历API的时间格式则是RFC3339字符串比如2025-06-01T15:00:0008:00。这两套时间体系不一致是第一次对接最容易翻车的地方。你必须在服务端写一个统一的转换函数从飞书事件里解析出开始时间和结束时间转成时间戳再传给腾讯会议。下面是一段伪代码展示核心逻辑def create_meeting_from_feishu_event(event, user): # 时间转换飞书RFC3339 - 腾讯会议Unix秒级时间戳 start_ts rfc3339_to_unix(event[start_time]) end_ts rfc3339_to_unix(event[end_time]) # 调用腾讯会议API创建会议 body { userid: user[tc_userid], topic: event[summary], start_time: start_ts, end_time: end_ts, meeting_type: 1, settings: {mute_enable: True} } resp tc_api_post(/v1/meetings, body, app_id, secret_id, secret_key) meeting resp[meeting_info_list][0] meeting_code meeting[meeting_code] join_url meeting[join_url] # 更新飞书日程 feishu_patch_event( calendar_idevent[calendar_id], event_idevent[event_id], data{ description: f腾讯会议号{meeting_code}\n入会链接{join_url}, location: {name: 腾讯会议, full_address: } } ) # 推送机器人卡片到群 feishu_send_card( chat_iduser[chat_id], titleevent[summary], bodyf会议已创建会议号 {meeting_code}点击链接入会{join_url} )这段代码里有个容易忽略的点userid映射。腾讯会议记录的是企业内腾讯会议账号的userid飞书记录的是飞书用户的open_id或user_id两者不是同一个体系。你需要提前建一张映射表用企业邮箱或工号把两边账号关联起来。没有映射表的话创建会议时会因为没有真实发起人而失败。会议时长也要注意腾讯会议API对单场会议时长有限制通常最长24小时飞书日程如果建了一个跨天的长时段事件创建接口可能直接报错。这种情况要么在业务上拆分成多场会议要么在代码里对时长做校验和提示。4.2 流程二腾讯会议状态实时回传到飞书群会议创建完只是第一步真正让用户觉得系统活了的是状态回传。比如主持人点了开始会议群里自动弹出一条会议已开始的卡片有人迟到入会群里能看到某某已入会会议结束群里马上收到结束提醒和录制文件链接。这些能力的核心是腾讯会议回调。当你在腾讯会议开放平台配置好回调URL并订阅相应事件后腾讯会议会在会议状态变化时向你的服务端发送POST请求。请求体里包含事件类型、会议ID、操作者信息等。你的服务端收到回调后要做三件事第一验签确认请求真的来自腾讯会议防止伪造请求第二根据event_type分发处理逻辑第三调用飞书机器人API把结果推送出去。简化后的伪代码def handle_tencent_callback(request): if not verify_tc_signature(request): return 403 payload request.json() event_type payload[event_type] if event_type meeting.started: send_to_feishu_card( groupops_meeting_group, titlef会议 {payload[meeting_id]} 已开始, body主持人已开启会议请参会人及时入会 ) elif event_type meeting.participant_joined: send_to_feishu_text( groupops_meeting_group, textf{payload[username]} 已入会 ) elif event_type meeting.ended: # 触发后续的纪要与录制归档流程 archive_meeting_recording(payload[meeting_id])这里要特别注意两点。第一回调处理必须快速响应一般要求5秒内返回HTTP 2xx否则腾讯会议会认为投递失败并多次重试。所以回调接口里不要做耗时操作比如拉录制文件、写飞书文档这些都应该丢到消息队列或后台任务里异步执行。第二重传幂等性。腾讯会议回调在失败后会重试多次同一事件可能被推送多次服务端需要根据事件ID做去重避免群里收到重复通知。消息推送层面飞书机器人除了文本消息还支持交互卡片。卡片可以放按钮比如一键入会查看纪要添加到日历点击后跳转对应页面。我强烈建议会议通知用消息卡片而不是纯文本体验完全不同用户接受度高很多。另外如果需要在群里发送腾讯会议统计表格也可以让机器人以文件形式上传Excel到群里飞书机器人API支持发送文件消息块。4.3 流程三会后纪要和录制沉淀到飞书云文档会议结束了内容如果不能沉淀会议就白开了。腾讯会议支持云录制和自动转写会议结束后会生成录制文件和转写文本。腾讯会议开放平台提供查询录制文件接口返回录制文件的下载地址和转写文本内容。你的服务端在收到会议结束事件后异步执行归档任务拉取录制文件信息、获取转写文本、生成结构化Markdown文档然后调用飞书云文档API创建一篇新的文档把内容写入。腾讯会议的转写文本通常是带发言人标签的段落文本格式类似发言人A今天会议主要讨论…。这种文本直接贴到飞书文档里也能看但不够结构化。我的做法是先在服务端做一层简单清洗和格式化把时间戳、发言人、正文分块生成一个带标题和分段的Markdown再写入飞书文档。如果有条件还可以接大模型生成会议摘要、待办事项这个在扩展部分再讲。飞书云文档的写入逻辑也不复杂。先创建文档拿到document_id然后向文档根节点插入blocks。飞书文档的block体系支持标题、文本、列表、表格等不同类型按顺序插入即可。伪代码def archive_meeting_recording(meeting_id): recording tc_get_recording(meeting_id) transcript recording[transcript_content] markdown format_transcript_to_markdown(transcript) doc_id feishu_create_docx(titlef会议纪要{meeting_id}) for block in markdown_to_blocks(markdown): feishu_insert_block(doc_id, parent_block_iddoc_id, blockblock) wiki_node feishu_create_wiki_node(space_idWIKI_SPACE_ID, obj_typedocx, obj_tokendoc_id) feishu_move_wiki_node(wiki_node, parent_node_idWIKI_PARENT_NODE)纪要文档写入后还可以通过机器人把文档链接推送到参会群让所有与会者都能直接点开查看。这样整个会议生命周期从上到下的闭环就形成了会前自动建会、会中状态通知、会后纪要归档。5. 鉴权、密钥和安全这些细节别等上线再补5.1 飞书侧token的获取、缓存与刷新飞书API的调用凭证是tenant_access_token用App ID和App Secret换的。这个token有效期默认2小时过期后需要重新获取。每天调用量大的话频繁获取token既慢又容易触发限流必须做缓存第一次获取后存到内存或Redis里临近过期再刷新。飞书获取token的接口路径是POST /auth/v3/tenant_access_token/internal参数是app_id和app_secret。返回结果里有tenant_access_token和expire字段。写一个带缓存的服务方法所有调用飞书API的地方都走这个方法避免在业务代码里到处请求token。还有一点飞书API调用时需要在请求头带Authorization: Bearer 。SDK一般会自动处理但如果自己写HTTP调用千万别漏。5.2 腾讯会议侧签名计算与token管理腾讯会议的API鉴权是我见过最容易出错的地方。它的签名机制要求把请求参数、时间戳、随机数等按规则拼接再用HMAC-SHA256加SecretKey计算签名最后把签名放在HTTP Header里。不同接口可能还有细微差别比如有些版本用OAuth2.0的access_token有些用JWT。签名计算失败的表现通常是401 Unauthorized或403 Forbidden。排查方法很固定先检查时间戳是否与服务端时间一致前后不能超过5分钟偏差再检查随机数是否唯一同一随机数重复使用会被拒绝最后检查签名拼接顺序和官方文档是否完全一致。建议把签名计算封装成独立函数并为所有出站请求统一添加Header避免每个接口重复写。5.3 密钥存储与最小权限原则密钥安全是这条对接能否长期稳定运行的生命线。App Secret、Secret Key这些凭证绝对不能硬编码在代码里也不能提交到Git仓库。正确做法是用环境变量、配置中心或密钥管理服务比如Vault、云上KMS来存储。权限最小化要落实到两个层面飞书后台申请scope时只申请当前场景真正需要的权限不要贪多腾讯会议应用开通接口权限时同样按最小集申请。权限越小一旦密钥泄露攻击者能做的事情越少。另外飞书事件订阅和腾讯会议回调都涉及验签。飞书通过Verification Token和Encrypt Key做校验和加解密腾讯会议也有自己的签名校验机制。收到回调先验签再处理不要跳过这一步否则任何人都能往你的接口POST伪造数据伪装成会议状态推送垃圾消息甚至触发异常操作。5.4 限流、重试和幂等设计两个平台都会对API调用做限流飞书和腾讯会议都有QPS和每日调用上限。集中大批量同步场景特别容易触发限流表现为接口返回429或特定错误码。应对策略是在服务端统一做速率控制比如令牌桶限速并把调用失败的任务丢进队列延迟重试。重试必须配合幂等设计。腾讯会议创建会议接口支持传入request_id相同request_id重复调用不会创建多个会议这非常关键。否则一次超时重试就可能在腾讯会议侧创建两个重复会议。飞书更新日程的接口天然是幂等操作重复调用只是重复写相同内容问题不大。6. 常见问题与排查实录速查表6.1 飞书侧报错的不完全清单飞书对接过程里我遇到过几类高频问题第一类是network unavailable, please go to feishu network diagnosis to find the problem这种网络类报错。出现这种报错先跑飞书后台自带的网络诊断工具大概率是服务器出口IP被防火墙拦截、DNS解析异常或者请求走了公司代理但代理白名单没放行飞书域名。别急着改代码先把网络链路查清楚。第二类是权限类问题。调用日历API返回403十有八九是应用的scope没申请或者版本没发布。飞书权限的生效机制是你申请了权限必须创建新版本并提交管理员审核审核通过后权限才生效。很多团队在开发环境测试时改了一次权限以为立刻生效结果调了半天还是403最后发现新版本压根没发布。第三类问题是事件订阅收不到。检查事件订阅的URL配置是否指向正确地址、回调验签是否通过、事件是否在飞书后台确实被勾选。飞书事件订阅有重试机制如果请求一直失败服务端日志里应该能查到对应记录。6.2 腾讯会议侧报错的不完全清单腾讯会议创建会议失败先看鉴权。签名计算错误、时间戳偏差、随机数重复都会导致401/403。创建接口返回参数错误检查字段类型是否正确特别是时间戳是不是秒级是不是被误传成了毫秒级。回调收不到的问题也很常见。配置了回调URL但没收到任何请求先用腾讯会议后台自带的发送测试通知按钮如果测试能收到再看代码里验签逻辑是不是把合法请求拦掉了。如果测试都收不到检查回调URL是否HTTPS可达、是否配置了IP白名单、腾讯会议侧是否勾选了对应事件。有同事问过腾讯会议客户端不能使用电脑自带摄像头是不是对接导致的。这跟API对接没有关系是用户端权限问题检查系统隐私设置里是否允许腾讯会议访问摄像头以及腾讯会议客户端里的视频设备是否选对了摄像头。跟对接无关但经常被混在一起问顺便在这里说清楚。6.3 数据不一致的补偿方案事件驱动模型最大的隐患是漏事件。回调偶尔丢失、服务重启、网络抖动都可能导致飞书侧和腾讯会议侧的数据状态不一致。我的做法是加一个定时校对任务每5到10分钟遍历当天需要开的会议列表分别查询飞书日程和腾讯会议状态发现两边不一致就按业务规则修复同时记录校对日志。时区问题也要特别小心。飞书日程默认按用户的时区展示腾讯会议API按时间戳计算如果用户跨时区开会容易出现飞书显示3点腾讯会议实际是4点的情况。统一在东八区存储前端展示时再做时区换算能省很多麻烦。7. 我的几点实操心得与后续扩展7.1 从小闭环起步不要一次想做完第一次做这类对接千万别想着把所有场景一次性覆盖。我的建议是先做飞书日程创建腾讯会议并推送机器人通知这一个闭环它涉及了权限申请、API调用、时间转换、消息推送这些基础能力跑通之后会议状态回传和纪要归档都是在这个地基上加砖。这个小闭环上线后让业务团队真实用两周收集反馈再迭代。大概率你会发现真正的需求不是自动建会而是会议改时间了腾讯会议那边也要跟着改有人申请入会要被审批这些细节。这些才是后续版本的增量价值。7.2 尽量把逻辑写薄能调平台能力就不自己造轮子飞书和腾讯会议的开放平台已经封装了大部分能力比如飞书机器人卡片、云文档、日历腾讯会议的录制转写、回调事件。我们自己的服务端只做数据搬运和业务编排不要把功能逻辑写得特别重。代码薄了后面维护和交接都会轻松很多。7.3 聪明人都在把AI加进这条链路会议纪要是AI天然的落地场景。腾讯会议已经有了转写文本把摘要、待办提取、风险识别交给大模型固化成飞书云文档再同步到知识库这条链路在工具层面完全可行。如果你团队里在跑AI应用平台甚至可以把飞书云文档作为知识库源让大模型基于会议纪要做问答。我自己在扩展这块时踩过一个坑AI应用平台第一次读取飞书云文档时需要拿飞书侧的授权凭证这是独立的授权流程很多人卡在授权给谁权限怎么给这一步。正确的做法是在飞书开放平台创建一个专门的服务账号应用赋予其只读文档的权限把它的凭证配置到AI平台的飞书接入信息里完成后在飞书后台能看到这条授权记录。7.4 安全这根弦要一直绷着日志脱敏、密钥轮换、回调验签这些不是上线前突击做的是过程中一直在做。我在生产环境见过因为日志里打印了完整入会链接导致外部人员可以随意进入会议室的案例。所以服务端的日志里会议号、入会链接这类敏感信息一定要打码或截断。这个对接做完之后我还想过几个扩展方向和飞书审批流结合审批通过后自动占会议室、自动建会议把会议室硬件设备的状态也接入飞书让日程、会议、设备三个体系打通跨企业场景下用腾讯会议的开放接口做外部参会人管理让访客通过网页直接入会不再需要下载安装客户端。这些方向谈不上新但每一个都值得花时间去打磨。对接实践这件事做到后面你会发现最难的不是调通接口而是把一个细小的体验问题真正解决干净。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进