资讯详情

资讯详情

自研CRM系统实战:从技术选型到客户数据架构的踩坑指南

DeskcommCRM这个名字第一次出现在我们团队讨论群里是去年年初。当时销售总监在会后发了很长一段吐槽客户资料散在微信聊天记录、Excel表格、报价邮件和个人通讯录里新人上手靠拷历史文件客户撞单要翻半天聊天记录才能判断归属月底汇报业绩只能人工拼数据。他说得直白——我们需要一套能真正管住客户全流程的工具。市面上现成的CRM产品我基本都试用过一轮要么太重实施周期按月起算要么太轻只能当通讯录用。后来团队拍板自己动手搭一套适合我们业务节奏的客户关系管理系统这就是DeskcommCRM的起点。前后从需求梳理到上线花了大概九个月中途砍过需求、推倒过两次数据模型也踩了不少部署和权限设计的坑。这篇文章把我个人踩过的一个一个坑梳理出来给在纠结自建CRM还是做技术选型的朋友当个参考。1. 项目背景与整体定位1.1 为什么放弃现成产品选择自研讨论自研之前我们先把市面主流的CRM产品做了一次比较详细的选型调研。当时团队规模在四十人左右销售加售前大概二十人年付预算控制在三五万以内。这个预算段能买到的产品普遍有几个痛点。第一是系统重、配置门槛高。多数正统CRM产品对标的是大型企业的完整销售体系字段可以自定义到非常细的程度但同时要求有专门的系统管理员去维护。对我们这种没有专职IT运维岗位的团队来说光是把部门架构、审批流、字段权限调通就要花好几周。第二是数据归属问题。客户资料和跟进记录都存在服务商那边虽然合同上写了数据所有权归我们但真要迁出来的时候接口字段和导出格式往往要二次开发迁移成本高。第三是价格模型不友好。按坐席收年费的计费方式二十人一年就是四五万起步而且加一个用户就要加钱扩团队的成本几乎是线性的。自研最大的好处是功能完全掌控。我们可以先做最小闭环客户管理、跟进记录、商机阶段、基础报表。等团队用顺了再逐步加日历同步、周报推送、数据大屏这些锦上添花的模块。还有一点容易被忽略的自研动力就是字段和流程的调整成本。销售团队的业务节奏是动态变化的产品增加一条新业务线、销售流程加一个审批节点自研系统改一个表加一个页面就能交付而用外部产品往往要提工单等排期。当然自研也不是没有代价。最明显的是开发时间挤占了核心业务所以我们一开始定了铁律MVP版本控制在三个月内不做完美设计只做销售每天必须用的四五个功能。1.2 产品边界与技术选型DeskcommCRM最开始的目标非常克制它就是一个销售客户管理工具不是OA、不是财务系统、也不是数据分析平台。产品边界清晰开发过程就会少很多拉扯。我们甚至主动砍掉了在线聊天和工单系统因为那对应的是客服业务和销售管理是两个场景。技术选型围绕团队熟练度和部署成本来定。后端用的是 Java 17 加 Spring Boot 3.x配合 MyBatis-Plus 操作数据库。之所以不选 Node.js 或者 Python主要是团队里写 Java 的人最多而且 Spring 生态里的 Spring Security、定时任务、数据校验这些组件非常成熟写业务代码能省不少事。数据库用的 PostgreSQL 15主要看重它对 JSON 字段的支持和多表复杂查询的能力后面做客户360视图和动态字段扩展时特别有用。缓存用了 Redis单实例就够主要是存登录会话、热点客户详情和防并发编辑的锁。前端是 Vue 3 加 Element Plus表格、表单、弹窗这些管理后台的常用组件开箱即用视觉风格我们稍微做了一层定制让员工用起来不觉得是开发写给自己看的东西。部署方式用的是 Docker Compose把后端、前端、数据库、Redis、Nginx 拆成五个容器一台 8核16G 的云主机就能跑得很稳。这套架构放到今天来看确实比较传统没有服务网格也没有微服务但对一个二十人使用的内部系统来说复杂架构除了增加故障点没有任何实际收益。我个人的观点是选架构首先是匹配团队规模和业务复杂度而不是追求技术热点。2. 核心模块设计与数据建模2.1 线索、客户、商机的数据链路设计业务数据模型是整个DeskcommCRM的骨架这块我们前后推翻了两稿最后才定下来线索-客户-联系人-商机四层结构。线索指的是尚未验证有效性的原始信息比如在行业大会上收集的名片、官网留资的潜在用户、市场活动拿到的电话名单。线索统一进公共池销售认领后先电话沟通确认意向如果对方确实有合作可能就转成正式客户。为什么要把线索单独拆出来因为线索量大且信息不完整如果直接混进客户表报表统计时很难区分有效客户数和待洗名单数而且容易导致重复跟进。客户是真正进入销售漏斗的对象一条客户记录应该是一个公司主体。公司可能有多个联系人所以我们单独建立了联系人表一个客户下挂多个联系人每个联系人可以有自己的手机号、微信、职位和决策角色。早期我们图省事只建了客户表把联系人和客户拆分好之后才发现做联系人去重和找关键决策人时效率完全不一样。商机则关联到一个客户下的具体生意机会。客户是长期关系商机是短期项目。比如某家公司已经是我们的正式客户最近有一个新产品的采购计划这就是一个新的商机。商机表里维护了预计金额、预计成交日期、当前阶段和赢单概率。整体数据关系就是线索可以转化为客户客户下面挂联系人和商机商机成交后生成订单记录。这里有个设计细节值得提一下。我们把状态字段设计成了三态通用状态、业务状态和内部状态。比如线索有新建、跟进中、已转化、已作废等业务状态还有是否公海池、是否锁定、是否重复这种内部状态。刚开始设计的时候不少人提议把所有状态放在同一个字段里后来发现查询逻辑会越来越复杂因为作废的线索又出现在公海池这种状态组合很难用一个枚举值表达。拆开之后每个维度各自独立维护起来清晰很多。2.2 客户360度视图的实现思路客户360度视图是DeskcommCRM中使用频率最高的页面也是CEO和销售主管最关注的页面。它的核心目标很简单让一个销售在进入客户详情页的十秒钟内能快速掌握这个客户的基本情况、最近跟进动态、正在推进的商机、以及团队成员在这个客户上有过多少沟通。具体实现上客户详情页拆成五个Tab区域基本信息、联系人、跟进记录、商机列表、操作日志。基本信息展示客户名称、行业、规模、来源渠道、负责人和创建时间等。联系人Tab是当前客户下所有联系人的列表突出显示关键决策人标签。跟进记录是一个时间线组件所有电话、拜访、微信沟通的反馈都按时间倒序展示新内容自动置顶。商机列表则展示当前客户下处于不同阶段的所有商机方便销售判断下一步该推动哪个项目。技术实现方面为了减少页面加载时的数据库压力我们做了一层 Redis 缓存key 用客户IDvalue 是序列化后的详情JSON。这个缓存不能存太久因为销售每次跟进都会更新数据所以我们设置五分钟过期离开页面再回来重新读取就是最新数据。另一个经验是客户详情页的慢查询一定要提前优化。我们第一次联调时发现详情页接口要两秒多才返回后来用执行计划排查发现是联系人表和跟进记录表的索引没建对补上 customer_id 和 create_time 的联合索引后响应时间降到了一百毫秒内。还有一个容易踩坑的地方是并发编辑。两个销售同时打开同一个客户详情页编辑基本信息后提交的人会覆盖先提交的内容。为了防止这种情况我在保存接口里加了一个简单的乐观锁更新时带上记录原来的更新时间戳如果数据库里的时间戳和提交时不一致就提示该客户信息已被其他人修改请刷新后重试。这个实现成本很低但确实避免了多次数据互相覆盖的问题。2.3 权限模型读、写、删都要有边界权限模型是CRM系统里最容易出问题的地方也是销售总监每次开会都反复提的痛点。销售数据的敏感性体现在两个层面一是不能让人随便看所有客户的联系方式否则存在飞单风险二是不能让业务人员删除跟进记录否则出了争议无据可查。DeskcommCRM的权限模型分三个维度菜单权限、数据权限和操作权限。菜单权限控制的是用户能看到哪些功能模块。我们定义了四种角色系统管理员、销售主管、销售专员、只读访客财务和客服用。系统管理员拥有全部菜单的操作权销售主管比销售专员多出团队报表和公海池分配两个菜单只读访客只能浏览不能新增和编辑。数据权限控制的是用户能看到哪些记录行。这是权限模型里最绞尽脑汁的部分。我们采用了最简单的行级权限策略每条客户记录上有一个 owner_id 字段对应销售负责人的用户ID。普通销售的默认数据范围是仅本人负责的客户销售主管的范围是本人团队内所有销售负责的客户系统管理员是全部客户。这个逻辑谁来看都不复杂但实现时一定要把所有入口都覆盖到因为列表页、搜索接口、报表统计、导出功能各自都要拼接数据权限过滤条件。我们第一版只改了列表页的SQL结果导出功能没加条件销售主管导出了全公司的客户名单幸好是在测试环境发现的不然后果比较严重。操作权限控制的是增删改按钮是否可用。删除操作我们做了严格控制只有系统管理员可以物理删除客户记录其他角色最多只能标记无效或不再跟进记录本身永久保留。跟进记录只允许创建和补充一旦提交就不允许修改和删除。当时销售总监提了一个很有价值的理由万一客户投诉销售服务态度不好公司需要完整还原整个跟进过程修改和删除功能会破坏证据链。权限配置的时候还有一个小细节用户数据范围发生变化时比如某销售离职、客户被转交给别人必须要有一个批量转移操作。我们做了客户转移功能管理员可以选择原负责人指定新负责人然后系统把所有未成交的客户批量转移同时保留原负责人的历史跟进记录和新负责人的接手备注。这个功能在后续团队人员调整时帮了大忙。3. 关键功能实现与实操要点3.1 客户导入与去重批量操作中的最大坑DeskcommCRM上线初期摆在我们面前最头疼的问题就是存量数据迁移。二十个销售的客户资料分布在各种地方统计下来有接近两万条不规范的记录。如果靠人工逐条录入光是录入就要花掉将近两周时间而且录入过程中出错率高。所以客户导入功能成了MVP版本的刚需。导入功能表面上看起来很简单上传Excel解析每一行插入数据库。但第一次联调就出了大问题。测试人员上传了一个两千行的Excel页面转圈转了三十秒然后接口超时。原因很简单我们最初实现是同步解析加循环插入数据库两千条记录逐一执行INSERT语句事务太长导致MySQL锁了大量行。后来改成批量插入每五百条作为一个批次在内存里拼好再一次性写入数据库两万条数据大概十秒就导完了。这一点是第一个值得记录的经验——批量数据操作千万别用循环单条INSERT。比导入性能更重要的是去重策略。同一家客户可能出现在多个销售的Excel里只是公司名称写法略有差异比如北京某某科技有限责任公司和北京某某科技有限公司只有一字之差还有的填的是某某科技简称。我们最开始想去重直接比对公司名称字符串效果惨不忍睹一个名称差一个字就跳过了。后来参考了不少开源系统的做法定了一套三级去重规则第一级联系人手机号完全一致第二级公司名称去掉后缀词和空格后完全一致第三级邮箱前缀一致且域名一致。命中任一规则就判定为疑似重复。执行去重时如果有同一个人名下的两条记录系统自动保留最近更新的一条另一条标记为疑似重复进入公共池由管理员人工确认是否合并。这套规则不能保证百分百准确但实际操作下来去重准确率能到九成左右剩下的人工处理成本可接受。导入模板的设计也要注意。模板里的每一列都要有明确说明和示例值不要只有列名没有示例。比如客户规模这一列模板里要写清楚可枚举的值范围初创、小型、中型、大型否则销售填出来五花八门的很大的公司三百号人这种格式后端解析时还得再做一层映射处理。3.2 跟进提醒与日程联动CRM系统最怕的不是没人录入数据而是录了数据之后没有后续动作。销售跟进客户是有节奏的比如新线索必须在二十四小时之内首次电话联系意向客户每三天要跟进一次商机到了最终报价阶段每天都要关注。如果没有提醒机制这些规则写在制度里没有任何意义。DeskcommCRM在跟进提醒上做了两件事。第一件是内置的待办任务。销售在录入跟进记录时可以顺手创建一个后续任务比如下周二上午十点给张总回电确认报价方案任务到了截止时间还没有完成系统会把当天所有未完成任务汇总推送给销售本人。第二件是定时扫描提醒。系统跑了一个每日定时任务扫描所有客户资料中的下次跟进时间字段超过三天没有新增跟进记录的客户自动生成一条高优先级的提醒同时抄送给销售主管。提醒渠道选择上也纠结过。一开始做了邮件订阅后来发现销售根本不看邮件尤其是外勤路上。后来接入了企业微信机器人把待办提醒推送到对应的企微用户这个转化率一下就上来了。技术实现上提醒任务是用 Spring 的 Scheduled 注解写的每十分钟扫一次待提醒的任务表批量调用企微机器人接口发送。这里有一个小坑企微机器人接口有每秒频率限制如果待办任务特别多直接循环调用容易被限流。我们的处理方式是加了一个简单的令牌桶限流每秒最多发送五条剩余的排到队列里下一批次发送。日程联动是后续迭代加的功能。很多销售习惯用日历管理自己的时间我们为每条跟进任务生成一个iCal格式的日历邀请销售可以一键把系统里的跟进计划同步到自己的Outlook或手机日历。实现上其实不复杂就是用数据拼接一个标准iCal文件加上ics的请求头返回给前端浏览器就会自动识别并弹出添加到日历的提示。虽然后面不少销售反馈还是习惯直接在系统里看但这一步对提升专业度的价值还是有的。3.3 数据报表与销售看板报表是销售管理层使用得最多的功能。DeskcommCRM的报表模块没有采用市面常见的拖拽式报表设计器而是针对几个固定的业务场景提前写好查询和图表保证常用报表打开就能看不需要培训。最核心的报表是销售漏斗也就是商机阶段转化分析。我们把商机阶段定义为初步接触-需求确认-方案报价-商务谈判-赢单每个阶段对应一个预计赢单概率。报表按团队维度或销售维度统计当前在跟进的有效商机数量和总金额展示每个阶段的分布情况。它能让管理者直观看到方案报价阶段积累了大量金额但迟迟没有推进说明销售在价格谈判上遇到了共性阻力。目标完成度报表是另一个高频入口。每年年初我们会把年度销售目标拆分到每个季度、每个团队和每个人系统在月底自动计算每个销售的已完成金额和目标完成率。这里就要用到订单表和商机表的关联统计。订单表记录的是实际签约金额商机表记录的是预计签约金额。月底的完成率计算只能算已经赢单并创建了订单的金额不能把预计本月能签约的商机金额算进去。否则报表数字好看实际回款对不上财务那边第一个不答应。还有一个客户分布报表按行业、员工规模、来源渠道、负责人等多个维度对客户进行统计。这个报表用的是PG数据库的行转列语法直接在一个查询里完成多维度聚合代码简单响应也快。报表页面的数据都不需要实时刷新我们设置了一个五分钟的缓存减少对主库的压力。如果让我给报表模块一个建议那就是不要一上来就做几十张报表。先跟销售管理层访谈把最常用的三五张报表做扎实图表颜色、字段命名、汇总口径都要跟业务人员反复确认。等他们习惯了看报表-做决策的模式自然会反馈新的需求来。4. 部署上线与落地经验4.1 部署环境与CI/CD流程DeskcommCRM的部署架构选择了两套环境测试环境和生产环境。测试环境部署在同一台云主机上用Docker Compose管理方便开发自测和测试人员回归生产环境单独一台云主机配置更高一些同时接了一个云数据库实例避免数据库和应用抢资源。Docker Compose文件中我们定义了五个服务nginx、frontend、backend、redis、postgres。nginx负责静态资源托管和反向代理把 /api 前缀的请求转发到后端容器把 / 开头的静态资源请求直接映射到前端构建产物。每个服务都设置了资源限制比如后端容器最大内存限制为2GRedis为512M避免某个容器内存泄漏拖垮整个主机。CI/CD用的是GitLab CI流程比较精简但够用代码推到主分支自动触发编译和单元测试测试通过后构建Docker镜像并推送到私有镜像仓库之后通过SSH登录生产服务器执行docker compose pull和docker compose up -d完成滚动更新。整个流程从提交代码到上线大概五分钟比手工打包上传可靠得多。上线之后最容易被忽视的是备份策略。我们吃了两次亏之后专门写了一个每日凌晨的定时备份脚本用 pg_dump 导出数据库全量备份同时把服务器上用户上传的附件目录用 rsync 同步到另一台独立的备份机器保留最近三十天的数据。这里说的附件不是指销售群里聊天图片而是合同扫描件、报价单PDF、客户Logo这类业务文档。一旦服务器磁盘故障没有备份就只能傻眼。云服务商自带快照功能我们保留了三天的每日快照但快照只能防误操作真正要恢复带文件的数据还是得靠定期导出加异地拷贝。4.2 账号体系与数据安全配置账号体系这块DeskcommCRM第一版是自己实现了一套简单的登录注册逻辑用户名加密码Md5加盐存到用户表里。上线后不到两周就发现有同事密码设置得极其简单比如123456、deskcomm2024这种并且长期不换。我们意识到如果密码策略不强再完善的权限模型都是摆设。后来我们做了一次加固强制所有账号首次登录必须修改密码密码最少8位必须包含数字和字母连续输错五次触发账号锁定半小时。另外增加了基于时间的一次性验证码用TOTP算法员工在自己的企微上绑定一个动态令牌登录时需要输入账号密码加六位动态码。这一套配置下来安全性提升了一个档次而且对用户操作影响不大因为动态码在企微里直接能看到。数据安全方面我们重点处理了两类内容一类是客户联系方式的敏感字段比如手机号、微信、邮箱另一类是系统操作日志。敏感字段的存储我们用了AES加密密钥放在环境变量中和代码分离管理。查询时默认只显示脱敏信息比如手机号只显示前三位和后四位点击查看按钮时会先校验当前用户是否有对应客户的查看权限然后再解密返回完整号码。操作日志记录的是每一次用户增加、修改、导出操作的操作人、操作时间、对象ID和变更摘要。这个日志对追溯数据泄露很有帮助但前提是系统本身具备查询日志的界面而不是只写进数据库不展示。权限设计再好如果开发人员可以绕过系统直连数据库查看明文数据一切防护都形同虚设。所以我们内部也约束了只有数据库管理员拥有直连生产库的权限而且所有SQL查询命令都会记录到审计日志里。这条规矩虽然给开发排障带来了一点不便但客户数据的敏感性值得这种牺牲。4.3 团队推广节奏先试点再全量系统做出来没人用是内部工具最常见的失败原因。DeskcommCRM上线时我们吸取了这个教训没有搞一刀切式的强制全量推广而是先选了一个销售小组做试点跑通之后再逐步扩大范围。试点团队选的是华南区销售小组八个人特点是年轻、对新技术接受度高更重要的是他们的组长愿意每天花十分钟收集问题反馈。试运行两周后我们每天和组长对一次反馈整理出高频问题和需求按优先级快速迭代。印象最深的是第一周就有销售提出录入客户时希望支持从手机通讯录导入联系人这个功能我们花了一个周末就开发完成因为客户列表页本来就有读取Excel和手动录入的入口多加一个弹窗导入联系人复用现有解析逻辑就行。这种快速响应的正反馈让试点团队感觉这个系统是他们自己参与设计出来的用起来自然带劲。试点跑了两周第三周开始把华南、华东、华北三个区域全部开通同时安排了两场培训。培训内容没有讲复杂功能只讲四个高频操作录入客户、写跟进记录、创建商机和看报表。每场培训控制在四十五分钟以内留十五分钟现场答疑。之后还有一批顽固用户习惯了原来的Excel表格不太愿意切换到系统。我们的对策不是强制而是请销售主管把Excel模板升级成从系统导出再填写的方式引导他们逐步过渡。先从每周一次导出Excel汇报到后来发现系统报表更直观Excel使用频率自然就降下来了。推广过程中还有一点很关键制定简单的使用规范不要写一本厚的手册。比如客户负责人变更时必须走客户转移功能跟进记录里不允许粘贴大段邮件原文只要概括要点商机金额统一填写合同金额并注明币种。就这三条大家容易记住也容易遵守比起复杂的操作说明要有用得多。5. 常见问题与排查技巧5.1 数据导入乱码与丢失排查客户导入功能测试和上线初期出现最多的问题就是Excel解析乱码和部分数据静默丢失。乱码的原因绝大多数是文件编码不匹配Windows办公软件导出的CSV默认是GBK编码而Linux服务器上的Java默认读取UTF-8直接按字符串读就会出现中文变成问号。解决方式是解析文件前先读取文件头几个字节识别编码类型再用对应的字符集做解码。Apache POI对.xlsx格式的兼容性更好所以我们最终统一要求用户上传.xlsx文件不做CSV兼容减少编码判断的工作量。数据静默丢失的情况比较隐蔽。有一次销售反馈导入后客户总数比Excel行数少了几十条排查下来发现是Excel里有一些空行空行的单元格也可能带着格式标记和不可见字符被解析出的对象字段都是Null插入数据库时因为非空约束直接抛出异常。我们的批量操作逻辑里捕获到异常后只跳过了这一条没有把错误信息反馈给前端。后来在导入结果页面增加了成功N条、失败M条、失败原因的提示并对失败数据提供下载用户可以直接下载出错的Excel查看错误明细问题就好排查了。5.2 跟进提醒不触发的根源提醒功能上线后有用户反馈自己给客户设置了明天上午十点跟进的提醒结果第二天完全没收到通知。第一反应是定时任务没有跑。服务器上查看日志发现任务确实执行了但发送消息时提示目标用户不存在。进一步排查后发现提醒绑定的是用户在系统里的user_id而企微通知需要的是企微用户ID。新入职员工的账号在DeskcommCRM里创建后需要管理员在后台手动绑定企微账号这个绑定关系漏了就会导致提醒发不出去。我们在用户管理页面加了一个未绑定企微账号的筛选列表每周由HR检查一次确保新人都完成绑定。还有一类提醒不触发的原因是时区问题。服务器部署在云上默认时区是UTC而业务逻辑要求的是北京时间。我们刚开始没有在应用启动时设置默认时区导致定时任务扫描下次跟进时间时比较的时间基准比实际晚了八个小时本来明天上午的提醒系统以为还没到。解决方式是启动类里显式设置 Spring 的时区为 Asia/Shanghai同时数据库连接串上加上 serverTimezoneAsia/Shanghai。这样从应用到数据库整个链路的时区就统一了。这个坑非常典型只要你做过和定时任务、日期时间有关的系统大概率都踩过。5.3 客户详情页加载慢的排查记录有一次销售集中反馈客户详情页打开要转圈好几秒尤其是在浏览器开着F12调试工具访问时接口返回时间波动很大。我们抓了后端接口的日志发现大部分请求耗时都在八百毫秒到两秒之间数据库的慢查询日志里能看到几条按客户ID查联系人和跟进记录的SQL扫描行数非常大。分析执行计划后原因很清晰联系人表和跟进记录表的数据量已经增长到一定规模而这两张表最初没有为 customer_id 单独建索引导致每次查询都是全表扫描。为什么会漏建索引因为之前表数据量很小几百条记录全表扫描也就几十毫秒开发时完全没意识到性能瓶颈只在客户表上建了主键索引。补上 customer_id 和 create_time 的联合索引后查询直接从全表扫描变成了索引范围扫描接口耗时降到一百毫秒左右。另外详情页多Tab的数据是并行请求还是串行返回对整体加载时间影响也很大。前端最初是等基本信息返回后再去请求联系人和商机列表相当于串行链路叠加网络延迟后体感就慢。我们改成前端同时发出多个请求后端分别处理前端用Promise.all等待全部返回后统一渲染。这样即使某一个接口慢一点也不会白白拖累整个页面的加载。5.4 权限越权问题的排查方法权限配置不当引起的越权是内部系统最严重的问题之一。有一次销售主管反馈自己在客户列表里能看到其他团队负责的客户记录。当时排查的第一步是查看该主管的角色和用户表。系统里这条数据的数据范围是本团队理论上只应该看到自己团队成员的客户。继续检查SQL拼接逻辑发现数据权限过滤条件是通过一个工具类的方法拼接到查询语句中的而这个方法里处理了一个空值场景当用户ID为空时默认不追加权限过滤条件。开发时这样做是为了方便定时任务和系统内置用户查询全量数据但忽略了如果没有显式传入当前登录用户接口就会默认放开权限。这个逻辑本身没有错错在从外部请求进入时没有强制要求当前用户上下文初始化。修复方式是在网关层设置了一个Servlet Filter每个请求进入Controller之前先解析Token把当前用户信息设置到ThreadLocal上下文对象中。如果解析不到用户信息接口直接返回401不允许进入业务代码。这样即使业务代码里忘记获取用户信息也不会出现权限被绕过的情况。这轮排查给我们的教训是权限过滤条件不能依赖防御式的默认行为必须在入口处做强制校验越早挡住的攻击面越大。6. 写在最后DeskcommCRM上线到现在半年多团队从最初的不习惯到逐渐依赖销售录入客户成了日常工作的一部分。对我个人来说最大的成就感不是写了多少行代码而是看到一个一个原来散落在Excel里的客户记录变成了系统里清晰可追踪的业务资产。销售能说出这个客户半年前跟过什么方案、报过什么价格新人能通过历史跟进记录快速了解客户情况这种信息顺畅流动带来的价值比任何复杂的功能都让我觉得当初的选择值得。如果正在考虑自己搭一套类似的系统我的建议是先承认一个现实自研CRM不是做一次就完事它需要持续迭代和长期维护。团队的精力投入到开发上就要接受短期内其他项目可能会被挤压。但从另一个角度看真正贴合业务、能随业务一起调整适应变化的系统往往是那些内部自己动手写、亲手磨出来的工具。做之前想清楚边界做的时候克制功能做出来之后认真推广、认真听反馈这套系统才能真正活起来。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →