首页
/ 微信机器人教程WeChat Bot:群聊关键词监控

微信机器人教程WeChat Bot:群聊关键词监控

2026-02-04 05:15:14作者:仰钰奇

引言:告别996式群聊管理

你是否还在为数百个微信群的消息过多而焦头烂额?错过重要通知、遗漏客户咨询、无法及时处理违规信息?本教程将带你构建一个基于WeChaty的智能群聊关键词监控系统,只需30分钟配置,即可实现7×24小时自动值守,让机器人成为你的群管理得力助手。

读完本文你将掌握:

  • 群聊关键词实时监控与精准匹配
  • 多维度提醒机制(@提醒/私聊通知/日志记录)
  • 关键词白名单/黑名单分级管理
  • 无侵入式代码改造与灵活扩展

技术架构概览

flowchart LR
    A[微信消息] --> B{群聊白名单验证}
    B -->|通过| C[关键词匹配引擎]
    B -->|拒绝| D[忽略消息]
    C --> E{关键词类型}
    E -->|普通关键词| F[标准回复]
    E -->|特定词| G[警告+记录]
    E -->|紧急关键词| H[@管理员+处理]
    F & G & H --> I[消息反馈/日志]

核心依赖组件

组件 版本 作用 国内CDN
Wechaty ^1.20.2 微信协议封装 https://cdn.npmmirror.com/packages/wechaty
wechaty-puppet-wechat4u ^1.14.14 微信网页版协议 https://cdn.npmmirror.com/packages/wechaty-puppet-wechat4u
dotenv ^16.4.5 环境变量管理 https://cdn.npmmirror.com/packages/dotenv
qrcode-terminal ^0.12.0 扫码登录 https://cdn.npmmirror.com/packages/qrcode-terminal

前置准备

开发环境检查

# 检查Node.js版本 (需≥v18.0)
node -v 
# 克隆项目仓库
git clone https://gitcode.com/GitHub_Trending/we/wechat-bot
cd wechat-bot
# 安装依赖 (国内用户推荐)
npm config set registry https://registry.npmmirror.com
npm install

环境变量配置

# 复制环境变量模板
cp .env.example .env
# 编辑关键配置 (使用vim或其他编辑器)
vim .env
# .env关键配置项
BOT_NAME=@监控机器人  # 机器人在群内的@名称
ROOM_WHITELIST=技术交流群,产品讨论组  # 监控群聊白名单
KEYWORDS=紧急bug,问题,重要信息  # 监控关键词列表(英文逗号分隔)
ALERT_ADMIN=管理员微信昵称  # 关键词匹配时@的管理员
LOG_LEVEL=info  # 日志级别: debug/info/warn/error

核心实现:关键词监控系统

1. 消息处理流程改造

修改src/wechaty/sendMessage.js文件,在现有消息处理逻辑中插入关键词监控模块:

// 在defaultMessage函数中添加关键词监控逻辑
async function defaultMessage(msg, bot, ServiceType = 'GPT') {
  // ... 原有代码 ...
  
  // 新增关键词监控逻辑
  if (isRoom && room) {
    const keywords = process.env.KEYWORDS?.split(',') || [];
    const hasKeyword = keywords.some(keyword => 
      content.toLowerCase().includes(keyword.toLowerCase())
    );
    
    if (hasKeyword) {
      // 记录关键词日志
      console.log(`[关键词监控] 群聊:${roomName}, 用户:${alias}, 内容:${content}`);
      
      // @管理员提醒
      const adminContact = await bot.Contact.find({ name: process.env.ALERT_ADMIN });
      await room.say(`${adminContact} ⚠️ 检测到关键词匹配: ${keywords.filter(k => content.includes(k)).join(', ')}`);
      
      // 发送详细日志到管理员私聊
      if (adminContact) {
        await adminContact.say(`[群聊监控报告]\n群名称: ${roomName}\n发送者: ${alias}\n内容: ${content}\n时间: ${new Date().toLocaleString()}`);
      }
    }
  }
  
  // ... 原有回复逻辑 ...
}

