首页 / 博客 / 机器人·功能实战

微信群接龙统计机器人

分类:机器人·功能实战 · 标签:微信群接龙统计、微信群机器人开发、个人微信API

前言

微信群接龙是社群运营中极为常见的场景:家长群收餐费、拼团群汇总参与人数、打卡群统计签到、社区团购整理订单……每次接龙结束后,群主或管理员都得逐条翻聊天记录、手动复制粘贴、再整理进表格,耗时费力且容易遗漏。借助微信群管理机器人方案,可以让机器人自动监听接龙消息、实时解析回复内容、生成汇总报告,彻底解放双手。

接龙统计机器人的核心工作原理

微信群接龙本质上是一种固定格式的文本消息。发起人发出"1. 张三"之后,后续参与者依次回复"2. 李四""3. 王五",每条消息都遵循"序号 + 点号 + 内容"的结构。机器人要完成统计,需要做到以下几件事:

  1. 实时收取群消息:通过 API 监听指定群聊的消息推送,捕获所有文本消息。
  2. 识别接龙格式:正则匹配序号行,区分"发起消息"和"接龙回复"。
  3. 去重与排序:同一用户可能多次回复,需要按发送时间取最新一条;序号也可能不连续,需要按序整理。
  4. 生成汇总:将解析结果以结构化文本回复到群内,支持按需触发(关键词"查看接龙")或定时推送。

整个流程的基础是能够稳定接收个人微信消息推送。WechatApi 基于 iPad 协议实现,不依赖 PC 端 Hook 或安卓模拟器,登录稳定性高,消息实时性好,是搭建此类群机器人的可靠底层。

环境准备与接口接入

在动手写代码之前,需要完成以下准备工作:

准备项说明
WechatApi 账号前往 控制台 注册,获取 VideosApi-token 鉴权凭证
设备绑定用一台微信账号扫码登录,获取对应的 appId(设备 ID)
服务器/本地环境Python 3.9+,能够接收 HTTP 回调或主动轮询消息
消息推送配置在控制台配置 Webhook 地址,消息到达后平台主动 POST 到你的服务

完成上述配置后,所有微信消息都会实时推送到你指定的 Webhook 端点,格式统一为 JSON,字段包含发送者、群 ID、消息类型、消息内容等,处理起来非常方便。

消息监听与接龙识别

Webhook 接收消息

平台推送过来的消息体示例如下(示意结构,字段名以实际文档为准):

json{
  "ret": 200,
  "msg": "ok",
  "data": {
    "msgType": 1,
    "fromUser": "wxid_abc123",
    "fromNickname": "李四",
    "roomId": "12345678@chatroom",
    "content": "2. 李四 报名",
    "createTime": 1718000000
  }
}

接收到消息后,先判断 roomId 是否以 @chatroom 结尾(群消息),再对 content 做正则匹配。

接龙格式正则解析

pythonimport re
from collections import defaultdict

# 接龙行匹配:序号 + 点/顿号 + 内容
JIELONG_PATTERN = re.compile(r'^(\d+)[.。、]\s*(.+)$', re.MULTILINE)

def parse_jielong(content: str) -> list[dict]:
    """
    解析接龙文本,返回 [{"index": 1, "text": "张三 已付款"}, ...]
    """
    results = []
    for match in JIELONG_PATTERN.finditer(content):
        idx = int(match.group(1))
        text = match.group(2).strip()
        results.append({"index": idx, "text": text})
    return results

# 示例
sample = """
1. 张三 已付款
2. 李四 报名
3. 王五
"""
print(parse_jielong(sample))
# [{'index': 1, 'text': '张三 已付款'}, {'index': 2, 'text': '李四 报名'}, {'index': 3, 'text': '王五'}]

正则中 [.。、] 兼容中英文标点,\s* 容忍序号后有空格,re.MULTILINE 支持整段接龙(发起人一次发多行的场景)。

对于逐条回复的接龙,每条消息通常只有一行,解析后把结果存入以 roomId 为键的内存字典(或 Redis、SQLite),在收到"查看接龙"关键词时统一输出。

数据聚合与去重逻辑

实际使用中存在几个常见问题,需要在聚合层处理:

问题一:同一序号被多人抢占 部分群友习惯不看当前进度,直接发"1. 自己名字"。需要按序号分组,保留 createTime 最早的一条,或者直接提醒重复。

问题二:同一人多次修改 群友发现写错了会重新发一条,需要按发送者 fromUser 去重,保留最新一条。

问题三:接龙发起消息本身 发起人的第一条消息往往包含说明文字加"1. 发起人",需要识别为"发起"而非普通接龙回复,可通过检测消息是否包含多行来判断。

python# 聚合示例:按序号保留最早一条,同一人按 wxid 保留最新一条
from typing import Optional

