微信社群机器人接口能做哪些功能,很多人是在踩过坑之后才搞清楚的——因为接口能调,不等于该自动。同样一个踢人接口,做成全自动,两周就可能把号做没;做成"识别自动 + 处置人工",能稳定跑一年。

所以这篇先给代码再讲结论:开头这段可以直接跑,跑通了你就知道接口调用的手感;后面再展开 8 个可落地功能的分级清单,以及哪些功能千万别全自动。

这段代码的通道走 WTAPI——基于 iPad/Mac 协议的微信机器人接口服务,把消息、好友、群、朋友圈这些能力做成标准 HTTP API(下文简称"平台")。说直白点:你的程序调用它给的网址,就能用这个微信号收群消息、发群消息、读写群公告,扫码登录、掉线重连这些协议层的活由它来干。下面是入群欢迎 + 关键词应答的最小实现,依赖 pip install flask requests。

# WTAPI 接口 | 文档: https://weiti.apifox.cn
# 本段可直接跑, 覆盖微信群管最常用的两个功能:
#   - 收事件: Webhook 回调 (3秒内应答, 去重键=Appid+Data.NewMsgId; 事件类型见文档列表)
#   - 发群消息: POST /finder/v2/api/message/postText (toWxid 传群ID 即发群消息)
#   - 群公告: group/getGroupNotice + group/setGroupNotice (仅群主/管理员, 写入是整体覆盖)
# 下一步: 先在自己建的测试群跑欢迎语, 再加关键词应答, 别一上来全开
# 官网: www.chuapi.com

import threading
import requests
from flask import Flask, request

TOKEN = "YOUR_TOKEN"
APP_ID = "YOUR_APPID"
BASE = "https://wx.chuapi.com"
HEADERS = {"Content-Type": "application/json", "X-finder-TOKEN": TOKEN}

# 关键词用完整短语而不是单词, 避免在正常聊天里误插话
RULES = {
    "怎么退换": "退换货请联系群管理, 带上订单号, 24小时内处理。",
    "发货时间": "下单后 48 小时内发货, 物流信息会私聊同步。",
    "营业时间": "客服在线时间 9:00-21:00, 其他时段留言次日回复。",
}

def send(chatroom_id: str, content: str) -> None:
    requests.post(f"{BASE}/finder/v2/api/message/postText", headers=HEADERS,
                  json={"appId": APP_ID, "toWxid": chatroom_id, "content": content}, timeout=15)

def on_event(raw: dict) -> None:
    type_name = raw.get("TypeName", "")
    msg = raw.get("Data", {})

    # 入群欢迎: 事件类型以文档事件列表为准, 这里只示意分支位置
    if type_name == "<进群事件TypeName>":
        chatroom = msg.get("ChatRoomName", {}).get("string", "")
        send(chatroom, "欢迎加入! 本群是客户答疑群, 详细规则见群公告。")
        return                                  # 只发一条, 连发三条等于刷屏

    if type_name != "AddMsg":
        return
    from_wxid = msg.get("FromUserName", {}).get("string", "")
    if not from_wxid.endswith("@chatroom"):
        return                                  # 只处理群消息
    content = msg.get("Content", {}).get("string", "")
    if ":\n" not in content:
        return
    _, text = content.split(":\n", 1)           # 剥掉 "发言人wxid:" 前缀
    for phrase, answer in RULES.items():
        if phrase in text:
            send(from_wxid, answer)             # 生产环境补"同一人10分钟只答一次"
            break

app = Flask(__name__)
seen = set()

@app.route("/webhook", methods=["POST"])
def webhook() -> str:
    raw = request.get_json(silent=True) or {}
    if raw.get("TypeName") == "AddMsg":
        key = (raw.get("Appid", ""), raw.get("Data", {}).get("NewMsgId"))
        if key in seen:
            return "ok"
        seen.add(key)
    threading.Thread(target=on_event, args=(raw,), daemon=True).start()
    return "ok"                                 # 3 秒内应答, 逻辑全异步

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

跑起来之后,配好 Webhook 地址,用测试群发一句"发货时间是什么时候",群里会立刻回你预设答案。这段代码值得注意的有三处:3 秒内应答、去重键=Appid+NewMsgId、群消息要剥 wxid:\n 前缀——这三个是社群机器人最容易丢消息的地方。
微信机器人Webhook消息回调链路图:微信客户端→WTAPI微信节点→Webhook回调接口→业务服务

一、8 个可落地功能与接口映射

跑通骨架之后再挑功能,这张表可以直接当需求清单:

