当前位置: 首页 > article >正文

飞书审批对接-自建企业应用的主要作用

自建企业应用在第三方系统对接飞书审批流程中扮演着核心枢纽的角色让我详细解释它的作用和与审批表单的关系。1. 自建企业应用的主要作用1.1 身份认证和权限中心javascript// 自建应用负责处理所有API调用的认证 class FeishuAppAuth { constructor(appId, appSecret) { this.appId appId; this.appSecret appSecret; } // 获取访问令牌所有API调用都需要 async getTenantAccessToken() { const response await fetch(https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ app_id: this.appId, app_secret: this.appSecret }) }); const data await response.json(); return data.tenant_access_token; } }1.2 API调用代理2. 自建应用与审批表单的具体联系2.1 审批表单的操作入口自建应用提供访问审批表单的入口javascript// 在自建应用内嵌入审批页面 class ApprovalIntegration { // 生成审批页面的访问链接 generateApprovalPageUrl(approvalCode, instanceId null) { if (instanceId) { // 查看已存在的审批实例 return https://applink.feishu.cn/client/approval/detail?instanceId${instanceId}; } else { // 发起新审批 return https://applink.feishu.cn/client/approval/create?definitionCode${approvalCode}; } } // 在自建应用工作台展示审批相关功能 getApprovalWidgets() { return { 我的待办: /api/approval/pending, 我发起的: /api/approval/submitted, 审批统计: /api/approval/analytics }; } }2.2 数据桥梁作用javascript// 自建应用连接第三方系统数据和飞书审批表单 class DataBridgeService { // 将业务数据映射到飞书表单控件 mapBusinessDataToFeishuForm(businessData, formMapping) { const feishuFormData {}; for (const [businessField, feishuField] of Object.entries(formMapping)) { if (businessData[businessField] ! undefined) { feishuFormData[feishuField] this.formatValueForFeishu( businessData[businessField], feishuField.type ); } } return JSON.stringify(feishuFormData); } // 处理飞书回调更新业务系统 async handleApprovalCallback(callbackData) { const { instance_id, approve_type, user_id } callbackData; // 1. 通过自建应用查询审批详情 const approvalDetail await this.getApprovalInstance(instance_id); // 2. 找到对应的业务记录 const businessRecord await this.findBusinessRecord(instance_id); // 3. 更新业务系统状态 await this.updateBusinessStatus(businessRecord.id, approve_type, user_id); } }3. 具体功能实现3.1 审批流程管理javascriptclass ApprovalManagement { constructor(appAuth) { this.appAuth appAuth; } // 发起审批核心功能 async createApprovalInstance(approvalCode, userId, formData) { const token await this.appAuth.getTenantAccessToken(); const response await fetch(https://open.feishu.cn/open-apis/approval/v4/instances, { method: POST, headers: { Authorization: Bearer ${token}, Content-Type: application/json }, body: JSON.stringify({ approval_code: approvalCode, user_id: userId, form: formData }) }); return response.json(); } // 查询审批状态 async getApprovalStatus(instanceId) { const token await this.appAuth.getTenantAccessToken(); const response await fetch(https://open.feishu.cn/open-apis/approval/v4/instances/${instanceId}, { headers: { Authorization: Bearer ${token} } }); return response.json(); } // 获取用户待审批列表 async getPendingApprovals(userId) { const token await this.appAuth.getTenantAccessToken(); const response await fetch(https://open.feishu.cn/open-apis/approval/v4/instances/query, { method: POST, headers: { Authorization: Bearer ${token}, Content-Type: application/json }, body: JSON.stringify({ user_id: userId, approval_code: ALL, // 所有审批类型 status: PENDING // 待审批状态 }) }); return response.json(); } }3.2 用户和组织结构同步javascriptclass UserSyncService { // 获取部门用户列表用于选择审批人 async getDepartmentUsers(departmentId) { const token await this.appAuth.getTenantAccessToken(); const response await fetch( https://open.feishu.cn/open-apis/contact/v3/users?department_id${departmentId}page_size100, { headers: { Authorization: Bearer ${token} } } ); return response.json(); } // 搜索用户按姓名搜索审批人 async searchUsers(keyword) { const token await this.appAuth.getTenishuAccessToken(); const response await fetch(https://open.feishu.cn/open-apis/contact/v3/users/search, { method: POST, headers: { Authorization: Bearer ${token}, Content-Type: application/json }, body: JSON.stringify({ query: keyword }) }); return response.json(); } }4. 实际应用场景4.1 场景一在第三方系统内发起飞书审批javascript// 用户在第三方系统点击发起审批 app.post(/api/business/start-approval, async (req, res) { const { businessId, applicantId } req.body; // 1. 获取业务数据 const businessData await businessService.getData(businessId); // 2. 通过自建应用映射数据到飞书表单 const formMapping { title: widget_title, amount: widget_amount, reason: widget_reason }; const feishuFormData dataBridge.mapBusinessDataToFeishuForm(businessData, formMapping); // 3. 调用飞书API创建审批实例 const result await approvalManagement.createApprovalInstance( APPROVAL_CODE_123, // 预先配置的审批表单ID applicantId, feishuFormData ); // 4. 保存关联关系 await db.approvalRelations.create({ business_id: businessId, feishu_instance_id: result.data.instance_id, status: PENDING }); res.json({ success: true, instanceId: result.data.instance_id }); });4.2 场景二在飞书工作台处理审批待办javascript// 自建应用提供待办列表接口 app.get(/api/approval/pending, async (req, res) { const userId req.user.feishuUserId; // 1. 获取飞书待审批列表 const pendingApprovals await approvalManagement.getPendingApprovals(userId); // 2. 增强显示信息结合业务数据 const enhancedList await Promise.all( pendingApprovals.data.items.map(async (approval) { const businessInfo await businessService.getByInstanceId(approval.instance_id); return { ...approval, business_context: businessInfo // 添加业务上下文 }; }) ); res.json({ data: enhancedList }); });5. 配置关系总结总结自建企业应用的核心作用认证中心处理所有API调用的身份验证数据桥梁在第三方系统和飞书审批之间转换数据格式功能聚合在工作台统一展示审批相关功能用户体验提供无缝的审批发起和处理体验监控管理跟踪审批状态处理异常情况与审批表单的关系自建应用是操作审批表单的工具审批表单是承载审批内容的容器两者通过API和回调机制紧密协作没有自建应用第三方系统就无法以自动化、标准化的方式与飞书审批集成

