上线完整手册

从「一台空服务器」到「员工在手机上能用」,48 步全在这一页。从上往下做,勾一个算一个,进度自动记住。

已经做到阶段 8 之后(域名能开、HTTPS 有锁、企业微信配了一半)? 不用在这页翻 —— 打开 《从这里接着做》,那里只列剩下的 8 件事, 每件含「在哪点、填什么、看到什么算成功」。约 1 小时能上线。
0 / 0
怎么用这一页:从上往下,做到哪勾到哪。需要填的值(域名、CorpID、各种密钥)可以直接填进框里, 只存在你这台电脑的浏览器里,关掉再打开还在,不用开记事本到处粘。
带 重点 标记的步骤最容易出错,慢一点做。每步都有「成功的样子」和「卡住了怎么办」。
开工前先看这一条,不然后面全白干。
域名在哪家备案,服务器就得在哪家买。比如域名在阿里云备案、服务器买的是腾讯云, 腾讯云会拦下来、要求做「接入备案」(又要等好几天)。
怎么确认:看你的服务器是哪家的 → 登录那家控制台 → 搜「备案」→ 看你的域名在不在列表里。 不在就先去做接入备案,这一步卡住,域名就打不开。
好消息:二级域名 ops.你的域名.com 不用单独备案,主域名备案通过就够。
目录(点一下跳过去)
  1. 0开工前:域名与备案
  2. 1体检服务器
  3. 2补 Python(多数跳过)
  4. 3把程序传上去
  5. 4手动跑一次
  6. 5让它常驻不中断
  7. 6建站点接域名
  8. 7上 HTTPS(免费)
  9. 8收尾:填两个坑
  10. 9接企业微信
  11. 10群机器人(推消息用)
  12. 11AI 与录音(可选)
  13. 12验收与备份
先把你的域名记在这里,后面很多步都要用(填一次,心里有数)
已记住
0

开工前(在自己电脑上,10 分钟)

4 步

就是上面那条红字:域名备案在哪家,服务器就得在哪家。现在花 2 分钟确认一下, 比装到一半被打回来强。

  • 服务器是腾讯云 → 登录腾讯云控制台 → 搜「备案」→ 看域名在不在
  • 服务器是阿里云 → 登录阿里云控制台 → 搜「备案」→ 同上
  • 不在列表里 → 先提交接入备案(免费,等 1~20 天),这期间可以先做阶段 1~5, 用 IP 也能测通,只是最后接域名要等
成功的样子:你明确知道「能直接干」还是要「先等备案」。

去你买域名的那个网站(阿里云 / 腾讯云 / 新网都行),找「域名解析」,加一条 A 记录:

填什么值
主机记录ops(这样域名就是 ops.你的域名.com;只填这三个字母)
记录类型A
记录值你服务器的公网 IP(宝塔首页最上面那栏就是)
成功的样子:等 5~10 分钟,在自己电脑上打开「命令提示符」输入 ping ops.你的域名.com,回出来的 IP 跟服务器一样。
卡住了?

显示「找不到主机」→ 解析还没生效,最多等 10 分钟。

出来的 IP 不是你服务器 → 记录值填错了,回域名后台改。

还挂着一条旧的 ops 记录 → 删掉旧的,只留一条。

浏览器打开你的宝塔地址,能进首页就行。记下左上角的「服务器 IP」,上面那步要用。

成功的样子:看到宝塔首页,左边一排菜单(网站 / 文件 / 数据库 / 监控 / 安全 / 终端)。

接下来要往服务器传这两个,都在我给你的文件夹里:

  • ops-server.zip —— 服务器版程序(222 KB,文件名全英文,给 Linux 用)
  • ops\deploy\check_server.sh —— 体检脚本(先跑它,不动任何东西)
别传那个「体检中心运营系统_免安装版.zip」 —— 它是 Windows 上自己用的 (里面装着 Windows 版 Python,11 MB)。服务器要用 ops-server.zip,又小又不会乱码。
成功的样子:电脑上能找到这两个文件。
1

体检服务器(2 分钟,只读不动任何东西)

3 步

宝塔 → 文件 → 地址栏输入 /www/wwwroot/ 回车 → 点「上传」→ 选 check_server.sh → 确定。

成功的样子:文件列表里出现 check_server.sh。

宝塔 → 终端,粘这行回车:

点一下复制bash /www/wwwroot/check_server.sh
成功的样子:刷出一段信息,最后有个「结论」。
卡住了?

提示 No such file → 文件没传到 /www/wwwroot/,回上一步看路径。

提示 Permission denied → 确认命令前面带了 bash。

  • 显示「这台服务器能直接跑,不用装任何东西」→ 跳过阶段 2,直接做阶段 3
  • 显示「缺 python3」→ 做阶段 2

顺便看两眼:时区是不是 +0800;站点列表里有没有跟 ops 撞名的。

成功的样子:你知道自己是该跳过还是该装。
2

补 Python(只有体检说「缺 python3」才做)

2 步

宝塔 → 软件商店 → 搜 Python → 找到「Python 项目管理器」→ 安装 → 等它装完。

它会装一个独立的 Python 在 /www/server/ 下,跟你现有的 PHP 完全分开,不影响任何网站。

成功的样子:软件商店里显示「已安装」。
想要更快的方式?

CentOS 7 这种老系统,直接在终端跑 yum install python3 -y 也行,几十秒完事,效果一样。

点一下复制bash /www/wwwroot/check_server.sh
成功的样子:结论变成「这台服务器能直接跑」。
3

把程序传上去(3 分钟)

3 步
这一步传的是「服务器版」包 ops-server.zip(222 KB),不是 Windows 的免安装版。
它文件名全是英文、自带 data 文件夹、不带 Windows 版 Python —— 传上去解压完直接能用, 不用再搬文件、不用删 runtime、也不会出现乱码。

宝塔 → 文件 → 地址栏输入 /www/wwwroot/ 回车(一定要先进这个目录)→ 点「上传」→ 选 ops-server.zip → 确定。

成功的样子:列表里出现 ops-server.zip,大小 222 KB 左右, 跟 你的域名.com 那些文件夹并排。
传错地方了 / 传到根目录去了怎么办

根目录是地址栏只有 / 的那个位置(宝塔首页点「文件」默认就到这儿)。 在那解压会往服务器根上撒一堆 app、web 文件夹,很乱。

补救:在根目录选中 app、web、deploy、runtime、uploads 和那几个乱码文件 → 右键「删除」;如果提示被占用,先做阶段 5 把进程停了再删。 只删你自己刚解压出来的这些,别的不要动。然后回上面第 1 步,进 /www/wwwroot/ 重新传。

右键 ops-server.zip → 「解压」→ 确定,等两秒。

解压完会多出一个 ops 文件夹,再点进去看,程序就在里面了,不用再剪切粘贴。 最后把 zip 删掉,省地方。

成功的样子:/www/wwwroot/ops/ 里直接看到 app、web、data、uploads、deploy、README.txt、start.sh。
解压出来文件名还是乱码?

说明你传的是旧的免安装版(文件名带中文)。乱码只影响 先看我.txt 和两个 .bat, 程序本身(app、web)是英文名,不影响运行,可以不管。

但既然要重传,直接换 ops-server.zip 更省事 —— 全英文名,永远不会乱。

没有 data 文件夹?

旧包不带空目录,会这样。不影响使用:程序第一次启动会自己建 data 和 uploads, 数据库也在里面。想要它一开始就存在,就用 ops-server.zip,里面已经放好了。

点一下复制ls /www/wwwroot/ops/ && ls /www/wwwroot/ops/app/ | head -8

第一行应该是 app data deploy start.sh uploads web 这样(顺序不看);第二行能看到 server.py。

成功的样子:看到 server.py 就对了。
看不到 server.py?

目录多套了一层(比如 /www/wwwroot/ops/ops/app)。正确路径必须是 /www/wwwroot/ops/app/server.py,把里面那层的东西移上来一级。

4

手动跑一次,看它能不能起来(3 分钟)

4 步

宝塔 → 终端,粘这两行:

点一下复制cd /www/wwwroot/ops
sh start.sh
start.sh 是包里带的启动脚本,它已经替你做了两件事: 进到 app 目录、带上「不要演示数据」开关(OPS_NO_DEMO=1)。 不加那个开关,系统会自动塞进假员工(王芳、李梅)和一堆假数据,上线后就麻烦了 —— 所以别自己手打命令,就用它。
成功的样子:打印「运营管理系统 已启动」,还有「商家:演示体检中心」。
卡住了?

sh: start.sh: No such file → 你不在 ops 目录,先 cd /www/wwwroot/ops。

python3: command not found → 阶段 2 没做完,回去装。

Address already in use → 8765 被占了,跑 ss -lntp | grep 8765 看是谁。

No module named ... → 目录没传对,回阶段 3 最后一步核对。

忘了加开关、起来一堆假数据?别点界面上的「清除演示数据」,它会把当天真脚本一起删。 正解:rm -f /www/wwwroot/ops/data/ops.db 删库重来(这时库里没真数据,删了没损失)。

想手动跑也行:cd /www/wwwroot/ops/app && env OPS_NO_DEMO=1 python3 server.py。

启动信息下面会有「自检提醒 N 项」,通常是:

  • 时区不是北京时间
  • 公网地址还是 127.0.0.1

现在不用处理,阶段 8 一起解决。只要不是红字报错就行。

成功的样子:心里有数:待会儿要改时区和公网地址。

在终端按 Ctrl+C,回到命令行。这是让出 8765 端口,下一步守护任务才能启动。

成功的样子:显示「已停止」,能重新输命令了。
点一下复制ss -lntp | grep 8765 || echo "端口空着,可以了"
成功的样子:打印「端口空着,可以了」。
5

让它常驻,关掉终端也不停(3 分钟)

3 步

宝塔 → 软件商店 → 搜 进程守护 → 找到「进程守护管理器」→ 安装。

成功的样子:左侧菜单多出「进程守护管理器」。

点「添加任务」,只有这五处要填,其他保持默认:

字段填什么
名称运营管理系统
启动用户root
运行目录/www/wwwroot/ops(不用带 app,脚本自己会进去)
启动命令sh start.sh
进程数量1
成功的样子:列表里出现这条,状态「运行中」。
启动失败 / 一直重启?

九成是 8765 还占着 —— 回阶段 4 确认按了 Ctrl+C。还不行就跑 pkill -f server.py。

另一种是运行目录填错,必须是 /www/wwwroot/ops(启动命令 sh start.sh 就在这个目录里找它)。

点一下复制curl -s http://127.0.0.1:8765/api/ping
成功的样子:返回一段 {"ok":true...}。返回 Failed 就是没起来。
6

建站点,把域名接进来(5 分钟)

4 步

宝塔 → 网站 → 「添加站点」:

  • 域名:ops.你的域名.com(换成你自己的)
  • PHP 版本:选「纯静态」—— 这套系统不用 PHP,别装任何 PHP 扩展
  • 数据库、FTP 都不用建,留空
成功的样子:网站列表多出这一条,跟原有站点并排。
提示「域名已存在」?

说明这个域名绑在别的站点上了。换个二级域名(比如 ops2),或先去老站点里删掉。

点这个站点名 → 左侧「反向代理」→ 「添加反向代理」:

字段填什么
代理名称ops(随便填)
目标 URLhttp://127.0.0.1:8765
发送域名$host
成功的样子:反代列表出现一条,目标指向 127.0.0.1:8765,「缓存」那列写「已关闭」。
「缓存」保持关闭,别开。这套系统是实时业务 —— 打卡、任务、客户随时在变。 开了缓存,Nginx 会把页面和接口的结果存起来,员工看到的是几分钟甚至昨天的数据,你在后台改完设置也不会立刻生效。 那一列显示「已关闭」就是对的,什么都不用点。
提交后报 502?

502 = Nginx 找不到后面的程序。回阶段 5 确认守护任务「运行中」,再 curl http://127.0.0.1:8765/api/ping 验一下。