功能依赖能力自动化档位难度主要风险
入群欢迎进群事件回调 + 发送消息全自动低连发多条等于刷屏
关键词应答消息回调 + 发送消息全自动低命中过宽误插话
群规公告维护群公告读写全自动(需管理员)低覆盖语义,改错丢原文
违规识别与处置消息回调 + 踢人接口识别自动、处置人工中误踢不可逆
成员活跃度统计消息回调 + 成员列表全自动中发言量不代表价值
群聊内容沉淀消息回调 + 落库全自动中隐私与合规边界
活动报名接龙消息回调 + 发送消息半自动中高并发写入易错乱
多群统一运营群列表 + 公告 + 发送半自动高批量操作触发频控

二、三级自动化分档:功能该不该全自动

第一档:可以全自动

入群欢迎、关键词应答、公告维护、数据统计。判断标准是动作可撤销——发错一句欢迎语,改一下就行,不会造成不可逆损失。

第二档:识别自动,处置人工

违规识别与踢人。踢人没有撤回接口,误踢一个真客户对方不会申诉,只会把你拉黑。所以识别层可以全自动(内容信号 + 行为特征叠加),处置层必须留人确认。踢人接口的 wxids 参数是英文逗号分隔字符串,不是数组,传错会出现"调用成功但没生效"。

第三档:不建议自动化

  1. 无筛选批量拉群——不区分客户类型全拉进一个群,等于把价格体系摊开给所有人。
  2. 批量加好友、批量群发——最典型的封号诱因,接口能调,风控会立刻反应。
  3. 群内自动 @ 全体做营销——这么干的号通常活不过一周。

一句话判断标准:这个动作如果真人每天重复几十次,会不会显得异常? 会,就别自动化。

三、四个基础功能的实现要点

入群欢迎只发一条,内容三件:欢迎 + 群定位一句话 + 指路群公告。不发红包、不连发、不 @ 全体。

关键词应答用完整短语而不是单词("怎么退换"可以,"价格"不行),并加同人频次限制:同一人同一问题 10 分钟内只答一次。

群公告维护注意写入是整体覆盖语义,追加必须先读、拼接、再整体写回;且只有群主或管理员能改,机器人号要先有身份。

违规识别的两个信号要叠加:内容信号(联系方式模式、外链、变体字)看命中,但只有它不够,必须叠加行为特征(进群多久就开口、发完是否即沉默、是否高频加人)才进入处置流程。

四、四个运营功能的实现要点

活跃度统计从消息回调里累积发言人、时间、长度,按周聚合。两个陷阱:发言多不等于价值高,潜水客户也是客户;统计口径必须固定,否则月度对比没意义。

内容沉淀落库后做关键词检索。合规边界要划清:只用于内部服务改进,不对外展示、不做二次营销,存储有明确保留期限。

活动接龙三条约束:一人只计一次(用 wxid 去重)、有明确截止时间、机器人定期播报而不是每次报名都播报。

多群运营把"内容统一维护"和"逐群执行"分开。最大坑是频控——一次改几十个群的公告属于高频行为,必须分批 + 间隔,失败重试改成隔批补发,不要即时重试。

五、问答

Q1:这些功能能不能一次全开?
不能。建议顺序:欢迎 → 群规公告 → 关键词应答 → 违规识别(先只记录)→ 运营类。前四个跑两周无异常再加后面的。全开之后出问题,你分不清是哪个功能触发的。

Q2:为什么进群欢迎只发一条?
三条欢迎语在成员视角就是刷屏,而且会显得群很吵。真正需要的信息(群定位、规则)一条就够,细节放公告。

Q3:活跃度统计会不会侵犯隐私?
只统计发言次数不涉及内容,风险低;如果落库存了聊天原文,就要明确用途与保留期限,且不对外展示。内部服务改进是合理用途,二次营销越界。

Q4:接口出错怎么快速判断是哪一环?
看三处:一是回调是否 3 秒内应答(超时会导致重推和重复处理);二是去重键是否为 Appid+NewMsgId 组合;三是群消息正文有没有剥掉 wxid:\n 前缀。这三个是社群机器人最高频的故障点。

WTAPI控制台回调配置页面:管理Access Token与Webhook回调地址绑定

六、落地自检清单

  1. 功能已按三级分档,第二、三档没有被做成全自动
  2. 欢迎语只发一条,无红包、无连发、无 @ 全体
  3. 关键词用完整短语,且有同人频次限制
  4. 公告写入前先读后拼再整体写回
  5. 踢人走"识别自动 + 处置人工",有证据记录
  6. 群消息正文已剥 wxid:\n 前缀
  7. 批量操作分批执行,有频控间隔与补发机制
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