class JielongCollector:
    def __init__(self, room_id: str):
        self.room_id = room_id
        # key: wxid, value: {"index": int, "text": str, "ts": int}
        self.by_user: dict[str, dict] = {}
        self.started = False
        self.start_ts: Optional[int] = None

    def feed(self, wxid: str, content: str, ts: int):
        rows = parse_jielong(content)
        if not rows:
            return
        if not self.started:
            self.started = True
            self.start_ts = ts
        for row in rows:
            existing = self.by_user.get(wxid)
            if existing is None or ts > existing["ts"]:
                self.by_user[wxid] = {**row, "ts": ts, "wxid": wxid}

    def summary(self) -> str:
        items = sorted(self.by_user.values(), key=lambda x: x["index"])
        lines = [f"{i['index']}. {i['text']}" for i in items]
        total = len(lines)
        return f"📋 接龙汇总(共 {total} 人):\n" + "\n".join(lines)

主动发送汇总消息

统计完成后,需要将结果发回群内。调用 WechatApi 的发送消息接口(HTTP POST + JSON),鉴权通过请求头 VideosApi-token 传递:

pythonimport requests

API_BASE = "https://api.wechatapi.net"   # 示意域名,以实际文档为准
TOKEN = "your_videos_api_token_here"
APP_ID = "your_app_id_here"              # 控制台获取的设备 ID

def send_group_text(room_id: str, text: str) -> dict:
    url = f"{API_BASE}/message/sendText"
    headers = {
        "VideosApi-token": TOKEN,
        "Content-Type": "application/json"
    }
    payload = {
        "appId": APP_ID,
        "toUser": room_id,
        "content": text
    }
    resp = requests.post(url, json=payload, headers=headers, timeout=10)
    result = resp.json()
    # 正常返回:{"ret": 200, "msg": "ok", "data": {"msgId": "xxx"}}
    if result.get("ret") != 200:
        raise RuntimeError(f"发送失败:{result.get('msg')}")
    return result

在 Webhook 处理函数中,检测到消息内容为"查看接龙"或"@机器人 统计"时,调用 send_group_textcollector.summary() 的结果发回群内即可。

进阶功能:定时推送与多群管理

基础版机器人仅响应关键词触发,进阶需求通常包括:

定时汇总:在接龙截止时间(如每天 18:00)自动推送统计结果。可用 APScheduler 实现:

bashpip install apscheduler requests flask
pythonfrom apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

def daily_summary_job(room_id: str, collector: JielongCollector):
    text = collector.summary()
    send_group_text(room_id, text)
    collector.by_user.clear()   # 清空,准备下一轮接龙

# 每天 18:00 触发
scheduler.add_job(
    daily_summary_job,
    "cron", hour=18, minute=0,
    args=["12345678@chatroom", collectors["12345678@chatroom"]]
)
scheduler.start()

多群隔离:用字典 collectors: dict[str, JielongCollector]roomId 为键,各群独立维护接龙状态,互不干扰。

导出 Excel:汇总后可用 openpyxl 将接龙数据写入 .xlsx 文件,通过 WechatApi 的文件发送接口推送到群内,方便群主留存记录。

防刷屏限制:同一用户 60 秒内重复发接龙格式消息只取最后一条,避免有人恶意刷接龙。

这些进阶场景在微信二次开发中属于常规需求,WechatApi 提供的消息收发、文件发送、群成员查询等接口能够满足全流程所需。

部署注意事项

稳定性要点

安全要点

合规要点

个人微信机器人用于内部社群运营、自用工具是常见做法,但需注意:不得用于批量骚扰、营销垃圾消息或违规导流。WechatApi 在官网的使用条款中对合规用途有明确说明,接入前请仔细阅读。

小结

微信群接龙统计机器人的核心链路清晰:Webhook 接收消息 → 正则解析接龙格式 → 按用户去重聚合 → 关键词或定时触发汇总 → 调用 API 回复群内。整套方案 Python 百来行即可跑通,维护成本低,扩展性强。

底层能力上,WechatApi 的 iPad 协议登录方式相比 PC Hook 更稳定、比安卓模拟器更轻量,特别适合需要长期在线的群机器人场景。如果你正在为社群管理的重复性工作头疼——接龙统计只是起点,签到打卡、关键词自动回复、成员画像分析都可以在同一套架构上叠加,一步步把群主从繁琐事务中解放出来。

想动手试试?

WechatApi 提供扫码登录、消息收发、好友与群管理等 REST 接口,注册后几分钟跑通。

立即免费注册查看开发文档

相关产品页

🔗 个人微信API(产品页)🔗 微信二次开发(产品页)🔗 微信机器人开发(产品页)

相关文章

30 分钟做一个微信自动回复机器人(完整实战)微信机器人接入 GPT,实现智能自动回复微信群管理机器人开发实战:自动迎新、答疑、踢人微信客服机器人怎么做?7×24自动应答+转人工方案
© 2025 WechatApi · 企业级微信智能机器人接入平台
官网价格帮助文档博客
苏ICP备2024128799号 · 苏ICP备2023038368号