用户在商城提交意见反馈后,运营后台看不到处理进展,用户也收不到任何回音,这种“石沉大海”的体验既不专业,也容易流失用户。需求方往往想直接上工单系统,但实际业务量不大的时候,一套完整工单的配置、培训、维护成本过高。本文基于Tigshop开源商城现有代码,只做两处轻量改动,就能让反馈链路变得清晰、可追踪,同时保持系统的轻量化。
先读懂标品已有的反馈代码
动手改造前,我们先梳理一下Tigshop标品中反馈模块的现有能力。C端提交入口在 php/app/api/controller/user/Feedback.php 的 submit() 方法,数据最终落到 php/app/service/admin/user/FeedbackService.php 的 submitFeedback() 方法。阅读代码发现,标品其实已经铺了不少底层支撑:
// FeedbackService::submitFeedback() 里,创建反馈之后
$result = Feedback::create($data);
app(AdminMsgService::class)->createMessage([
'msg_type' => AdminMsg::MSG_TYPE_FEEDBACK,
'title' => '您有一个新的意见反馈',
'content' => "用户" . $username . "提交了一个新的意见反馈",
'related_data' => ['id' => $result->id],
]);
也就是说:
- 反馈表本身带
status字段,列表和详情接口里都 append 了status_name,状态是现成的。 - 提交时已经调
AdminMsgService::createMessage,往后台发一条MSG_TYPE_FEEDBACK的站内消息。 - 后台通过
FeedbackService::updateFeedback()能回复、改状态。
所以“没系统”这个判断是错的。真正的问题只有两个:那条站内消息运营根本不看,以及用户端看不到自己那条反馈走到哪了。
缺口一:通知运营看不到
站内消息这东西,运营不会守着后台刷。把 submitFeedback 里那条消息顺手再往一个运营真会盯的渠道发一份就行。量小的时候,发到企业微信/飞书/钉钉的群机器人 webhook 最省事:
// submitFeedback() 里,createMessage 之后追加
$hook = config('shop.feedback_webhook');
if ($hook) {
Http::post($hook, [
'msgtype' => 'text',
'text' => ['content' => "新反馈 #{$result->id}:{$data['content']}"],
]);
}
小提示:发群里的动作最好丢到队列异步做,标品发信息就是走 TigQueue 队列的,照着这个思路走,别让一次反馈提交卡在 HTTP 请求上。
缺口二:用户端看不到进度
后台改了状态,用户端不回显,“石沉大海”的观感就还在。反馈详情接口本来就带 status_name,把它透出到个人中心的“我的反馈”列表就行,一条反馈显示成待处理 / 处理中 / 已回复。用户能看到状态在动,“不专业”的感觉立刻就没了,这一步几乎不用碰后端逻辑,前端把字段展示出来即可。
特色功能:轻量级工单能力
- 零成本升级:无需安装额外工单系统,利用现有反馈表字段和状态,节省服务器、配置、培训成本。
- 消息多通道:支持企业微信、飞书、钉钉群机器人通知,运营不遗漏。
- 用户可见状态:用户前端实时看到反馈处理进度,提升体验和专业感。
- 可扩展性:当业务量增长后,可平滑过渡到专业工单系统,无需推倒重来。
常见问题
Q1:为什么不用现成的工单系统?
一天没几条反馈,为这个上一套工单系统,配置、培训、维护的成本全花在用不到的功能上,明显不划算。上述两处改动仅需几行代码,几分钟即可完成,是性价比最高的方案。
Q2:如何配置webhook地址?
在 config/shop.php 或环境变量中添加 feedback_webhook 配置项,值为群机器人webhook URL。例如:'feedback_webhook' => 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx'。不配置则不发送。
Q3:队列异步处理怎么实现?
可以参考标品中信息发送的队列实现。在 submitFeedback() 中,使用 app(TigQueue::class)->push('SendFeedbackWebhook', ['id' => $result->id]),然后创建队列任务类处理HTTP请求。这样反馈提交后立即返回,不影响用户体验。
Q4:前端展示状态需要修改哪些文件?
在个人中心“我的反馈”列表页,调用反馈列表接口时,接口已返回 status_name。前端只需在循环中显示该字段,例如:{{ item.status_name }}。如果列表接口未返回,可在Controller中追加 append('status_name')。
什么时候才该上专业工单系统
等反馈量真上来了,需要分派到人、要统计处理时效、要 SLA 的时候,再谈接专业工单不迟。在那之前,把通知转发出去、把状态回显给用户,这两处小改动就够用。
验证方法
改完拿一个测试账号提一条反馈,确认群机器人收到了消息、后台改状态之后个人中心那条也跟着变,就算通了。建议使用不同状态(待处理、处理中、已回复)分别测试,确保前端正确显示。
通过以上两个轻量级改动,Tigshop开源商城的反馈系统就能从“石沉大海”升级为“有问有答”,运营不遗漏,用户看得见。整个过程不改动核心架构,不增加运维负担,是实现快速提升用户体验的最佳实践。
