AI 扫名片看起来像一个很花哨的功能,但企业真正关心的从来不是“识别率宣传词”,而是 识别结果能不能变成 CRM 里可持续使用的数据。crm_enterprise 的 BusinessCardScanner 正是在做这个翻译层。
主要参考:
enterprise/crm_enterprise/models/crm_lead.pyenterprise/crm_enterprise/tools/business_card_scanner.pyenterprise/crm_enterprise/views/crm_lead_views.xml
一、系统先决定调用哪个识别后端,再决定接受什么结果
business_cards_to_leads() 会根据系统参数判断走 OpenAI 还是 IAP。很多团队会把这件事理解成“换供应商”,但源码显示真正重要的不是供应商,而是:无论用哪个后端,返回值最后都要被系统再次清洗。
这点很关键。企业版并没有把 AI 当权威答案,而是把 AI 当作原始输入提供者。
二、字段白名单是核心控制点,不是小细节
源码里非常明确地只接受 partner_name、contact_name、email_from、phone、website、function、地址等少数字段。换句话说,就算模型吐出更多内容,系统也不会全部照单全收。
这一步的意义非常大:
- 防止模型生成无关字段污染 lead;
- 保持 CRM 主模型的可解释性;
- 降低未来做去重、过滤和分配时的数据噪音。
新手误区就在这里:以为“AI 给得越多越好”。实际上企业系统更怕字段越界,而不是字段太少。
三、真正决定可用性的,是后续归一化
BusinessCardScanner 不会在拿到 JSON 后立刻创建 lead。它还会继续做三件事:
country_code映射国家;state_code在国家上下文里找州省;- 通过
_phone_format()规范电话号码。
这意味着名片识别真正的价值,不是把图片转成文本,而是把文本转成 CRM 里的结构化字段。没有这一步,后续销售筛选、去重、联系都会明显变差。
四、附件回挂商机,体现了企业流程的可追溯性
创建完 opportunity 后,系统会把原始附件重新挂到 crm.lead,并记录“Lead generated from this image.” 的日志。这个动作特别像企业版:它不是只给你结果,还保留原始凭证。
在真实团队里,这样做有三个价值:
- 销售能回看原始名片;
- 管理者能抽检识别质量;
- 数据治理时能追溯错误来源,而不是只剩下一条脏数据。
五、新手最容易误解的边界
- 名片识别不是联系人主数据维护器,它产出的是商机对象。
- OCR 成功不等于字段可信,系统还要做二次归一化。
- AI 返回内容越多不一定越好,字段白名单才是稳定性的关键。
六、实战建议
- 先补齐国家、州省和电话格式化相关主数据,再大规模推广名片扫描。
- 对销售培训时要强调:扫描结果是起点,不是最终客户档案。
- 如果用 OpenAI,重点监控返回 JSON 的稳定性;如果用 IAP,则重点看失败回执和可解释性。
七、结论
crm_enterprise 真正企业化的地方,不在于“接了一个 OCR 服务”,而在于它把 AI 输出塞进了一条受控的数据收口流程:字段受限、信息归一、原图回挂、结果可追溯。这样生成的商机,才更像业务资产,而不是一次性识别结果。
DISCUSSION
评论区