
折腾半小时终于让AI 能直接帮我写飞书文档了前言从手动复制到自动化协作作为一个经常需要写技术文档、项目报告和团队周报的程序员我每天都和飞书文档打交道。以前我的工作流程是在 ChatGPT 或本地 AI 模型里写好内容再手动复制粘贴到飞书文档中。这个过程不仅繁琐而且容易出错——有时候格式乱了有时候标题层级丢了。直到今天我花了半小时研究飞书开放平台 API终于实现了“AI 写完直接写入飞书文档”的自动化流程。这篇文章将带大家从基础概念出发一步步实现这个功能。## 基础概念飞书开放平台与 API 认证飞书开放平台提供了丰富的 API允许开发者通过程序创建、编辑和管理文档。核心概念包括1.App ID 和 App Secret用来申请访问令牌access_token的凭证2.tenant_access_token通过凭证获取的临时令牌有效期通常为2小时3.文档 API 端点例如https://open.feishu.cn/open-apis/docx/v1/documents在开始编码前你需要1. 前往飞书开放平台 创建一个企业自建应用2. 在“权限管理”中添加docx:document:create和docx:document:update权限3. 获取应用的 App ID 和 App Secret## 第一步获取访问令牌并创建文档任何飞书 API 调用都需要先获取访问令牌。以下是获取令牌并创建空白文档的完整代码pythonimport requestsimport json# 配置你的应用凭证APP_ID cli_a5f8e1c2d3b4 # 替换为你的App IDAPP_SECRET your_app_secret_here # 替换为你的App Secretdef get_tenant_access_token(): 获取飞书租户访问令牌 url https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal headers {Content-Type: application/json; charsetutf-8} data { app_id: APP_ID, app_secret: APP_SECRET } response requests.post(url, headersheaders, jsondata) result response.json() if result.get(code) 0: return result[tenant_access_token] else: raise Exception(f获取令牌失败: {result}) def create_document(token, titleAI 自动生成的文档): 在飞书中创建一个新的空白文档 url https://open.feishu.cn/open-apis/docx/v1/documents headers { Authorization: fBearer {token}, Content-Type: application/json; charsetutf-8 } data { title: title } response requests.post(url, headersheaders, jsondata) result response.json() if result.get(code) 0: document result[data][document] print(f文档创建成功文档ID: {document[document_id]}) return document[document_id] else: raise Exception(f创建文档失败: {result})# 测试流程try: token get_tenant_access_token() doc_id create_document(token, AI 协作测试文档) print(f准备在文档 {doc_id} 中写入内容...)except Exception as e: print(f出错: {e})## 第二步让 AI 生成内容并写入文档现在我们有了空白文档。接下来让 AI 生成内容并写入。这里我们使用 OpenAI 的 API 作为示例也可以替换为其他 AI 模型然后将生成的 Markdown 内容转换为飞书文档的块结构。飞书文档的块结构比较复杂但我们可以通过一个简单的方法先用 AI 生成 Markdown 格式的内容再解析为飞书认可的块列表。以下是一个完整的实现pythonimport openai # 需要安装: pip install openai# 配置 OpenAI 的 API Keyopenai.api_key your_openai_api_key # 替换为你的 OpenAI API Keydef generate_ai_content(topic): 让 AI 生成关于指定主题的 Markdown 内容 prompt f 请写一篇关于 {topic} 的简短技术文章要求 - 使用 Markdown 格式包含标题##、段落、列表 - 内容不少于200字 - 保持专业但易于理解 response openai.ChatCompletion.create( modelgpt-3.5-turbo, messages[ {role: system, content: 你是一个技术写作专家。}, {role: user, content: prompt} ], max_tokens500 ) content response[choices][0][message][content] print(AI 生成的内容) print(content[:100] ...) # 只打印前100个字符 return contentdef parse_markdown_to_feishu_blocks(markdown_text): 将简单的 Markdown 文本转换为飞书文档块结构 blocks [] lines markdown_text.strip().split(\n) for line in lines: line line.strip() if not line: continue # 处理标题## 开头 if line.startswith(## ): text line[3:].strip() blocks.append({ block_type: 3, # 标题2 heading2: { elements: [{text_run: {content: text, text_element_style: {}}}] } }) # 处理列表项- 开头 elif line.startswith(- ): text line[2:].strip() blocks.append({ block_type: 16, # 有序列表项 ordered: { elements: [{text_run: {content: text, text_element_style: {}}}] } }) # 处理普通段落 else: blocks.append({ block_type: 2, # 文本 text: { elements: [{text_run: {content: line, text_element_style: {}}}] } }) return blocksdef write_content_to_document(token, doc_id, blocks): 将内容块写入飞书文档 url fhttps://open.feishu.cn/open-apis/docx/v1/documents/{doc_id}/blocks headers { Authorization: fBearer {token}, Content-Type: application/json; charsetutf-8 } data { children: blocks } response requests.post(url, headersheaders, jsondata) result response.json() if result.get(code) 0: print(内容写入成功) else: raise Exception(f写入内容失败: {result})# 完整流程AI 生成 → 写入飞书def ai_write_feishu(topic): AI 生成内容并写入飞书文档 try: # 1. 获取访问令牌 token get_tenant_access_token() # 2. 创建文档 doc_id create_document(token, fAI 关于「{topic}」的文档) # 3. AI 生成内容 ai_content generate_ai_content(topic) # 4. 转换为飞书块 blocks parse_markdown_to_feishu_blocks(ai_content) # 5. 写入文档 write_content_to_document(token, doc_id, blocks) print(f 完成文档已创建并写入内容。) print(f文档链接示例https://your-domain.feishu.cn/docx/{doc_id}) except Exception as e: print(f❌ 流程出错: {e})# 执行示例if __name__ __main__: ai_write_feishu(Python 异步编程入门)## 高级用法集成到工作流与错误处理以上基础版本已经能工作但在实际使用中我们还需要考虑一些高级场景### 1. 批量生成文档你可以循环调用ai_write_feishu函数一次性生成多篇文档例如每天生成一份周报。### 2. 自定义文档权限通过飞书 API你还可以设置文档的共享权限让团队成员自动获得访问权限。### 3. 错误重试与日志网络请求可能失败建议加入重试机制和日志记录pythonimport timefrom functools import wrapsdef retry_on_failure(max_retries3, delay2): 装饰器请求失败时自动重试 def decorator(func): wraps(func) def wrapper(*args, **kwargs): for attempt in range(max_retries): try: return func(*args, **kwargs) except Exception as e: if attempt max_retries - 1: print(f第{attempt1}次尝试失败: {e}{delay}秒后重试...) time.sleep(delay) else: raise return None return wrapper return decorator# 应用重试装饰器到关键函数retry_on_failure(max_retries3)def safe_get_token(): return get_tenant_access_token()### 4. 支持富文本如代码块、表格飞书 API 支持多种块类型你可以扩展parse_markdown_to_feishu_blocks函数让它能识别代码块开头和表格等复杂元素。## 总结通过这半小时的折腾我建立了一个从 AI 生成内容到飞书文档写入的自动化管道。整个过程的核心思路是1.理解飞书 API 的认证机制通过 App ID 和 Secret 获取令牌2.掌握文档与块的结构飞书文档由块block组成每个块代表一个段落、标题或列表3.桥接 AI 输出与飞书格式将 AI 生成的 Markdown 转换为飞书块的 JSON 结构这个流程极大提升了我的工作效率现在我可以让 AI 自动生成技术文档、项目计划甚至周报并直接写入飞书。你只需要替换代码中的 API Key 和 App 凭证就能立即使用。未来我还计划加入模板功能让文档风格更统一以及通过飞书机器人自动发送文档链接给团队成员。技术的力量在于消除重复劳动让人类专注于更有创造性的工作。希望这篇文章能帮助你实现类似的自动化流程