基于 Go 的脚本通用云控系统
系统简介
这是一个用 Go 语言开发的云控管理系统,专为获客场景和矩阵机房的脚本平台 APP 集中管理而生。它的核心功能是通过网络远程控制设备,实现获客脚本的批量下发、执行状态监控、账号管理等操作,让获客和矩阵机房的管理变得简单高效。
B站有演示视频,可以搜博主的昵称.
核心优势:适配获客和矩阵机房需求
1. 轻量部署,即开即用
后端编译示例:
bash
# 编译 Linux 版本
$ env GOOS=linux GOARCH=amd64 go build -o cloudcontrol-linux cloudcontrol.go business_auth.go
# 编译 Windows 版本
$ go build -o cloudcontrol.exe cloudcontrol.go business_auth.go
启动服务:
bash
# Linux 下启动
$ ./cloudcontrol-linux -f etc/cloudcontrol.yaml
# Windows 下启动
$ ./cloudcontrol.exe -f etc/cloudcontrol.yaml
特点:矩阵机房通常空间有限,系统轻量部署的特性使其可以在普通服务器甚至工控机上运行,无需占用过多资源。
2. 跨平台支持
系统采用 Go 语言开发,天然支持跨平台编译,可轻松部署到矩阵机房的 Windows 或 Linux 服务器上。前端使用 Vue.js,界面响应式,在任何设备上都能完美显示,方便机房管理人员随时随地监控设备状态。
3. 批量操作,高效管理
前端:设备分组选择
vue
<!-- TaskList.vue -->
<el-select v-model="taskForm.device_group_ids" placeholder="请选择设备分组" multiple clearable>
<!-- 全选功能 -->
<el-option v-if="groupList.length > 0" label="全选" :value="'all'" />
<!-- 分组列表 -->
<el-option
v-for="group in groupList"
:key="group.id"
:label="group.name"
:value="group.id"
/>
</el-select>
后端:任务下发逻辑
go
// start_task_logic.go
func (l *StartTaskLogic) StartTask() (resp *types.BaseResponse, err error) {
// ... 省略部分代码 ...
// 循环处理多个设备分组
for _, deviceGroupID := range deviceGroupIDs {
var devices []model.Device
if err := db.Where("group_id = ?", deviceGroupID).Find(&devices).Error; err == nil {
}
}
// ... 省略部分代码 ...
}
特点:矩阵机房通常有数百甚至数千台设备,系统支持"全选"设备分组的功能,可一键下发获客脚本到所有设备,极大提高管理效率。
易用性设计
1. 直观的前端界面
任务创建表单
vue
<!-- TaskList.vue -->
<el-form ref="taskFormRef" :model="taskForm" :rules="rules">
<el-form-item label="任务名称" prop="name">
<el-input v-model="taskForm.name" placeholder="请输入任务名称" />
</el-form-item>
<el-form-item label="脚本选择" prop="script_id">
<el-select v-model="taskForm.script_id" placeholder="请选择脚本">
<el-option
v-for="script in scriptList"
:key="script.id"
:label="script.name"
:value="script.id"
/>
</el-select>
</el-form-item>
<el-form-item label="设备分组" prop="device_group_ids">
<el-select v-model="taskForm.device_group_ids" placeholder="请选择设备分组" multiple clearable>
<el-option v-if="groupList.length > 0" label="全选" :value="'all'" />
<el-option
v-for="group in groupList"
:key="group.id"
:label="group.name"
:value="group.id"
/>
</el-select>
</el-form-item>
<el-form-item label="执行模式" prop="execution_mode">
<el-radio-group v-model="taskForm.execution_mode">
<el-radio label="immediate">立即执行</el-radio>
<el-radio label="scheduled">定时执行</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
特点:表单设计简洁明了,支持"全选"设备分组,适合矩阵机房的规模化操作。获客脚本选择直观,执行模式一键切换,操作流程符合机房管理的高效率需求。
2. 实时反馈,状态透明
WebSocket 设备通知
go
// websocket/manager.go
func (manager *Manager) SendCancelToDevice(deviceID uint, taskID uint) error {
message := map[string]interface{}{
"type": "task_cancel",
"data": map[string]interface{}{
"task_id": taskID,
"status": "cancelled",
},
}
// 发送通知到设备
return manager.sendToDevice(deviceID, message)
}
特点:矩阵机房设备众多,实时反馈功能让管理员随时掌握每台设备的获客脚本执行状态,及时发现并处理异常,确保获客流程的连续性。
3. 智能缓存,流畅体验
Redis 缓存优化
go
// start_task_logic.go
// 记录任务下发状态
redisKey := fmt.Sprintf("task_dispatch:%d:%d", taskID, device.ID)
if err := l.svcCtx.Redis.Set(context.Background(), redisKey, "pending", 5*time.Minute).Err(); err != nil {
logx.Errorf("设置任务下发Redis记录失败: %v", err)
} else {
logx.Infof("设置任务下发Redis记录: key=%s, TTL=5分钟", redisKey)
}
特点:矩阵机房通常有大量设备,智能缓存功能确保即使管理上千台设备,界面操作依然流畅,无卡顿,适合长时间的批量操作。
实际应用场景
场景一:获客脚本批量更新
操作流程:
- 在前端上传新版本获客脚本(如社交媒体引流脚本、客户数据采集脚本等)
- 选择需要更新的设备分组(支持"全选"所有获客设备)
- 创建"更新脚本"任务,选择新版本获客脚本
- 点击"启动任务",系统自动下发到所有设备
- 实时查看每个设备的更新状态,确保所有设备使用相同版本的获客脚本
优势:矩阵机房设备众多,批量更新功能可节省 90% 以上的时间,确保所有获客设备使用统一的脚本版本,避免账号异常。
场景二:获客任务定时执行
操作流程:
- 创建"获客"任务,选择对应的获客脚本
- 设置执行时间(如每天早上 8 点开始执行)
- 选择目标设备分组
- 系统到指定时间自动执行获客任务
- 查看执行结果和获客数据
优势:获客效果与执行时间密切相关,定时执行功能可确保脚本在最佳时间运行,提高获客效率。
场景三:账号分组管理
操作流程:
- 根据账号类型(如社交媒体账号、电商平台账号等)创建设备分组
- 为不同分组下发对应的获客脚本
- 监控不同账号组的获客效果
- 根据效果调整脚本策略
优势:获客通常涉及多种账号类型,分组管理功能可实现精细化运营,提高不同类型账号的获客效果。
代码设计:简洁与高效
1. 前端:全选功能实现
vue
// TaskList.vue
const handleGroupSelectChange = (value) => {
if (value && value.includes('all')) {
// 全选所有设备分组
const allGroupIds = groupList.value.map(group => group.id)
taskForm.device_group_ids = allGroupIds
}
}
特点:支持一键全选设备分组,适合矩阵机房的规模化操作,简化批量下发获客脚本的步骤。
2. 后端:任务启动核心逻辑
go
// start_task_logic.go
func (l *StartTaskLogic) StartTask() (resp *types.BaseResponse, err error) {
// 1. 获取任务信息
var task model.Task
if err := db.First(&task, taskID).Error; err != nil {
return &types.BaseResponse{Code: 404, Message: "任务不存在"}, nil
}
// 2. 解析设备分组ID(支持多个分组)
var deviceGroupIDs []uint
if err := json.Unmarshal([]byte(task.DeviceGroupIDs), &deviceGroupIDs); err != nil {
return &types.BaseResponse{Code: 500, Message: "解析设备分组ID失败"}, nil
}
// 3. 循环处理每个设备分组
for _, deviceGroupID := range deviceGroupIDs {
}
// 6. 更新任务状态
task.Status = "running"
task.StartTime = &now
if err := tx.Save(&task).Error; err != nil {
return &types.BaseResponse{Code: 500, Message: "启动任务失败"}, nil
}
return &types.BaseResponse{Code: 200, Message: "启动任务成功"}, nil
}
特点:支持多个设备分组的循环处理,为每个脚本平台 APP 创建执行记录,确保获客任务下发的可靠性,适合矩阵机房的规模化操作。
结束语
这个基于 Go 的云控系统,专为获客场景和矩阵机房的设备 管理设计,通过简洁的设计和高效的实现,完美适配规模化获客操作的需求。它不仅功能强大,而且操作简单,让矩阵机房的管理变得前所未有的轻松。
核心优势:
- 轻量便携:适合矩阵机房的有限空间和资源
- 批量操作:一键全选,批量下发获客脚本
- 实时反馈:设备执行状态实时更新,及时发现异常
- 流畅体验:智能缓存,支持管理上千台设备
- 安全可靠:多层加密保护,保障获客账号安全
无论是小型获客团队还是大型矩阵机房,这个系统都能为你节省大量时间和精力,让获客操作变得更加高效和可控。
后期计划
-
- rust重构 单服务端5W+设备管理!