2. 关键词匹配引擎优化

创建src/wechaty/keywordMonitor.js专用模块:

import { log } from 'wechaty';

/**
 * 关键词监控核心模块
 * @param {Object} options - 监控配置
 * @param {Message} options.msg - 微信消息对象
 * @param {Wechaty} options.bot - 机器人实例
 * @param {string[]} options.keywords - 监控关键词列表
 * @param {string} options.adminName - 管理员微信昵称
 */
export async function monitorKeywords({ msg, bot, keywords, adminName }) {
  const content = msg.text();
  const room = msg.room();
  const roomName = await room?.topic();
  const contact = msg.talker();
  const alias = (await contact.alias()) || (await contact.name());
  
  // 关键词匹配 (支持模糊匹配)
  const matchedKeywords = keywords.filter(keyword => 
    content.toLowerCase().includes(keyword.toLowerCase().trim())
  );
  
  if (matchedKeywords.length > 0 && room) {
    // 构建提醒消息
    const alertMsg = [
      `⚠️ 检测到关键词: ${matchedKeywords.join(', ')}`,
      `📢 发送者: ${alias}`,
      `📝 内容片段: ${content.substring(0, 50)}...`,
      `🕒 时间: ${new Date().toLocaleString()}`
    ].join('\n');
    
    // 群内@管理员
    const adminContact = await bot.Contact.find({ name: adminName });
    if (adminContact) {
      await room.say(`${adminContact} ${alertMsg}`);
    }
    
    // 详细日志记录
    log.info(`[KEYWORD_MONITOR] ${roomName} - ${alias}: ${matchedKeywords.join(', ')}`);
  }
}

3. 集成到消息事件

src/index.js中注册关键词监控事件:

// 导入关键词监控模块
import { monitorKeywords } from './wechaty/keywordMonitor.js';

// 修改onMessage事件处理
async function onMessage(msg) {
  // 原有消息处理
  await defaultMessage(msg, bot, serviceType);
  
  // 新增关键词监控
  await monitorKeywords({
    msg,
    bot,
    keywords: process.env.KEYWORDS?.split(',') || [],
    adminName: process.env.ALERT_ADMIN
  });
}

4. 配置文件关联

确保.env配置被正确加载,修改src/index.js顶部:

// 确保环境变量正确加载
dotenv.config();
console.log('关键词监控已启用,监控列表:', process.env.KEYWORDS);

功能测试与验证

测试命令

# 启动机器人
npm run dev

# 或指定服务类型启动
npm run start -- --serve deepseek

测试流程

  1. 扫码登录:终端显示二维码后,使用微信扫码登录机器人账号
  2. 加入测试群:将机器人拉入ROOM_WHITELIST中配置的测试群
  3. 关键词测试:发送包含监控关键词的消息,验证提醒效果
测试消息示例: 
"大家注意,发现一个紧急bug需要处理" 
"这个系统存在重要问题"

预期效果

[终端日志]
[关键词监控] 群聊:技术交流群, 用户:测试账号, 内容:大家注意,发现一个紧急bug需要处理

[微信群消息]
@管理员 ⚠️ 检测到关键词: 紧急bug
📢 发送者: 测试账号
📝 内容片段: 大家注意,发现一个紧急bug需要处理...
🕒 时间: 2025-09-07 16:40:58

高级扩展:智能化监控

1. 关键词分级提醒

修改关键词配置格式,支持分级提醒:

# .env中修改关键词配置
KEYWORDS=紧急bug:critical,问题:high,重要信息:medium

更新keywordMonitor.js支持分级处理:

// 解析分级关键词
const keywordLevels = process.env.KEYWORDS?.split(',')
  .map(item => {
    const [word, level = 'medium'] = item.split(':');
    return { word, level };
  }) || [];

// 分级提醒逻辑
const matchedKeywords = keywordLevels.filter(({ word }) => 
  content.toLowerCase().includes(word.toLowerCase())
);

