企业微信通知接入,HeyGem生成完成自动提醒
在数字人视频批量生产场景中,一个常被忽视却极其关键的环节是:任务完成后的及时反馈。运营人员上传音频和10个视频模板后,需要等待几分钟甚至几十分钟——期间无法得知进度、不确定是否成功、更难协调下游分发动作。这种“黑盒式等待”,正在悄悄消耗团队对AI工具的信任感。
有没有可能让系统在视频生成完成的第一时间,就主动把结果链接、耗时统计、失败提示等信息,推送到团队最常用的沟通平台?答案是肯定的。本文将完整呈现一种轻量、稳定、零侵入的集成方案:为 HeyGem 数字人视频生成系统(批量版 WebUI)接入企业微信消息通知,实现“生成即提醒、失败即告警、结果可直达”。
该方案不修改 HeyGem 源码,不依赖其内部 API(当前未开放),也不引入复杂中间件。它基于系统天然具备的两个可靠信号源:输出目录文件变化和运行日志实时写入,配合企业微信机器人 Webhook,用不到50行 Shell 脚本,构建起一条从 AI 推理到组织协同的闭环通路。
1. 为什么是企业微信?而非邮件或短信
选择企业微信作为通知出口,并非偶然,而是源于真实协作场景的深度观察:
- 全员覆盖:研发、运营、审核、市场等角色均已在企微中实名在线,无需额外注册或安装;
- 上下文丰富:支持发送文字、链接、图片缩略图,可直接嵌入生成视频的预览图与下载地址;
- 权限可控:机器人可限定在指定群内发言,消息不外泄,符合内容安全规范;
- 免打扰设计:支持@特定成员、设置关键词高亮、配置消息模板,避免信息淹没;
- 零成本接入:企业微信提供免费机器人能力,仅需一个 Webhook 地址,无调用量限制。
相比之下,邮件通知延迟高、打开率低;短信成本高、无法承载富媒体;而自建消息中心则开发维护成本过高。企业微信恰好站在了“易用性”与“专业性”的黄金交点上。
更重要的是,HeyGem 的输出行为高度结构化:
每次批量生成完成后,必在/root/workspace/heygem-webui/outputs/下生成latest_batch.zip文件;
同时,日志文件/root/workspace/运行实时日志.log中会追加一行形如[INFO] Batch generation completed. Total: 8 videos, Time: 247s的记录。
这两个确定性事件,就是我们触发通知的完美锚点。
2. 通知系统架构设计:三步轻量集成
整个通知机制采用“监听→解析→推送”三级流水线,完全解耦于 HeyGem 主流程,不影响其任何功能稳定性。
2.1 架构概览
+---------------------+ +------------------------+ +----------------------+ | HeyGem WebUI 进程 | | 通知监听守护进程 | | 企业微信机器人 | | - 写入日志 |---->| - tail -f 日志文件 |---->| - 接收 JSON 消息 | | - 生成 latest_batch.zip | | - inotifywait 监听 outputs/ | | - 发送至指定群聊 | +---------------------+ | - 解析成功/失败语义 | +----------------------+ +------------------------+ ↑ +------------------------+ | Jenkins 或手动触发入口 | | (可选:用于补发/重试) | +------------------------+该设计有三大优势:
🔹零侵入:不修改 HeyGem 一行代码,不重启服务;
🔹强健性:即使 HeyGem 崩溃或重启,监听进程仍持续工作;
🔹可扩展:后续可轻松接入飞书、钉钉,只需替换推送模块。
3. 实现步骤详解:从创建机器人到脚本部署
3.1 第一步:在企业微信中创建群机器人
- 打开目标企业微信群 → 点击右上角「…」→「群机器人」→「添加机器人」;
- 输入机器人名称(如“HeyGem通知助手”),点击「添加」;
- 复制生成的 Webhook 地址(形如
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx); - 重要:记下该地址,后续将写入脚本;同时建议开启「仅群管理员可管理」以保障安全。
小贴士:为便于测试,可先将机器人添加至个人小群,验证通过后再移入正式运营群。
3.2 第二步:编写核心通知脚本notify_heygem.sh
将以下脚本保存为/root/workspace/heygem-webui/scripts/notify_heygem.sh,并赋予执行权限:
#!/bin/bash # ===== 配置区(请按实际修改)===== WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_webhook_key_here" OUTPUT_DIR="/root/workspace/heygem-webui/outputs" LOG_FILE="/root/workspace/运行实时日志.log" NOTIFY_GROUP="【HeyGem视频生成】" # ===== 函数定义 ===== send_wechat_msg() { local title="$1" local desc="$2" local url="$3" local thumb_url="$4" # 可选:首张生成视频缩略图URL(需自行部署静态服务) local payload=$(cat <<EOF { "msgtype": "news", "news": { "articles": [ { "title": "$title", "description": "$desc", "url": "$url", "picurl": "$thumb_url" } ] } } EOF ) curl -X POST \ -H 'Content-Type: application/json' \ -d "$payload" \ "$WEBHOOK_URL" >/dev/null 2>&1 } # ===== 主逻辑 ===== echo " HeyGem 通知监听服务已启动" echo " 监听日志:$LOG_FILE" echo " 监听输出:$OUTPUT_DIR/latest_batch.zip" # 启动日志尾部监听(后台) tail -f "$LOG_FILE" | while IFS= read -r line; do # 匹配成功完成日志 if echo "$line" | grep -q "Batch generation completed"; then echo " 检测到生成完成:$line" # 提取关键信息 total_videos=$(echo "$line" | grep -oE 'Total: [0-9]+' | cut -d' ' -f2) elapsed_time=$(echo "$line" | grep -oE 'Time: [0-9]+s' | cut -d' ' -f2) timestamp=$(date '+%Y-%m-%d %H:%M') # 构造通知标题与描述 title=" HeyGem 批量生成完成" desc="共生成 $total_videos 个视频,耗时 $elapsed_time\n⏰ 完成时间:$timestamp\n 输出位置:$OUTPUT_DIR" url="http://$(hostname -I | awk '{print $1}'):7860/file=outputs/latest_batch.zip" # 发送企业微信消息 send_wechat_msg "$title" "$desc" "$url" echo "📨 已向企业微信发送完成通知" # 匹配失败日志(可根据实际日志调整关键词) elif echo "$line" | grep -q -i "error\|exception\|failed\|crash"; then echo "❌ 检测到错误日志:$line" error_time=$(date '+%Y-%m-%d %H:%M') title=" HeyGem 生成任务异常" desc="日志中发现错误关键词,请立即检查:\n\n$line\n\n⏰ 时间:$error_time" url="http://$(hostname -I | awk '{print $1}'):7860" send_wechat_msg "$title" "$desc" "$url" echo "🚨 已向企业微信发送异常告警" fi done & TAIL_PID=$! # 同时监听 latest_batch.zip 创建事件(双重保险) inotifywait -m -e create,attrib "$OUTPUT_DIR" --format '%w%f' | while read file; do if [[ "$file" == "$OUTPUT_DIR/latest_batch.zip" ]]; then echo "📦 检测到 latest_batch.zip 生成" # 避免重复发送:检查是否已由日志触发过(简单去重) sleep 2 if ! tail -n 10 "$LOG_FILE" | grep -q "Batch generation completed"; then echo " 补充触发完成通知(日志未捕获)" title=" HeyGem 批量生成完成(文件检测)" desc="ZIP包已就绪,可直接下载使用" url="http://$(hostname -I | awk '{print $1}'):7860/file=outputs/latest_batch.zip" send_wechat_msg "$title" "$desc" "$url" fi fi done & # 保持主进程运行 wait $TAIL_PID注意事项:
- 将
WEBHOOK_URL中的your_webhook_key_here替换为你的真实 Key;- 确保服务器能访问公网(企业微信 Webhook 需外网可达);
- 若 HeyGem 运行在内网,
url中的 IP 应为可被企微客户端访问的地址(如 Nginx 反代域名);- 脚本默认监听
Batch generation completed关键词,若日志格式变更,请同步调整grep条件。
3.3 第三步:部署并启动监听服务
创建脚本目录并赋权:
mkdir -p /root/workspace/heygem-webui/scripts chmod +x /root/workspace/heygem-webui/scripts/notify_heygem.sh安装依赖(如未安装):
apt update && apt install -y inotify-tools curl # Ubuntu/Debian # 或 yum install -y inotify-tools curl # CentOS/RHEL启动监听服务(建议使用 systemd 管理):
# 创建 systemd 服务文件 cat > /etc/systemd/system/heygem-notify.service << 'EOF' [Unit] Description=HeyGem Generation Notification Service After=network.target [Service] Type=simple User=root WorkingDirectory=/root/workspace/heygem-webui/scripts ExecStart=/root/workspace/heygem-webui/scripts/notify_heygem.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable heygem-notify.service systemctl start heygem-notify.service验证服务状态:
systemctl status heygem-notify.service # 应显示 active (running) journalctl -u heygem-notify.service -f # 查看实时日志
4. 效果实测:一次完整的通知闭环
我们模拟一次典型任务:上传一段 2 分钟英语课程音频,搭配 5 个不同讲师的视频模板,启动批量生成。
4.1 生成过程监控
- HeyGem WebUI 页面显示:
处理中:video_03.mp4 (3/5) — 62%; - 日志文件实时追加:
[INFO] Starting batch generation with audio: inputs/audio.mp3 [INFO] Processing video_01.mp4... [INFO] Processing video_02.mp4... [INFO] Batch generation completed. Total: 5 videos, Time: 183s outputs/目录下出现latest_batch.zip(大小约 120MB)。
4.2 企业微信即时反馈
几秒内,企微群中收到结构化消息卡片:
** HeyGem 批量生成完成**
共生成 5 个视频,耗时 183s
⏰ 完成时间:2025-04-12 14:28
输出位置:/root/workspace/heygem-webui/outputs/
点击下载最新批次 ZIP
点击链接即可直接下载 ZIP 包,无需登录服务器或切换页面。
若中途某视频因分辨率不合规报错,日志中出现:
[ERROR] Failed to process video_04.mp4: Unsupported resolution 3840x2160则立刻收到告警卡片:
** HeyGem 生成任务异常**
日志中发现错误关键词,请立即检查:[ERROR] Failed to process video_04.mp4: Unsupported resolution 3840x2160
⏰ 时间:2025-04-12 14:25
前往 HeyGem 控制台
5. 进阶优化:让通知更智能、更实用
上述基础方案已满足核心需求,但还可通过以下方式进一步提升体验:
5.1 添加视频缩略图预览(增强可信度)
企业微信支持在消息卡片中嵌入图片。你可利用 FFmpeg 快速提取 ZIP 中首个视频的第 5 秒帧作为缩略图:
# 在 notify_heygem.sh 的 send_wechat_msg 前添加: if [ -f "$OUTPUT_DIR/latest_batch.zip" ]; then unzip -p "$OUTPUT_DIR/latest_batch.zip" | head -c 1000000 | ffmpeg -i - -ss 00:00:05 -vframes 1 -f image2 - > /tmp/heygem_thumb.jpg 2>/dev/null THUMB_URL="http://$(hostname -I | awk '{print $1}'):8000/thumb.jpg" # 需另起静态服务提供访问 fi效果:消息卡片右侧显示高清缩略图,运营人员一眼确认内容无误。
5.2 支持多任务区分与标签化
若同一台 HeyGem 服务被多个业务线共用(如教育线、营销线),可在通知中加入来源标识:
- 修改 HeyGem 启动脚本,在环境变量中注入
TASK_SOURCE=edu_q1; - 日志中自动打标:
[INFO][edu_q1] Batch generation completed...; - 通知脚本中解析
[xxx]标签,标题改为【教育Q1】HeyGem 批量生成完成。
5.3 与 Jenkins 流水线深度联动
若你已部署 Jenkins 自动化(参考前文博文),可将通知脚本作为 Jenkins Job 的最后一步:
// Jenkinsfile 片段 post { always { sh ''' # 等待 HeyGem 完成后,强制触发一次通知(确保不漏发) timeout(time: 5, unit: 'MINUTES') { while [ ! -f "/root/workspace/heygem-webui/outputs/latest_batch.zip" ]; do sleep 10 done } /root/workspace/heygem-webui/scripts/notify_heygem.sh --force ''' } }6. 总结:自动化通知不是锦上添花,而是信任基石
当 AI 工具从“能用”走向“敢用”,关键不在模型参数有多惊艳,而在整个工作流是否透明、可预期、可追溯。HeyGem 本身已具备高质量的数字人合成能力,而本次接入的企业微信通知,正是为其补上了最后一块拼图——将机器的确定性,转化为人的确定性。
这套方案的价值,远不止于“省去人工查进度”:
- 对运营:任务状态一目了然,可精准安排审核、分发、上线节奏;
- 对研发:异常日志自动告警,问题定位时间从小时级缩短至分钟级;
- 对管理者:每日生成量、平均耗时、失败率等数据自然沉淀,成为优化依据;
- 对跨团队协作:无需解释“生成好了没”,消息即事实,链接即交付。
它不追求技术炫技,只专注解决一个朴素问题:让每一次 AI 的辛勤工作,都被看见、被确认、被及时使用。
而这,恰是 AI 落地最坚实的第一步。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。