在开发RM系统时,我一直想解决一个痛点:如何让销售在网页上点击一下,就能直接给客户打电话,并且自动录音保存?
大家都知道,浏览器不能直接拨打电话。常见的解决方案要么需要买昂贵的硬件,要么需要开发复杂的APP。这些方案要么成本高,要么体验差。
经过反复试验,我终于找到了一个几乎零成本、体验流畅的解决方案。今天就来分享这个实现思路,希望对你有启发。
一、 问题核心:如何连接网页与电话?
理想中的场景:
- 销售在电脑上看客户资料
- 点击“拨打”按钮,直接通话
- 通话自动录音,结束后录音自动保存到客户档案
现实挑战:
- 🚫 浏览器无法直接拨号
- 🚫 网页无法控制手机录音
- 🚫 需要打通网页、手机、服务器之间的通信
二、 破解方案:用WebSocket搭建“空中桥梁”
我的解决方案是开发一个轻量级手机APP作为桥梁,连接网页与手机功能。整个架构如下:
- 网页端:CRM系统(Laravel + Inertia.js + Vue 3)
- 手机端:轻量级Android APP(负责拨号和录音)
- 连接层:WebSocket实时通信
三、 完整工作流程(就像发射指令)
第1步:建立连接 销售员打开手机APP → APP自动连接CRM服务器 → 告知服务器“我准备好了”
第2步:发起呼叫 销售在网页点击“拨打” → 网页通过WebSocket发送指令 → 服务器转发指令到对应手机
第3步:执行拨号 手机APP收到指令 → 自动拉起系统拨号界面 → 直接拨打客户电话
第4步:智能录音 通话开始 → APP自动开启录音 → 通话结束 → 录音文件自动命名(客户ID+时间戳)
第5步:自动归档 APP上传录音文件到服务器 → 自动创建客户跟进记录 → 关联录音文件
整个过程全自动,销售员只需点击一次,剩下的都由系统完成。
四、 技术实现关键点
1. 后端(Laravel)处理WebSocket消息
// 当收到拨号请求时
public function onMessage($connection, $data)
{
if ($data['type'] === 'make_call') {
// 找到目标用户的手机连接
$targetConnection = $this->findConnection($data['user_id']);
// 发送拨号指令
$targetConnection->send(json_encode([
'action' => 'call',
'phone' => $data['phone_number'],
'client_id' => $data['client_id']
]));
}
}
2. 手机APP(Android)处理核心功能
// 接收拨号指令
fun handleMessage(message: String) {
val data = JSON.parse(message)
if (data["action"] == "call") {
// 拨打电话
val intent = Intent(Intent.ACTION_CALL).apply {
data = Uri.parse("tel:${data["phone"]}")
}
startActivity(intent)
// 开始录音
startRecording(data["client_id"])
}
}
// 通话结束后自动上传录音
fun uploadRecording(clientId: String, filePath: String) {
// 将文件上传到CRM服务器
}
3. 网页前端(Vue 3)发送指令
<template>
<button
@click="makeCall"
:disabled="!isAppConnected">
{{ isAppConnected ? '一键拨号' : '手机APP未连接' }}
</button>
</template>
<script setup>
const makeCall = () => {
websocket.send(JSON.stringify({
type: 'make_call',
phone_number: client.phone,
client_id: client.id
}))
}
</script>
五、 这个方案的优势
✅ 零硬件成本:不用买任何专业设备 ✅ 体验流畅:销售无需操作手机,专注沟通 ✅ 自动归档:录音自动保存,不怕遗漏 ✅ 易于部署:只需安装一个APP即可
六、 实际应用效果
上线后,销售团队的反馈很好:
- 每天拨打客户数提升约40%
- 所有通话都有录音记录,方便复盘培训
- 新员工也能快速规范跟进客户
最重要的是,这个方案几乎没花什么成本,就用现有技术实现了高端CRM才有的功能。
七、 注意事项
- Android权限:需要用户授权电话和录音权限
- APP保活:需要优化后台运行,防止被系统清理
- 网络稳定性:依赖WebSocket长连接,需要处理断线重连
这个方案完美地解决了网页与电话之间的连接问题,用很低成本实现了自动化拨号录音功能。如果你也在开发CRM系统,不妨试试这个方案。
大家有什么问题或更好的想法?欢迎在评论区交流!