全域流量裂变指通过技术手段,将单一流量入口(如官网、App、社群)的用户,自动化引导至多个平台(如微信、企业微信、抖音、小红书),并激励其分享带来新用户,形成跨平台增长闭环。其本质是自动化触达+激励式分享。
你需要准备以下基础环境:
登录你的云服务器,执行以下命令安装基础环境:
``` 更新系统 sudo apt update && sudo apt upgrade -y 安装Node.js(用于运行裂变脚本) curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs 验证安装 node --version npm --version 安装PM2(进程管理) sudo npm install pm2 -g ```裂变系统需要记录用户关系链和任务状态,使用MySQL和Redis:
``` 安装MySQL sudo apt install mysql-server -y sudo mysql_secure_installation 按提示设置root密码,其他选项选Y 安装Redis sudo apt install redis-server -y sudo systemctl enable redis-server ```创建数据库和表结构:
``` 登录MySQL mysql -u root -p 创建数据库 CREATE DATABASE fission_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 切换到该数据库 USE fission_db; 创建用户表(记录用户基础信息) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, union_id VARCHAR(64) UNIQUE COMMENT '微信开放平台UnionID', openid_mp VARCHAR(32) COMMENT '公众号OpenID', openid_app VARCHAR(32) COMMENT '小程序OpenID', invite_code VARCHAR(8) UNIQUE COMMENT '邀请码', inviter_id INT COMMENT '邀请人ID', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_union (union_id), INDEX idx_invite (invite_code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 创建任务记录表 CREATE TABLE mission_logs ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, mission_type ENUM('share', 'group_join', 'follow') NOT NULL, platform VARCHAR(20) COMMENT '平台:wechat, douyin, redbook', completed TINYINT DEFAULT 0, completed_at TIMESTAMP NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```在微信公众平台(mp.weixin.qq.com)完成以下操作:
登录微信开放平台(open.weixin.qq.com):