相关文章:

飞书审批对接-自建企业应用的主要作用

自建企业应用在第三方系统对接飞书审批流程中扮演着核心枢纽的角色!让我详细解释它的作用和与审批表单的关系。1. 自建企业应用的主要作用1.1 身份认证和权限中心javascript// 自建应用负责处理所有API调用的认证 class FeishuAppAuth {constructor(appId, appSecre…...

C# + OpenCvSharp实战:用轮廓匹配搞定工业零件缺陷检测(附完整项目源码)

C# OpenCvSharp实战:工业零件缺陷检测的轮廓匹配技术解析 在工业自动化领域,视觉检测系统正逐渐取代传统人工质检,成为生产线上的"火眼金睛"。想象一下这样的场景:传送带上的金属零件以每分钟上百个的速度通过摄像头&a…...

Charles抓包实战:从零配置到成功解密微信小程序/H5页面请求

Charles抓包实战:解密微信小程序与H5页面流量的全链路指南 当你盯着手机屏幕上那个加载缓慢的H5页面,或是调试一个行为诡异的微信小程序时,是否曾渴望能像X光一样透视所有网络请求?作为从业十年的全栈开发者,我经历过太…...

网站怎么创建?

网站怎么创建?现在很多公司企业都会有自己的网站,即使是没有网站的公司也抓紧时间纷纷入局,希望能在互联网的流量中分到一杯羹。那么网站怎么创建呢?下面给大家简单说一说。网站怎么创建步骤1:首先我们准备好一个域名。…...

从日志到模型:手把手教你用Python实战用户行为异常检测(附代码)

从日志到模型:手把手教你用Python实战用户行为异常检测(附代码) 当服务器日志以每秒数百条的速度滚动时,真正的挑战不是收集数据,而是如何让这些沉默的字节开口说话。某电商平台曾发现,凌晨3点的异常登录尝…...

别再死记硬背了!用AI钢笔工具画Logo,记住这3个快捷键就够了

用AI钢笔工具高效绘制Logo的3个核心快捷键解析 刚接触Adobe Illustrator的设计新手往往会被钢笔工具的强大功能所吸引,却又在复杂的操作面前望而却步。实际上,掌握几个关键快捷键就能让这个看似复杂的工具变得简单易用。本文将聚焦于绘制Logo这一具体场…...

告别手动画刀版!用JavaScript给Adobe Illustrator写个插件,5分钟搞定包装盒展开图

5分钟打造包装盒刀版神器:零代码实现AI脚本自动化 每次面对包装盒刀版设计时,你是否也经历过这样的崩溃时刻?反复测量尺寸、手动绘制线条、调整粘口位置,一个简单的纸盒展开图可能就要耗费大半天时间。更可怕的是,当客…...