if (matchedKeywords.length > 0) {
  const criticalKeywords = matchedKeywords.filter(k => k.level === 'critical');
  if (criticalKeywords.length > 0) {
    // 紧急关键词处理逻辑(如电话通知)
  }
  // ... 其他级别处理 ...
}

2. 日志持久化

添加日志文件输出功能,安装日志依赖:

npm install winston

创建src/utils/logger.js

import winston from 'winston';
import fs from 'fs';
import path from 'path';

// 确保日志目录存在
const logDir = path.join(process.cwd(), 'logs');
if (!fs.existsSync(logDir)) fs.mkdirSync(logDir);

// 创建日志器
export const logger = winston.createLogger({
  level: process.env.LOG_LEVEL || 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ 
      filename: path.join(logDir, 'keyword-alert.log'),
      level: 'warn'
    }),
    new winston.transports.Console({
      format: winston.format.simple()
    })
  ]
});

在关键词监控中使用日志器:

import { logger } from '../utils/logger.js';
// 替换console.log为
logger.warn(`[KEYWORD_ALERT] ${roomName} - ${alias}`, {
  keywords: matchedKeywords,
  content: content.substring(0, 100),
  timestamp: new Date().toISOString()
});

部署与运维

Docker容器化部署

# Dockerfile优化
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm config set registry https://registry.npmmirror.com && npm install --production

COPY . .

# 日志持久化
VOLUME ["/app/logs"]

CMD ["npm", "run", "start", "--", "--serve", "deepseek"]

构建运行命令:

# 构建镜像
docker build -t wechat-keyword-bot .

# 运行容器
docker run -d \
  --name wechat-bot \
  -v $(pwd)/.env:/app/.env \
  -v $(pwd)/logs:/app/logs \
  wechat-keyword-bot

常见问题排查

问题 解决方案
机器人不响应 1. 检查.env配置是否正确
2. 确认Node版本≥18
3. 查看日志文件排查错误
关键词不触发 1. 检查ROOM_WHITELIST配置
2. 确认关键词无多余空格
3. 检查消息是否被其他逻辑拦截
登录二维码不显示 1. 确保终端支持UTF-8
2. 尝试使用npm run start命令
频繁掉线 1. 检查网络稳定性
2. 减少机器人同时加入的群聊数量

总结与扩展方向

本教程实现了基础的群聊关键词监控功能,核心亮点:

  1. 低侵入架构:不影响原有自动回复功能,模块化设计便于维护
  2. 灵活配置:通过环境变量轻松管理监控关键词和提醒对象
  3. 完整日志:支持分级日志和持久化存储,便于审计追溯

扩展建议

  1. 关键词正则匹配:支持更复杂的模式匹配
  2. 动态配置更新:添加HTTP接口实现关键词热更新
  3. 多维度提醒:集成企业微信/钉钉提醒渠道
  4. 内容过滤:结合AI服务实现语义分析
mindmap
  root(关键词监控系统)
    核心功能
      关键词匹配
      分级提醒
      日志记录
    技术架构
      Wechaty协议
      模块化设计
      环境变量配置
    扩展方向
      AI语义分析
      多渠道提醒
      动态规则管理

附录:完整配置示例

# .env完整配置参考
BOT_NAME=@监控助手
ROOM_WHITELIST=技术部,产品讨论组,测试群
ALIAS_WHITELIST=管理员,测试账号
KEYWORDS=紧急bug,问题,重要信息,数据问题,故障
ALERT_ADMIN=技术主管
LOG_LEVEL=info
SERVICE_TYPE=deepseek
DEEPSEEK_API_KEY=your_api_key_here

学习资源推荐

  1. Wechaty官方文档:https://wechaty.js.org/docs/
  2. Node.js流处理:https://nodejs.org/api/stream.html
  3. Docker最佳实践:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
  4. 日志管理规范:https://12factor.net/logs

如果本教程对你有帮助,请点赞收藏关注三连!下期预告:《微信机器人进阶:基于AI的智能内容审核》

登录后查看全文
热门项目推荐
相关项目推荐