登录企业微信管理后台(work.weixin.qq.com):
创建union_bind.js文件,实现多端用户身份统一:
``` const axios = require('axios'); const mysql = require('mysql2/promise'); // 数据库连接池 const pool = mysql.createPool({ host: 'localhost', user: 'root', password: '你的数据库密码', database: 'fission_db', waitForConnections: true, connectionLimit: 10, queueLimit: 0 }); // 获取微信UnionID async function getWechatUnionId(code, appType = 'mp') { const appConfig = { mp: { appid: '公众号AppID', secret: '公众号AppSecret' }, app: { appid: '小程序AppID', secret: '小程序AppSecret' } }; const { appid, secret } = appConfig[appType]; // 第一步:用code换取access_token和openid const tokenRes = await axios.get( `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=${secret}&code=${code}&grant_type=authorization_code` ); const { access_token, openid } = tokenRes.data; // 第二步:用access_token获取用户信息(含UnionID) const userInfoRes = await axios.get( `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openid}&lang=zh_CN` ); return { unionId: userInfoRes.data.unionid, openid: openid, nickname: userInfoRes.data.nickname, avatar: userInfoRes.data.headimgurl }; } // 用户注册/登录 async function registerUser(unionData, platform) { const connection = await pool.getConnection(); try { // 检查用户是否已存在 const [existing] = await connection.execute( 'SELECT id FROM users WHERE union_id = ?', [unionData.unionId] ); if (existing.length > 0) { // 更新openid await connection.execute( `UPDATE users SET ${platform}_openid = ? WHERE union_id = ?`, [unionData.openid, unionData.unionId] ); return existing[0].id; } else { // 生成唯一邀请码 const inviteCode = generateInviteCode(); // 插入新用户 const [result] = await connection.execute( `INSERT INTO users (union_id, ${platform}_openid, invite_code, nickname, avatar) VALUES (?, ?, ?, ?, ?)`, [unionData.unionId, unionData.openid, inviteCode, unionData.nickname, unionData.avatar] ); return result.insertId; } } finally { connection.release(); } } // 生成6位邀请码(字母+数字) function generateInviteCode() { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; let code = ''; for (let i = 0; i < 6; i++) { code += chars.charAt(Math.floor(Math.random() chars.length)); } return code; } ```创建mission_check.js文件,实现任务完成状态验证:
``` // 检查分享任务完成 async function checkShareMission(userId, shareUrl) { // 通过微信JS-SDK分享回调或自定义分享统计 const shareKey = `share:${userId}:${Date.now()}`; // 记录到Redis,设置24小时过期 const redis = require('redis').createClient(); await redis.setex(shareKey, 86400, 'pending'); // 检查是否有新用户通过此分享注册 const [newUsers] = await pool.execute( 'SELECT id FROM users WHERE inviter_id = ? AND created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR)', [userId] ); if (newUsers.length >= 3) { // 要求分享带来3个新用户 await completeMission(userId, 'share', 'wechat'); return true; } return false; } // 检查企微群加入任务 async function checkGroupJoin(userId, qrcodeId) { // 使用企业微信API检查用户是否加入了指定群 const corpId = '你的企业ID'; const secret = '你的应用Secret'; // 获取access_token const tokenRes = await axios.get( `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpId}&corpsecret=${secret}` ); const accessToken = tokenRes.data.access_token; // 获取群成员列表(假设qrcodeId对应群聊ID) const groupRes = await axios.post( `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=${accessToken}`, { chat_id: qrcodeId, need_name: 0 } ); // 检查用户是否在群成员中 const members = groupRes.data.group_chat.member_list; const userInGroup = members.some(member => member.userid === `user_${userId}`); if (userInGroup) { await completeMission(userId, 'group_join', 'wechat_work'); return true; } return false; } // 标记任务完成 async function completeMission(userId, missionType, platform) { const connection = await pool.getConnection(); try { await connection.execute( 'INSERT INTO mission_logs (user_id, mission_type, platform, completed, completed_at) VALUES (?, ?, ?, 1, NOW())', [userId, missionType, platform] ); // 发放奖励(示例:积分) await connection.execute( 'UPDATE users SET points = points + 100 WHERE id = ?', [userId] ); } finally { connection.release(); } } ```由于平台限制,不能直接放二维码,需要以下步骤:
生成带参数小程序码的代码:
``` const axios = require('axios'); async function generateWxacode(userId, pagePath = 'pages/index/index') { // 获取小程序access_token const tokenRes = await axios.get( `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=小程序AppID&secret=小程序AppSecret` ); const accessToken = tokenRes.data.access_token; // 生成小程序码 const codeRes = await axios.post( `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${accessToken}`, { scene: `uid=${userId}`, page: pagePath, width: 430, auto_color: false, line_color: { "r": 0, "g": 0, "b": 0 }, is_hyaline: true }, { responseType: 'arraybuffer' } ); // 保存图片到服务器 const fs = require('fs'); const filePath = `./qrcodes/${userId}_${Date.now()}.png`; fs.writeFileSync(filePath, codeRes.data); return `https://你的域名/qrcodes/${path.basename(filePath)}`; } ```创建员工活码,实现客户分流:
``` // 创建企微联系我二维码 async function createContactQrcode() { const tokenRes = await axios.get( `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=企业ID&corpsecret=应用Secret` ); const accessToken = tokenRes.data.access_token; const qrcodeRes = await axios.post( `https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_contact_way?access_token=${accessToken}`, { type: 2, // 单人联系 scene: 2, // 小程序 style: 1, remark: "渠道来源:裂变活动", skip_verify: true, state: "fission_2024", user: ["员工UserID1", "员工UserID2"], // 轮询分配 is_exclusive: false } ); return qrcodeRes.data.qr_code; } ```创建数据看板SQL查询:
``` -- 实时裂变数据 SELECT DATE(created_at) as date, COUNT(DISTINCT id) as new_users, COUNT(DISTINCT inviter_id) as active_inviters, ROUND(COUNT(DISTINCT id) 1.0 / NULLIF(COUNT(DISTINCT inviter_id), 0), 2) as k_factor, SUM(CASE WHEN inviter_id IS NOT NULL THEN 1 ELSE 0 END) as invited_users FROM users WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY) GROUP BY DATE(created_at) ORDER BY date DESC; -- 渠道效果分析 SELECT platform, mission_type, COUNT() as completed_count, COUNT(DISTINCT user_id) as unique_users, AVG(TIMESTAMPDIFF(HOUR, created_at, completed_at)) as avg_completion_hours FROM mission_logs WHERE completed = 1 AND completed_at >= DATE_SUB(NOW(), INTERVAL 3 DAY) GROUP BY platform, mission_type; ```创建monitor.js文件,监控裂变效果:
``` const nodemailer = require('nodemailer'); // 邮件通知配置 const transporter = nodemailer.createTransport({ host: 'smtp.qq.com', port: 465, secure: true, auth: { user: '你的邮箱@qq.com', pass: 'SMTP授权码' // 在邮箱设置中获取 } }); async function checkFissionHealth() { const connection = await pool.getConnection(); try { // 检查过去2小时新增用户是否低于阈值 const [result] = await connection.execute( `SELECT COUNT() as count FROM users WHERE created_at >= DATE_SUB(NOW(), INTERVAL 2 HOUR)` ); if (result[0].count < 10) { // 阈值设为10 await sendAlert('裂变速度下降', `过去2小时仅新增${result[0].count}用户`); } // 检查任务完成率 const [missionResult] = await connection.execute( `SELECT COUNT() as total, SUM(CASE WHEN completed = 1 THEN 1 ELSE 0 END) as completed FROM mission_logs WHERE created_at >= DATE_SUB(NOW(), INTERVAL 6 HOUR)` ); const completionRate = missionResult[0].completed / missionResult[0].total; if (completionRate < 0.3) { // 完成率低于30% await sendAlert('任务完成率过低', `当前完成率:${(completionRate 100).toFixed(1)}%`); } } finally { connection.release(); } } async function sendAlert(subject, message) { await transporter.sendMail({ from: '监控系统 <你的邮箱@qq.com>', to: '接收人邮箱', subject: `[裂变告警] ${subject}`, text: `${new Date().toLocaleString()}\n${message}` }); } // 每小时执行一次 setInterval(checkFissionHealth, 3600000); ```在Nginx配置
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图