Phi-4-mini-flash-reasoning精彩案例:‘甲乙丙丁谁说真话’类经典逻辑题全自动求解

Phi-4-mini-flash-reasoning精彩案例:甲乙丙丁谁说真话类经典逻辑题全自动求解 1. 模型介绍与逻辑推理能力 Phi-4-mini-flash-reasoning是一款专为复杂推理任务设计的轻量级AI模型,特别擅长解决需要多步推理的逻辑难题。不同于普通聊天AI,它…...

Phi-3.5-mini-instruct部署避坑指南:首次加载延迟、端口冲突、日志排查全流程

Phi-3.5-mini-instruct部署避坑指南:首次加载延迟、端口冲突、日志排查全流程 1. 开篇介绍 Phi-3.5-mini-instruct是一款轻量级文本生成模型,特别适合中文问答、总结归纳、内容改写等场景。这个镜像已经完成了网页封装,用户可以直接在页面上…...

图神经网络完全指南:从入门到精通的学习路线图

图神经网络完全指南:从入门到精通的学习路线图 【免费下载链接】graph-based-deep-learning-literature links to conference publications in graph-based deep learning 项目地址: https://gitcode.com/gh_mirrors/gr/graph-based-deep-learning-literature …...

从‘Access-Control-Allow-Origin’报错到实战:一次搞定OAuth 2.0授权接口的本地调试

从CORS报错到OAuth 2.0授权接口的本地调试实战指南 当你在本地开发环境中调用类似https://aip.baidubce.com/oauth/2.0/token这样的OAuth 2.0授权接口时,十有八九会遇到那个令人头疼的CORS错误。这不是一个普通的跨域问题,而是涉及OAuth安全机制与本地开…...

私有化音视频系统/视频直播点播/高清点播/音视频点播EasyDSS以核心技术重构企业音视频协同体验

随着数字化协同向纵深发展,企业对视频会议的需求已超越简单的“看得见、听得清”,转向安全可控、稳定高效、灵活适配、深度协同的综合体验。市面上多数平台聚焦通用场景,却难以满足政企用户对数据主权、定制开发、内网运行、跨系统联动的严苛…...

快速掌握今日热榜:一站式聚合全网热门头条的终极指南

快速掌握今日热榜:一站式聚合全网热门头条的终极指南 【免费下载链接】TopList 今日热榜,一个获取各大热门网站热门头条的聚合网站,使用Go语言编写,多协程异步快速抓取信息,预览:https://mo.fish 项目地址: https://…...

终极指南:如何在现代Windows上让经典游戏联机重生

终极指南:如何在现代Windows上让经典游戏联机重生 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 你是否曾经怀念那些经典的局域网游戏时光?《红色警戒2》、《暗黑破坏神》、《帝国时代》等经典游戏在现代…...

WebUploader能否支持航空航天领域的目录结构上传?

作为一名前端开发工程师,我近期接手了公司一个有些年头的旧项目改造工作。这次改造的核心需求,是要给这个旧项目增添大文件上传功能,尤其得支持 10G 左右文件的上传,并且还要具备断点续传的能力。 在众多解决方案中,我…...

Vue-Tetris 终极指南:如何用Vue.js打造经典俄罗斯方块游戏

Vue-Tetris 终极指南:如何用Vue.js打造经典俄罗斯方块游戏 【免费下载链接】vue-tetris Use Vue, Vuex to code Tetris.使用 Vue, Vuex 做俄罗斯方块 项目地址: https://gitcode.com/gh_mirrors/vu/vue-tetris Vue-Tetris是一个使用Vue和Vuex构建的经典俄罗…...

ERPNext自动化部署终极指南:5分钟完成企业级ERP系统安装

ERPNext自动化部署终极指南:5分钟完成企业级ERP系统安装 【免费下载链接】erpnext_quick_install Unattended install script for ERPNext Versions, 13, 14 and 15 项目地址: https://gitcode.com/gh_mirrors/er/erpnext_quick_install 想要在5分钟内搭建一…...

从图像分类到目标检测:手把手教你用PyTorch复现ViT和DETR的核心模块(附代码)

从图像分类到目标检测:手把手教你用PyTorch复现ViT和DETR的核心模块 当Transformer架构在自然语言处理领域大放异彩后,计算机视觉研究者们开始思考:这种基于自注意力的强大模型能否同样革新图像理解任务?Vision Transformer&#…...