电脑浏览器打开 http://ops.你的域名.com

成功的样子:出现登录页,上面有名字「运营方(我)」。

点「运营方(我)」进去,看板能打开就行。

成功的样子:进到管理端,看到数据看板(数字都是 0,正常)。
7

上 HTTPS(3 分钟,免费)

3 步

站点设置 → 左侧「SSL」→ 选「Let's Encrypt」→ 勾上你的域名 → 点「申请」。

成功的样子:提示申请成功,有效期 3 个月(到期宝塔自动续)。
申请失败怎么办?

九成是这两件事:① 域名还没解析到这台服务器(回阶段 0);② 80 端口没放行(阶段 8 第五步)。

实在申请不下来,去阿里云/腾讯云申请免费证书,下载后手动上传到 SSL 页面。

还在 SSL 那页,把「强制 HTTPS」开关打开。

成功的样子:开关变蓝;用 http:// 打开会自动跳成 https://,地址栏有小锁。

打开 https://ops.你的域名.com

成功的样子:出登录页,地址栏有小锁。
8

收尾:把两个坑填上(5 分钟)

6 步

服务器默认是 UTC(伦敦时间),比北京时间慢 8 小时。不改的话 7:30 发早任务、17:30 群里催办会整体错开 8 小时。改它只要一条命令。

① 打开终端:宝塔左侧菜单拉到最下面 → 点「终端」。会出来一块黑底白字的窗口, 光标在最后闪、前面有个 #,就能输命令了。

② 把命令粘进去:点下面代码块右上角的「点一下复制」→ 回到黑窗口里点一下空白处 → 右键 → 粘贴 → 按 回车。

点一下复制timedatectl set-timezone Asia/Shanghai && date
终端里 Ctrl+V 经常没反应,用右键粘贴最稳, 或者 Ctrl+Shift+V。
成功的样子:窗口里打出一行时间,跟你手机上的时间一模一样,末尾写着 CST, 比如 Sat Oct 31 22:35:12 CST 2026。
(CST = 中国标准时间。如果末尾还是 UTC、或者时间差 8 小时,说明没改成功,看下面。)
提示 command not found / Failed to set time zone?

老系统(早期 CentOS 7、某些容器)没有 timedatectl,用这条代替,效果一样:

点一下复制ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && date

还报错就用这条(最原始的写法,几乎一定能成):

点一下复制cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && date
时区改对了,但 7:30 还是没发?

因为程序还在用启动时的旧时区,改完必须重启服务 —— 就是下一步要做的。

宝塔 → 进程守护管理器 → 找到那条任务 → 点「重启」。

成功的样子:状态重新变成「运行中」。

浏览器打开 https://ops.你的域名.com → 点「运营方(我)」登录 → 左侧 设置 → 找到「系统网址」→ 填:

点一下复制https://ops.你的域名.com

必须 https 开头,末尾不要加斜杠。填完点最下面「保存设置」。

成功的样子:提示「已保存」。
不填会怎样?

员工在企业微信里点开的链接是 127.0.0.1,手机上打不开;群消息里的「点这里」也是死的。 这一项决定了所有发出去的链接,是最容易被漏掉、又最难查的一项。

填的值(记一份)
已记住

同一个设置页,最上面「商家名称」→ 把「演示体检中心」改成真实名字, 比如「康泰体检中心(人民路店)」→ 保存。

成功的样子:保存后刷新,左上角显示新名字。
商家名称
已记住

页面在哪(按你的宝塔版本对号入座):

  • 宝塔 9.x 新版(左侧叫「安全中心」的):点左侧「安全中心」→ 在页面右半边找到「防护状态」那一块 → 里面有一行「系统防火墙」(右边是个绿色开关和一个齿轮)→ 点「系统防火墙」这几个字或点齿轮 → 进去就是「端口规则」列表。
  • 宝塔 7.x / 8.x 老版(左侧叫「安全」的):点左侧「安全」→ 默认打开的就是「端口规则」页。

