Compare commits
7 Commits
9f0e2a2db2
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb8d43841c | ||
|
|
6a68d5b66a | ||
|
|
aaf46207a4 | ||
|
|
d5f1b2ae77 | ||
|
|
1a339d82cd | ||
|
|
29c473890a | ||
|
|
3b3fac1cee |
3
.env
3
.env
@@ -6,8 +6,9 @@ APIKEY=sk-85880595fc714d63bfd0b025e917bd26#千问apikey
|
|||||||
# 962516e4-60eb-4a26-a5a3-44e21adcf7bc #豆包
|
# 962516e4-60eb-4a26-a5a3-44e21adcf7bc #豆包
|
||||||
|
|
||||||
# 消息回调(ngrok 调通用,由 run-ngrok.sh 自动写入)
|
# 消息回调(ngrok 调通用,由 run-ngrok.sh 自动写入)
|
||||||
CALLBACK_BASE_URL=https://dissonant-destinee-nonsensibly.ngrok-free.dev
|
# CALLBACK_BASE_URL=https://dissonant-destinee-nonsensibly.ngrok-free.dev
|
||||||
|
|
||||||
|
CALLBACK_BASE_URL=http://demo.bimwe.com
|
||||||
|
|
||||||
# 固定隧道代理(socks5h):不填登录页代理时后端自动用此处,传给 7006
|
# 固定隧道代理(socks5h):不填登录页代理时后端自动用此处,传给 7006
|
||||||
# TUNNEL_PROXY=218.78.109.253:16816
|
# TUNNEL_PROXY=218.78.109.253:16816
|
||||||
|
|||||||
@@ -17,11 +17,14 @@ WORKDIR /app
|
|||||||
|
|
||||||
ENV NODE_ENV=production \
|
ENV NODE_ENV=production \
|
||||||
PYTHONDONTWRITEBYTECODE=1 \
|
PYTHONDONTWRITEBYTECODE=1 \
|
||||||
PYTHONUNBUFFERED=1
|
PYTHONUNBUFFERED=1 \
|
||||||
|
TZ=Asia/Shanghai
|
||||||
|
|
||||||
# Alpine 使用国内镜像,加速 apk 安装(python3/py3-pip)
|
# Alpine 使用国内镜像,加速 apk 安装(python3/py3-pip)并设置时区为 Asia/Shanghai(与宿主机保持一致)
|
||||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
|
||||||
&& apk add --no-cache python3 py3-pip
|
&& apk add --no-cache python3 py3-pip tzdata \
|
||||||
|
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||||
|
&& echo "Asia/Shanghai" > /etc/timezone
|
||||||
|
|
||||||
COPY --from=build /app/node_modules ./node_modules
|
COPY --from=build /app/node_modules ./node_modules
|
||||||
COPY --from=build /app/dist ./dist
|
COPY --from=build /app/dist ./dist
|
||||||
|
|||||||
@@ -3,11 +3,16 @@ FROM docker.m.daocloud.io/library/python:3.11-slim
|
|||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||||
PYTHONUNBUFFERED=1
|
PYTHONUNBUFFERED=1 \
|
||||||
|
TZ=Asia/Shanghai
|
||||||
|
|
||||||
COPY backend/requirements.txt .
|
COPY backend/requirements.txt .
|
||||||
|
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
RUN apt-get update && apt-get install -y --no-install-recommends tzdata \
|
||||||
|
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||||
|
&& echo "Asia/Shanghai" > /etc/timezone \
|
||||||
|
&& pip install --no-cache-dir -r requirements.txt \
|
||||||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY backend ./backend
|
COPY backend ./backend
|
||||||
|
|
||||||
|
|||||||
@@ -15140,3 +15140,45 @@ httpx.ConnectError: All connection attempts failed
|
|||||||
2026-03-15 17:31:04,477 [INFO] wechat-backend - SetCallback registered for key=***9BJZ, CallbackURL=https://dissonant-destinee-nonsensibly.ngrok-free.dev/api/callback/wechat-message
|
2026-03-15 17:31:04,477 [INFO] wechat-backend - SetCallback registered for key=***9BJZ, CallbackURL=https://dissonant-destinee-nonsensibly.ngrok-free.dev/api/callback/wechat-message
|
||||||
2026-03-15 17:31:04,478 [INFO] wechat-backend - 启动时已注册回调 key=***9BJZ
|
2026-03-15 17:31:04,478 [INFO] wechat-backend - 启动时已注册回调 key=***9BJZ
|
||||||
2026-03-15 17:31:04,478 [INFO] wechat-backend - 消息接收已切换为实时回调入口,不再启动 WS GetSyncMsg
|
2026-03-15 17:31:04,478 [INFO] wechat-backend - 消息接收已切换为实时回调入口,不再启动 WS GetSyncMsg
|
||||||
|
2026-03-24 13:53:30,527 [INFO] wechat-backend - proxy config: tunnel=True (TUNNEL_PROXY=14.103.95.78:16816), kdl=False (KDL_API=(empty))
|
||||||
|
2026-03-24 13:53:30,726 [INFO] httpx - HTTP Request: POST http://113.44.162.180:7006/message/SetCallback?key=HBpEnbtj9BJZ "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 13:53:30,727 [INFO] wechat-backend - SetCallback registered for key=***9BJZ, CallbackURL=https://dissonant-destinee-nonsensibly.ngrok-free.dev/api/callback/wechat-message
|
||||||
|
2026-03-24 13:53:30,727 [INFO] wechat-backend - 启动时已注册回调 key=***9BJZ
|
||||||
|
2026-03-24 13:53:30,728 [INFO] wechat-backend - 消息接收已切换为实时回调入口,不再启动 WS GetSyncMsg
|
||||||
|
2026-03-24 13:56:12,539 [INFO] wechat-backend - proxy config: tunnel=True (TUNNEL_PROXY=14.103.95.78:16816), kdl=False (KDL_API=(empty))
|
||||||
|
2026-03-24 13:56:12,718 [INFO] httpx - HTTP Request: POST http://113.44.162.180:7006/message/SetCallback?key=HBpEnbtj9BJZ "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 13:56:12,719 [INFO] wechat-backend - SetCallback registered for key=***9BJZ, CallbackURL=http://demo.bimwe.com/api/callback/wechat-message
|
||||||
|
2026-03-24 13:56:12,719 [INFO] wechat-backend - 启动时已注册回调 key=***9BJZ
|
||||||
|
2026-03-24 13:56:12,719 [INFO] wechat-backend - 消息接收已切换为实时回调入口,不再启动 WS GetSyncMsg
|
||||||
|
2026-03-24 13:56:47,859 [INFO] wechat-backend - HTTP GET /api/ws-status from 127.0.0.1
|
||||||
|
2026-03-24 13:56:47,865 [INFO] wechat-backend - HTTP GET /api/ws-status -> 200
|
||||||
|
2026-03-24 13:57:24,091 [INFO] wechat-backend - HTTP GET /auth/scan-status from 127.0.0.1
|
||||||
|
2026-03-24 13:57:24,092 [INFO] wechat-backend - CheckLoginStatus: key=HBQ0d1NFqpio, url=http://113.44.162.180:7006/login/CheckLoginStatus
|
||||||
|
2026-03-24 13:57:24,234 [INFO] httpx - HTTP Request: GET http://113.44.162.180:7006/login/CheckLoginStatus?key=HBQ0d1NFqpio "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 13:57:24,237 [INFO] wechat-backend - Upstream CheckLoginStatus response: status=200, body={"Code":200,"Data":{"uuid":"A60ypn3NgZtZmIxMPDS7","state":1,"head_img_url":"http://wx.qlogo.cn/mmhead/ver_1/MYpdk7UU5ibX2RljVicmpcDMBxxog9qvtUvvrXlBVv4twgQibIZcnhIpjR5Qe93KB8I8y0fopiaFYE9Yd6xAfcSm2VXoTibyABYpFHrs4oXpg7eCvN6UFBg3IWjmlf4iaXzUhl/0","push_login_url_expired_time":0,"nick_name":"🧶花漾十年🧶 1098","effective_time":158,"unknow":0,"ret":0,"othersInServerLogin":false,"tarGetServerIp":"","uuId":"","msg":"请提交验证码后登录","data62":"","ticket":""},"Text":"请提交验证码后登录","Success":false,"Data62":"","Ticket":""}
|
||||||
|
2026-03-24 13:57:24,239 [INFO] wechat-backend - HTTP GET /auth/scan-status -> 200
|
||||||
|
2026-03-24 13:57:24,265 [INFO] wechat-backend - HTTP GET /auth/slider-assets/N_jYM_2V.js from 127.0.0.1
|
||||||
|
2026-03-24 13:57:24,525 [INFO] httpx - HTTP Request: GET http://113.44.162.180:7765/assets/N_jYM_2V.js "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 13:57:24,619 [INFO] wechat-backend - HTTP GET /auth/slider-assets/N_jYM_2V.js -> 200
|
||||||
|
2026-03-24 14:06:48,603 [INFO] wechat-backend - HTTP GET /api/ws-status from 127.0.0.1
|
||||||
|
2026-03-24 14:06:48,614 [INFO] wechat-backend - HTTP GET /api/ws-status -> 200
|
||||||
|
2026-03-24 14:06:52,271 [INFO] wechat-backend - HTTP GET /auth/scan-status from 127.0.0.1
|
||||||
|
2026-03-24 14:06:52,273 [INFO] wechat-backend - CheckLoginStatus: key=HBQ0d1NFqpio, url=http://113.44.162.180:7006/login/CheckLoginStatus
|
||||||
|
2026-03-24 14:06:52,402 [INFO] httpx - HTTP Request: GET http://113.44.162.180:7006/login/CheckLoginStatus?key=HBQ0d1NFqpio "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 14:06:52,404 [INFO] wechat-backend - Upstream CheckLoginStatus response: status=200, body={"Code":200,"Data":{"uuid":"A60ypn3NgZtZmIxMPDS7","state":1,"head_img_url":"http://wx.qlogo.cn/mmhead/ver_1/MYpdk7UU5ibX2RljVicmpcDMBxxog9qvtUvvrXlBVv4twgQibIZcnhIpjR5Qe93KB8I8y0fopiaFYE9Yd6xAfcSm2VXoTibyABYpFHrs4oXpg7eCvN6UFBg3IWjmlf4iaXzUhl/0","push_login_url_expired_time":0,"nick_name":"🧶花漾十年🧶 1098","effective_time":159,"unknow":0,"ret":0,"othersInServerLogin":false,"tarGetServerIp":"","uuId":"","msg":"请提交验证码后登录","data62":"","ticket":""},"Text":"登录处理中,请稍候...","Success":false,"Data62":"","Ticket":""}
|
||||||
|
2026-03-24 14:06:52,405 [INFO] wechat-backend - HTTP GET /auth/scan-status -> 200
|
||||||
|
2026-03-24 14:06:52,421 [INFO] wechat-backend - HTTP GET /auth/slider-assets/N_jYM_2V.js from 127.0.0.1
|
||||||
|
2026-03-24 14:06:52,622 [INFO] httpx - HTTP Request: GET http://113.44.162.180:7765/assets/N_jYM_2V.js "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 14:06:52,802 [INFO] wechat-backend - HTTP GET /auth/slider-assets/N_jYM_2V.js -> 200
|
||||||
|
2026-03-24 14:07:32,960 [INFO] wechat-backend - proxy config: tunnel=True (TUNNEL_PROXY=14.103.95.78:16816), kdl=False (KDL_API=(empty))
|
||||||
|
2026-03-24 14:07:33,158 [INFO] httpx - HTTP Request: POST http://113.44.162.180:7006/message/SetCallback?key=HBpEnbtj9BJZ "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 14:07:33,159 [INFO] wechat-backend - SetCallback registered for key=***9BJZ, CallbackURL=http://demo.bimwe.com/api/callback/wechat-message
|
||||||
|
2026-03-24 14:07:33,159 [INFO] wechat-backend - 启动时已注册回调 key=***9BJZ
|
||||||
|
2026-03-24 14:07:33,159 [INFO] wechat-backend - 消息接收已切换为实时回调入口,不再启动 WS GetSyncMsg
|
||||||
|
2026-03-24 14:07:41,711 [INFO] wechat-backend - HTTP GET /api/ws-status from 127.0.0.1
|
||||||
|
2026-03-24 14:07:41,716 [INFO] wechat-backend - HTTP GET /api/ws-status -> 200
|
||||||
|
2026-03-24 14:07:43,482 [INFO] wechat-backend - HTTP GET /auth/scan-status from 127.0.0.1
|
||||||
|
2026-03-24 14:07:43,487 [INFO] wechat-backend - CheckLoginStatus: key=HBQ0d1NFqpio, url=http://113.44.162.180:7006/login/CheckLoginStatus
|
||||||
|
2026-03-24 14:07:43,602 [INFO] httpx - HTTP Request: GET http://113.44.162.180:7006/login/CheckLoginStatus?key=HBQ0d1NFqpio "HTTP/1.1 200 OK"
|
||||||
|
2026-03-24 14:07:43,607 [INFO] wechat-backend - Upstream CheckLoginStatus response: status=200, body={"Code":200,"Data":{"uuid":"47ValF_qGD7osGBMYEap","state":1,"head_img_url":"http://wx.qlogo.cn/mmhead/ver_1/MYpdk7UU5ibX2RljVicmpcDMBxxog9qvtUvvrXlBVv4twgQibIZcnhIpjR5Qe93KB8I8y0fopiaFYE9Yd6xAfcSm2VXoTibyABYpFHrs4oXpg7eCvN6UFBg3IWjmlf4iaXzUhl/0","push_login_url_expired_time":0,"nick_name":"🧶花漾十年🧶 1098","effective_time":239,"unknow":0,"ret":0,"othersInServerLogin":false,"tarGetServerIp":"","uuId":"","msg":"","data62":"","ticket":""},"Text":"","Success":false,"Data62":"","Ticket":""}
|
||||||
|
2026-03-24 14:07:43,608 [INFO] wechat-backend - HTTP GET /auth/scan-status -> 200
|
||||||
|
|||||||
@@ -5618,3 +5618,17 @@
|
|||||||
::1 - - [15/Mar/2026:09:15:28 +0000] "GET /api/ws-status HTTP/1.1" 200 19 "http://localhost:3000/manage.html?key=HBpEnbtj9BJZ" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
::1 - - [15/Mar/2026:09:15:28 +0000] "GET /api/ws-status HTTP/1.1" 200 19 "http://localhost:3000/manage.html?key=HBpEnbtj9BJZ" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
[2026-03-15T09:31:04.748Z] Static frontend server listening on port 3000; access log: /Users/dannier/Desktop/living/AICLW/wechatAiclaw/backend/data/logs/node-access.log
|
[2026-03-15T09:31:04.748Z] Static frontend server listening on port 3000; access log: /Users/dannier/Desktop/living/AICLW/wechatAiclaw/backend/data/logs/node-access.log
|
||||||
[2026-03-15T09:48:21.689Z] Static frontend server listening on port 3000; access log: /Users/dannier/Desktop/living/AICLW/wechatAiclaw/backend/data/logs/node-access.log
|
[2026-03-15T09:48:21.689Z] Static frontend server listening on port 3000; access log: /Users/dannier/Desktop/living/AICLW/wechatAiclaw/backend/data/logs/node-access.log
|
||||||
|
[2026-03-24T05:53:30.775Z] Static frontend server listening on port 3000; access log: /Users/dannier/Desktop/living/AICLW/wechatAiclaw/backend/data/logs/node-access.log
|
||||||
|
[2026-03-24T05:56:13.060Z] Static frontend server listening on port 3000; access log: /Users/dannier/Desktop/living/AICLW/wechatAiclaw/backend/data/logs/node-access.log
|
||||||
|
127.0.0.1 - - [24/Mar/2026:05:56:47 +0000] "GET / HTTP/1.1" 200 48534 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:05:56:47 +0000] "GET /api/ws-status HTTP/1.1" 200 19 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:05:57:24 +0000] "GET /auth/scan-status?key=HBQ0d1NFqpio HTTP/1.1" 200 554 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:05:57:24 +0000] "GET /auth/slider-assets/N_jYM_2V.js HTTP/1.1" 200 64695 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:06:06:48 +0000] "GET / HTTP/1.1" 200 50250 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:06:06:48 +0000] "GET /api/ws-status HTTP/1.1" 200 19 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:06:06:52 +0000] "GET /auth/scan-status?key=HBQ0d1NFqpio HTTP/1.1" 200 557 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:06:06:52 +0000] "GET /auth/slider-assets/N_jYM_2V.js HTTP/1.1" 200 64695 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
[2026-03-24T06:07:33.460Z] Static frontend server listening on port 3000; access log: /Users/dannier/Desktop/living/AICLW/wechatAiclaw/backend/data/logs/node-access.log
|
||||||
|
127.0.0.1 - - [24/Mar/2026:06:07:41 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:06:07:41 +0000] "GET /api/ws-status HTTP/1.1" 200 19 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
127.0.0.1 - - [24/Mar/2026:06:07:43 +0000] "GET /auth/scan-status?key=HBQ0d1NFqpio HTTP/1.1" 200 500 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36"
|
||||||
|
|||||||
188
backend/main.py
188
backend/main.py
@@ -387,6 +387,14 @@ class WakeUpRequest(BaseModel):
|
|||||||
Proxy: Optional[str] = ""
|
Proxy: Optional[str] = ""
|
||||||
|
|
||||||
|
|
||||||
|
class VerifyCodeRequest(BaseModel):
|
||||||
|
"""手机验证码验证:默认只需要 key + code,data62/ticket 优先从缓存补全。"""
|
||||||
|
key: str
|
||||||
|
code: str
|
||||||
|
data62: Optional[str] = ""
|
||||||
|
ticket: Optional[str] = ""
|
||||||
|
|
||||||
|
|
||||||
@app.middleware("http")
|
@app.middleware("http")
|
||||||
async def log_requests(request: Request, call_next):
|
async def log_requests(request: Request, call_next):
|
||||||
logger.info("HTTP %s %s from %s", request.method, request.url.path, request.client.host if request.client else "-")
|
logger.info("HTTP %s %s from %s", request.method, request.url.path, request.client.host if request.client else "-")
|
||||||
@@ -413,7 +421,42 @@ PROXY_CHECK_URL = os.getenv("PROXY_CHECK_URL", "https://httpbin.org/ip")
|
|||||||
|
|
||||||
@app.get("/api/check-proxy")
|
@app.get("/api/check-proxy")
|
||||||
async def api_check_proxy(proxy: Optional[str] = Query(None, description="可选,指定要检测的代理 URL(不传则用环境变量/隧道/KDL)")):
|
async def api_check_proxy(proxy: Optional[str] = Query(None, description="可选,指定要检测的代理 URL(不传则用环境变量/隧道/KDL)")):
|
||||||
"""检测代理是否可用:用解析到的代理请求测试页,返回是否成功及来源。"""
|
"""检测代理是否可用:返回连通状态、出口 IP(若可解析)与错误原因。"""
|
||||||
|
def _extract_origin_ip(resp: httpx.Response) -> Optional[str]:
|
||||||
|
"""优先解析 httpbin /ip 的 origin 字段,解析失败返回 None。"""
|
||||||
|
try:
|
||||||
|
data = resp.json()
|
||||||
|
if isinstance(data, dict):
|
||||||
|
origin = (data.get("origin") or "").strip()
|
||||||
|
return origin or None
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _format_proxy_result(ok: bool, *, source: str, preview: str, status_code: Optional[int] = None,
|
||||||
|
origin_ip: Optional[str] = None, error: Optional[str] = None, note: Optional[str] = None) -> dict:
|
||||||
|
status = "available" if ok else "unavailable"
|
||||||
|
out = {
|
||||||
|
"ok": ok,
|
||||||
|
"status": status,
|
||||||
|
"source": source,
|
||||||
|
"proxy_preview": preview,
|
||||||
|
"check_url": PROXY_CHECK_URL,
|
||||||
|
}
|
||||||
|
if status_code is not None:
|
||||||
|
out["status_code"] = status_code
|
||||||
|
if origin_ip:
|
||||||
|
out["origin_ip"] = origin_ip
|
||||||
|
if note:
|
||||||
|
out["note"] = note
|
||||||
|
if error:
|
||||||
|
out["error"] = error
|
||||||
|
# 常见 socks 认证失败给出更可执行的提示
|
||||||
|
if "User was rejected by the SOCKS5 server" in error:
|
||||||
|
out["reason"] = "proxy_auth_rejected"
|
||||||
|
out["suggestion"] = "请检查代理用户名/密码、端口、以及代理服务商白名单配置"
|
||||||
|
return out
|
||||||
|
|
||||||
proxy_url = (proxy or "").strip()
|
proxy_url = (proxy or "").strip()
|
||||||
source = "query"
|
source = "query"
|
||||||
if not proxy_url:
|
if not proxy_url:
|
||||||
@@ -431,11 +474,12 @@ async def api_check_proxy(proxy: Optional[str] = Query(None, description="可选
|
|||||||
if proxy_url:
|
if proxy_url:
|
||||||
logger.info("check-proxy: using env/body, len=%s", len(proxy_url))
|
logger.info("check-proxy: using env/body, len=%s", len(proxy_url))
|
||||||
if not proxy_url:
|
if not proxy_url:
|
||||||
return {
|
return _format_proxy_result(
|
||||||
"ok": False,
|
False,
|
||||||
"source": "none",
|
source="none",
|
||||||
"error": "未配置代理。请填写代理、或设置 HTTP_PROXY/HTTPS_PROXY、或配置 TUNNEL_PROXY(固定隧道)、或 KDL 代理 API。",
|
preview="(empty)",
|
||||||
}
|
error="未配置代理。请填写代理、或设置 HTTP_PROXY/HTTPS_PROXY、或配置 TUNNEL_PROXY(固定隧道)、或 KDL 代理 API。",
|
||||||
|
)
|
||||||
# 脱敏显示(不暴露密码)
|
# 脱敏显示(不暴露密码)
|
||||||
def _preview(u: str) -> str:
|
def _preview(u: str) -> str:
|
||||||
if not u or "@" not in u:
|
if not u or "@" not in u:
|
||||||
@@ -467,66 +511,42 @@ async def api_check_proxy(proxy: Optional[str] = Query(None, description="可选
|
|||||||
async with httpx.AsyncClient(trust_env=False, timeout=15.0, transport=transport) as client:
|
async with httpx.AsyncClient(trust_env=False, timeout=15.0, transport=transport) as client:
|
||||||
resp = await client.get(PROXY_CHECK_URL)
|
resp = await client.get(PROXY_CHECK_URL)
|
||||||
if resp.status_code == 200:
|
if resp.status_code == 200:
|
||||||
|
origin_ip = _extract_origin_ip(resp)
|
||||||
logger.info("check-proxy: ok (socks), status=%s", resp.status_code)
|
logger.info("check-proxy: ok (socks), status=%s", resp.status_code)
|
||||||
return {
|
return _format_proxy_result(
|
||||||
"ok": True,
|
True, source=source, preview=preview, status_code=resp.status_code, origin_ip=origin_ip
|
||||||
"source": source,
|
)
|
||||||
"proxy_preview": preview,
|
|
||||||
"check_url": PROXY_CHECK_URL,
|
|
||||||
"status_code": resp.status_code,
|
|
||||||
}
|
|
||||||
logger.warning("check-proxy: fail (socks), status=%s", resp.status_code)
|
logger.warning("check-proxy: fail (socks), status=%s", resp.status_code)
|
||||||
return {
|
return _format_proxy_result(
|
||||||
"ok": False,
|
False, source=source, preview=preview, status_code=resp.status_code,
|
||||||
"source": source,
|
error=f"请求测试页返回 {resp.status_code}"
|
||||||
"proxy_preview": preview,
|
)
|
||||||
"error": f"请求测试页返回 {resp.status_code}",
|
|
||||||
"status_code": resp.status_code,
|
|
||||||
}
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
logger.info("check-proxy: socks5 已配置,跳过连通性检测(需 pip install httpx-socks 方可检测)")
|
logger.info("check-proxy: socks5 已配置,跳过连通性检测(需 pip install httpx-socks 方可检测)")
|
||||||
return {
|
return _format_proxy_result(
|
||||||
"ok": True,
|
True, source=source, preview=preview,
|
||||||
"source": source,
|
note="socks5 代理已配置;连通性检测需安装 pip install httpx-socks"
|
||||||
"proxy_preview": preview,
|
)
|
||||||
"note": "socks5 代理已配置;连通性检测需安装 pip install httpx-socks",
|
|
||||||
}
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("check-proxy: socks exception %s", e)
|
logger.warning("check-proxy: socks exception %s", e)
|
||||||
return {
|
return _format_proxy_result(False, source=source, preview=preview, error=str(e))
|
||||||
"ok": False,
|
|
||||||
"source": source,
|
|
||||||
"proxy_preview": preview,
|
|
||||||
"error": str(e),
|
|
||||||
}
|
|
||||||
try:
|
try:
|
||||||
async with httpx.AsyncClient(trust_env=False, timeout=15.0, proxy=proxy_url) as client:
|
async with httpx.AsyncClient(trust_env=False, timeout=15.0, proxy=proxy_url) as client:
|
||||||
resp = await client.get(PROXY_CHECK_URL)
|
resp = await client.get(PROXY_CHECK_URL)
|
||||||
if resp.status_code == 200:
|
if resp.status_code == 200:
|
||||||
|
origin_ip = _extract_origin_ip(resp)
|
||||||
logger.info("check-proxy: ok, status=%s", resp.status_code)
|
logger.info("check-proxy: ok, status=%s", resp.status_code)
|
||||||
return {
|
return _format_proxy_result(
|
||||||
"ok": True,
|
True, source=source, preview=preview, status_code=resp.status_code, origin_ip=origin_ip
|
||||||
"source": source,
|
)
|
||||||
"proxy_preview": preview,
|
|
||||||
"check_url": PROXY_CHECK_URL,
|
|
||||||
"status_code": resp.status_code,
|
|
||||||
}
|
|
||||||
logger.warning("check-proxy: fail, status=%s", resp.status_code)
|
logger.warning("check-proxy: fail, status=%s", resp.status_code)
|
||||||
return {
|
return _format_proxy_result(
|
||||||
"ok": False,
|
False, source=source, preview=preview, status_code=resp.status_code,
|
||||||
"source": source,
|
error=f"请求测试页返回 {resp.status_code}"
|
||||||
"proxy_preview": preview,
|
)
|
||||||
"error": f"请求测试页返回 {resp.status_code}",
|
|
||||||
"status_code": resp.status_code,
|
|
||||||
}
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("check-proxy: exception %s", e)
|
logger.warning("check-proxy: exception %s", e)
|
||||||
return {
|
return _format_proxy_result(False, source=source, preview=preview, error=str(e))
|
||||||
"ok": False,
|
|
||||||
"source": source,
|
|
||||||
"proxy_preview": preview,
|
|
||||||
"error": str(e),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def _proxy_from_env() -> str:
|
def _proxy_from_env() -> str:
|
||||||
@@ -627,7 +647,7 @@ def _proxy_preview_for_log(proxy: str) -> str:
|
|||||||
|
|
||||||
|
|
||||||
def _normalize_proxy_scheme_to_socks5h(proxy: str) -> str:
|
def _normalize_proxy_scheme_to_socks5h(proxy: str) -> str:
|
||||||
"""若代理是隧道地址但用了 http,改为 socks5h(7006 需 socks5)。"""
|
"""若代理是隧道地址但用了 http,改为 socks5h(7006 需 socks5h)。"""
|
||||||
if not proxy or not isinstance(proxy, str):
|
if not proxy or not isinstance(proxy, str):
|
||||||
return proxy
|
return proxy
|
||||||
p = proxy.strip()
|
p = proxy.strip()
|
||||||
@@ -942,6 +962,12 @@ async def check_scan_status(
|
|||||||
data62 = (stored.get("data62") or "").strip()
|
data62 = (stored.get("data62") or "").strip()
|
||||||
if not data62:
|
if not data62:
|
||||||
data62 = (data.get("Data62") or (data.get("Data") or {}).get("Data62") or (data.get("Data") or {}).get("data62") or "").strip()
|
data62 = (data.get("Data62") or (data.get("Data") or {}).get("Data62") or (data.get("Data") or {}).get("data62") or "").strip()
|
||||||
|
# 缓存 ticket 与 data62,供 /auth/verify-code 直接使用(前端只填验证码即可)
|
||||||
|
qrcode_store[key] = {
|
||||||
|
**stored,
|
||||||
|
"ticket": ticket,
|
||||||
|
"data62": data62,
|
||||||
|
}
|
||||||
params = {"key": SLIDER_VERIFY_KEY, "ticket": ticket}
|
params = {"key": SLIDER_VERIFY_KEY, "ticket": ticket}
|
||||||
if data62:
|
if data62:
|
||||||
params["data62"] = data62
|
params["data62"] = data62
|
||||||
@@ -955,6 +981,62 @@ async def check_scan_status(
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/auth/verify-code")
|
||||||
|
async def verify_login_code(body: VerifyCodeRequest):
|
||||||
|
"""
|
||||||
|
手机验证码验证(本地入口):
|
||||||
|
- 前端只传 key + code;
|
||||||
|
- data62/ticket 优先从缓存补全;
|
||||||
|
- 转发到 7006: POST /login/VerifyCode?key=...
|
||||||
|
"""
|
||||||
|
key = (body.key or "").strip()
|
||||||
|
code = (body.code or "").strip()
|
||||||
|
if not key:
|
||||||
|
raise HTTPException(status_code=400, detail="key is required")
|
||||||
|
if not code:
|
||||||
|
raise HTTPException(status_code=400, detail="code is required")
|
||||||
|
|
||||||
|
stored = qrcode_store.get(key) or {}
|
||||||
|
data62 = (body.data62 or "").strip() or (stored.get("data62") or "").strip()
|
||||||
|
ticket = (body.ticket or "").strip() or (stored.get("ticket") or "").strip()
|
||||||
|
if not data62 or not ticket:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=400,
|
||||||
|
detail="missing data62 or ticket; please get qrcode and check scan status first",
|
||||||
|
)
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"code": code,
|
||||||
|
"data62": data62,
|
||||||
|
"ticket": ticket,
|
||||||
|
}
|
||||||
|
url = f"{CHECK_STATUS_BASE_URL.rstrip('/')}/login/VerifyCode"
|
||||||
|
logger.info("VerifyCode: key=%s, url=%s, code_len=%s, data62_len=%s, ticket_len=%s",
|
||||||
|
key, url, len(code), len(data62), len(ticket))
|
||||||
|
try:
|
||||||
|
async with httpx.AsyncClient(trust_env=False, timeout=20.0) as client:
|
||||||
|
resp = await client.post(url, params={"key": key}, json=payload)
|
||||||
|
except Exception as exc:
|
||||||
|
logger.exception("Error calling upstream VerifyCode: %s", exc)
|
||||||
|
raise HTTPException(status_code=502, detail=f"upstream_error: {exc}") from exc
|
||||||
|
|
||||||
|
body_text = resp.text[:500]
|
||||||
|
logger.info("Upstream VerifyCode response: status=%s, body=%s", resp.status_code, body_text)
|
||||||
|
if resp.status_code >= 400:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=502,
|
||||||
|
detail={
|
||||||
|
"error": "upstream_bad_response",
|
||||||
|
"status_code": resp.status_code,
|
||||||
|
"body": body_text,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
return resp.json()
|
||||||
|
except Exception:
|
||||||
|
return {"ok": True, "text": body_text}
|
||||||
|
|
||||||
|
|
||||||
def _slider_form_html(key_val: str, data62_val: str, ticket_val: str) -> str:
|
def _slider_form_html(key_val: str, data62_val: str, ticket_val: str) -> str:
|
||||||
"""本地滑块验证页:与 7765 相同 DOM 结构(#app、keyInput、data62Input、originalTicketInput),加载 7765 的 module 脚本,不用 iframe。"""
|
"""本地滑块验证页:与 7765 相同 DOM 结构(#app、keyInput、data62Input、originalTicketInput),加载 7765 的 module 脚本,不用 iframe。"""
|
||||||
k = html.escape(key_val, quote=True)
|
k = html.escape(key_val, quote=True)
|
||||||
|
|||||||
@@ -544,10 +544,10 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label for="proxy">代理(可选,不填则由后端自动读取)</label>
|
<label for="proxy">代理(可选,仅支持带用户名密码的 socks5h)</label>
|
||||||
<input
|
<input
|
||||||
id="proxy"
|
id="proxy"
|
||||||
placeholder="socks5://ip:port 或 socks5://user:pass@ip:port"
|
placeholder="socks5h://user:pass@ip:port"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
/>
|
/>
|
||||||
<button type="button" class="secondary" id="btn-check-proxy" style="margin-top: 6px; padding: 4px 10px; font-size: 12px;">检测代理是否正常</button>
|
<button type="button" class="secondary" id="btn-check-proxy" style="margin-top: 6px; padding: 4px 10px; font-size: 12px;">检测代理是否正常</button>
|
||||||
@@ -560,6 +560,14 @@
|
|||||||
<option value="mac">Mac</option>
|
<option value="mac">Mac</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label for="verify-code">手机验证码(收到后填写)</label>
|
||||||
|
<input
|
||||||
|
id="verify-code"
|
||||||
|
placeholder="例如:123456"
|
||||||
|
autocomplete="off"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
@@ -578,6 +586,9 @@
|
|||||||
<button class="secondary" id="btn-online">
|
<button class="secondary" id="btn-online">
|
||||||
获取在线状态
|
获取在线状态
|
||||||
</button>
|
</button>
|
||||||
|
<button class="secondary" id="btn-verify-code">
|
||||||
|
验证验证码
|
||||||
|
</button>
|
||||||
<button class="danger" id="btn-logout">
|
<button class="danger" id="btn-logout">
|
||||||
退出当前账号
|
退出当前账号
|
||||||
</button>
|
</button>
|
||||||
@@ -738,7 +749,8 @@
|
|||||||
|
|
||||||
async function checkHealth() {
|
async function checkHealth() {
|
||||||
try {
|
try {
|
||||||
const res = await fetch('/health', { cache: 'no-store' });
|
// 通过 /api/ws-status 检测后端是否可用(同时避免某些部署环境未透出 /health)
|
||||||
|
const res = await fetch('/api/ws-status', { cache: 'no-store' });
|
||||||
if (!res.ok) throw new Error('status ' + res.status);
|
if (!res.ok) throw new Error('status ' + res.status);
|
||||||
const data = await res.json().catch(() => ({}));
|
const data = await res.json().catch(() => ({}));
|
||||||
$('health-dot').style.background = '#22c55e';
|
$('health-dot').style.background = '#22c55e';
|
||||||
@@ -759,6 +771,8 @@
|
|||||||
if (btnWake) btnWake.disabled = loading;
|
if (btnWake) btnWake.disabled = loading;
|
||||||
$('btn-check-scan').disabled = loading;
|
$('btn-check-scan').disabled = loading;
|
||||||
$('btn-online').disabled = loading;
|
$('btn-online').disabled = loading;
|
||||||
|
var btnVerifyCode = $('btn-verify-code');
|
||||||
|
if (btnVerifyCode) btnVerifyCode.disabled = loading;
|
||||||
$('btn-logout').disabled = loading;
|
$('btn-logout').disabled = loading;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1036,9 +1050,14 @@
|
|||||||
try {
|
try {
|
||||||
var data = await callApi(url);
|
var data = await callApi(url);
|
||||||
if (data && data.ok) {
|
if (data && data.ok) {
|
||||||
log('代理正常。来源: ' + (data.source || '') + (data.proxy_preview ? ',代理: ' + data.proxy_preview : ''), 'ok');
|
var msg = '代理可用。状态: ' + (data.status || 'available') + ',来源: ' + (data.source || '');
|
||||||
|
if (data.origin_ip) msg += ',出口IP: ' + data.origin_ip;
|
||||||
|
if (data.proxy_preview) msg += ',代理: ' + data.proxy_preview;
|
||||||
|
log(msg, 'ok');
|
||||||
} else {
|
} else {
|
||||||
log('代理不可用: ' + (data && data.error ? data.error : JSON.stringify(data)), 'error');
|
var err = data && data.error ? data.error : JSON.stringify(data);
|
||||||
|
var detail = data && data.reason ? (',原因: ' + data.reason) : '';
|
||||||
|
log('代理不可用: ' + err + detail, 'error');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log('检测代理失败: ' + (e.message || e), 'error');
|
log('检测代理失败: ' + (e.message || e), 'error');
|
||||||
@@ -1206,6 +1225,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function onVerifyCode() {
|
||||||
|
const payload = getCommonPayload();
|
||||||
|
if (!payload) return;
|
||||||
|
const code = (($('verify-code') && $('verify-code').value) || '').trim();
|
||||||
|
if (!code) {
|
||||||
|
alert('请先填写手机上的验证码');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setLoading(true);
|
||||||
|
try {
|
||||||
|
log('正在提交验证码验证...');
|
||||||
|
const data = await callApi('/auth/verify-code', {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify({
|
||||||
|
key: payload.key,
|
||||||
|
code,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
log('验证码验证结果: ' + JSON.stringify(data), 'ok');
|
||||||
|
updateLoginState('验证码已提交', 'pending', '请稍后点击「获取在线状态」确认是否已登录');
|
||||||
|
} catch (e) {
|
||||||
|
log('验证码验证失败: ' + (e.message || e), 'error');
|
||||||
|
updateLoginState('验证码验证失败', 'offline', e.message || '');
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function onLogout() {
|
async function onLogout() {
|
||||||
const payload = getCommonPayload();
|
const payload = getCommonPayload();
|
||||||
if (!payload) return;
|
if (!payload) return;
|
||||||
@@ -1261,6 +1308,10 @@
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
onGetOnlineStatus();
|
onGetOnlineStatus();
|
||||||
});
|
});
|
||||||
|
$('btn-verify-code') && $('btn-verify-code').addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
onVerifyCode();
|
||||||
|
});
|
||||||
$('btn-logout').addEventListener('click', (e) => {
|
$('btn-logout').addEventListener('click', (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
onLogout();
|
onLogout();
|
||||||
|
|||||||
221
功能执行文档-报价方案配套.md
Normal file
221
功能执行文档-报价方案配套.md
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
# 微信自动化平台功能执行文档(报价方案配套)
|
||||||
|
|
||||||
|
## 1. 文档目的与使用范围
|
||||||
|
|
||||||
|
本文件用于把 `方案.md` 中的报价与功能,转成可落地执行标准,供以下角色统一口径:
|
||||||
|
|
||||||
|
- 销售:明确可卖范围与升级边界
|
||||||
|
- 交付:按清单开通与验收
|
||||||
|
- 客服:按功能范围答复客户
|
||||||
|
- 财务:按计费触发点核算费用
|
||||||
|
|
||||||
|
执行原则:
|
||||||
|
|
||||||
|
- 以本文件“包含/不包含”清单为准
|
||||||
|
- 未列明功能默认不包含
|
||||||
|
- 白标/OEM以单独商务合同为准
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 版本与授权执行规则
|
||||||
|
|
||||||
|
## 2.1 版本定义
|
||||||
|
|
||||||
|
- 初级版:`300元/月 + 3000授权`
|
||||||
|
- 高级版:`600元/月 + 5000授权`
|
||||||
|
- 定制版:`1200元/月 + 10000授权`
|
||||||
|
- 白标/OEM:`3000~20000元/月 + 50000起授权 + 分成`
|
||||||
|
|
||||||
|
## 2.2 开通前检查
|
||||||
|
|
||||||
|
- 客户主体信息(公司/个人)是否完整
|
||||||
|
- 授权版本是否与销售合同一致
|
||||||
|
- 账号数量、终端用户规模是否在版本范围内
|
||||||
|
- 是否存在对外收费场景(如有,必须检查授权等级)
|
||||||
|
|
||||||
|
## 2.3 开通动作(通用)
|
||||||
|
|
||||||
|
1. 创建客户档案与合同号
|
||||||
|
2. 绑定授权与版本
|
||||||
|
3. 配置账号数上限、月额度上限
|
||||||
|
4. 开启对应功能白名单
|
||||||
|
5. 输出开通确认单(给客户签收)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 功能分版本执行清单
|
||||||
|
|
||||||
|
## 3.1 初级版执行清单
|
||||||
|
|
||||||
|
### A. 必开功能
|
||||||
|
|
||||||
|
- 登录基础:扫码登录、登录二维码、登录状态、在线状态、退出登录
|
||||||
|
- 消息基础:发送文本/图片/语音,HTTP轮询同步
|
||||||
|
- 好友基础:搜索联系人、同意好友、添加好友、联系人列表、联系人详情
|
||||||
|
- 群基础:创建群、邀请成员、群详情、群成员详情、群二维码、设置群名称、退出群
|
||||||
|
- 用户基础:获取资料、二维码、修改昵称/签名/备注
|
||||||
|
- 标签基础:新增/删除/修改、标签列表
|
||||||
|
- 朋友圈基础:发布朋友圈、点赞评论、朋友圈同步、朋友圈主页
|
||||||
|
- 设备基础:在线设备信息、安全设备列表
|
||||||
|
|
||||||
|
### B. 禁开功能(必须关闭)
|
||||||
|
|
||||||
|
- 群发文本、群发图片
|
||||||
|
- 历史消息同步、消息管理器
|
||||||
|
- 转发图片/视频/表情、撤回消息
|
||||||
|
- 支付全量能力
|
||||||
|
- 公众号/小程序能力
|
||||||
|
- 收藏能力、视频号能力
|
||||||
|
- 企业微信能力、授权码管理能力、微信小店能力
|
||||||
|
- WebSocket消息同步
|
||||||
|
|
||||||
|
### C. 验收标准
|
||||||
|
|
||||||
|
- 能完成登录并持续保持在线状态
|
||||||
|
- 可完成至少1次文本、图片、语音发送
|
||||||
|
- 可完成至少1次好友添加与群创建
|
||||||
|
- 可完成至少1次朋友圈发布
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3.2 高级版执行清单
|
||||||
|
|
||||||
|
### A. 必开功能(在初级版基础上新增)
|
||||||
|
|
||||||
|
- 消息增强:群发文本、群发图片、历史消息同步、消息管理器、转发图片/视频/表情、撤回消息、语音/视频/高清图片下载、视频上传、图片上传CDN
|
||||||
|
- 朋友圈增强:上传朋友圈图片、指定用户朋友圈、朋友圈详情、设置背景图、设置可见天数
|
||||||
|
- 好友/用户增强:删除好友、好友关系查询、上传手机通讯录、通讯录好友、关键词自动回复、欢迎词、邀请入群关键词、踢人关键词、管理员关键词、上传头像
|
||||||
|
- 群增强:添加成员、设置群公告、设置群内昵称、同意入群
|
||||||
|
- 支付:创建转账、确认转账、收款确认、收款二维码、创建红包、拆红包、红包详情、红包领取列表、银行卡列表
|
||||||
|
- 公众号/小程序:公众号授权、关注公众号、授权链接、历史消息、文章阅读/点赞/阅读数、小程序授权、云函数操作、二维码授权请求与确认
|
||||||
|
- 收藏:同步、列表、详情、批量删除
|
||||||
|
- 视频号:扫码登录、搜索、关注/取消、视频号中心
|
||||||
|
- WebSocket同步通道
|
||||||
|
- 其他工具:上传文件、缓存消息读取、附近的人、步数修改、指令状态更新
|
||||||
|
|
||||||
|
### B. 禁开功能(仍关闭)
|
||||||
|
|
||||||
|
- 企业微信能力
|
||||||
|
- 授权码管理能力
|
||||||
|
- 微信小店能力
|
||||||
|
|
||||||
|
### C. 验收标准
|
||||||
|
|
||||||
|
- 群发文本与图片各完成1次
|
||||||
|
- 支付链路至少完成1个闭环动作(转账或收款)
|
||||||
|
- 公众号/小程序至少完成1次授权或内容操作
|
||||||
|
- WebSocket同步稳定接收消息
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3.3 定制版执行清单
|
||||||
|
|
||||||
|
### A. 必开功能(在高级版基础上新增)
|
||||||
|
|
||||||
|
- 企业微信:同意进群、建群、删群、拉人、移除成员、管理员增删、群公告、群二维码、群转让、成员查询、群信息查询、通讯录同步、企业群同步、联系人检索与备注
|
||||||
|
- 管理(授权码):生成、禁用、删除、延期、激活查询、状态同步、代理映射查询
|
||||||
|
- 微信小店:登录确认、扫码事件上报、小店扩展设备登录确认流程
|
||||||
|
- 登录增强:验证码验证、滑块验证、代理设置下登录
|
||||||
|
- 用户增强:设置代理、修改加好友验证属性、设置拍一拍、设置微信号、设置性别
|
||||||
|
- 其他增强:企微图片下载、硬件设备绑定信息、删除安全设备
|
||||||
|
|
||||||
|
### B. 验收标准
|
||||||
|
|
||||||
|
- 企业微信至少完成1个“建群 + 拉人 + 群信息查询”闭环
|
||||||
|
- 管理能力至少完成1个授权码生命周期(生成到状态查询)
|
||||||
|
- 微信小店完成登录确认流程
|
||||||
|
- 验证码/滑块流程可通过并成功登录
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3.4 白标/OEM执行清单
|
||||||
|
|
||||||
|
### A. 前置条件
|
||||||
|
|
||||||
|
- 已签白标/OEM合同
|
||||||
|
- 已明确商业授权范围与分成口径
|
||||||
|
- 已明确对外服务边界与违约条款
|
||||||
|
|
||||||
|
### B. 交付内容
|
||||||
|
|
||||||
|
- 定制版全部功能开通
|
||||||
|
- 按合同开通商业授权能力
|
||||||
|
- 按合同配置授权码分配规则
|
||||||
|
|
||||||
|
### C. 验收标准
|
||||||
|
|
||||||
|
- 合同约定能力逐项验收通过
|
||||||
|
- 对账与分成报表口径确认
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 额度与计费执行规则
|
||||||
|
|
||||||
|
## 4.1 套餐内额度
|
||||||
|
|
||||||
|
- 初级版:消息5万/月;群发0次/月;加好友200次/月;朋友圈200次/月;活跃终端用户100
|
||||||
|
- 高级版:消息28万/月;群发1500次/月;加好友3000次/月;朋友圈1200次/月;活跃终端用户300
|
||||||
|
- 定制版:消息68万/月;群发5000次/月;加好友10000次/月;朋友圈5000次/月;活跃终端用户1000
|
||||||
|
|
||||||
|
## 4.2 超量计费
|
||||||
|
|
||||||
|
- 消息调用:0.005 ~ 0.02 元/次
|
||||||
|
- 群发任务:0.03 ~ 0.08 元/次
|
||||||
|
- 加好友动作:0.05 ~ 0.20 元/次
|
||||||
|
- 朋友圈动作:0.02 ~ 0.06 元/次
|
||||||
|
- 企业微信动作:0.05 ~ 0.30 元/次
|
||||||
|
|
||||||
|
执行要求:
|
||||||
|
|
||||||
|
- 使用量达到套餐额度80%时自动预警
|
||||||
|
- 超额后自动按单价计费,不中断基础服务
|
||||||
|
|
||||||
|
## 4.3 活跃终端用户口径
|
||||||
|
|
||||||
|
- 定义:自然月内发生至少1次成功业务调用的去重终端用户数
|
||||||
|
- 去重主键:`end_user_id`(或合同约定唯一ID)
|
||||||
|
- 不计入:失败调用、平台内部测试账号(合同另有约定除外)
|
||||||
|
- 超过100后:1元/人/月(按合同版本执行)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 升级触发与销售移交规则
|
||||||
|
|
||||||
|
## 5.1 初级 -> 高级 触发条件
|
||||||
|
|
||||||
|
- 客户提出群发需求
|
||||||
|
- 客户提出支付相关需求
|
||||||
|
- 客户提出公众号/小程序/视频号需求
|
||||||
|
- 客户月用量达到初级额度80%以上
|
||||||
|
|
||||||
|
## 5.2 高级 -> 定制 触发条件
|
||||||
|
|
||||||
|
- 客户提出企业微信能力需求
|
||||||
|
- 客户提出授权码管理与多主体分发需求
|
||||||
|
- 客户提出小店流程能力需求
|
||||||
|
|
||||||
|
## 5.3 定制 -> 白标/OEM 触发条件
|
||||||
|
|
||||||
|
- 客户存在明确对外收费业务
|
||||||
|
- 客户要求独立商业授权与条款
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 风险控制与争议处理
|
||||||
|
|
||||||
|
- 功能争议:以本文件“包含/禁开”清单为准
|
||||||
|
- 计费争议:以平台月度用量报表与合同口径为准
|
||||||
|
- 授权争议:以授权等级与合同主体绑定关系为准
|
||||||
|
- 违规转售:按合同暂停服务并追偿
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 联系方式(执行沟通)
|
||||||
|
|
||||||
|
- 公司名称:XXX科技有限公司
|
||||||
|
- 联系人:XXX(商务负责人)
|
||||||
|
- 联系电话:13XXXXXXXXX
|
||||||
|
- 微信号:XXXXX
|
||||||
|
- 邮箱:business@xxxx.com
|
||||||
|
|
||||||
|
---
|
||||||
845
后端管理平台需求说明.md
Normal file
845
后端管理平台需求说明.md
Normal file
@@ -0,0 +1,845 @@
|
|||||||
|
# 后端管理平台需求说明(仅订阅模块)
|
||||||
|
|
||||||
|
## 1. 范围
|
||||||
|
|
||||||
|
本期只做订阅模块,不考虑白标/OEM,不做合同/财务系统。
|
||||||
|
|
||||||
|
包含:
|
||||||
|
|
||||||
|
- 用户管理(后台)
|
||||||
|
- 套餐管理
|
||||||
|
- 订阅开通、升级、续费、到期失效
|
||||||
|
- Token发放与吊销
|
||||||
|
- 额度校验与月用量统计
|
||||||
|
- 线下收款或第三方支付链接确认
|
||||||
|
|
||||||
|
不包含:
|
||||||
|
|
||||||
|
- 白标/OEM
|
||||||
|
- 分成系统
|
||||||
|
- 合同审批流
|
||||||
|
- 发票与财务对账系统
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 角色
|
||||||
|
|
||||||
|
- 超级管理员:配置套餐、处理升级、强制开通/停用
|
||||||
|
- 运营:创建用户、确认支付、开通订阅、发放Token
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 数据模型(最小集)
|
||||||
|
|
||||||
|
## 3.1 用户表 `users`
|
||||||
|
|
||||||
|
- `id`
|
||||||
|
- `name`
|
||||||
|
- `mobile`
|
||||||
|
- `email`
|
||||||
|
- `company_name`
|
||||||
|
- `status`(active/disabled)
|
||||||
|
- `created_at`
|
||||||
|
- `updated_at`
|
||||||
|
|
||||||
|
## 3.2 套餐表 `plans`
|
||||||
|
|
||||||
|
- `id`
|
||||||
|
- `plan_code`(starter/pro/enterprise)
|
||||||
|
- `plan_name`
|
||||||
|
- `monthly_price`
|
||||||
|
- `auth_fee`
|
||||||
|
- `account_limit`
|
||||||
|
- `active_user_limit`
|
||||||
|
- `msg_quota`
|
||||||
|
- `mass_quota`
|
||||||
|
- `friend_quota`
|
||||||
|
- `sns_quota`
|
||||||
|
- `enabled_features`(json,具体功能点)
|
||||||
|
- `status`(active/inactive)
|
||||||
|
- `created_at`
|
||||||
|
- `updated_at`
|
||||||
|
|
||||||
|
## 3.3 订阅表 `subscriptions`
|
||||||
|
|
||||||
|
- `id`
|
||||||
|
- `user_id`
|
||||||
|
- `plan_id`
|
||||||
|
- `status`(pending/active/expired/cancelled)
|
||||||
|
- `start_time`
|
||||||
|
- `end_time`
|
||||||
|
- `renew_mode`(manual/auto)
|
||||||
|
- `payment_channel`(offline/pay_link)
|
||||||
|
- `payment_ref`(线下流水号或第三方订单号)
|
||||||
|
- `created_at`
|
||||||
|
- `updated_at`
|
||||||
|
|
||||||
|
## 3.4 Token表 `api_tokens`
|
||||||
|
|
||||||
|
- `id`
|
||||||
|
- `user_id`
|
||||||
|
- `token_name`
|
||||||
|
- `token_hash`(仅存哈希)
|
||||||
|
- `status`(active/revoked/expired)
|
||||||
|
- `expire_at`
|
||||||
|
- `last_used_at`
|
||||||
|
- `created_at`
|
||||||
|
- `updated_at`
|
||||||
|
|
||||||
|
## 3.5 月用量表 `usage_monthly`
|
||||||
|
|
||||||
|
- `id`
|
||||||
|
- `user_id`
|
||||||
|
- `plan_id`
|
||||||
|
- `stat_month`(YYYY-MM)
|
||||||
|
- `msg_count`
|
||||||
|
- `mass_count`
|
||||||
|
- `friend_count`
|
||||||
|
- `sns_count`
|
||||||
|
- `active_user_count`
|
||||||
|
- `updated_at`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 核心流程
|
||||||
|
|
||||||
|
## 4.1 开通流程
|
||||||
|
|
||||||
|
1. 运营创建用户
|
||||||
|
2. 选择套餐
|
||||||
|
3. 记录支付方式(线下/支付链接)
|
||||||
|
4. 支付确认后创建订阅(`active`)
|
||||||
|
5. 生成Token并展示一次明文
|
||||||
|
|
||||||
|
## 4.2 升级流程
|
||||||
|
|
||||||
|
1. 选择新套餐
|
||||||
|
2. 确认补差支付
|
||||||
|
3. 更新订阅的 `plan_id` 与生效时间
|
||||||
|
4. 新套餐额度立即生效或次月生效(可配置)
|
||||||
|
|
||||||
|
## 4.3 续费流程
|
||||||
|
|
||||||
|
1. 到期前提醒(D-7/D-3/D-1)
|
||||||
|
2. 支付确认后延长 `end_time`
|
||||||
|
3. 超期未续费则置为 `expired`
|
||||||
|
4. `expired` 状态禁止业务调用
|
||||||
|
|
||||||
|
## 4.4 Token鉴权流程(每次请求)
|
||||||
|
|
||||||
|
1. 校验Token是否存在、是否过期、是否吊销
|
||||||
|
2. 查询用户是否有 `active` 订阅
|
||||||
|
3. 校验功能是否在 `enabled_features` 中
|
||||||
|
4. 校验本月用量是否超套餐额度
|
||||||
|
5. 通过则放行,失败返回明确错误码
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 功能需求
|
||||||
|
|
||||||
|
## 5.1 用户管理
|
||||||
|
|
||||||
|
- 新增/编辑/禁用用户
|
||||||
|
- 查询用户当前订阅状态
|
||||||
|
- 查询用户Token列表
|
||||||
|
|
||||||
|
## 5.2 套餐管理
|
||||||
|
|
||||||
|
- 新增/编辑套餐
|
||||||
|
- 配置套餐价格、额度、功能点
|
||||||
|
- 套餐上下线
|
||||||
|
|
||||||
|
## 5.3 订阅管理
|
||||||
|
|
||||||
|
- 开通订阅
|
||||||
|
- 升级订阅
|
||||||
|
- 续费订阅
|
||||||
|
- 手动取消订阅
|
||||||
|
- 到期自动失效任务
|
||||||
|
|
||||||
|
## 5.4 Token管理
|
||||||
|
|
||||||
|
- 创建Token(只显示一次明文)
|
||||||
|
- 吊销Token
|
||||||
|
- 设置Token有效期
|
||||||
|
- 查询最后使用时间
|
||||||
|
|
||||||
|
## 5.5 支付确认(轻量)
|
||||||
|
|
||||||
|
- 线下收款:运营手动确认并录入 `payment_ref`
|
||||||
|
- 支付链接:接收第三方回调后确认支付并开通
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 错误码(建议)
|
||||||
|
|
||||||
|
- `TOKEN_INVALID`:Token不存在
|
||||||
|
- `TOKEN_EXPIRED`:Token已过期
|
||||||
|
- `TOKEN_REVOKED`:Token已吊销
|
||||||
|
- `SUBSCRIPTION_INACTIVE`:无有效订阅
|
||||||
|
- `FEATURE_NOT_ALLOWED`:功能不在套餐内
|
||||||
|
- `QUOTA_EXCEEDED`:本月额度已用尽
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 管理端API(MVP)
|
||||||
|
|
||||||
|
## 7.1 用户
|
||||||
|
|
||||||
|
- `POST /admin/users`
|
||||||
|
- `GET /admin/users`
|
||||||
|
- `GET /admin/users/{id}`
|
||||||
|
- `PUT /admin/users/{id}`
|
||||||
|
- `POST /admin/users/{id}/disable`
|
||||||
|
|
||||||
|
## 7.2 套餐
|
||||||
|
|
||||||
|
- `POST /admin/plans`
|
||||||
|
- `GET /admin/plans`
|
||||||
|
- `PUT /admin/plans/{id}`
|
||||||
|
- `POST /admin/plans/{id}/toggle`
|
||||||
|
|
||||||
|
## 7.3 订阅
|
||||||
|
|
||||||
|
- `POST /admin/subscriptions/open`
|
||||||
|
- `POST /admin/subscriptions/upgrade`
|
||||||
|
- `POST /admin/subscriptions/renew`
|
||||||
|
- `POST /admin/subscriptions/cancel`
|
||||||
|
- `GET /admin/subscriptions/{user_id}`
|
||||||
|
|
||||||
|
## 7.4 Token
|
||||||
|
|
||||||
|
- `POST /admin/tokens`
|
||||||
|
- `GET /admin/tokens?user_id=`
|
||||||
|
- `POST /admin/tokens/{id}/revoke`
|
||||||
|
|
||||||
|
## 7.5 支付确认
|
||||||
|
|
||||||
|
- `POST /admin/payments/confirm-offline`
|
||||||
|
- `POST /admin/payments/confirm-link`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 定时任务
|
||||||
|
|
||||||
|
- 订阅到期扫描:每天00:10执行,更新 `expired` 状态
|
||||||
|
- 用量月结归档:每月1日00:30执行
|
||||||
|
- 续费提醒任务:每天09:00执行
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 验收标准
|
||||||
|
|
||||||
|
- 可完成用户创建 -> 支付确认 -> 订阅开通 -> Token发放闭环
|
||||||
|
- 可完成升级与续费并正确生效
|
||||||
|
- 到期后能自动失效并阻断调用
|
||||||
|
- 功能与额度限制生效,错误码准确
|
||||||
|
- 支付链接回调或线下确认都可触发开通
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. 开发优先级
|
||||||
|
|
||||||
|
P0:
|
||||||
|
|
||||||
|
- 用户管理
|
||||||
|
- 套餐管理
|
||||||
|
- 订阅开通/升级/续费/失效
|
||||||
|
- Token管理与鉴权
|
||||||
|
|
||||||
|
P1:
|
||||||
|
|
||||||
|
- 支付回调确认
|
||||||
|
- 用量统计与额度限制
|
||||||
|
- 到期提醒
|
||||||
|
|
||||||
|
---
|
||||||
|
# 后端管理平台需求说明(轻量核心版)
|
||||||
|
|
||||||
|
## 1. 目标
|
||||||
|
|
||||||
|
搭建最小可用后台,只做四件事:
|
||||||
|
|
||||||
|
- 用户管理
|
||||||
|
- Token管理
|
||||||
|
- 套餐管理
|
||||||
|
- 开通/升级流程管理
|
||||||
|
|
||||||
|
不做(V1不开发):
|
||||||
|
|
||||||
|
- 合同管理
|
||||||
|
- 财务系统集成
|
||||||
|
- 分成系统
|
||||||
|
- 复杂风控引擎
|
||||||
|
|
||||||
|
收费方式:
|
||||||
|
|
||||||
|
- 线下打款或在线支付链接(第三方支付页面)
|
||||||
|
- 支付成功后由后台手动或回调触发开通
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 核心角色
|
||||||
|
|
||||||
|
- 超管:全局配置、套餐配置、手动开通
|
||||||
|
- 运营:用户资料维护、Token发放、套餐变更
|
||||||
|
- 客户(可选后续):仅查看自己的Token和套餐状态
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 核心数据模型
|
||||||
|
|
||||||
|
## 3.1 用户
|
||||||
|
|
||||||
|
`users`
|
||||||
|
|
||||||
|
- id
|
||||||
|
- name
|
||||||
|
- mobile
|
||||||
|
- email
|
||||||
|
- company_name
|
||||||
|
- status(active / disabled)
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
|
||||||
|
## 3.2 套餐
|
||||||
|
|
||||||
|
`plans`
|
||||||
|
|
||||||
|
- id
|
||||||
|
- plan_code(starter/pro/enterprise)
|
||||||
|
- plan_name
|
||||||
|
- monthly_price
|
||||||
|
- auth_fee
|
||||||
|
- account_limit
|
||||||
|
- active_user_limit
|
||||||
|
- msg_quota
|
||||||
|
- mass_quota
|
||||||
|
- friend_quota
|
||||||
|
- sns_quota
|
||||||
|
- enabled_features(json数组,存具体功能点)
|
||||||
|
- status(active / inactive)
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
|
||||||
|
## 3.3 用户套餐实例
|
||||||
|
|
||||||
|
`user_subscriptions`
|
||||||
|
|
||||||
|
- id
|
||||||
|
- user_id
|
||||||
|
- plan_id
|
||||||
|
- start_time
|
||||||
|
- end_time
|
||||||
|
- status(pending/active/expired/cancelled)
|
||||||
|
- payment_channel(offline / pay_link)
|
||||||
|
- payment_ref(线下流水号或第三方订单号)
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
|
||||||
|
## 3.4 Token
|
||||||
|
|
||||||
|
`api_tokens`
|
||||||
|
|
||||||
|
- id
|
||||||
|
- user_id
|
||||||
|
- token_name
|
||||||
|
- token_hash(仅存哈希)
|
||||||
|
- status(active/revoked/expired)
|
||||||
|
- plan_id(冗余,便于鉴权)
|
||||||
|
- expire_at
|
||||||
|
- last_used_at
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
|
||||||
|
## 3.5 用量(按月聚合)
|
||||||
|
|
||||||
|
`usage_monthly`
|
||||||
|
|
||||||
|
- id
|
||||||
|
- user_id
|
||||||
|
- plan_id
|
||||||
|
- stat_month(YYYY-MM)
|
||||||
|
- msg_count
|
||||||
|
- mass_count
|
||||||
|
- friend_count
|
||||||
|
- sns_count
|
||||||
|
- active_user_count
|
||||||
|
- updated_at
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 功能需求(MVP)
|
||||||
|
|
||||||
|
## 4.1 用户管理
|
||||||
|
|
||||||
|
- 新增/编辑/禁用用户
|
||||||
|
- 查看用户当前套餐、到期时间、Token数量
|
||||||
|
- 用户搜索(手机号、公司名、状态)
|
||||||
|
|
||||||
|
## 4.2 套餐管理
|
||||||
|
|
||||||
|
- 新增/编辑套餐
|
||||||
|
- 配置套餐额度和功能点
|
||||||
|
- 套餐上下线(active/inactive)
|
||||||
|
- 查看套餐被多少用户使用
|
||||||
|
|
||||||
|
## 4.3 Token管理
|
||||||
|
|
||||||
|
- 为用户创建Token(仅展示一次明文)
|
||||||
|
- Token吊销(revoke)
|
||||||
|
- Token过期时间设置
|
||||||
|
- Token使用记录查看(最后使用时间)
|
||||||
|
|
||||||
|
鉴权规则(核心):
|
||||||
|
|
||||||
|
- 请求带Token
|
||||||
|
- 校验Token状态与是否过期
|
||||||
|
- 读取用户当前有效套餐
|
||||||
|
- 判断功能是否在套餐内
|
||||||
|
- 判断当月额度是否超限
|
||||||
|
|
||||||
|
## 4.4 开通与升级流程
|
||||||
|
|
||||||
|
### 开通流程
|
||||||
|
|
||||||
|
1. 创建用户
|
||||||
|
2. 选择套餐
|
||||||
|
3. 记录支付方式(线下/支付链接)
|
||||||
|
4. 支付成功后开通订阅
|
||||||
|
5. 生成Token并交付客户
|
||||||
|
|
||||||
|
### 升级流程
|
||||||
|
|
||||||
|
1. 选择新套餐
|
||||||
|
2. 记录补差支付
|
||||||
|
3. 生效新套餐(立即或次月)
|
||||||
|
4. Token权限自动按新套餐生效
|
||||||
|
|
||||||
|
### 续费流程
|
||||||
|
|
||||||
|
1. 到期前提醒(D-7、D-3、D-1)
|
||||||
|
2. 支付成功后延长套餐周期
|
||||||
|
3. 未支付则到期失效(Token权限受限)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 支付与开通方式(轻量)
|
||||||
|
|
||||||
|
支持两种方式:
|
||||||
|
|
||||||
|
- `offline`:线下收款,后台手动录入流水号后开通
|
||||||
|
- `pay_link`:调用第三方支付链接,回调成功后自动开通(或运营手动确认)
|
||||||
|
|
||||||
|
V1要求:
|
||||||
|
|
||||||
|
- 只保存支付结果与订单号
|
||||||
|
- 不做复杂账单系统
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 最小风控与安全
|
||||||
|
|
||||||
|
- Token只存哈希,不存明文
|
||||||
|
- 超管/运营所有关键操作写审计日志
|
||||||
|
- 单用户默认Token数量上限(如5个)
|
||||||
|
- 支持一键吊销全部Token
|
||||||
|
- 超额度后返回明确错误码(不做复杂策略引擎)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 接口清单(管理端)
|
||||||
|
|
||||||
|
## 7.1 用户
|
||||||
|
|
||||||
|
- `POST /admin/users` 创建用户
|
||||||
|
- `GET /admin/users` 用户列表
|
||||||
|
- `GET /admin/users/{id}` 用户详情
|
||||||
|
- `PUT /admin/users/{id}` 更新用户
|
||||||
|
- `POST /admin/users/{id}/disable` 禁用用户
|
||||||
|
|
||||||
|
## 7.2 套餐
|
||||||
|
|
||||||
|
- `POST /admin/plans` 创建套餐
|
||||||
|
- `GET /admin/plans` 套餐列表
|
||||||
|
- `PUT /admin/plans/{id}` 更新套餐
|
||||||
|
- `POST /admin/plans/{id}/toggle` 上下线套餐
|
||||||
|
|
||||||
|
## 7.3 订阅
|
||||||
|
|
||||||
|
- `POST /admin/subscriptions/open` 开通套餐
|
||||||
|
- `POST /admin/subscriptions/upgrade` 升级套餐
|
||||||
|
- `POST /admin/subscriptions/renew` 续费套餐
|
||||||
|
- `GET /admin/subscriptions/{user_id}` 查询用户订阅
|
||||||
|
|
||||||
|
## 7.4 Token
|
||||||
|
|
||||||
|
- `POST /admin/tokens` 创建Token
|
||||||
|
- `GET /admin/tokens?user_id=` Token列表
|
||||||
|
- `POST /admin/tokens/{id}/revoke` 吊销Token
|
||||||
|
|
||||||
|
## 7.5 支付记录
|
||||||
|
|
||||||
|
- `POST /admin/payments/confirm-offline` 线下收款确认
|
||||||
|
- `POST /admin/payments/confirm-link` 支付链接回调确认
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 验收标准(上线即用)
|
||||||
|
|
||||||
|
- 可创建用户并成功开通任一套餐
|
||||||
|
- 可生成Token并用Token通过鉴权
|
||||||
|
- 套餐功能和额度能正确限制请求
|
||||||
|
- 可完成升级、续费、到期失效流程
|
||||||
|
- 支付成功后可触发开通(手动或回调)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 开发优先级与周期建议
|
||||||
|
|
||||||
|
P0(第1周):
|
||||||
|
|
||||||
|
- 用户管理
|
||||||
|
- 套餐管理
|
||||||
|
- 订阅开通
|
||||||
|
- Token创建与鉴权
|
||||||
|
|
||||||
|
P1(第2周):
|
||||||
|
|
||||||
|
- 升级/续费流程
|
||||||
|
- 线下支付确认与支付链接回调
|
||||||
|
- 月用量聚合与额度限制
|
||||||
|
|
||||||
|
P2(第3周):
|
||||||
|
|
||||||
|
- 到期提醒
|
||||||
|
- 审计日志页面
|
||||||
|
- 基础运营看板
|
||||||
|
|
||||||
|
---
|
||||||
|
# 微信自动化平台后端管理需求说明(V1)
|
||||||
|
|
||||||
|
## 1. 目标与范围
|
||||||
|
|
||||||
|
建设一套后端管理平台,支撑 `方案.md` 与 `功能执行文档-报价方案配套.md` 的落地执行,覆盖:
|
||||||
|
|
||||||
|
- 客户开通与版本管理
|
||||||
|
- 功能开关与白名单控制
|
||||||
|
- 额度管理与超量计费
|
||||||
|
- 授权码生命周期管理
|
||||||
|
- 账单、对账、分成结算
|
||||||
|
- 风险控制与违规处置
|
||||||
|
|
||||||
|
不在V1范围:
|
||||||
|
|
||||||
|
- 客户前台门户(仅后台运营端)
|
||||||
|
- 财务开票系统深度集成(先导出报表)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 角色与权限
|
||||||
|
|
||||||
|
## 2.1 角色
|
||||||
|
|
||||||
|
- 超级管理员:全局配置、价格策略、风控策略
|
||||||
|
- 商务运营:客户开通、版本变更、合同与授权
|
||||||
|
- 交付运营:功能开关、额度配置、验收记录
|
||||||
|
- 财务:账单确认、对账、分成结算
|
||||||
|
- 风控:告警处理、停用/解封、违规记录
|
||||||
|
|
||||||
|
## 2.2 权限原则
|
||||||
|
|
||||||
|
- 最小权限原则
|
||||||
|
- 核心动作(停服、改价、授权升级)需二次确认与审计日志
|
||||||
|
- 所有配置变更可追溯(操作者、时间、变更前后)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 核心业务对象(数据模型)
|
||||||
|
|
||||||
|
## 3.1 客户与合同
|
||||||
|
|
||||||
|
- `customer`:客户主体信息(公司/个人、联系人、状态)
|
||||||
|
- `contract`:合同编号、版本、期限、签约类型、分成比例、补充条款
|
||||||
|
- `service_instance`:客户服务实例(当前版本、生效时间、到期时间)
|
||||||
|
|
||||||
|
## 3.2 版本与功能
|
||||||
|
|
||||||
|
- `plan`:初级/高级/定制/白标
|
||||||
|
- `feature_catalog`:功能目录(按具体功能点,不按抽象模块)
|
||||||
|
- `plan_feature_map`:版本与功能映射(是否默认开通)
|
||||||
|
- `feature_switch`:客户级功能开关(开/关、原因、操作者)
|
||||||
|
|
||||||
|
## 3.3 额度与计费
|
||||||
|
|
||||||
|
- `quota_policy`:版本默认额度(消息、群发、加好友、朋友圈、企业微信)
|
||||||
|
- `customer_quota`:客户当前额度(可覆盖默认值)
|
||||||
|
- `usage_daily` / `usage_monthly`:按客户、按计费项聚合用量
|
||||||
|
- `price_policy`:单价策略(默认价、阶梯价、生效时间)
|
||||||
|
- `billing_statement`:月账单(固定费、超量费、人头费、分成)
|
||||||
|
|
||||||
|
## 3.4 授权与风控
|
||||||
|
|
||||||
|
- `license_key`:授权码及状态(生成、激活、禁用、延期、删除)
|
||||||
|
- `risk_rule`:风控规则(阈值、频率、异常模式)
|
||||||
|
- `risk_event`:风险事件记录(级别、动作、处理结果)
|
||||||
|
- `penalty_action`:处罚动作(限流、降级、停服、解封)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 功能模块需求
|
||||||
|
|
||||||
|
## 4.1 客户开通中心
|
||||||
|
|
||||||
|
功能点:
|
||||||
|
|
||||||
|
- 创建客户档案
|
||||||
|
- 绑定合同与版本
|
||||||
|
- 设置账号上限、活跃终端用户上限
|
||||||
|
- 初始化功能开关与额度
|
||||||
|
- 生成开通确认单
|
||||||
|
|
||||||
|
校验规则:
|
||||||
|
|
||||||
|
- 无合同不得开通付费版本
|
||||||
|
- 开通版本必须匹配授权级别
|
||||||
|
- 对外收费客户必须配置分成策略
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.2 版本与功能管理
|
||||||
|
|
||||||
|
功能点:
|
||||||
|
|
||||||
|
- 维护版本基础配置(初级/高级/定制/白标)
|
||||||
|
- 维护“具体功能点”目录与分组
|
||||||
|
- 一键应用版本默认功能到客户
|
||||||
|
- 客户级功能差异化调整(例外开关)
|
||||||
|
|
||||||
|
关键要求:
|
||||||
|
|
||||||
|
- 必须支持“包含/禁开”双清单导出(用于交付验收)
|
||||||
|
- 功能变更需记录变更单号与审批人
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.3 额度与限流管理
|
||||||
|
|
||||||
|
功能点:
|
||||||
|
|
||||||
|
- 配置套餐默认额度
|
||||||
|
- 按客户调整额度
|
||||||
|
- 配置阈值告警(80%、100%、120%)
|
||||||
|
- 配置超额后策略(仅计费 / 限流 / 禁止高风险动作)
|
||||||
|
|
||||||
|
关键要求:
|
||||||
|
|
||||||
|
- 日级、月级双维度统计
|
||||||
|
- 支持手动补偿额度(需审计)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.4 计费与账单中心
|
||||||
|
|
||||||
|
功能点:
|
||||||
|
|
||||||
|
- 固定费用:月费 + 授权费
|
||||||
|
- 用量费用:按计费项单价计算
|
||||||
|
- 用户规模费用:超过100后按1元/人/月(可配置)
|
||||||
|
- 分成费用:按合同分成比例计算
|
||||||
|
- 生成月账单、账单确认、导出对账单
|
||||||
|
|
||||||
|
计算规则(V1):
|
||||||
|
|
||||||
|
- 月账单金额 = 固定费 + 超量费 + 人头费 + 分成费
|
||||||
|
- 人头费基数 = max(活跃终端用户-100, 0)
|
||||||
|
- 活跃终端用户按唯一ID月去重
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.5 授权码管理
|
||||||
|
|
||||||
|
功能点:
|
||||||
|
|
||||||
|
- 生成授权码(不同有效期)
|
||||||
|
- 激活状态查询
|
||||||
|
- 禁用、删除、延期
|
||||||
|
- 授权状态同步任务
|
||||||
|
|
||||||
|
关键要求:
|
||||||
|
|
||||||
|
- 授权码与客户主体绑定
|
||||||
|
- 禁用后相关能力按策略自动降级/停用
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.6 分成与结算管理
|
||||||
|
|
||||||
|
功能点:
|
||||||
|
|
||||||
|
- 设置客户分成比例(10%/15%/20%或合同自定义)
|
||||||
|
- 录入/同步客户营收数据
|
||||||
|
- 自动计算应结分成
|
||||||
|
- 月度结算单导出
|
||||||
|
|
||||||
|
关键要求:
|
||||||
|
|
||||||
|
- 分成口径可配置(净营收/归因营收)
|
||||||
|
- 允许人工复核后确认入账
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.7 风控与违规处置
|
||||||
|
|
||||||
|
功能点:
|
||||||
|
|
||||||
|
- 风控规则配置(频率阈值、异常行为模式)
|
||||||
|
- 告警中心(低/中/高风险)
|
||||||
|
- 自动处罚策略(限流、冻结高风险功能、停服)
|
||||||
|
- 违规记录与解封流程
|
||||||
|
|
||||||
|
关键要求:
|
||||||
|
|
||||||
|
- 处罚动作必须可回溯
|
||||||
|
- 高风险停服需双人审批(可配置)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.8 审计与操作日志
|
||||||
|
|
||||||
|
必须记录:
|
||||||
|
|
||||||
|
- 谁在何时改了什么
|
||||||
|
- 改前值/改后值
|
||||||
|
- 操作来源(后台/任务/接口)
|
||||||
|
- 关联客户、合同、账单编号
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 核心流程(状态机)
|
||||||
|
|
||||||
|
## 5.1 客户生命周期
|
||||||
|
|
||||||
|
- `待签约 -> 已签约 -> 待开通 -> 已开通 -> 运行中 -> 欠费限制 -> 暂停服务 -> 终止`
|
||||||
|
|
||||||
|
## 5.2 版本变更流程
|
||||||
|
|
||||||
|
- 提交升级/降级申请 -> 商务审批 -> 配置预览 -> 生效执行 -> 通知客户 -> 留档
|
||||||
|
|
||||||
|
## 5.3 月结流程
|
||||||
|
|
||||||
|
- 月末汇总用量 -> 生成预账单 -> 财务复核 -> 账单确认 -> 推送客户 -> 回款核销
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 配置字典(建议)
|
||||||
|
|
||||||
|
## 6.1 计费项编码
|
||||||
|
|
||||||
|
- `MSG_CALL`:消息调用
|
||||||
|
- `MASS_TASK`:群发任务
|
||||||
|
- `ADD_FRIEND`:加好友动作
|
||||||
|
- `SNS_ACTION`:朋友圈动作
|
||||||
|
- `QY_ACTION`:企业微信动作
|
||||||
|
- `ACTIVE_USER`:活跃终端用户
|
||||||
|
|
||||||
|
## 6.2 风险等级
|
||||||
|
|
||||||
|
- `LOW`:告警
|
||||||
|
- `MEDIUM`:限流或冻结部分能力
|
||||||
|
- `HIGH`:停服并人工复核
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 报表与看板需求
|
||||||
|
|
||||||
|
## 7.1 运营看板
|
||||||
|
|
||||||
|
- 在服客户数(按版本)
|
||||||
|
- 当月升级/降级数量
|
||||||
|
- 功能开关变更次数
|
||||||
|
- 告警事件数量
|
||||||
|
|
||||||
|
## 7.2 财务看板
|
||||||
|
|
||||||
|
- MRR、ARR
|
||||||
|
- 超量收入占比
|
||||||
|
- 人头费收入占比
|
||||||
|
- 分成收入占比
|
||||||
|
- 回款率与逾期率
|
||||||
|
|
||||||
|
## 7.3 客户视图
|
||||||
|
|
||||||
|
- 客户当前版本与到期时间
|
||||||
|
- 功能已开通清单
|
||||||
|
- 本月额度、已用量、超量预估
|
||||||
|
- 本月预估账单
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 非功能性要求
|
||||||
|
|
||||||
|
- 可用性:后台可用性 >= 99.9%
|
||||||
|
- 审计性:关键操作100%留痕
|
||||||
|
- 安全性:权限隔离、敏感操作二次确认
|
||||||
|
- 性能:日汇总任务在60分钟内完成
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. MVP开发优先级
|
||||||
|
|
||||||
|
P0(必须):
|
||||||
|
|
||||||
|
- 客户开通中心
|
||||||
|
- 版本/功能开关管理
|
||||||
|
- 额度管理
|
||||||
|
- 用量统计
|
||||||
|
- 账单生成
|
||||||
|
- 授权码管理
|
||||||
|
- 审计日志
|
||||||
|
|
||||||
|
P1(次优先):
|
||||||
|
|
||||||
|
- 分成结算
|
||||||
|
- 风控自动处置
|
||||||
|
- 看板与报表
|
||||||
|
|
||||||
|
P2(后续):
|
||||||
|
|
||||||
|
- 工作流审批引擎
|
||||||
|
- 财务系统对接
|
||||||
|
- 客户自助门户
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. 验收标准
|
||||||
|
|
||||||
|
## 10.1 功能验收
|
||||||
|
|
||||||
|
- 能按客户版本一键开通并生效
|
||||||
|
- 能对单客户进行功能级开关控制
|
||||||
|
- 能正确统计月用量并生成账单
|
||||||
|
- 能处理授权码生成、禁用、延期、查询
|
||||||
|
|
||||||
|
## 10.2 计费验收
|
||||||
|
|
||||||
|
- 对同一客户可复算账单结果(误差为0)
|
||||||
|
- 活跃终端用户去重规则正确
|
||||||
|
- 超量计费与阶梯价计算正确
|
||||||
|
|
||||||
|
## 10.3 风控验收
|
||||||
|
|
||||||
|
- 触发阈值后自动生成告警
|
||||||
|
- 可执行限流/停服动作并记录日志
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. 建议交付物
|
||||||
|
|
||||||
|
- 后台原型图(客户、版本、计费、风控四大页面)
|
||||||
|
- 数据库DDL初稿
|
||||||
|
- 后台API清单(管理端)
|
||||||
|
- 月账单计算任务说明
|
||||||
|
- 上线回滚预案
|
||||||
|
|
||||||
|
---
|
||||||
370
商业化与营销销售方案.md
Normal file
370
商业化与营销销售方案.md
Normal file
@@ -0,0 +1,370 @@
|
|||||||
|
# 基于微信生态自动化API平台:商业化 + 营销 + 销售执行方案
|
||||||
|
|
||||||
|
## 1. 产品与商业模式
|
||||||
|
|
||||||
|
### 1.1 产品本质定位
|
||||||
|
|
||||||
|
本产品不是“接口集合”,而是三位一体的商业系统:
|
||||||
|
|
||||||
|
- 微信自动化操作系统:降低人工运营成本,标准化私域触达动作
|
||||||
|
- 私域运营引擎:把粉丝、好友、社群、内容、支付打通成可复用流程
|
||||||
|
- 商业变现工具:让客户从“能用”走向“能赚钱”,并让平台可持续抽成
|
||||||
|
|
||||||
|
一句话定位:
|
||||||
|
|
||||||
|
> 为私域增长团队提供“可规模化、可审计、可商业化”的微信自动化基础设施。
|
||||||
|
|
||||||
|
### 1.2 核心卖点(客户愿意付费的原因)
|
||||||
|
|
||||||
|
- 提效:把高频重复动作自动化,降低人工与培训成本
|
||||||
|
- 增长:提升触达频次、转化链路完整度、复购效率
|
||||||
|
- 可控:多账号、多人员、多场景统一管理,风险动作可追踪
|
||||||
|
- 变现:支持客户自建服务能力(代运营、SaaS转售、行业方案)
|
||||||
|
- 可扩展:支持企业微信/公众号/小程序协同,满足中大型客户升级需求
|
||||||
|
|
||||||
|
### 1.3 商业模式组合
|
||||||
|
|
||||||
|
采用“4层商业模式并行”,避免单一订阅天花板:
|
||||||
|
|
||||||
|
- SaaS订阅:标准套餐快速成交(现金流基础)
|
||||||
|
- API按量:高使用客户自动增收(随业务规模增长)
|
||||||
|
- 平台化授权:给工作室/集成商/渠道做二次服务(规模放大器)
|
||||||
|
- 白标/OEM:为高价值客户提供独立品牌能力(高毛利项目)
|
||||||
|
|
||||||
|
### 1.4 收入来源设计(多维)
|
||||||
|
|
||||||
|
- 月费订阅收入:300/600/1200分层
|
||||||
|
- 一次性授权费:3000/5000/10000/50000
|
||||||
|
- 按量调用收入:消息、加好友、群发、朋友圈等超额计费
|
||||||
|
- 用户规模收入:超过100终端用户后按人头收费
|
||||||
|
- 分成收入:客户使用平台赚钱时抽成10%~20%
|
||||||
|
- 服务收入:实施费、培训费、策略代运营、私有化部署服务包
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 客户分层
|
||||||
|
|
||||||
|
### 2.1 个人用户(个体经营者/微商/私域操盘手)
|
||||||
|
|
||||||
|
- 典型需求:自动回复、群发、朋友圈维护、基础拉新
|
||||||
|
- 使用方式:单账号或少量账号,偏模板化流程
|
||||||
|
- 付费能力:低到中(300~600/月可接受)
|
||||||
|
- 风险:中等,可能共享账号给他人,存在灰度转售行为
|
||||||
|
- 策略:标准化交付 + 严格额度限制 + 低门槛升级通道
|
||||||
|
|
||||||
|
### 2.2 工作室(代运营团队/本地服务商)
|
||||||
|
|
||||||
|
- 典型需求:多客户多账号管理、批量任务、报表、团队协作
|
||||||
|
- 使用方式:同一团队操作多个客户项目,追求效率工具化
|
||||||
|
- 付费能力:中(600~1200/月 + 按量)
|
||||||
|
- 风险:高,天然有转售动机(给下游客户打包售卖)
|
||||||
|
- 策略:将其纳入授权分销体系,允许“合规转售”,禁止私下倒卖
|
||||||
|
|
||||||
|
### 2.3 企业客户(品牌方/连锁/教育/本地生活)
|
||||||
|
|
||||||
|
- 典型需求:私域增长标准化、客服与销售协同、合规管理
|
||||||
|
- 使用方式:跨部门协作,关注稳定性、安全、服务SLA
|
||||||
|
- 付费能力:中高(1200/月起 + 授权费 + 服务费)
|
||||||
|
- 风险:中,通常不转售,但会压价、要定制、要长期保障
|
||||||
|
- 策略:以ROI和管理价值卖单,签年度合同与服务包
|
||||||
|
|
||||||
|
### 2.4 平台型客户(SaaS平台/渠道平台/生态型服务商,最重要)
|
||||||
|
|
||||||
|
- 典型需求:将能力嵌入其产品并对外收费,形成自己的商业闭环
|
||||||
|
- 使用方式:API深度接入、白标、统一计费、子客户体系
|
||||||
|
- 付费能力:高(授权费 + 月费 + 分成 + 定制)
|
||||||
|
- 风险:极高,若缺乏控制会演变为“技术搬运转售”
|
||||||
|
- 策略:必须走SDK+end_user_id+商业授权协议+抽成四件套
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 产品套餐设计
|
||||||
|
|
||||||
|
> 设计原则:按“可赚钱能力”分层,而不是按“功能多少”分层。
|
||||||
|
|
||||||
|
### 3.1 初级版(300元/月)
|
||||||
|
|
||||||
|
- 适用客户:个人用户、试水型小团队
|
||||||
|
- 核心能力:
|
||||||
|
- 基础自动化任务(消息处理、基础触达、简单运营动作)
|
||||||
|
- 单人使用或极小团队协作
|
||||||
|
- 基础数据看板
|
||||||
|
- 限制:
|
||||||
|
- 账号数量限制(如1~2)
|
||||||
|
- 每月调用总量限制(低额度)
|
||||||
|
- 不开放高级自动化与开放平台能力
|
||||||
|
- 禁止转售,默认仅自用
|
||||||
|
- 目标作用:低门槛上车,建立使用习惯和真实数据
|
||||||
|
|
||||||
|
### 3.2 高级版(600元/月)
|
||||||
|
|
||||||
|
- 适用客户:工作室、小B服务商、增长团队
|
||||||
|
- 核心能力:
|
||||||
|
- 多账号协同
|
||||||
|
- 批量任务编排与策略模板
|
||||||
|
- 更细粒度数据统计与任务权限
|
||||||
|
- 基础API调用能力
|
||||||
|
- 限制:
|
||||||
|
- 额度上限中等
|
||||||
|
- 子账户数量限制
|
||||||
|
- 无白标、无深度分销
|
||||||
|
- 商业转售需要额外授权
|
||||||
|
- 目标作用:让客户开始“用系统赚钱”,推动后续授权与分成
|
||||||
|
|
||||||
|
### 3.3 定制版(1200元/月)
|
||||||
|
|
||||||
|
- 适用客户:企业客户、区域服务商
|
||||||
|
- 核心能力:
|
||||||
|
- 高并发任务与优先级保障
|
||||||
|
- 高级权限、审计、组织管理
|
||||||
|
- 企业级集成能力(与其业务系统对接)
|
||||||
|
- 专属成功经理/服务响应机制
|
||||||
|
- 限制:
|
||||||
|
- 默认不含白标,不含无限调用
|
||||||
|
- 重大定制按项目评估
|
||||||
|
- 目标作用:从“工具采购”升级为“业务增长基础设施”
|
||||||
|
|
||||||
|
### 3.4 白标/OEM(高价 + 分成)
|
||||||
|
|
||||||
|
- 适用客户:平台型客户、头部渠道商、生态服务商
|
||||||
|
- 核心能力:
|
||||||
|
- 品牌与界面定制
|
||||||
|
- SDK接入及统一计费能力
|
||||||
|
- 子客户与多租户管理
|
||||||
|
- 商业授权与渠道分账支持
|
||||||
|
- 价格建议:
|
||||||
|
- 起步授权 50000(可谈判至100000+)
|
||||||
|
- 月技术服务费 3000~20000(按规模)
|
||||||
|
- 收入分成 10%~20%
|
||||||
|
- 关键限制:
|
||||||
|
- 必须绑定 end_user_id
|
||||||
|
- 必须走平台授权协议
|
||||||
|
- 禁止脱离SDK直接调用
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 收费模型
|
||||||
|
|
||||||
|
### 4.1 一次性授权费(按商业能力分层)
|
||||||
|
|
||||||
|
- 3000:基础商业使用授权(仅自营,禁止分销)
|
||||||
|
- 5000:团队级授权(多操作者 + 有限客户服务场景)
|
||||||
|
- 10000:企业商业授权(可对外服务,需报备业务形态)
|
||||||
|
- 50000:平台/OEM授权(允许构建二级商业体系,含分成条款)
|
||||||
|
|
||||||
|
落地规则:
|
||||||
|
|
||||||
|
- 授权费不抵月费,防止“买断心态”
|
||||||
|
- 授权与账号主体绑定,不可随意转移
|
||||||
|
- 续约年度需复核业务规模与合规情况
|
||||||
|
|
||||||
|
### 4.2 月费模型
|
||||||
|
|
||||||
|
- 标准订阅:300 / 600 / 1200
|
||||||
|
- 年付建议:10个月价格买12个月(锁定现金流)
|
||||||
|
- 企业合同:按年签,支持“月费 + 服务包”组合
|
||||||
|
|
||||||
|
### 4.3 按量收费(必须项,建议默认开启)
|
||||||
|
|
||||||
|
建议按“基础额度 + 超额阶梯”:
|
||||||
|
|
||||||
|
- 群发任务:超额后 0.03~0.08 元/次
|
||||||
|
- 加好友动作:超额后 0.05~0.2 元/次(按风控等级)
|
||||||
|
- 朋友圈营销动作:超额后 0.02~0.06 元/次
|
||||||
|
- 消息调用:超额后 0.005~0.02 元/次
|
||||||
|
|
||||||
|
执行细则:
|
||||||
|
|
||||||
|
- 每套餐附送基础额度,降低首月试错成本
|
||||||
|
- 额度使用达80%时自动预警并触发升级建议
|
||||||
|
- 对高风险动作设置单独计价与限速阈值
|
||||||
|
|
||||||
|
### 4.4 用户规模收费
|
||||||
|
|
||||||
|
- 每客户包含 100 个终端用户名额
|
||||||
|
- 超过100后:1元/人/月
|
||||||
|
- 平台客户可改为阶梯:
|
||||||
|
- 101~1000:1元/人/月
|
||||||
|
- 1001~10000:0.8元/人/月
|
||||||
|
- 10000以上:0.5元/人/月
|
||||||
|
|
||||||
|
### 4.5 分成模型(必须项)
|
||||||
|
|
||||||
|
触发条件:客户直接基于平台对外收费或产生可归因收入。
|
||||||
|
|
||||||
|
- 标准分成:10%(年框协议、量大)
|
||||||
|
- 常规分成:15%(默认)
|
||||||
|
- 高支持分成:20%(提供销售线索、代运营赋能、联合交付)
|
||||||
|
|
||||||
|
分成口径建议:
|
||||||
|
|
||||||
|
- 按客户“净营收”或“平台归因营收”结算,避免争议
|
||||||
|
- 每月对账,季度复盘,低于保底可补最低服务费
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 营销策略
|
||||||
|
|
||||||
|
### 5.1 获客方式(增长路径)
|
||||||
|
|
||||||
|
- 内容营销:
|
||||||
|
- 短视频:场景化展示“1人=3人效率”的前后对比
|
||||||
|
- SEO:围绕“私域自动化、企微运营、微信增长”布局长尾词
|
||||||
|
- 案例文章:行业拆解(教育/本地生活/电商/知识付费)
|
||||||
|
- 私域裂变:
|
||||||
|
- 公开课 + 工具包 + 7天挑战营
|
||||||
|
- 社群中按成果发榜,激发转介绍
|
||||||
|
- 代理体系:
|
||||||
|
- 招募城市代理与垂直行业代理
|
||||||
|
- 提供标准演示稿、报价手册、成交分佣
|
||||||
|
- 渠道合作:
|
||||||
|
- 与代运营公司、SCRM服务商、培训机构联合打包方案
|
||||||
|
- 通过“联合方案分成”降低单方获客成本
|
||||||
|
|
||||||
|
### 5.2 转化策略(从体验到成交)
|
||||||
|
|
||||||
|
统一漏斗:免费试用 -> 低价入门 -> 正式订阅 -> 授权升级 -> 分成合作
|
||||||
|
|
||||||
|
- 试用设计(7天):
|
||||||
|
- 给“可见收益动作”而非全部能力
|
||||||
|
- 第3天强制ROI回顾,第6天给升级建议书
|
||||||
|
- Demo展示:
|
||||||
|
- 按行业模板演示,不做通用型“功能罗列”
|
||||||
|
- 展示“投入-产出-回本周期”三张图
|
||||||
|
- ROI案例:
|
||||||
|
- 输出可量化指标:触达率、回复率、成交率、人效提升
|
||||||
|
- 销售现场必须带至少2个同行业案例
|
||||||
|
|
||||||
|
### 5.3 裂变机制(自传播增长)
|
||||||
|
|
||||||
|
- 邀请返佣:
|
||||||
|
- 推荐成交后,返首月月费的20%~30%
|
||||||
|
- 连续3个月留存再发二次奖励
|
||||||
|
- 分销体系:
|
||||||
|
- 一级分销(个人推荐)+ 二级分销(团队代理,需授权)
|
||||||
|
- 分销商等级按季度GMV升级,提高佣金比例
|
||||||
|
- 平台裂变:
|
||||||
|
- 对平台型客户提供“子客户激励包”,鼓励其主动扩张
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 销售策略
|
||||||
|
|
||||||
|
### 6.1 核心销售话术(对外表达框架)
|
||||||
|
|
||||||
|
销售不讲“接口”,只讲“利润模型”:
|
||||||
|
|
||||||
|
- 开场句:
|
||||||
|
- “我们不是卖工具,而是帮你把私域运营变成可复制的赚钱流程。”
|
||||||
|
- 诊断句:
|
||||||
|
- “你现在每月在人工触达和运营执行上的隐性成本是多少?”
|
||||||
|
- 价值句:
|
||||||
|
- “系统把高频动作自动化后,通常在1~2个月回本。”
|
||||||
|
- 成交句:
|
||||||
|
- “先从低风险套餐开始,跑出ROI后再升级授权,现金流最稳。”
|
||||||
|
|
||||||
|
### 6.2 定价防压价策略
|
||||||
|
|
||||||
|
- 报价顺序固定:先价值后价格,先高锚点后标准价
|
||||||
|
- 永远给3档报价:标准价 / 年付优惠 / 增值服务包
|
||||||
|
- 价格可让步,权益不白送(让价必须交换:签年约/提高保底/放案例)
|
||||||
|
- 明确“商业授权与转售权”单独定价,避免被按工具价压扁
|
||||||
|
|
||||||
|
### 6.3 高价值客户识别(优先投入)
|
||||||
|
|
||||||
|
重点跟进信号(满足2项即进入重点池):
|
||||||
|
|
||||||
|
- 已有销售或私域团队(执行能力存在)
|
||||||
|
- 有明确获客预算和增长目标
|
||||||
|
- 需要多账号/多客户管理
|
||||||
|
- 主动询问白标、分销、渠道合作
|
||||||
|
- 能接受年度合同或保底分成
|
||||||
|
|
||||||
|
### 6.4 引导升级机制(非常关键)
|
||||||
|
|
||||||
|
- 从初级到高级:
|
||||||
|
- 触发条件:额度达到80%、新增账号需求、团队协作需求
|
||||||
|
- 升级话术:强调“人效瓶颈”和“机会成本”
|
||||||
|
- 从高级到定制:
|
||||||
|
- 触发条件:跨团队管理、稳定性诉求、审计需求
|
||||||
|
- 升级动作:提供“管理风险清单 + 降风险方案”
|
||||||
|
- 从定制到白标/OEM:
|
||||||
|
- 触发条件:客户计划对外收费或发展渠道
|
||||||
|
- 升级动作:联合商业方案 + 分成协议 + 上线节奏表
|
||||||
|
|
||||||
|
销售SOP建议:
|
||||||
|
|
||||||
|
- T+0:业务诊断
|
||||||
|
- T+1:行业Demo + ROI测算
|
||||||
|
- T+3:试用复盘 + 方案报价
|
||||||
|
- T+7:签约与上量计划
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 风控机制
|
||||||
|
|
||||||
|
### 7.1 SDK接入(控制入口)
|
||||||
|
|
||||||
|
- 所有商业客户统一通过SDK鉴权与调用
|
||||||
|
- 关闭裸调用模式,避免私接与灰产转售
|
||||||
|
- 关键动作必须签名校验 + 时间戳校验
|
||||||
|
|
||||||
|
### 7.2 end_user_id体系(控制客户下游)
|
||||||
|
|
||||||
|
- 每个真实终端用户必须绑定唯一 end_user_id
|
||||||
|
- 请求、计费、权限、风控全链路以 end_user_id 作为主键
|
||||||
|
- 平台型客户必须上报 end_user_id 映射关系(可审计)
|
||||||
|
|
||||||
|
### 7.3 限流与配额机制(防滥用)
|
||||||
|
|
||||||
|
- 套餐级限流:按分钟/小时/日多层阈值
|
||||||
|
- 动作级限流:高风险动作单独限速(如加好友、批量触达)
|
||||||
|
- 异常策略:突发流量、异常模式自动降级或冻结
|
||||||
|
- 额度耗尽策略:停止高风险动作,保留低风险服务与续费入口
|
||||||
|
|
||||||
|
### 7.4 反转售与授权条款(商业控制)
|
||||||
|
|
||||||
|
- 合同中明确:
|
||||||
|
- 禁止未经授权的二次转售、接口共享、账号借用
|
||||||
|
- 发现违规可暂停服务并追偿商业损失
|
||||||
|
- 合规转售路径:
|
||||||
|
- 必须购买对应商业授权级别
|
||||||
|
- 必须接入SDK与 end_user_id
|
||||||
|
- 必须接受分成与审计条款
|
||||||
|
- 技术+法务双保险:
|
||||||
|
- 技术侧识别可疑租户行为
|
||||||
|
- 法务侧保留追责与解约权利
|
||||||
|
|
||||||
|
### 7.5 风险分级处置机制
|
||||||
|
|
||||||
|
- 低风险:告警 + 限速 + 客服核验
|
||||||
|
- 中风险:临时冻结高风险能力 + 补充资质
|
||||||
|
- 高风险:立即停服 + 法务通知 + 黑名单
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 附:90天落地执行路线图(建议)
|
||||||
|
|
||||||
|
### 第1阶段(1~30天):打基础现金流
|
||||||
|
|
||||||
|
- 上线三档套餐与试用漏斗
|
||||||
|
- 搭建销售SOP与行业Demo库
|
||||||
|
- 建立按量计费与额度告警
|
||||||
|
|
||||||
|
### 第2阶段(31~60天):做增长与渠道
|
||||||
|
|
||||||
|
- 启动邀请返佣与代理招募
|
||||||
|
- 发布行业ROI案例与转化脚本
|
||||||
|
- 跑通工作室与企业客户升级路径
|
||||||
|
|
||||||
|
### 第3阶段(61~90天):做平台化放大
|
||||||
|
|
||||||
|
- 推出平台授权与白标方案
|
||||||
|
- 签2~5家平台型客户试点分成
|
||||||
|
- 建立 end_user_id 审计与反转售闭环
|
||||||
|
|
||||||
|
最终目标:
|
||||||
|
|
||||||
|
- 短期(3个月):订阅现金流稳定 + 销售流程标准化
|
||||||
|
- 中期(6个月):平台客户贡献新增收入并形成分成
|
||||||
|
- 长期(12个月):形成“订阅 + 按量 + 授权 + 分成”四引擎增长模型
|
||||||
158
客户决策版-微信自动化商业方案.md
Normal file
158
客户决策版-微信自动化商业方案.md
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# 微信自动化增长平台(客户决策版方案)
|
||||||
|
|
||||||
|
## 1. 我们能为您解决什么问题
|
||||||
|
|
||||||
|
如果您正在做私域运营,通常会遇到三类问题:
|
||||||
|
|
||||||
|
- 人工成本高:重复触达、回复、运营动作靠人堆
|
||||||
|
- 执行不稳定:不同员工执行标准不一,结果波动大
|
||||||
|
- 规模难扩大:账号、社群、内容、成交链路无法系统化复制
|
||||||
|
|
||||||
|
本平台的价值是:
|
||||||
|
|
||||||
|
> 帮您把私域运营从“人工作坊”升级为“可复制的自动化增长系统”,在控制风险的前提下提升转化和人效。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 方案价值(老板最关心)
|
||||||
|
|
||||||
|
- **降本**:自动化高频动作,减少重复人工投入
|
||||||
|
- **增收**:提高触达效率、跟进及时性和转化闭环
|
||||||
|
- **可控**:多账号、多团队统一管理,过程可追踪
|
||||||
|
- **可扩张**:支持企业级协同,也支持平台化对外服务
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 三档标准套餐(可立即上线)
|
||||||
|
|
||||||
|
### A. 初级版:300元/月
|
||||||
|
|
||||||
|
适合:个人经营者、小规模私域团队
|
||||||
|
包含:基础自动化运营能力、基础消息与互动管理、基础数据看板
|
||||||
|
限制:账号与调用额度较低,仅限自用,不支持对外商业转售
|
||||||
|
|
||||||
|
### B. 高级版:600元/月
|
||||||
|
|
||||||
|
适合:工作室、增长团队、代运营团队
|
||||||
|
包含:多账号协同、批量任务能力、进阶数据统计、基础开放能力
|
||||||
|
限制:额度中等,子账户数量有限,商业转售需另购授权
|
||||||
|
|
||||||
|
### C. 定制版:1200元/月
|
||||||
|
|
||||||
|
适合:企业客户、连锁品牌、组织化运营团队
|
||||||
|
包含:高优先级资源、组织权限管理、审计能力、深度业务集成支持
|
||||||
|
限制:不含白标,不含无限调用;重大定制按项目评估
|
||||||
|
|
||||||
|
### D. 白标/OEM:高价 + 分成
|
||||||
|
|
||||||
|
适合:平台型客户、渠道平台、生态型服务商
|
||||||
|
包含:品牌定制、SDK接入、子客户管理、商业化分账能力
|
||||||
|
建议模式:授权费 + 月服务费 + 收入分成(10%~20%)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 收费规则(透明可控)
|
||||||
|
|
||||||
|
### 4.1 一次性授权费(按商业用途)
|
||||||
|
|
||||||
|
- 3000:基础商业使用授权(仅自营)
|
||||||
|
- 5000:团队运营授权(多操作者)
|
||||||
|
- 10000:企业商业授权(对外服务场景)
|
||||||
|
- 50000:平台/OEM授权(可构建二级商业体系)
|
||||||
|
|
||||||
|
### 4.2 月费
|
||||||
|
|
||||||
|
- 300 / 600 / 1200(对应三档标准版)
|
||||||
|
|
||||||
|
### 4.3 按量收费(超额才计费)
|
||||||
|
|
||||||
|
对高频动作采用“套餐内额度 + 超额计费”:
|
||||||
|
|
||||||
|
- 群发任务、加好友、朋友圈营销、消息调用等
|
||||||
|
|
||||||
|
优势:先低风险试用,业务放量后按效果扩容,避免前期重投入。
|
||||||
|
|
||||||
|
### 4.4 用户规模收费
|
||||||
|
|
||||||
|
- 每个客户默认含100个终端用户
|
||||||
|
- 超过100后:1元/人/月
|
||||||
|
|
||||||
|
### 4.5 分成模型(适用于您对外变现时)
|
||||||
|
|
||||||
|
- 当您基于平台对外收费时,可采用10%~20%分成
|
||||||
|
- 适合白标/OEM、平台客户、渠道体系客户
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. ROI与回本逻辑(决策依据)
|
||||||
|
|
||||||
|
建议用三个指标评估:
|
||||||
|
|
||||||
|
- 人效提升:单人可管理的私域规模提升
|
||||||
|
- 转化提升:触达率、回复率、成交率提升
|
||||||
|
- 成本下降:重复动作人工时间明显下降
|
||||||
|
|
||||||
|
**典型回本周期:1~2个月**(取决于业务规模与执行力度)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 项目落地方式(可执行)
|
||||||
|
|
||||||
|
### 第一阶段:7天试运行
|
||||||
|
|
||||||
|
- 明确目标(拉新/成交/复购)
|
||||||
|
- 上线关键流程(高频动作优先)
|
||||||
|
- 输出首轮数据复盘
|
||||||
|
|
||||||
|
### 第二阶段:30天标准化
|
||||||
|
|
||||||
|
- 沉淀可复用运营模板
|
||||||
|
- 建立团队协同与权限机制
|
||||||
|
- 启动按量优化与成本控制
|
||||||
|
|
||||||
|
### 第三阶段:60~90天规模化
|
||||||
|
|
||||||
|
- 业务放量与模型优化
|
||||||
|
- 必要时升级定制版或白标模式
|
||||||
|
- 形成稳定“增长+变现”闭环
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 风控与合规保障(对企业负责)
|
||||||
|
|
||||||
|
- 统一SDK入口,保障调用可控
|
||||||
|
- end_user_id机制,确保使用可审计
|
||||||
|
- 限流与异常策略,防止滥用与风险放大
|
||||||
|
- 明确商业授权边界,保护双方权益
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 推荐采购路径(给决策人)
|
||||||
|
|
||||||
|
### 保守路径(低风险)
|
||||||
|
|
||||||
|
先上高级版(600/月)+ 基础授权(5000),跑通1个业务闭环后再升级。
|
||||||
|
|
||||||
|
### 成长路径(追求规模)
|
||||||
|
|
||||||
|
直接定制版(1200/月)+ 企业授权(10000),30天内完成组织化落地。
|
||||||
|
|
||||||
|
### 平台路径(以变现为目标)
|
||||||
|
|
||||||
|
白标/OEM授权(50000起)+ 月服务费 + 分成(10%~20%),构建自有商业平台。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 商务建议与下一步
|
||||||
|
|
||||||
|
为便于快速决策,建议您当前确认以下3项:
|
||||||
|
|
||||||
|
- 本期目标:提效、增收、还是平台化变现
|
||||||
|
- 预算区间:标准订阅、企业定制、或白标投入
|
||||||
|
- 上线节奏:先试运行还是直接组织化部署
|
||||||
|
|
||||||
|
确认后可在48小时内给您输出:
|
||||||
|
|
||||||
|
- 专属报价单
|
||||||
|
- 对应行业ROI测算
|
||||||
|
- 30天落地计划表
|
||||||
248
客户可读版-完整计费方案(按功能表).md
Normal file
248
客户可读版-完整计费方案(按功能表).md
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
# 微信自动化平台完整计费方案(客户可读版)
|
||||||
|
|
||||||
|
## 0. 先看结论(1分钟看懂)
|
||||||
|
|
||||||
|
本方案采用 **“月费套餐 + 一次性授权 + 超量计费 + 人数计费 + 分成”** 五层收费:
|
||||||
|
|
||||||
|
- 月费套餐:300 / 600 / 1200 / 白标OEM
|
||||||
|
- 一次性授权:3000 / 5000 / 10000 / 50000
|
||||||
|
- 超量计费:消息、加好友、群发、朋友圈、企业动作按量计费
|
||||||
|
- 人数计费:超过100终端用户后 1元/人/月
|
||||||
|
- 分成计费:客户对外收费时按10%~20%抽成
|
||||||
|
|
||||||
|
适合客户从“小团队试水”到“平台化变现”全阶段使用。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 功能模块分层(基于你的功能表抽象)
|
||||||
|
|
||||||
|
为方便客户决策,所有功能按 5 层价值分组,而不是按接口名称分组。
|
||||||
|
|
||||||
|
### L1 基础运营层(必需)
|
||||||
|
|
||||||
|
- 登录与设备管理(扫码/密码登录、多设备状态、在线管理)
|
||||||
|
- 文本/图片/语音/视频消息收发
|
||||||
|
- 好友与联系人管理
|
||||||
|
- 基础群管理
|
||||||
|
|
||||||
|
### L2 增长自动化层(增长核心)
|
||||||
|
|
||||||
|
- 批量群发、消息同步、自动化任务
|
||||||
|
- 标签管理、关键词回复、欢迎语、基础运营规则
|
||||||
|
- 朋友圈发布与互动(评论、点赞、转发)
|
||||||
|
|
||||||
|
### L3 成交变现层(直接赚钱)
|
||||||
|
|
||||||
|
- 支付动作(收款、转账、红包)
|
||||||
|
- 公众号/小程序联动(阅读、授权、互动)
|
||||||
|
- 视频号与内容分发相关能力
|
||||||
|
|
||||||
|
### L4 组织协同层(企业级)
|
||||||
|
|
||||||
|
- 多角色权限、团队协同
|
||||||
|
- 企业微信相关能力(企业群、企业通讯录、企业协作)
|
||||||
|
- 审计、策略配置、组织化运营支持
|
||||||
|
|
||||||
|
### L5 平台商业层(平台客户)
|
||||||
|
|
||||||
|
- 授权码管理、子客户管理、分发管理
|
||||||
|
- 白标品牌化、渠道分销、二级商业体系
|
||||||
|
- 商业风控(限流、审计、反转售)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 套餐与价格(客户直接选)
|
||||||
|
|
||||||
|
## 2.1 初级版(300元/月)
|
||||||
|
|
||||||
|
适合:个人、微团队、首次试水客户
|
||||||
|
|
||||||
|
- 包含:
|
||||||
|
- L1 基础运营层全部
|
||||||
|
- L2 增长自动化层的基础能力(基础群发/基础标签/基础规则)
|
||||||
|
- 套餐额度(建议):
|
||||||
|
- 消息调用:2万次/月
|
||||||
|
- 群发任务:300次/月
|
||||||
|
- 加好友动作:500次/月
|
||||||
|
- 朋友圈动作:300次/月
|
||||||
|
- 活跃终端用户:100人
|
||||||
|
- 限制:
|
||||||
|
- 账号数 1~2
|
||||||
|
- 不含企业协同、白标、转售权限
|
||||||
|
|
||||||
|
## 2.2 高级版(600元/月)
|
||||||
|
|
||||||
|
适合:工作室、代运营团队、增长团队
|
||||||
|
|
||||||
|
- 包含:
|
||||||
|
- L1 + L2 全量
|
||||||
|
- L3 成交变现层基础能力
|
||||||
|
- 套餐额度(建议):
|
||||||
|
- 消息调用:8万次/月
|
||||||
|
- 群发任务:1500次/月
|
||||||
|
- 加好友动作:3000次/月
|
||||||
|
- 朋友圈动作:1200次/月
|
||||||
|
- 活跃终端用户:300人
|
||||||
|
- 限制:
|
||||||
|
- 账号数 3~10
|
||||||
|
- 对外商业转售需购买授权
|
||||||
|
|
||||||
|
## 2.3 定制版(1200元/月)
|
||||||
|
|
||||||
|
适合:企业客户、连锁品牌、组织化运营方
|
||||||
|
|
||||||
|
- 包含:
|
||||||
|
- L1 + L2 + L3 全量
|
||||||
|
- L4 组织协同层(企业协同、权限管理、审计支持)
|
||||||
|
- 套餐额度(建议):
|
||||||
|
- 消息调用:20万次/月
|
||||||
|
- 群发任务:5000次/月
|
||||||
|
- 加好友动作:10000次/月
|
||||||
|
- 朋友圈动作:5000次/月
|
||||||
|
- 活跃终端用户:1000人
|
||||||
|
- 限制:
|
||||||
|
- 不含白标品牌与二级平台分销权
|
||||||
|
|
||||||
|
## 2.4 白标/OEM(高价 + 分成)
|
||||||
|
|
||||||
|
适合:平台型客户、渠道平台、生态服务商
|
||||||
|
|
||||||
|
- 建议价格结构:
|
||||||
|
- 一次性平台授权:50000元起
|
||||||
|
- 月技术服务费:3000~20000元
|
||||||
|
- 分成:10%~20%
|
||||||
|
- 包含:
|
||||||
|
- L1~L5 全量能力
|
||||||
|
- 子客户管理、品牌定制、商业化分账
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 一次性授权费(必须单列)
|
||||||
|
|
||||||
|
- 3000:基础商业授权(自营)
|
||||||
|
- 5000:团队商业授权(多操作者)
|
||||||
|
- 10000:企业商业授权(可服务外部客户)
|
||||||
|
- 50000:平台/OEM商业授权(可搭建二级商业体系)
|
||||||
|
|
||||||
|
说明:
|
||||||
|
|
||||||
|
- 授权费不替代月费
|
||||||
|
- 授权按主体绑定,不可随意转移
|
||||||
|
- 商业转售必须匹配对应授权等级
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 超量计费(超出套餐后才收费)
|
||||||
|
|
||||||
|
## 4.1 建议单价区间
|
||||||
|
|
||||||
|
- 消息调用(收发/同步):0.005~0.02 元/次
|
||||||
|
- 群发任务:0.03~0.08 元/次
|
||||||
|
- 加好友动作:0.05~0.20 元/次
|
||||||
|
- 朋友圈动作:0.02~0.06 元/次
|
||||||
|
- 企微高级动作:0.05~0.30 元/次(按风险等级)
|
||||||
|
- 媒体下载/上传(图片/语音/视频):可按流量包或次数包计费
|
||||||
|
|
||||||
|
## 4.2 阶梯计费(建议)
|
||||||
|
|
||||||
|
以消息调用为例:
|
||||||
|
|
||||||
|
- 0 ~ 套餐内额度:0元
|
||||||
|
- 超额 0 ~ 5万次:0.012 元/次
|
||||||
|
- 超额 5万 ~ 20万次:0.009 元/次
|
||||||
|
- 超额 20万次以上:0.007 元/次
|
||||||
|
|
||||||
|
同理可应用于群发、好友、朋友圈动作,鼓励客户放量。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 用户规模计费(必须)
|
||||||
|
|
||||||
|
- 每套餐含 100 个终端用户(初级)或按套餐提升
|
||||||
|
- 超过100后:**1元/人/月**
|
||||||
|
|
||||||
|
平台型客户可用阶梯价(可选):
|
||||||
|
|
||||||
|
- 101~1000:1元/人/月
|
||||||
|
- 1001~10000:0.8元/人/月
|
||||||
|
- 10000+:0.5元/人/月
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 分成模型(客户赚钱时再抽成)
|
||||||
|
|
||||||
|
适用场景:客户基于本平台向其下游客户收费(SaaS服务费、代运营费、增值服务费等)。
|
||||||
|
|
||||||
|
- 标准档:15%
|
||||||
|
- 优惠档:10%(年框、量大、保底)
|
||||||
|
- 高支持档:20%(由平台提供销售支持/交付支持)
|
||||||
|
|
||||||
|
推荐规则:
|
||||||
|
|
||||||
|
- 每月对账,次月结算
|
||||||
|
- 设保底服务费,避免低活跃占用资源
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 三种客户常用报价模板(销售可直接发)
|
||||||
|
|
||||||
|
## 7.1 试水型客户(低风险)
|
||||||
|
|
||||||
|
- 方案:高级版 600/月 + 5000授权
|
||||||
|
- 适用:工作室、小团队
|
||||||
|
- 预估首年费用:
|
||||||
|
- 授权:5000
|
||||||
|
- 月费:600 x 12 = 7200
|
||||||
|
- 合计:12200(不含超量)
|
||||||
|
|
||||||
|
## 7.2 成长型企业(组织化)
|
||||||
|
|
||||||
|
- 方案:定制版 1200/月 + 10000授权
|
||||||
|
- 适用:品牌企业、连锁门店
|
||||||
|
- 预估首年费用:
|
||||||
|
- 授权:10000
|
||||||
|
- 月费:1200 x 12 = 14400
|
||||||
|
- 合计:24400(不含超量与服务包)
|
||||||
|
|
||||||
|
## 7.3 平台变现型客户(高价值)
|
||||||
|
|
||||||
|
- 方案:OEM授权50000 + 月服务费8000 + 分成15%
|
||||||
|
- 适用:渠道平台、生态服务商
|
||||||
|
- 预估首年固定费用:
|
||||||
|
- 授权:50000
|
||||||
|
- 月服务费:8000 x 12 = 96000
|
||||||
|
- 固定合计:146000 + 分成
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 合同与计费口径(避免争议)
|
||||||
|
|
||||||
|
- 计费周期:自然月
|
||||||
|
- 费用组成:授权费 + 月费 + 超量费 + 人数费 + 分成
|
||||||
|
- 数据口径:平台计费后台为准
|
||||||
|
- 发票与付款:可按月/季/年
|
||||||
|
- 停服规则:逾期未付可降级或暂停高风险能力
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 推荐对外呈现方式(客户更容易决策)
|
||||||
|
|
||||||
|
对客户只展示以下三张表:
|
||||||
|
|
||||||
|
- 表1:套餐对比表(300/600/1200/OEM)
|
||||||
|
- 表2:超量计费表(消息、群发、好友、朋友圈、企微)
|
||||||
|
- 表3:三种采购路径(试水/成长/平台)
|
||||||
|
|
||||||
|
这样客户能在 10 分钟内完成预算评估并进入签约流程。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. 下一步(可直接执行)
|
||||||
|
|
||||||
|
如确认此计费方案,可立即落地:
|
||||||
|
|
||||||
|
- 输出正式《报价单(对外版)》
|
||||||
|
- 输出《合同计费条款(法务版)》
|
||||||
|
- 输出《销售口径一页纸(团队版)》
|
||||||
|
|
||||||
|
以上三份可在同一口径下同步,避免销售、交付、财务口径不一致。
|
||||||
169
方案.md
Normal file
169
方案.md
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
|
||||||
|
# 微信自动化平台报价方案(严谨版)
|
||||||
|
|
||||||
|
## 1) 标准报价单
|
||||||
|
|
||||||
|
| 版本 | 月费 | 一次性授权费 | 适用客户 | 核心价值 |
|
||||||
|
|---|---:|---:|---|---|
|
||||||
|
| 初级版 | 300元/月 | 3000元 | 个人、微团队 | 基础收发与基础运营,适合项目起步 |
|
||||||
|
| 高级版 | 600元/月 | 5000元 | 工作室、代运营 | 关键增长能力(群发、朋友圈深度、支付) |
|
||||||
|
| 定制版 | 1200元/月 | 10000元 | 企业客户 | 企业协同与管理能力(企微、授权、小店) |
|
||||||
|
| 白标/OEM | 3000~20000元/月 | 50000元起 | 平台型客户 | 在定制版能力上增加商业授权条款 |
|
||||||
|
|
||||||
|
说明:
|
||||||
|
|
||||||
|
- 授权费为商业使用许可,不抵扣月费。
|
||||||
|
- 白标/OEM新增内容以商务合同为准,非默认标准功能。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2) 对应功能说明(具体功能点)
|
||||||
|
|
||||||
|
### 2.1 初级版(300元/月)
|
||||||
|
|
||||||
|
包含功能:
|
||||||
|
|
||||||
|
- 登录基础:扫码登录、登录二维码获取、登录状态查询、在线状态查询、退出登录
|
||||||
|
- 消息基础:发送文本、发送图片、发送语音、接收同步消息(HTTP轮询)
|
||||||
|
- 好友基础:搜索联系人、同意好友、添加好友、联系人列表查询、联系人详情查询
|
||||||
|
- 群基础:创建群、邀请成员、群详情、群成员详情、群二维码、设置群名称、退出群
|
||||||
|
- 用户基础设置:获取个人资料、获取个人二维码、修改昵称、修改签名、修改备注
|
||||||
|
- 标签基础:新增标签、删除标签、修改标签、标签列表
|
||||||
|
- 朋友圈基础:发布朋友圈、点赞评论、朋友圈同步、朋友圈主页查询
|
||||||
|
- 设备基础:在线设备信息、安全设备列表
|
||||||
|
|
||||||
|
不包含功能:
|
||||||
|
|
||||||
|
- 消息增强:群发文本、群发图片、历史消息同步、消息管理器、转发图片/视频/表情、撤回消息、高清图片下载、语音下载、视频下载、媒体上传CDN
|
||||||
|
- 朋友圈增强:上传朋友圈图片、指定用户朋友圈、朋友圈详情、设置朋友圈背景图、设置可见天数
|
||||||
|
- 好友/用户增强:删除好友、好友关系查询、上传手机通讯录、通讯录好友、自动回复关键词、欢迎词、邀请入群关键词、踢人关键词、管理员关键词、上传头像
|
||||||
|
- 支付、公众号/小程序、收藏、视频号、企业微信、管理(授权码)、微信小店、WebSocket同步
|
||||||
|
|
||||||
|
套餐额度:
|
||||||
|
|
||||||
|
- 消息调用:8万次/月
|
||||||
|
- 群发任务:0次/月(不含群发)
|
||||||
|
- 加好友动作:200次/月
|
||||||
|
- 朋友圈动作:200次/月
|
||||||
|
- 活跃终端用户:100人
|
||||||
|
|
||||||
|
限制:
|
||||||
|
|
||||||
|
- 1~5个账号
|
||||||
|
- 不含商业转售/白标授权
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.2 高级版(600元/月)
|
||||||
|
|
||||||
|
包含功能(初级版 + 以下新增):
|
||||||
|
|
||||||
|
- 消息增强:群发文本、群发图片、历史消息同步、消息管理器、转发图片/视频/表情、撤回消息、下载语音、下载视频、高清图片下载、视频上传、图片上传CDN
|
||||||
|
- 朋友圈增强:上传朋友圈图片、指定用户朋友圈、朋友圈详情、设置朋友圈背景图、设置可见天数
|
||||||
|
- 好友/用户增强:删除好友、好友关系查询、上传手机通讯录、通讯录好友、自动回复关键词、欢迎词、邀请入群关键词、踢人关键词、管理员关键词、上传头像
|
||||||
|
- 群增强:添加成员、设置群公告、设置群内昵称、同意入群
|
||||||
|
- 支付:创建转账、确认转账、收款确认、生成收款二维码、创建红包、拆红包、红包详情、红包领取列表、银行卡列表
|
||||||
|
- 公众号/小程序:公众号授权登录、关注公众号、授权链接获取、公众号历史消息、公众号文章阅读、公众号文章点赞、文章阅读数、小程序授权、小程序云函数操作、二维码授权请求与确认
|
||||||
|
- 收藏:收藏同步、收藏列表、收藏详情、批量删除收藏
|
||||||
|
- 视频号:视频号扫码登录、视频号搜索、关注/取消关注、视频号中心
|
||||||
|
- 同步通道:WebSocket消息同步
|
||||||
|
- 其他工具:上传文件、缓存消息读取、附近的人、步数修改、指令状态更新
|
||||||
|
|
||||||
|
套餐额度:
|
||||||
|
|
||||||
|
- 消息调用:28万次/月
|
||||||
|
- 群发任务:1500次/月
|
||||||
|
- 加好友动作:3000次/月
|
||||||
|
- 朋友圈动作:1200次/月
|
||||||
|
- 活跃终端用户:300人
|
||||||
|
|
||||||
|
限制:
|
||||||
|
|
||||||
|
- 11~50个账号
|
||||||
|
- 对外收费型业务需升级授权
|
||||||
|
- 不含企业微信、授权码管理、微信小店
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.3 定制版(1200元/月)
|
||||||
|
|
||||||
|
包含功能(高级版 + 以下新增):
|
||||||
|
|
||||||
|
- 企业微信:同意进企业群、创建企业群、删除企业群、企业群拉人、企业群成员移除、企业群管理员增删、企业群公告、企业群二维码、企业群转让、企业群成员查询、企业群信息查询、企业通讯录同步、企业群同步、企业联系人检索与备注
|
||||||
|
- 管理(授权码):生成授权码、禁用授权码、删除授权码、授权码延期、激活授权查询、授权状态同步、代理映射查询
|
||||||
|
- 微信小店:小店登录确认、小店扫码事件上报、小店扩展设备登录确认相关流程
|
||||||
|
- 登录增强:验证码验证、滑块验证、代理设置下登录
|
||||||
|
- 用户增强:设置代理、修改加好友验证属性、设置拍一拍名称、设置微信号、设置性别
|
||||||
|
- 其他增强:企微图片下载、硬件设备绑定信息、删除安全设备
|
||||||
|
|
||||||
|
套餐额度:
|
||||||
|
|
||||||
|
- 消息调用:68万次/月
|
||||||
|
- 群发任务:5000次/月
|
||||||
|
- 加好友动作:10000次/月
|
||||||
|
- 朋友圈动作:5000次/月
|
||||||
|
- 活跃终端用户:1000人
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.4 白标/OEM(高价 + 分成)
|
||||||
|
|
||||||
|
包含内容:
|
||||||
|
|
||||||
|
- 定制版全部功能
|
||||||
|
- 商业授权与对外服务许可(以合同条款为准)
|
||||||
|
- 可约定授权码分配规则(以合同条款为准)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3) 超量计费说明(超出套餐后生效)
|
||||||
|
|
||||||
|
| 计费项 | 单价区间(元/次) | 对应具体功能 |
|
||||||
|
|---|---:|---|
|
||||||
|
| 消息调用 | 0.005 ~ 0.02 | 发送/接收/同步/转发/撤回等消息动作 |
|
||||||
|
| 群发任务 | 0.03 ~ 0.08 | 文本群发、图片群发 |
|
||||||
|
| 加好友动作 | 0.05 ~ 0.20 | 搜索联系人、发起验证、同意好友 |
|
||||||
|
| 朋友圈动作 | 0.02 ~ 0.06 | 发布、点赞评论、详情读取、同步 |
|
||||||
|
| 企业微信动作 | 0.05 ~ 0.30 | 企业群管理、企业通讯录同步、企业联系人动作 |
|
||||||
|
|
||||||
|
建议:采用“套餐内免费额度 + 阶梯超额价”。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4) 用户规模计费
|
||||||
|
|
||||||
|
- 套餐内含基础用户数(见各版本额度)
|
||||||
|
- 超出100人后:1元/人/月
|
||||||
|
- 平台客户可申请阶梯价(量大更优)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5) 分成计费(客户对外收费时)
|
||||||
|
|
||||||
|
当客户基于本平台向下游客户收费时,执行分成:
|
||||||
|
|
||||||
|
- 标准分成:15%
|
||||||
|
- 优惠分成:10%(年框或保底)
|
||||||
|
- 高支持分成:20%(联合销售/交付支持)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6) 付款与商务条款
|
||||||
|
|
||||||
|
- 计费周期:按自然月
|
||||||
|
- 推荐签约:季付/年付(年付可申请优惠)
|
||||||
|
- 开票类型:可开具增值税发票(按合同)
|
||||||
|
- 逾期规则:逾期可先降级后停高风险能力
|
||||||
|
- 交付边界:报价文档写明功能点为交付范围,未列明功能默认不包含
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7) 联系方式
|
||||||
|
|
||||||
|
- 公司名称:上海丙维数字科技有限公司
|
||||||
|
- 联系人:Daniel(商务负责人)
|
||||||
|
- 联系电话:13585795811
|
||||||
|
- 邮箱:bimwe@bimwe.com
|
||||||
|
- 官网:www.bimwe.com
|
||||||
|
|
||||||
|
---
|
||||||
190
标准报价单-含功能说明.md
Normal file
190
标准报价单-含功能说明.md
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
# 微信自动化平台标准报价单(含功能说明)
|
||||||
|
|
||||||
|
> 适用对象:个人用户 / 工作室 / 企业客户 / 平台型客户
|
||||||
|
> 报价有效期:30天(可按项目调整)
|
||||||
|
> 币种:人民币(CNY)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1) 标准报价单
|
||||||
|
|
||||||
|
| 版本 | 月费 | 一次性授权费 | 适用客户 | 核心价值 |
|
||||||
|
|---|---:|---:|---|---|
|
||||||
|
| 初级版 | 300元/月 | 3000元 | 个人、微团队 | 低门槛上手,快速跑通基础自动化 |
|
||||||
|
| 高级版 | 600元/月 | 5000元 | 工作室、代运营 | 多账号协同,支持规模化增长动作 |
|
||||||
|
| 定制版 | 1200元/月 | 10000元 | 企业客户 | 组织化运营、权限管理、稳定交付 |
|
||||||
|
| 白标/OEM | 3000~20000元/月 | 50000元起 | 平台型客户 | 品牌化输出、子客户体系、商业分成 |
|
||||||
|
|
||||||
|
说明:
|
||||||
|
|
||||||
|
- 授权费为商业使用许可,不抵扣月费。
|
||||||
|
- 白标/OEM按需求评估,通常同时配置分成条款。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2) 对应功能说明(客户可读)
|
||||||
|
|
||||||
|
### 2.1 初级版(300元/月)
|
||||||
|
|
||||||
|
**包含功能**
|
||||||
|
|
||||||
|
- 账号登录与在线管理(扫码/密码、在线状态、退出)
|
||||||
|
- 基础消息能力(文本/图片/语音/视频收发)
|
||||||
|
- 基础好友与联系人管理
|
||||||
|
- 基础群管理(建群、拉人、群信息管理)
|
||||||
|
- 基础运营配置(关键词回复、欢迎语、基础标签)
|
||||||
|
- 基础朋友圈操作(发布与基础互动)
|
||||||
|
|
||||||
|
**建议额度**
|
||||||
|
|
||||||
|
- 消息调用:2万次/月
|
||||||
|
- 群发任务:300次/月
|
||||||
|
- 加好友动作:500次/月
|
||||||
|
- 朋友圈动作:300次/月
|
||||||
|
- 活跃终端用户:100人
|
||||||
|
|
||||||
|
**限制**
|
||||||
|
|
||||||
|
- 1~2个账号
|
||||||
|
- 不含企业微信深度能力
|
||||||
|
- 不含商业转售/白标权限
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.2 高级版(600元/月)
|
||||||
|
|
||||||
|
**包含功能**
|
||||||
|
|
||||||
|
- 初级版全部能力
|
||||||
|
- 批量群发、批量转发、消息同步能力增强
|
||||||
|
- 多账号协同与策略模板
|
||||||
|
- 好友/群/标签的批量运营能力
|
||||||
|
- 公众号/小程序基础联动能力
|
||||||
|
- 支付能力基础接入(收款、转账、红包流程)
|
||||||
|
|
||||||
|
**建议额度**
|
||||||
|
|
||||||
|
- 消息调用:8万次/月
|
||||||
|
- 群发任务:1500次/月
|
||||||
|
- 加好友动作:3000次/月
|
||||||
|
- 朋友圈动作:1200次/月
|
||||||
|
- 活跃终端用户:300人
|
||||||
|
|
||||||
|
**限制**
|
||||||
|
|
||||||
|
- 3~10个账号
|
||||||
|
- 企业级审计与深度权限能力有限
|
||||||
|
- 对外收费型业务需升级授权
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.3 定制版(1200元/月)
|
||||||
|
|
||||||
|
**包含功能**
|
||||||
|
|
||||||
|
- 高级版全部能力
|
||||||
|
- 企业级组织管理(角色、权限、审计)
|
||||||
|
- 企业微信能力(企业群、企业通讯录、企业协同动作)
|
||||||
|
- 高并发任务与优先资源保障
|
||||||
|
- 管理类能力增强(授权生命周期、代理映射、状态同步)
|
||||||
|
- 定制化对接支持(按项目评估)
|
||||||
|
|
||||||
|
**建议额度**
|
||||||
|
|
||||||
|
- 消息调用:20万次/月
|
||||||
|
- 群发任务:5000次/月
|
||||||
|
- 加好友动作:10000次/月
|
||||||
|
- 朋友圈动作:5000次/月
|
||||||
|
- 活跃终端用户:1000人
|
||||||
|
|
||||||
|
**限制**
|
||||||
|
|
||||||
|
- 默认不含白标品牌与二级分销体系
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.4 白标/OEM(高价 + 分成)
|
||||||
|
|
||||||
|
**包含功能**
|
||||||
|
|
||||||
|
- 定制版全部能力
|
||||||
|
- 独立品牌化输出(名称、界面、交付口径)
|
||||||
|
- SDK接入、子客户管理、多租户商业体系
|
||||||
|
- 平台化授权与分账能力
|
||||||
|
- 专项风控能力(限流、审计、反转售)
|
||||||
|
|
||||||
|
**商业条款建议**
|
||||||
|
|
||||||
|
- 授权费:50000元起
|
||||||
|
- 月服务费:3000~20000元
|
||||||
|
- 分成:10%~20%
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3) 超量计费说明(超出套餐后生效)
|
||||||
|
|
||||||
|
| 计费项 | 单价区间(元/次) | 说明 |
|
||||||
|
|---|---:|---|
|
||||||
|
| 消息调用(收发/同步) | 0.005 ~ 0.02 | 用量大建议走阶梯价 |
|
||||||
|
| 群发任务 | 0.03 ~ 0.08 | 按任务次计费 |
|
||||||
|
| 加好友动作 | 0.05 ~ 0.20 | 按风险等级定价 |
|
||||||
|
| 朋友圈动作 | 0.02 ~ 0.06 | 发布/互动类动作 |
|
||||||
|
| 企业协同高级动作 | 0.05 ~ 0.30 | 企业微信高阶能力 |
|
||||||
|
|
||||||
|
建议:采用“套餐内免费额度 + 阶梯超额价”,避免客户前期投入过重。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4) 用户规模计费
|
||||||
|
|
||||||
|
- 套餐内含基础用户数(见各版本额度)
|
||||||
|
- 超出100人后:**1元/人/月**
|
||||||
|
- 平台客户可申请阶梯价(量大更优)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5) 分成计费(客户对外收费时)
|
||||||
|
|
||||||
|
当客户基于本平台向下游客户收费时,执行分成:
|
||||||
|
|
||||||
|
- 标准分成:15%
|
||||||
|
- 优惠分成:10%(年框或保底)
|
||||||
|
- 高支持分成:20%(联合销售/交付支持)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6) 付款与商务条款
|
||||||
|
|
||||||
|
- 计费周期:按自然月
|
||||||
|
- 推荐签约:季付/年付(年付可申请优惠)
|
||||||
|
- 开票类型:可开具增值税发票(按合同)
|
||||||
|
- 逾期规则:逾期可先降级后停高风险能力
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7) 三个常用成交方案(直接选)
|
||||||
|
|
||||||
|
### 方案A:试水启动(低风险)
|
||||||
|
|
||||||
|
- 高级版 600/月 + 5000授权
|
||||||
|
- 适合:工作室/小团队先跑通闭环
|
||||||
|
|
||||||
|
### 方案B:企业增长(稳定扩张)
|
||||||
|
|
||||||
|
- 定制版 1200/月 + 10000授权
|
||||||
|
- 适合:有组织协同和稳定运营需求的企业
|
||||||
|
|
||||||
|
### 方案C:平台变现(高增长)
|
||||||
|
|
||||||
|
- 白标 50000起 + 月服务费 + 10%~20%分成
|
||||||
|
- 适合:渠道平台/生态服务商
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8) 联系销售时需确认的3件事
|
||||||
|
|
||||||
|
- 本期目标:提效 / 增收 / 平台化变现
|
||||||
|
- 预估规模:账号数、月动作量、终端用户数
|
||||||
|
- 采购方式:月付试运行 / 季付 / 年框
|
||||||
|
|
||||||
|
确认后可在48小时内提供正式合同版报价。
|
||||||
Reference in New Issue
Block a user