ROS2 仿真入门01 Gazebo 核心界面功能全解析

1. Gazebo初体验:从零启动到界面认知 第一次打开Gazebo的感觉,就像走进了一个充满机关的机器人实验室。作为ROS2仿真生态的核心工具,这个开源的3D物理仿真环境能让你在虚拟世界中构建从简单机械臂到自动驾驶系统的任何场景。还记得我刚开始接…...

一张图让90%的开发者看懂区块链+AI融合架构:软件测试的专业视角

当“区块链”与“人工智能”这两大技术浪潮交汇,对于软件测试从业者而言,其意义远不止于概念上的叠加。理解一项新技术的核心,关键在于厘清其架构、数据流与验证逻辑。两者融合催生的并非简单的功能互补,而是一种全新的、具备“可…...

HunyuanVideo-Foley惊艳效果:AI生成的‘老式打字机’音效获专业录音师认可

HunyuanVideo-Foley惊艳效果:AI生成的老式打字机音效获专业录音师认可 1. 专业级音效生成能力展示 HunyuanVideo-Foley作为一款集视频生成与专业音效合成于一体的AI工具,近期因其生成的"老式打字机"音效获得了专业录音师的高度评价。这款基于…...

告别系统休眠困扰:MouseJiggler鼠标模拟工具全解析

告别系统休眠困扰:MouseJiggler鼠标模拟工具全解析 【免费下载链接】mousejiggler Mouse Jiggler is a very simple piece of software whose sole function is to "fake" mouse input to Windows, and jiggle the mouse pointer back and forth. 项目地…...

别再只盯着铜箔了!FPC软板选材实战:从PI基材到屏蔽膜,工程师避坑指南

FPC软板选材实战:从基材到屏蔽层的工程决策指南 在可穿戴设备折叠屏和车载摄像头小型化的浪潮中,柔性印刷电路板(FPC)正经历前所未有的技术迭代。当某头部TWS耳机厂商因基材选择失误导致批量性断裂时,当新能源汽车摄像头模组因屏蔽材料失效引…...

【研报331】新能源汽车行业ESG白皮书:多元能源的落地挑战

本报告提供限时下载,请查看文后提示以下仅为报告部分内容:摘要:新能源汽车赛道已从“电动单一解”转向多元能源共生的新阶段,氢能、甲醇、生物质、天然气、太阳能等路线正重塑产业ESG底色。《新能源汽车行业ESG白皮书》系统拆解不…...

探索未来教育:10个Agora Flat开源课堂的核心功能解析

探索未来教育:10个Agora Flat开源课堂的核心功能解析 【免费下载链接】flat Project flat is the Web, Windows and macOS client of Agora Flat open source classroom. 项目地址: https://gitcode.com/gh_mirrors/fl/flat Agora Flat是一款开源的Web、Wind…...

终极网络侦察神器:AQUATONE 开源项目完全指南

终极网络侦察神器:AQUATONE 开源项目完全指南 【免费下载链接】aquatone A Tool for Domain Flyovers 项目地址: https://gitcode.com/gh_mirrors/aq/aquatone AQUATONE 是一款用于跨大量主机进行网站视觉检查的工具,非常适合快速了解基于 HTTP 的…...

Resemble Enhance深度解析:如何用AI技术实现专业级语音增强与降噪

Resemble Enhance深度解析:如何用AI技术实现专业级语音增强与降噪 【免费下载链接】resemble-enhance AI powered speech denoising and enhancement 项目地址: https://gitcode.com/gh_mirrors/re/resemble-enhance Resemble Enhance是一款基于深度学习的专…...

终极跨平台文本对比工具:Diff Checker完整使用指南

终极跨平台文本对比工具:Diff Checker完整使用指南 【免费下载链接】diff-checker Desktop application to compare text differences between two files (Windows, Mac, Linux) 项目地址: https://gitcode.com/gh_mirrors/di/diff-checker 还在为找不到合适…...

Mybatis-Plus字段策略FieldStrategy深度对比:NOT_NULL、NOT_EMPTY、IGNORED到底怎么选?(附Spring Boot 3.x配置示例)

MyBatis-Plus字段策略实战指南:如何为不同业务场景选择最优FieldStrategy? 在数据持久层开发中,空值处理是个看似简单却暗藏玄机的问题。想象一下这样的场景:用户修改个人资料时,清空昵称字段应该更新为NULL还是保持原…...

DDrawCompat:三步搞定经典DirectX游戏兼容性问题的终极方案

DDrawCompat:三步搞定经典DirectX游戏兼容性问题的终极方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/D…...