前言
摄影机构拍完一组照片,往往要通过企业微信、短信或邮件逐一通知客户去看片、选片,再手动发套餐升级建议——流程割裂、回复率低、成单转化差。而绝大多数客户其实天天刷个人微信,却很少打开邮件或企业微信。借助 个人微信API,可以将选片提醒、套餐推送、付款催收等节点全部接入自动化流程,让摄影机构从拍摄完成到客户确认的整条链路无缝跑通。
一、摄影机构的通知痛点与自动化机会
摄影机构的日常客户触达,大致涵盖四个关键节点:
- 拍摄完成通知:告知客户照片已上传至选片系统,附上链接和密码。
- 选片截止提醒:距截止日还有 48 小时、24 小时时分别提醒,避免客户忘记。
- 套餐升级推送:客户已选 X 张,告知还差 Y 张即可升级至高级套餐,引导追加。
- 付款/取片通知:精修完成后推送取片链接,并在付款未完成时发起温和催收。
传统做法是员工手动复制微信消息,效率极低,且容易在高峰季节漏发。如果能把这四个节点接入自动化 API,每个摄影师工作室每月可节省 10 小时以上的人工通知时间,同时让客户体验更流畅。
核心挑战在于:个人微信账号没有官方的消息推送 API,而企业微信客服的触达率又明显低于私聊。这里 微信iPad协议 是当前技术方案中稳定性最高、封号风险最可控的实现路径——它模拟真实 iPad 设备登录微信,使 API 调用行为与正常用户操作几乎无法区分。
二、整体系统架构设计
在动手写代码之前,先把系统的数据流理清楚,避免后期返工。
2.1 角色与组件
| 角色 | 职责 |
|---|---|
| 选片平台(SaaS/自建) | 触发选片相关事件(上传完成、截止临近、套餐升级阈值) |
| 业务后端(Python/Node) | 接收平台 Webhook,拼装消息内容,调用 WechatApi |
| WechatApi 网关 | 基于 iPad 协议将消息投递到客户个人微信 |
| 客服微信账号 | 实际发送消息的微信号,需提前登录并获取 appId |
| 管理后台 | 查看发送记录、失败重试、模板管理 |
2.2 事件驱动流程
选片平台事件 → Webhook → 业务后端
↓
消息模板渲染 + 客户微信号查找
↓
POST /api/message/send → WechatApi 网关
↓
iPad 协议投递到客户微信
↓
返回 {"ret":200,"msg":"ok","data":{"msgId":"xxx"}}
↓
业务后端记录发送日志
整个链路是异步事件驱动的,高峰期(比如节假日大量婚礼后的选片季)也不会堆积阻塞。
三、WechatApi 接入配置
3.1 注册与设备绑定
前往 WechatApi 控制台 注册账号,完成实名认证后创建设备,扫码登录客服微信号。登录成功后,控制台会生成两个关键凭证:
- VideosApi-token:账号级鉴权 Token,放在请求头,不随设备变化。
- appId:设备 ID,每个登录的微信号对应一个,发消息时必须携带,用于区分多账号并发场景。
建议摄影机构至少准备两个客服微信号,一主一备,避免单点封号导致通知中断。
3.2 鉴权方式
WechatApi 采用请求头鉴权,所有接口统一格式:
bashPOST https://api.wechatapi.net/v1/message/send
Content-Type: application/json
VideosApi-token: YOUR_TOKEN_HERE
返回体格式固定为:
json{
"ret": 200,
"msg": "ok",
"data": {
"msgId": "7012345678901234567",
"toWxid": "wxid_xxxxxxxxxxxxxxxx",
"createTime": 1718000000
}
}
ret 为 200 表示投递成功,非 200 时 msg 字段会给出具体错误原因,常见错误码见文档。
四、核心功能实现:选片通知
4.1 消息模板设计
好的通知消息要做到三点:有称谓、有链接、有截止时间。纯文字消息就够了,不需要图片或小程序卡片,反而降低打开率。
推荐的选片通知文案模板:
Hi {客户姓名},
您的照片已精选上传完毕!
📸 选片系统:{选片链接}
🔑 查看密码:{密码}
⏰ 请在 {截止日期} 前完成选片
您有 {总张数} 张可选,选定 {升级阈值} 张即可享受高级精修套餐(仅需额外加 {差价} 元)。
有任何问题欢迎直接回复,期待您的选择~
这类文案字数适中(150字以内),不触发微信的"营销内容"识别,实测投递率明显高于长段落广告体文案。
4.2 Python 发送示例
下面是一个完整的通知发送函数,包含错误处理和重试逻辑:
pythonimport requests
import time
import logging
from typing import Optional
WECHAT_API_BASE = "https://api.wechatapi.net/v1"
TOKEN = "YOUR_VIDEOS_API_TOKEN"
APP_ID = "YOUR_DEVICE_APP_ID"
def send_selection_notify(
to_wxid: str,
customer_name: str,
album_url: str,
album_password: str,
deadline: str,
total_photos: int,
upgrade_threshold: int,
price_diff: int,
retry: int = 3
) -> Optional[str]:
"""
发送选片通知到客户微信
返回 msgId(成功)或 None(失败)
"""
content = (
f"Hi {customer_name},\n\n"
f"您的照片已精选上传完毕!\n\n"
f"📸 选片系统:{album_url}\n"
f"🔑 查看密码:{album_password}\n"
f"⏰ 请在 {deadline} 前完成选片\n\n"
f"您有 {total_photos} 张可选,选定 {upgrade_threshold} 张即可享受高级精修套餐"
f"(仅需额外加 {price_diff} 元)。\n\n"
"有任何问题欢迎直接回复,期待您的选择~"
)
payload = {
"appId": APP_ID,
"toWxid": to_wxid,
"content": content,
"type": 1 # 1=文本消息
}
for attempt in range(retry):
try:
resp = requests.post(
f"{WECHAT_API_BASE}/message/send",
json=payload,
headers={
"Content-Type": "application/json",
"VideosApi-token": TOKEN
},
timeout=10
)
result = resp.json()
if result.get("ret") == 200:
msg_id = result["data"]["msgId"]
logging.info(f"选片通知发送成功 wxid={to_wxid} msgId={msg_id}")
return msg_id
else:
logging.warning(f"发送失败 ret={result.get('ret')} msg={result.get('msg')}")
except requests.RequestException as e:
logging.error(f"网络错误 attempt={attempt+1} err={e}")
if attempt < retry - 1:
time.sleep(2 ** attempt) # 指数退避:1s, 2s, 4s
return None
注意几个细节:
toWxid必须是对方的wxid_xxx格式,不是微信号,建议在客户建档时就通过 API 的好友查询接口获取并存库。- 重试使用指数退避,避免瞬间高并发对 API 网关造成压力。
- 日志里不要打印完整 token,只打印
msgId和wxid方便排查。
五、套餐升级自动推送策略
5.1 推送时机的设计
套餐升级推送是提升客单价最直接的手段,但时机不对容易引起反感。建议的触发逻辑:
| 触发条件 | 推送内容 | 推送时间 |
|---|---|---|
| 客户已选张数 ≥ 套餐上限的 70% | 告知还差 N 张可升级,附套餐对比 | 客户选片后 30 分钟内 |
| 选片截止前 48 小时且未完成 | 提醒截止时间,顺带提升级引导 | 系统定时任务 |
| 客户主动回复询问价格 | 自动回复套餐详情 | 实时触发 |
第三种场景需要接入消息接收 Webhook,监听客户回复内容,配合关键词匹配实现简单的自动应答。这属于 微信二次开发 的进阶用法,适合有开发资源的摄影工作室。
5.2 定时截止提醒(Bash + cron 示例)
对于截止提醒,可以用一个简单的脚本配合系统 crontab 实现:
bash#!/usr/bin/env bash
# remind_deadline.sh
# 每天 10:00 执行,查询 48 小时内截止的订单并发送提醒
set -euo pipefail
API_BASE="https://api.wechatapi.net/v1"
TOKEN="YOUR_VIDEOS_API_TOKEN"
APP_ID="YOUR_DEVICE_APP_ID"
# 从业务数据库查询即将截止的订单(伪代码,替换为实际 DB 查询)
ORDERS=$(python3 /opt/photo_crm/query_deadline_orders.py --hours 48)
echo "$ORDERS" | while IFS=',' read -r WXID NAME DEADLINE REMAINING; do
MSG="Hi ${NAME},您的选片将于 ${DEADLINE} 截止,目前还剩 ${REMAINING} 张未选,请尽快完成哦~"
curl -s -X POST "${API_BASE}/message/send" \
-H "Content-Type: application/json" \
-H "VideosApi-token: ${TOKEN}" \
-d "{\"appId\":\"${APP_ID}\",\"toWxid\":\"${WXID}\",\"content\":\"${MSG}\",\"type\":1}" \
| python3 -c "import sys,json; r=json.load(sys.stdin); print('OK' if r.get('ret')==200 else f'FAIL: {r}')"
sleep 1 # 每条消息间隔 1 秒,避免触发频控
done
crontab 配置:
0 10 * * * /opt/photo_crm/remind_deadline.sh >> /var/log/photo_remind.log 2>&1
5.3 套餐对比文案示例
json{
"ret": 200,
"msg": "ok",
"data": {
"msgId": "7019876543210987654",
"toWxid": "wxid_abcdef123456789",
"createTime": 1718100000
}
}
套餐推送文案建议采用对比格式,直接展示差价和增值,比单纯"我们有套餐升级"有效得多:
李女士,您目前已选了 28 张,距离【精致套餐】只差 12 张~
📌 当前套餐(30张):¥2980,含基础精修
✨ 精致套餐(40张):¥3480,含高级精修+相册设计+电子相册
只需补差价 500 元,多 10 张精修+精美相册设计,性价比超高!
需要升级请回复"升级",或直接点击付款链接:{付款链接}
六、多账号并发与风控注意事项
6.1 发送频率控制
微信平台对消息发送频率有隐性限制,即使通过 iPad 协议也不例外。实践中建议遵守以下原则:
- 单账号每日主动发送上限:建议控制在 200 条以内,不同活跃度账号有差异。
- 连续发送间隔:批量发送时每条消息之间至少间隔 1-2 秒,高峰期可适当延长至 3 秒。
- 单个客户每日触达上限:同一客户每天不超过 2 条通知,避免被举报骚扰。
6.2 多账号负载均衡
摄影工作室旺季订单量大,建议注册多个微信客服号,通过 appId 切换实现负载均衡。WechatApi 支持在同一 Token 下管理多个设备,只需在业务层做简单的轮询或加权分配:
pythonimport itertools
# 预配置多设备 appId 列表
APP_IDS = [
"device_app_id_001",
"device_app_id_002",
"device_app_id_003",
]
_app_id_cycle = itertools.cycle(APP_IDS)
def get_next_app_id() -> str:
return next(_app_id_cycle)
发送时替换 payload 中的 appId 即可,其余调用逻辑完全一致。
6.3 消息内容规避雷区
内容层面需要注意:
- 避免在消息中直接出现"优惠券""红包""限时折扣"等高风险词汇,改用"补差价""专属福利"等表述。
- 第一条消息不要放付款链接,先做信息传达,有回应再跟进付款引导。
- 群发类内容绝对不要用私聊接口,群发场景应当通过 微信群管理机器人 的群消息接口处理。
七、客户数据与 SCRM 整合
单纯的消息推送只是起点。真正高效的摄影机构客户运营,需要把消息触达数据和客户档案结合起来,形成完整的客户生命周期管理。
WechatApi 提供的消息回调可以反哺 CRM:客户回复"升级"、"不需要"、"多少钱"等关键词时,回调数据写入客户标签,后续推送策略根据标签差异化触达。这本质上是一套轻量 微信SCRM 架构,即便没有购买商业 SCRM 软件,自己用 Python + 数据库也能搭一个够用的版本。
核心数据模型设计建议:
| 字段 | 类型 | 说明 |
|---|---|---|
| customer_wxid | VARCHAR | 客户微信 wxid(唯一标识) |
| order_id | VARCHAR | 拍摄订单号 |
| album_url | VARCHAR | 选片系统链接 |
| notify_count | INT | 已发送通知次数 |
| last_notify_at | DATETIME | 最后一次通知时间 |
| reply_keyword | VARCHAR | 客户最近回复关键词 |
| is_upgraded | BOOLEAN | 是否已升级套餐 |
| upgrade_remind_sent | BOOLEAN | 是否已发送升级提醒 |
通过这张表,业务逻辑可以精确控制每位客户的通知节奏,避免重复打扰,也能在客户未回应时有据可查地跟进。
小结
摄影机构的客户通知场景虽然看起来简单,但真正落地需要考虑消息模板设计、发送时机、频率控制、多账号管理、SCRM 数据整合等多个维度。WechatApi 基于 iPad 协议的 个人微信API 方案,在这个场景中提供了稳定、低门槛的接入路径——HTTP POST + JSON 的调用方式对任何有基础后端能力的团队都友好,鉴权和返回格式也足够简洁。
从一个选片通知功能切入,逐步扩展到截止提醒、套餐升级、付款催收,再到 SCRM 标签化运营,整套系统可以随业务需求按需迭代,不需要一开始就做大而全的设计。如果你的摄影工作室还在靠人工复制粘贴发微信通知,不妨从最简单的"拍摄完成通知"开始,花一两天时间接入 API,把这个环节先自动化起来。