看什么:一张表,列着协议、端口、状态、策略。扫一眼 80 和 443:

  • 已经在表里、策略「允许」→ 什么都不用做(宝塔装好默认就放行了 80/443,八成是这种情况)
  • 不在表里 → 点「添加端口规则」→ 协议 TCP、端口 80、来源「所有IP」、策略「允许」、备注「网站」→ 提交; 再来一次,端口填 443、备注「网站SSL」→ 提交
8765 千万不要放行。它只给本机 Nginx 用(Nginx 在服务器内部访问它),暴露到公网等于多开一个后门。 如果表里已经有 8765,点右侧「删除」把它去掉。
成功的样子:端口规则里有 80 和 443,策略都是「允许」;没有 8765。
状态那列可能显示「正常」或「未使用」—— 都行,不影响;如果显示「外网不通」,说明宝塔这层通了、 云厂商安全组还没放行,看下一步。
新版翻遍了也找不到「系统防火墙」?

三个备选入口,任选一个:

① 左侧菜单「系统」→ 里面通常有「防火墙」;

② 左侧菜单最下面点「≡」展开(面板窄的时候菜单会收成图标);

③ 直接用命令看,比点界面快:终端里粘这一条,看输出有没有 80/tcp 443/tcp:

点一下复制firewall-cmd --list-ports 2>/dev/null || ufw status

要补放行的话(CentOS / 大部分云服务器):

点一下复制firewall-cmd --zone=public --add-port=80/tcp --permanent && firewall-cmd --zone=public --add-port=443/tcp --permanent && firewall-cmd --reload

Ubuntu / Debian 的服务器用这条:

点一下复制ufw allow 80/tcp && ufw allow 443/tcp

这一步在阿里云 / 腾讯云 / 华为云的控制台里,不在宝塔里。找到这台服务器的「安全组」, 确认入方向放行了 80 和 443。

成功的样子:前面 http/https 都能打开的话,说明已经通了,这步可以跳过。
为什么单独提这一步?

「宝塔里放了、控制台没放,外网照样进不来」—— 这是最常见的「明明配好了就是打不开」。

9

接企业微信(员工免登 + 自动提醒)

6 步
不接也能用 —— 员工在浏览器输网址照样能打卡。接了之后:免登录(企微里点链接直接进)、 自动提醒(7:30 任务 / 12:30 催办 / 20:30 小结 / 周一 9:00 周报)。可以过几天再做。

用管理员身份登录 work.weixin.qq.com → 左侧「我的企业」→ 「企业信息」→ 页面拉到最下面,有一行「企业ID」。

是 ww 开头的一串字母数字。

成功的样子:复制到了 ww 开头的一串。
CorpID
已记住

左侧「应用管理」→ 中间「自建」那栏 → 「创建应用」:

  • logo:随便一张方图
  • 应用名称:运营打卡
  • 可见范围:选全员或勾上具体部门

点创建 → 进应用详情页 → 页面第一行就是 AgentId,纯数字,比如 1000002。

成功的样子:拿到一串纯数字。
AgentId
已记住

同一个应用详情页,往下找「Secret」→ 点「查看」→ 企业微信会发一条消息到你的企微里(或者直接显示)→ 复制。

Secret 只显示这一次。丢了就在同一页点「重置」, 旧的立刻失效,系统里填的也要跟着换。
Secret
已记住

管理端 → 设置 → 「企业微信自建应用」→ 填 CorpID / AgentId / Secret → 保存 → 点面板右上角的「测试连接」。

成功的样子:弹出「连接正常。应用 AgentId=…,名称「运营打卡」」。 看到这个就行,不用等着收消息——这一步本来就不发消息。
「连接正常」是什么意思?它只是拿 Secret 去换一次通行证, 证明 CorpID / AgentId / Secret 三个值都填对了、服务器也能连上企微。发消息是下一步的事。

想现在就在企微里真收到一条(不用等到阶段 11),两个入口任选:

  • 刚弹出的那个「连接正常」窗口里,点「真发一条试试」
  • 或者关掉窗口 → 管理端右上角「测试推送」→ 选「早 · 今日脚本池」→ 先「只看内容」看文案 → 再「真发出去」

