1. 开篇当审批流程遇上AI一场效率革命大家好我是老张一个在OA和智能办公领域摸爬滚打了十来年的“老IT”。这些年我见过太多公司还在用着最原始的纸质审批或者虽然上了OA系统但流程僵化员工发起一个请假申请还得在电脑前吭哧吭哧填半天表单领导审批也得专门登录系统效率实在谈不上高。直到我开始接触e10和千里聆的集成方案才真正体会到什么叫“智能审批”——原来流程可以这么丝滑。简单来说我们今天要聊的就是如何把e10这个强大的流程引擎和千里聆的AI办公大脑“小e”连接起来打造一个能听、能懂、能自动跑的智能审批流程。想象一下员工只需要在聊天窗口里跟“小e”说一句“我想请三天年假从下周一”系统就能自动理解意图、弹出表单、填充信息并一键提交到e10流程里流转。审批人也能在聊天界面直接点开处理全程无需切换多个应用。这不仅仅是自动化更是体验的颠覆。这篇文章就是为你准备的无论你是刚接手公司流程优化的IT管理员还是对系统集成感兴趣的开发者。我会手把手带你从一个最经典的“请假申请”场景出发从零开始把e10的表单、流程和千里聆的意图、词典、脚本全部串联起来。你不用怕整个过程就像搭积木我会把每一步的原理、踩过的坑、实测有效的配置都掰开揉碎了讲给你听。我们的目标很明确看完就能动手做完就能用上。2. 万事开头难集成前的环境与权限配置在开始敲代码、配流程之前有几项基础的“地基”工作必须做扎实。这就像盖房子要先打地基配置不对后面所有的高级功能都白搭。我刚开始做的时候就在这第一步卡了好几天都是血泪教训。2.1 双向握手打通e10与千里聆的认证通道e10和千里聆是两个独立的系统要让它们安全地“对话”首先得互相认识建立信任关系。这个过程是双向的。第一步在e10里“开门迎客”。你需要用管理员账号登录e10的后台。找到应用管理或开放平台相关的模块创建一个新的应用。这个应用就相当于千里聆访问e10的“身份证”。创建时系统会给你分配一个唯一的AppKey和AppSecret务必保管好这是后续获取访问令牌 (access_token) 的钥匙。接着在这个应用下你需要明确授权开放哪些接口权限给千里聆。对于我们构建审批流程来说至少需要“流程实例创建”、“表单数据读写”、“组织架构查询”这几大类权限。别嫌麻烦仔细勾选权限不足会导致后续接口调用失败。第二步在千里聆里“登记访客”。登录千里聆的管理后台找到“外联系统认证配置”或类似名称的菜单。在这里你需要把上一步从e10拿到的AppKey和AppSecret填进去同时配置e10系统的访问地址就是你们公司e10对外的域名。这一步相当于在千里聆的通讯录里存下了e10的“电话号码”和“暗号”。配置成功后千里聆的“小e”就能凭借这些信息合法地调用e10的API了。第三步同步组织架构可选但重要。为了让“小e”发起的流程能准确找到审批人比如你的部门经理我们需要确保两边系统的用户和部门信息是一致的。在e10的管理后台通常会有“同步设置”或“人员同步”功能你需要配置将e10的组织架构用户、部门定时或实时同步到千里聆。这样当你在千里聆的词典里选择“审批人”时看到的名单才会和e10里的一致流程才能正确流转。注意access_token是有有效期的通常2小时在后续配置意图调用接口时我们一般选择“全局变量”中的accessToken千里聆的后台会自动维护这个令牌的刷新我们无需在脚本里手动处理这点非常省心。2.2 理解核心概念意图、词典与表单在动手配置之前我们先花几分钟把千里聆AI办公里的几个核心零件搞清楚不然配置的时候容易晕。词典你可以把它理解成一个“智能下拉框”的数据源。比如e10请假表单里有个“请假类型”字段选项是“年假”、“病假”、“事假”。在传统OA里你只能手动选。而在千里聆里我们可以创建一个“请假类型词典”把这些选项预置进去。更强大的是词典的数据可以动态从e10的接口获取比如“审批人词典”数据源就是调用e10的/api/hrm/restful/queryEmployee接口返回的全公司人员列表。这样“小e”在询问你“请假找谁批”时就能给你一个实时、准确的员工列表供选择。表单这是在千里聆“小e”对话界面中用来收集用户结构化信息的工具。当用户表达“请假”意图后“小e”会弹出这个表单让用户填写。这里的表单字段如请假天数、开始日期需要和e10后台实际的物理表单字段一一对应起来。创建表单时对于“下拉框”、“人员选择”这类字段其数据源就可以直接关联我们上一步创建好的“词典”。意图这是整个智能流程的“触发器”和“指挥官”。它定义了当用户说出什么话如“我要请假”、“申请年假”时触发哪一系列操作。一个意图至少包含1.触发词用户可能说的话2.关联表单用于收集数据3.执行动作通常是调用一个HTTP API也就是我们配置的向e10发起创建流程的请求。配置意图时我们需要详细设置请求的URL、参数、以及如何处理返回结果。理清了这三者的关系我们接下来的操作路径就非常清晰了先为e10表单的各个字段准备词典尤其是动态词典然后在千里聆中创建与之对应的表单并关联词典最后创建意图将表单数据通过脚本“翻译”成e10 API能理解的格式并发送出去。3. 从字段到词典为智能审批准备数据源现在我们进入实战环节。假设我们要实现的是一个包含“请假类型”、“请假天数”、“开始/结束日期”、“审批人”和“事由”的请假流程。其中“审批人”需要从e10实时拉取员工列表“请假类型”是固定的几个选项。3.1 梳理e10表单找到字段“身份证”首先你得在e10的表单设计器里找到那张请假申请单。查看每个字段的属性核心是找到两个东西字段标识dataKey或字段IDfieldId以及字段类型。这两个是后续数据映射的基石。字段标识dataKey通常是一个有意义的英文或拼音缩写如sqr申请人、qqlx请假类型。在e10的接口文档或表单设计后台可以查到。字段IDfieldId一串全局唯一的数字ID。在表单的HTML源码或某些调试工具中更容易看到。字段类型是单行文本、多行文本、日期、数字、下拉框、浏览框即人员/部门选择器、附件等。我的习惯是建一个Excel表格把这些信息整理出来。例如e10字段含义字段类型字段标识 (dataKey)字段ID (fieldId)是否需建词典请假类型下拉框qqlxfield_1869557469645627300是静态选项请假天数数字tsfield_1863792674960646145否开始时间日期kssjfield_1791414335214485505否结束时间日期jssjfield_1791414335214485506否审批人浏览框人员sprfield_xxxx是动态人员词典3.2 创建静态词典固定选项的映射对于像“请假类型”这种选项固定的字段我们在千里聆后台创建词典最简单。进入“AI办公管理 - 文本结构化处理引擎 - 词典管理”新建一个词典比如就叫“请假类型词典”。词典类型选择“静态”或“自定义”。然后在“词典项”里手动添加“年假”、“病假”、“事假”、“调休”等选项。每个选项需要配置一个“选项ID”和“选项名称”。这里有个关键点这个“选项ID”必须和e10后台为该下拉框选项配置的内部ID完全一致否则数据无法匹配。通常你需要去e10表单设计器里查看这个下拉框字段的选项值是什么把对应的ID抄过来。3.3 创建动态词典让数据活起来动态词典才是体现“智能”的地方。我们以最常用的“人员词典”为例让它能实时同步e10的组织架构。在千里聆的词典管理里新建一个词典类型选择“API动态获取”。关键配置如下请求地址填写e10的查询员工接口通常是/api/hrm/restful/queryEmployee。请求方式POST。请求头Content-Type: application/json。请求体参数这里就需要用到脚本了。因为我们需要传递access_token等认证信息。参数配置通常如下function run() { return { access_token: $_GLOBAL_ACCESS_TOKEN_$, // 使用全局的access_token变量 current: 1, pageSize: 100, // 一次拉取的数量可根据需要调整 nameLikeList: [], // 如果需要搜索可以在这里传入数组 containUserInfo: true // 根据需要包含用户详细信息 }; }结果处理这是最需要细心的一步。API返回的是一大串JSON我们需要告诉千里聆如何从这串数据里提取出“选项ID”和“选项名称”。在词典的“结果配置”中你需要编写解析脚本。通常e10的接口返回格式是固定的解析脚本可能长这样function run(response) { // response 是API返回的完整结果 var items []; if (response response.data response.data.data) { var employeeList response.data.data; for (var i 0; i employeeList.length; i) { var emp employeeList[i]; items.push({ // 通常使用员工的 id 作为选项ID optionId: emp.id, // 使用员工的 username 或 name 作为显示名称 optionName: emp.username || emp.name }); } } return items; // 返回词典项数组 }配置完成后保存并测试这个词典。如果成功你应该能在词典的预览里看到从e10拉取过来的员工名单了。用同样的方法你还可以创建“部门词典”、“会议室词典”等只需要找到对应的e10 API接口即可。4. 构建智能表单与意图设计对话与收集数据数据源准备好了接下来就是在千里聆里搭建前端交互界面——也就是“小e”和用户对话时用的表单。4.1 在千里聆中创建智能表单进入“AI办公管理 - 文本结构化处理引擎 - 表单管理”创建一个新表单命名为“智能请假申请”。然后根据我们之前整理的e10字段清单逐一添加表单字段。字段类型匹配千里聆的表单字段类型需要和e10的大致对应。例如e10是“单行文本”这里也用“单行文本”e10是“下拉框”这里也用“下拉框”并在字段属性里“关联词典”选择我们刚才创建的“请假类型词典”。关键一步字段标识映射在千里聆表单字段的高级设置或扩展属性里通常有一个“字段标识”或“映射键”的选项。这里填写的值必须和e10表单的dataKey或fieldId一致这是后续脚本能否正确匹配数据的生命线。比如请假天数字段就在这里填入ts或对应的field_1863792674960646145。人员选择字段添加一个“人员选择”字段关联我们创建的动态“人员词典”。同样设置好其映射键为e10的审批人字段标识spr。这个表单的作用就是定义一个数据结构告诉“小e”“当用户要请假时你需要向他收集这几种信息并且每个信息对应e10表单里的哪个位置。”4.2 配置核心意图让AI理解并行动表单是身体意图就是大脑。现在我们来创建触发整个流程的意图。进入“意图智能化处理引擎”新建一个意图名称就叫“发起请假流程”。在“用户说法”里添加一些触发词比如“我要请假”、“申请年假”、“想请个病假”。这样当用户在千里聆里对“小e”说这些话时就会触发该意图。然后在意图的“关联表单”中选择我们上一步创建的“智能请假申请”表单。这样触发意图后“小e”会自动弹出这个表单让用户填写。最核心的部分来了配置意图的“执行动作”。我们选择“调用HTTP接口”。这里就是连接千里聆和e10的桥梁。请求地址填写e10创建流程实例的API一般是/api/workflow/core/paService/v1/doCreateRequest。请求方式POST。请求头Content-Type: application/json。接下来的参数配置是重中之重它决定了如何把表单数据“搬运”到e10。我们需要配置以下几个关键参数参数名参数值来源说明access_token全局变量 -accessToken千里聆自动管理直接选就行userid系统值 -当前用户ID发起流程的用户workflowId固定值填写e10中请假流程的模板IDrequestName脚本动态生成流程标题如“张三的请假申请_2023-10-27”otherParams脚本控制流程创建后的行为如是否自动提交到下一节点formData脚本核心将千里聆表单数据组装成e10 API要求的格式requestName的脚本可以这样写让流程标题更友好function run(object) { var userName $_CURRENT_USER_NAME_$; // 当前用户姓名 var currentDate $_CURRENT_DATE_$; // 当前日期 var leaveType getFormValue(object.field_qqlx); // 获取表单中请假类型的值 // 假设我们通过选项ID拿到了请假类型名称这里简化处理 return userName 的 leaveType 申请_ currentDate; }otherParams脚本通常用于控制流程是否自动流转function run(object) { // return {isnextflow: 0}; // 0: 只创建不提交停留在起草节点 return {isnextflow: 1}; // 1: 创建后自动提交到下一节点 }5. 灵魂脚本打通数据映射的“最后一公里”整个集成最复杂、也最考验功力的部分就是编写formData的生成脚本。这个脚本的任务是把用户在千里聆表单里填写的、松散的数据按照e10接口要求的、严格的JSON结构进行组装。5.1 脚本编写心法理解数据结构e10的formData参数通常要求一个特定的JSON结构里面包含了主表字段和明细表字段。主表字段就是请假单本身的信息谁、何时、多久明细表可能是一些附加信息比如多次请假的时间段。脚本的核心就是构造这个结构。我强烈建议你先在e10里手动发起一个流程然后用浏览器的开发者工具F12网络选项卡抓取一下创建请求看看formData到底长什么样。这是最准确的学习方式。一个典型的formData结构可能如下{ dataDetails: [ {content: 3, dataKey: ts}, {dataOptions: [{optionId: 123, content: 张三}], dataKey: spr}, // ... 更多字段 ], module: workflow }5.2 实战脚本解析主表字段处理下面我结合一个简化版的脚本带你一步步理解。我们假设只有主表字段没有明细表。function run(object) { // 1. 初始化基础信息和formData骨架 var userId $_CURRENT_USER_ID_$; var userName $_CURRENT_USER_NAME_$; var deptId $_CURRENT_DEPT_ID_$; var deptName $_CURRENT_DEPT_NAME_$; var formData { dataDetails: [], module: workflow }; // 2. 辅助函数安全地获取表单值 function getFormValue(fieldObj) { if (fieldObj fieldObj.value fieldObj.value.length 0) { return fieldObj.value[0]; } return ; // 或者返回 null根据e10接口要求 } // 3. 处理普通字段如请假天数 // object.field_ts 对应千里聆表单中映射键为‘ts’的字段对象 var days getFormValue(object.field_ts); formData.dataDetails.push({ content: days, dataKey: ts // 与e10字段标识对应 }); // 4. 处理下拉/浏览框字段如审批人 // object.field_spr 是人员选择字段对象其value是选中的选项ID数组 var approverField object.field_spr; if (approverField approverField.value approverField.value.length 0) { var approverOption { dataOptions: [], dataKey: spr }; // 遍历所有选中的选项人员选择通常单选但接口支持多选格式 for (var i 0; i approverField.value.length; i) { var optionId approverField.value[i]; // approverField.option 是一个映射对象key是optionIdvalue是显示名 var displayName approverField.option[optionId]; approverOption.dataOptions.push({ optionId: optionId, content: displayName }); } formData.dataDetails.push(approverOption); } // 5. 处理默认字段如申请人、部门 // 这些信息可能不需要用户填写由系统自动带入 formData.dataDetails.push({ content: userId, dataKey: sqr }); formData.dataDetails.push({ content: deptId, dataKey: sqbm }); // 6. 返回最终组装好的数据 return formData; }这个脚本已经处理了最常见的三种字段类型普通值、选项类、系统默认值。你需要根据自己e10表单的实际字段修改dataKey和从object中取字段的方式object.field_你的映射键。5.3 调试与排坑让脚本跑起来脚本写好了千万别直接上生产环境。千里聆的意图配置界面通常提供“测试”功能。你可以先模拟填写表单数据然后测试这个意图动作查看发送的请求和返回的结果。常见的坑有这几个字段映射错误dataKey写错了或者千里聆表单字段的映射键没配置。结果就是数据传过去了但e10不认识字段是空的。仔细核对两边字段的标识。数据结构不符e10接口对dataDetails里每一项的格式要求很严格。比如普通字段就是{content: 值, dataKey: xxx}而选项字段必须是{dataOptions: [...], dataKey: xxx}。多一个少一个属性都可能失败。务必以抓包到的真实数据结构为准。选项ID不匹配动态词典返回的optionId如员工ID必须和e10表单里存储的ID是同一套。如果e10表单里存的审批人是用户ID而你的词典返回的是员工ID那就对不上。确保数据源一致。附件字段处理如果表单有附件处理会更复杂一些。通常需要先调用文件上传接口将文件传到e10拿到文件ID再将文件ID填入formData。脚本逻辑会嵌套一层需要先处理上传再组装数据。调试是一个耐心活多看日志多抓包对比。一旦第一个流程跑通后面的都是举一反三。6. 流程优化与高级玩法基础流程跑通后我们可以让它变得更智能、更好用。这里分享几个我实践中觉得特别有用的优化点。6.1 利用意图云市场快速起步如果你觉得从零创建词典、表单、意图太麻烦千里聆的“意图云市场”是个宝藏。在创建意图时你可以选择“从市场安装”。里面有很多官方和社区预制的意图模板直接搜索“请假”找到那些标注了“e10”标签的意图一键安装。安装后你会得到一个已经配置好大部分内容的意图和关联表单。你只需要根据自己公司的e10环境修改一下里面的接口地址、流程ID、以及字段映射关系就能快速上线。这非常适合快速验证和原型搭建。6.2 流程创建后的交互优化默认情况下调用创建流程接口后我们只得到一个是否成功的提示。但我们可以做得更好。通过修改意图的“返回结果处理”脚本我们可以让“小e”在流程创建成功后直接给用户发一个可点击的链接一键跳转到e10系统查看刚刚创建的流程详情。function run(object, index) { // object 是接口返回的原始结果 var result object.message; if (result.errcode 0) { // 创建成功获取流程实例ID var requestId result.requestId; // 构建e10的流程详情页地址PC端和移动端 var pcDomain $_CURRENT_WEB_DOMAIN_$; // 通常配置为e10的PC地址 var mobileDomain $_CURRENT_WEB_DOMAIN_$; // 移动端地址可能不同 var pcLink pcDomain /sp/workflow/flowpage/view/ requestId; var mobileLink mobileDomain /mobile/workflow/flowpage/view/ requestId; // 返回一个富文本结果用户可点击跳转 return { link: pcLink, mobileLink: mobileLink, fieldValue: 您的请假流程已成功创建编号为 requestId 点击此处查看详情。 }; } else { // 创建失败返回错误信息 return { fieldValue: 抱歉流程创建失败 result.errmsg }; } }6.3 参数化与条件分支让流程更智能。比如我们可以根据请假天数自动决定审批路径。请假3天以内直接部门经理批3天以上需要总监审批。这可以在千里聆的意图配置中通过“条件分支”和“多个执行动作”来实现。首先在表单提交后的处理中添加一个“条件判断”节点判断请假天数 3。然后创建两个不同的“调用HTTP接口”动作分别调用对应不同审批流程workflowId不同的e10接口。这样一个智能请假意图就能自动适应公司内不同的审批规则。7. 测试、上线与维护所有配置完成后必须进行完整的测试。我建议拉一个小的测试群覆盖以下几种场景正常流程填写完整信息提交检查e10里流程是否按预期创建、字段是否正确、审批人是否准确。边界测试请假天数填0、填负数、填超大数开始日期晚于结束日期等看系统如何处理。异常测试必填项不填就提交网络中断时提交看是否有友好的错误提示。兼容性测试在PC端和移动端的千里聆里分别操作确保体验一致。上线后并非一劳永逸。当e10的表单字段发生变更增、删、改或者组织架构调整时千里聆这边的词典和表单映射也需要同步更新。建立一份简单的配置变更记录文档会很有帮助。最后我想说基于e10和千里聆构建智能审批流程技术本身并不高深核心在于“理解”和“映射”。理解两个系统各自的数据结构和运作逻辑然后通过词典、表单、意图和脚本这座桥梁将它们精准地映射起来。第一次做可能会觉得步骤繁琐但当你看到员工通过一句简单的话就完成了一个复杂流程的发起那种成就感是非常真实的。这套方法不仅适用于请假报销、采购、用车等任何流程都可以如法炮制。希望这篇超详细的指南能帮你少走弯路顺利开启你的智能办公之旅。如果在实际操作中遇到具体问题多看看接口文档多利用测试工具耐心调试你一定能搞定。