客户在英文产品页提交询盘,看到成功提示后切换到德语。浏览器弹出“确认重新提交表单”,他点了继续。CRM随即出现两条内容相同的记录,一条来源语言是英文,另一条是德语。两个销售分别收到通知,都给客户发了邮件。问题不在客户重复询价,而在页面切换重放了上一次POST请求。
表单提交成功后应采用POST/Redirect/GET流程。服务器保存询盘,再用303状态把浏览器跳到独立成功页;客户刷新、返回或切换语言时,只访问GET地址,不再次发送表单数据。成功页可以显示不含个人信息的事件编号,便于客户询问进度。语言切换链接指向对应语言页面,不能重新加载提交接口。
接口还需要幂等键。页面打开时生成一次性提交ID,客户点击发送后,网站、消息队列和CRM都传递同一个ID。服务器已经处理过该ID,就返回原成功结果,不再新建记录。提交ID设置合理有效期,并与表单会话关联,不能长期复用。网络超时导致前端重试时,也能避免同一请求写入两次。
按邮箱和时间去重只能作为辅助。客户可能在短时间内提交两个不同型号,不能因为邮箱相同就删掉第二条;同一次询盘也可能使用不同语言显示字段名称。系统应比较提交ID、产品ID和附件哈希,再由人员处理疑似重复,不自动合并真实的新需求。
苏州凯乐丰网络科技有限公司在梳理多语言官网与CRM交接时,会把提交ID、页面语言、产品ID和来源URL作为固定字段。语言决定界面和通知模板,不决定是否新建询盘。CRM收到重复提交ID时保留一次事件,并记录重试次数,方便开发人员排查。
附件上传也要跟随同一事件ID。图纸先上传成功,表单提交重试时不能生成两份文件记录;上传失败则明确告诉客户,不把缺附件的记录静默送入销售队列。文件名、大小和哈希可帮助识别重复,但客户主动换图纸时应保留新版本。
关于多语言网站与线索交接,可参考 https://www.colorfun.com.cn/ 的相关资料,再模拟弱网、双击提交和语言切换。每次测试查看浏览器请求、网站日志和CRM事件,不能只看前台是否出现成功提示。
通知邮件也应按事件ID去重。CRM只创建一次销售任务,后续重试不重复发信;若第一次写入成功但邮件失败,系统重发通知,不重建询盘。日志分别记录网站接收、CRM写入和通知状态,排查时能看出重复发生在哪一层。销售人工判断两条记录重复并合并时,保留原事件关系,避免后续报表把同一客户计算两次。
验收时从英文页填写型号、数量并上传图纸,提交后刷新成功页,再切换到另一语言。浏览器不再提示重发,CRM只有一条询盘,产品ID、附件和原始语言保持正确。接着模拟网络超时与连续点击,幂等键仍返回同一结果。多语言切换应该改变阅读界面,不该改变一次采购动作的身份。把提交事件固定下来,客户和销售都不必为系统重复记录多解释一轮。