发不出去的话,九成是「员工管理」里没人的「企业微信号」填了东西, 或者填的不是企微里的账号(填姓名、手机号都不行)。系统会直接告诉你是哪一种。

测试连接报错?照着改就行,不用猜错误码

系统会把企微的错误翻成大白话:

• 「corpid 填错了」→ 回去核对企业ID,注意别复制多了空格。

• 「Secret 填错了,或者被重置过」→ 重新点一次「查看」,或重置后重填。

• 「AgentId 填错了,必须是数字」→ 别把应用名粘进去了。

还是那个应用详情页 → 找「网页授权及JS-SDK」→ 点「设置可信域名」。

弹窗里有两个框,只填上面那个,下面那个留空:

框怎么填
可作为应用 OAuth2.0 网页授权功能的回调域名(上面那个) 填:ops.你的域名.com(免登靠它,必填)
可调用 JS-SDK、跳转小程序的可信域名(下面那个) 留空:这套系统没用企微的 JS-SDK(不调摄像头、不扫码、不分享),填了反而要求多做一次域名归属校验

填的时候注意:只填域名,不要 https://,不要结尾斜杠,不要路径。 最好从你自己的网址栏复制粘贴,别手打 —— i 和 j、0 和 O 最容易看错, 打错一个字母,后面怎么校验都过不了(企微会去校验那个根本不存在的域名)。

然后按顺序做这四步:

  1. 它会给你一个校验文件,名字像 WW_verify_xxxxx.txt,下载下来
  2. 把这个文件传到服务器的 /www/wwwroot/ops/web/(跟 admin.html 同一层),放到这里就够,不用放站点根目录
  3. 浏览器打开 https://你的域名/WW_verify_xxxxx.txt(注意:没有 /static/ 这一层),能看到一串字符就对了
  4. 回到企微点「确定」
企微要的是「域名根」下的地址,也就是 https://你的域名/WW_verify_xxxxx.txt —— 很多教程让你放 /static/ 下面,企微不认,会一直提示「域名所有权校验不通过」。 我们这套系统已经做了处理:文件放进 web/ 目录,根路径和 /static/ 两处都能访问,照上面第 3 步的地址填就行。
成功的样子:企微提示验证通过。
打开那个地址是 404 / 显示找不到?

① 文件没传到 /www/wwwroot/ops/web/(注意是 ops/web,不是 ops 也不是 ops/app);

② 文件名被改了 —— 必须跟企微给的完全一样,大小写都要一致(WW_verify_0LMp0TQmve7hbAMd.txt 这种,注意大小写混用);

③ 程序是旧版 —— 老版本只认 /static/ 开头的地址,需要把 app/server.py 换成新版再重启服务;

④ 域名还没解析到这台服务器,或者 Nginx 的反向代理没配好 —— 先用浏览器打开首页确认网站本身能访问。

它说备案主体不一致?

企微要求:这个域名的备案主体要跟企业微信的主体是同一家(或者有关联关系)。

如果域名是用别人公司名义备案的,这里过不去。两个办法:① 换一个本公司备案的域名; ② 在企微「我的企业 → 企业信息」里核对主体名称是否一致。

文件传了但访问 404?

① 放错目录 —— 必须是 ops/web/,不是 ops/ 也不是 ops/app/。

② 路径写错 —— 必须有 /static/ 这一层。

③ 文件名被改了 —— 上传后看一眼,跟企微给的完全一致(含大小写)。

点「测试」报 60020 / not allow to access from your ip?

意思是:你的服务器 IP 不在这个应用的「企业可信IP」名单里,企微不让它调接口,所以「连不上」。

怎么修:还是这个应用详情页 → 往下滚到「开发者接口」那一块 → 找到「企业可信IP」→ 点「配置」或「设置」→ 把服务器的公网 IP 填进去 → 保存 → 回去再点一次测试。

不知道 IP 是多少?报错信息里就写着:from ip: 42.193.108.196 —— 冒号后面那串抄下来填进去; 或者看宝塔首页左上角「服务器 IP」。

