用户在商城里提了条意见反馈,点完提交就没下文了——运营那头不知道到底处理没处理,用户这头更是石沉大海,怎么看都不太专业。需求方管这叫「想上个工单系统」,可真拆开看,其实没到那个份上。
一天没几条反馈,为这个上一套工单系统,配置、培训、维护的成本全花在用不到的功能上,明显不划算。动手改之前我先去把反馈这条链路的代码读了一遍,想看看标品到底做到哪一步了。
先读标品的反馈代码
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,把它透出到个人中心的「我的反馈」列表就行,一条反馈显示成待处理 / 处理中 / 已回复。用户能看到状态在动,「不专业」的感觉立刻就没了,这一步几乎不用碰后端逻辑,前端把字段展示出来即可。
什么时候才真该上工单
等反馈量真上来了,需要分派到人、要统计处理时效、要 SLA 的时候,再谈接专业工单不迟。在那之前,把通知转发出去、把状态回显给用户,这两处小改动就够用。
改完拿个测试账号提一条反馈,确认群机器人收到了消息、后台改状态之后个人中心那条也跟着变,就算通了。