前言
留学中介业务的核心竞争力不在于报价低,而在于跟进速度与材料回收率。一个学生从初次咨询到递交申请,平均需要经历 40~80 次消息往来,涉及成绩单、推荐信、个人陈述等十余份材料的反复确认与催收。靠人工逐一在微信上追踪,顾问一旦同时管理 50 个以上的案例,响应质量就会断崖式下滑。本文拆解一套以 WechatApi 个人微信 API 为底层驱动的自动化跟进方案,帮助留学机构把重复劳动交给系统,让顾问真正专注在高价值的学校匹配与面试辅导上。
一、留学业务跟进的三大痛点与自动化机会
1.1 跟进链路长、节点多
一个完整的留学服务周期可以划分为以下阶段:
| 阶段 | 典型操作 | 人工耗时(次/案例) |
|---|---|---|
| 初步意向评估 | 发送服务方案 PDF、FAQ | 2~3 次 |
| 材料清单下发 | 发送材料模板、截止提醒 | 3~5 次 |
| 材料催收 | 逐一询问材料进度 | 8~15 次 |
| 文书润色确认 | 来回发送修改版本 | 6~12 次 |
| 院校申请跟进 | 催促系统状态、补件通知 | 5~10 次 |
| 签证材料准备 | 核对清单、面签叮嘱 | 3~6 次 |
| 售后维系 | 开学问候、转介绍引导 | 2~4 次 |
每个案例累计 30~55 次标准化沟通操作,其中超过 60% 是模板性质的重复内容,天然适合自动化。
1.2 微信是主战场,但缺少 API 能力
绝大多数留学学生和家长默认使用个人微信沟通,而非企业微信或邮件。个人微信原生不开放消息接口,传统 SCRM 工具要么依赖 PC 端模拟点击(稳定性差),要么只覆盖企业微信(无法触达学生个人号)。WechatApi 基于 iPad 协议实现个人微信号的完整消息收发能力,让业务系统可以像操作普通 REST API 一样控制微信账号,无需手机常驻、无需 UI 自动化脚本。
1.3 材料催收是最高频的"人力黑洞"
询问"成绩单发了吗""推荐信联系好了吗"这类消息占据顾问每日工作量的 20%~35%。这类消息内容高度模板化,却因为需要按客户维度个性化变量(姓名、材料名称、截止日期)而无法用群发代替。程序化的定时催收+状态感知回触是唯一能系统性解决这个问题的路径。
二、方案架构:从 CRM 到微信的自动化闭环
整体架构分为三层:
[业务 CRM / 数据库]
↓ 触发条件(到期、状态变更、人工标记)
[调度服务 / Celery / Cron]
↓ HTTP POST 调用
[WechatApi 网关] ←→ [个人微信账号(iPad 协议登录)]
↓ 回调 Webhook
[消息解析 & 状态更新]
↓
[CRM 更新客户阶段 & 记录跟进日志]
核心组件说明:
- CRM / 数据库:存储客户档案、材料清单、各材料的截止日期与提交状态。
- 调度服务:每天定时扫描未完成材料,生成待发任务队列。
- WechatApi 网关:接收任务,通过 iPad 协议将消息发送到目标微信号;同时接收来自微信的回复并通过 Webhook 转发给业务服务。
- 消息解析层:识别回复关键词("发了""明天""还没"),自动更新 CRM 状态,决定后续跟进策略。
三、核心 API 调用:发送跟进消息
WechatApi 采用标准 HTTP POST + JSON 的调用范式,鉴权通过请求头 VideosApi-token 传递,业务参数必须包含 appId(绑定设备 ID)。
3.1 发送单条文本催收消息
pythonimport requests
import json
from datetime import date
def send_followup(wxid: str, student_name: str, material: str, deadline: str):
"""
向指定微信号发送材料催收消息
wxid: 目标学生的微信 ID
material: 缺失的材料名称
deadline: 截止日期 YYYY-MM-DD
"""
url = "https://api.wechatapi.net/message/sendText" # 示意路径
headers = {
"Content-Type": "application/json",
"VideosApi-token": "YOUR_API_TOKEN" # 替换为控制台生成的 token
}
payload = {
"appId": "YOUR_DEVICE_APP_ID", # 控制台绑定设备的 appId
"toWxId": wxid,
"content": (
f"Hi {student_name},提醒一下,"
f"【{material}】的截止日期是 {deadline},"
f"目前我们还未收到,请尽快上传到共享文件夹或直接发我,谢谢!"
)
}
resp = requests.post(url, headers=headers, json=payload, timeout=10)
result = resp.json()
# 标准返回体:{"ret": 200, "msg": "success", "data": {"msgId": "..."}}
if result.get("ret") == 200:
print(f"[OK] 消息已发送至 {wxid},msgId={result['data']['msgId']}")
else:
print(f"[ERR] 发送失败:{result.get('msg')}")
return result
# 示例调用
send_followup(
wxid="wxid_abc123456",
student_name="李明",
material="英语成绩单(IELTS)",
deadline="2025-11-15"
)
返回体示例:
json{
"ret": 200,
"msg": "success",
"data": {
"msgId": "7395820001234567890",
"toWxId": "wxid_abc123456",
"createTime": 1731600000
}
}
3.2 批量定时催收脚本(Cron 驱动)
pythonimport requests
from datetime import date, timedelta
API_TOKEN = "YOUR_API_TOKEN"
APP_ID = "YOUR_DEVICE_APP_ID"
BASE_URL = "https://api.wechatapi.net"
def get_pending_materials(db_conn, days_before_deadline: int = 3):
"""
从数据库查询距截止日期 N 天内、尚未提交的材料清单
返回: [{"wxid":..., "name":..., "material":..., "deadline":...}, ...]
"""
cutoff = date.today() + timedelta(days=days_before_deadline)
cursor = db_conn.cursor()
cursor.execute("""
SELECT c.wx_id, c.name, m.material_name, m.deadline
FROM clients c
JOIN materials m ON c.id = m.client_id
WHERE m.status = 'pending'
AND m.deadline <= %s
ORDER BY m.deadline ASC
""", (cutoff,))
return cursor.fetchall()
def batch_send_reminders(db_conn):
pending = get_pending_materials(db_conn, days_before_deadline=3)
sent_count, fail_count = 0, 0
for row in pending:
wxid, name, material, deadline = row
payload = {
"appId": APP_ID,
"toWxId": wxid,
"content": (
f"{name} 同学,距【{material}】截止还有不到 3 天"
f"(截止:{deadline}),请抓紧提交,有任何问题随时找我!"
)
}
resp = requests.post(
f"{BASE_URL}/message/sendText",
headers={"VideosApi-token": API_TOKEN, "Content-Type": "application/json"},
json=payload,
timeout=10
)
if resp.json().get("ret") == 200:
sent_count += 1
else:
fail_count += 1
print(f"批量催收完成:成功 {sent_count} 条,失败 {fail_count} 条")
# 在 Cron 中每天 09:00 调用 batch_send_reminders(db_conn)
四、智能回复识别:让系统读懂学生的回复
发出催收消息后,学生的回复千变万化。通过 WechatApi 的 Webhook 回调,业务系统能实时接收消息,再用关键词匹配或简单 NLP 更新 CRM 状态。
4.1 配置接收 Webhook
在 WechatApi 控制台 填写回调 URL,API 会将所有收到的微信消息 POST 到该地址,格式如下:
json{
"ret": 200,
"msg": "message_received",
"data": {
"fromWxId": "wxid_abc123456",
"toWxId": "wxid_agent001",
"msgType": "text",
"content": "成绩单明天发给你",
"createTime": 1731600500
}
}
4.2 关键词状态机
pythonfrom flask import Flask, request, jsonify
app = Flask(__name__)
MATERIAL_STATUS_KEYWORDS = {
"已发": "submitted",
"发了": "submitted",
"上传了": "submitted",
"发给你了": "submitted",
"明天": "promised_tomorrow",
"后天": "promised_day_after",
"这周": "promised_this_week",
"还没": "pending",
"还差": "pending",
"还没好": "pending",
"忘了": "overdue_risk",
"不行": "blocked",
"有问题": "blocked",
}
def parse_reply_status(content: str) -> str:
for keyword, status in MATERIAL_STATUS_KEYWORDS.items():
if keyword in content:
return status
return "unknown"
@app.route("/wechat/webhook", methods=["POST"])
def wechat_webhook():
data = request.json.get("data", {})
from_wxid = data.get("fromWxId")
content = data.get("content", "")
status = parse_reply_status(content)
# 根据 from_wxid 查找对应材料,更新状态
update_material_status_in_crm(from_wxid, status)
# 如果是 blocked,触发顾问人工介入通知
if status == "blocked":
notify_advisor(from_wxid, content)
return jsonify({"ret": 200})
通过这套机制,系统可以在无人值守的情况下自动将"材料催收"的状态从 pending 推进到 submitted,顾问只需处理被标记为 blocked 或 overdue_risk 的例外情况。
五、进阶:微信群内的材料进度播报与提醒
许多留学机构会为同一批申请季的学生建立微信群(如"2026 英国申请群"),定期在群内播报进度或发送通用提醒,既高效又营造群体督促氛围。
利用 WechatApi 的微信群管理机器人能力,可以实现:
- 每周日 20:00 群内发送本周材料提交率统计(不涉及个人隐私,仅发整体数据)
- 距截止日前 7 天、3 天、1 天分别在群内发送公告提醒
- 学生在群内 @机器人 查询自己的材料状态(机器人私信回复,保护隐私)
群消息发送与单聊接口结构一致,只需将 toWxId 替换为群 ID(以 @chatroom 结尾):
bashcurl -X POST "https://api.wechatapi.net/message/sendText" \
-H "Content-Type: application/json" \
-H "VideosApi-token: YOUR_API_TOKEN" \
-d '{
"appId": "YOUR_DEVICE_APP_ID",
"toWxId": "12345678901@chatroom",
"content": "【材料截止提醒】本周五(11月15日)是第一批材料截止日,尚未提交的同学请抓紧!有疑问 @小助理 即可查询进度~"
}'
六、多账号管理与顾问工作量均衡
规模稍大的留学机构通常有多名顾问,每人对应一个专属微信号。WechatApi 支持在同一套 API 下管理多个 appId(即多台设备/多个账号),通过 appId 区分账号发送,天然支持多顾问场景。
结合 WechatApi 微信 SCRM 的思路,可以在系统层面实现:
| 功能 | 实现方式 |
|---|---|
| 客户与顾问绑定 | CRM 记录 client.advisor_wxid,发消息时用对应 appId |
| 工作量监控 | 统计每个 appId 当日已发消息数,超阈值触发告警 |
| 顾问请假自动转接 | 更新 CRM 中 advisor_wxid 字段,调度服务自动切换 appId |
| 离线保护 | 检测到账号掉线(ret 非 200),切换备用号或告警人工介入 |
这种架构下,自动化系统与人工顾问形成协作关系而非替代关系:系统处理 60%~70% 的模板性触达,顾问专注于情绪安抚、文书策略、选校决策等需要专业判断的高价值环节。
七、合规与账号安全注意事项
在将个人微信号接入 API 之前,有几个关键风险点需要提前规划:
1. 发送频率控制
微信对单账号的消息频次有敏感阈值。建议单账号每分钟发送不超过 10 条消息,日发送量控制在合理范围内,避免触发风控。WechatApi 的 iPad 协议实现在协议层面最大化模拟正常用户行为,但业务侧仍需自行做频率限流(如令牌桶算法)。
2. 消息内容多样化
高度重复的模板消息更容易被识别为异常行为。建议在模板中引入个性化变量(学生姓名、材料名称、截止日期),并准备 3~5 套措辞不同的模板轮换使用。
3. 账号隔离策略
核心顾问号不建议直接作为 API 账号;推荐使用专属的"助理号"接入 API,并在自我介绍中说明"本号为智能助理,重要事项请联系顾问老师",降低学生对自动化消息的反感。
4. 数据隐私
留学材料包含护照、成绩单等敏感信息,所有文件传输建议走加密存储,Webhook 回调服务部署在自有服务器而非第三方托管平台,确保数据不出境。
小结
留学中介的微信跟进工作天然具备高重复性与强规律性,是自动化改造的理想场景。以 WechatApi 个人微信 HTTP API 为核心,搭配 CRM 数据库、定时调度器和 Webhook 回调,可以将 60%~70% 的日常催收与状态同步工作交给系统处理,让顾问从"消息机器人"转型为真正的留学规划师。
整套方案的落地门槛并不高:前端 CRM 可以是现有的 Excel 或简单数据库,调度用 Cron 即可,API 对接参照本文代码示例能在 2~3 天内完成基础版本的开发。如需了解 WechatApi 的注册与设备绑定流程,可访问控制台或查阅开发文档获取完整接口参考。