别搞混:「企业可信IP」和上面那个「可信域名」是两件事,两个都要配。 可信域名管的是「网页能不能在企微里打开」,可信IP 管的是「服务器能不能调企微接口」(发消息、免登都要靠它)。

配好之后如果还报,检查 IP 有没有填错一位,或者服务器换过 IP(云主机重装/换弹性IP 会变)。

  1. 管理端 → 员工管理 → 每个员工后面填「企业微信号」 (通讯录 → 点开那个人 → 「账号」,不是昵称)
  2. 设置 → 「登录方式」→ 从「演示模式」改成「企业微信免登」→ 保存
  3. 把 https://你的域名/wecom/enter 发到员工群 —— 必须让员工在企业微信里点这个链接
  4. 员工在企微里点开 → 自动认人 → 直接进「今日任务」
成功的样子:员工点链接直接进去,右上角是他本人名字。
第一次点进来的员工如果系统里没他的企微号,系统会自动建档, 名字从企微带过来、角色默认「员工」。你去员工管理核对一下改成对的就行。
你自己(老板/运营)也别忘了填。员工管理里给你自己的账号也填上企业微信号。 不填的话,你从企微点进去会被当成「新员工」新建一个号,进的是员工端,看不到管理端, 还得回电脑切成演示模式登回来补。
点了没反应 / 白屏 / 提示「请在微信客户端打开」?

八成是在手机浏览器里打开的,或者把链接发到个人微信里点的。 企业微信的自动登录只在企业微信 App 里有效,浏览器里谁都进不去 —— 这不是配置错。

正确做法:打开企业微信 App → 随便找个会话(发给自己、发给同事都行)→ 把链接粘上发出去 → 在企微里点它,会自动进入。

新版系统做了兜底:用浏览器打开会直接显示「请在企业微信里打开这个链接」并附上链接, 不会再白屏让你猜。

只是想先看看员工端、填一条数据试试?设置 → 登录方式 → 临时切回「演示模式」→ 手机上刷新就能点身份进去填一条,看完再切回「企业微信免登」。不影响任何数据。

为什么要填企业微信号?三个作用:① 私聊推送(早/午/晚)靠它; ② 群里能 @ 到他;③ 免登认人靠它。填了不亏。
10

群机器人(把纪要、日报推到群里)

2 步

不用 corpid,跨企业也能推 —— 你作为服务商,商家不用进你的企业微信。

  1. 手机企业微信打开目标群 → 右上角「…」→「群机器人」→「添加机器人」
  2. 起个名字(比如「运营日报」)→ 创建
  3. 复制 Webhook 地址(https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=...)
  4. 粘到系统:设置 → 群机器人 Webhook → 保存
最稳的做法:让商家在他们自己的内部群加一个机器人,把 webhook 发给你,你填进系统。 推送走他们的群,你完全不用进他们的企业。
加不了机器人?看这条

群里混了个人微信用户(没装企微的)就加不了。 让他们单独建一个「员工群」放机器人。

群的类型:企业内部群能加;跨企业协作群(都是企微)大多能加; 有个人微信的群加不了。

Webhook 地址
已记住

设置页点「测试连接」显示正常 → 推送测试选「早 · 个人今日任务」→ 先点「只看内容」确认文案对 → 再点「真发出去」。

成功的样子:群里和员工手机上都收到了。
这一步是唯一能证明「整条链路通了」的验证。 前面都配对了但没发过,等到周一早上才发现发不出去就晚了。
11

AI 与录音转文字(可选,先跑起来再配)

3 步

去 DeepSeek 开放平台注册 → API Keys → 创建,拿到 sk- 开头的 Key。

管理端 → 设置 → AI 助手:

框填什么
接口地址https://api.deepseek.com/v1
模型名deepseek-chat
Key刚拿到的 sk- 那串
不填功能不会变灰 —— 系统走内置的 30 条手册,回答是规则版的, 能用但没那么灵。填了才切到真大模型。
但有一件事没 Key 做不了:每天自动写当天的几条脚本(默认 5 条)。
那是让大模型读你的门店信息和最近拍过的标题,写一期新的。配了这一步就不用再管简报: 管理端 →「每日简报」→ 勾「每天自动写一期」→ 时间 06:30。
不配也行,只是每天要你放一个 HTML 文件,或者手工建一条。
大模型 Key
已记住

腾讯云控制台 → 右上角头像 → 访问管理 → API 密钥管理 → 新建密钥, 拿到 SecretId(AKID 开头)和 SecretKey。

管理端 → 设置 → 语音转写 → 填进去 → 点「测试连接」。

建议建个子账号,只给「语音识别」权限。 主账号密钥权限太大,万一泄露是全站失守。子账号密钥照样能用。

多少钱:约 0.78 元/小时,按分钟算,不用包月。测试连接花不到一分钱。

不填也能用:「现场录音」用不了,但「上传文件」里的 txt / docx 转写稿照样能传,不花钱不配密钥。
注意:上传 m4a / mp3 音频跟录音一样要走腾讯云,也要配密钥。
SecretId
已记住
SecretKey
已记住
测试连接报错?

• 「密钥 ID 不对」→ 复制少了字符,或复制成了 SecretKey,两个别搞反。

• 「签名不对」→ 同上,SecretId 和 SecretKey 填反了。

• 「本机时间不准」→ 服务器时间不对,签名被当成过期的。执行 timedatectl set-timezone Asia/Shanghai。

• 「额度」相关 → 账号没实名,或语音识别没开通,去控制台开通。

设置 → 语音转写 → 热词。格式 词|权重,多个用逗号隔开,权重越高越容易被认出来。

例子:体检套餐|10,外送备案|10,幽门螺杆菌|8,检验科|8

不填也能用。用几次发现哪些词老听错,回来补上就行。
12

验收与备份(必做)

5 步

把手机 WiFi 关掉、用 4G/5G 流量,浏览器打开:

点一下复制https://ops.你的域名.com/app
成功的样子:手机上出现员工端页面。
为什么必须用流量?连着公司 WiFi 时,就算服务器没配对也可能歪打正着能打开,测不出真问题。

手机上进「我的」,随便填个数字保存 → 完全关掉浏览器 → 重新打开 → 看数字还在不在。

成功的样子:数字还在,说明数据库写进去了。

宝塔终端执行 reboot,等 2 分钟,再访问 https://ops.你的域名.com。

成功的样子:能打开 —— 说明开机自启生效了,以后重启不用你管。
重启后打不开?

进程守护没设开机启动。宝塔进程守护管理器里看这条任务有没有开「开机启动」, 或进去点一次「启动」再去设置里勾上。

所有数据就在 /www/wwwroot/ops/data/ops.db 这一个文件里,备份它就行。

宝塔 → 计划任务 → 任务类型选「Shell 脚本」→ 执行周期选「每天」→ 脚本内容:

点一下复制cp /www/wwwroot/ops/data/ops.db /www/backup/ops_$(date +%F).db

(/www/backup 这个文件夹不存在的话,先在宝塔文件里建一个。)

别省这一步。服务器到期、误删、被攻击,全靠这个备份文件兜底。 建议每周手动下载一份到自己电脑 —— 云端备份也可能跟服务器一起没。
成功的样子:第二天去 /www/backup/ 看,出现了一个带日期的 .db 文件。

本机和服务器是两套独立的系统,数据不互通。你在本机填的东西不会跑到服务器上,反之亦然。

所以:本机留着当练习场,改功能、试设置都在本机玩;员工用的是服务器那个地址。 你的电脑关机也不影响员工使用。

成功的样子:关掉本机黑窗口,服务器地址照样能打开。
全部勾完,这套系统就正式跑起来了。
之后每天的事都不用你动手:早上 7:30 自动发脚本任务,12:30 催没交的人,17:30 在群里点名, 20:30 给你小结,周一 9:00 发周报。
你日常只有两件事:开会后新建会议纪要(AI 提炼 → 确认下发),以及每周看一眼周报。
上线完整手册 · 体检中心运营管理系统
勾选和填写的值只存在这台电脑的浏览器里,随时可清空(不影响系统本身)