← 所有文章
指南

X 在 2026 年封禁自动私信——只做接收的客服团队如何照常收发消息 — UnifyPort

如果你在 X 上做客服或社群运营,平台 2026 年的规则调整大概已经带着一个让人心头一紧的标题躺进了你的收件箱。自动私信——也就是有人关注你时自动弹出的那条”感谢关注,看看我的产品”——现在被明确禁止。通过自动化批量发送的私信、对陌生用户的冷启动私信,统统不允许。任何把私信接口用于营销目的的程序化调用,都可能直接导致 API 权限被收回。再叠加上 2026 年 2 月切换到的按量计费——读取一条私信就是一次计费请求——对一个小团队来说,结论很直白:在 X 上做外发自动化,现在既受限制又要花钱。

但有一点在恐慌中被忽略了。如果你的团队是用 X 来接收消息的——订单咨询、客服工单、需要人工回复的提及——那么 2026 年这轮整顿几乎没有一条是冲着你来的。新规针对的是一种非常具体的行为:未经许可、自动化、大规模的外发私信。而接收别人主动发给你的消息、并尽快交到人工手上,是另一个完全不同的问题,答案也不一样。

到底改了什么

把新规说精确很重要,因为”X 严打私信自动化”这个标题,比规则本身宽泛得多。

被禁止的行为本质上都是未经许可的外发:关注触发的自动私信、批量私信营销、对从没先联系过你的人的冷启动私信,以及任何为营销而自动发出的私信。X 同时收紧了数据处理的表述——服务在存储非公开私信内容前必须取得明确、知情的同意,也不得把私信内容暴露给无权查看的人。

定价方面,免费 API 档位在 2026 年 2 月对新开发者关闭,其余人转为按量计费。开放之后费率几经调整,但结构才是关键:每一次读取都是一次请求,每一次请求都有价。对于靠轮询监控私信的团队——每 30 秒调一次接口看有没有新消息——这意味着一块持续运转的电表,无论这段时间进来了十条消息还是一条都没有。

所以对一个入站团队而言,官方路径如今带着两笔互不相干的成本:合规成本(高频程序化访问会在自动化新规下受到审查)和计费成本(每次轮询都要付费)。而这两笔成本,都跟你的客户实际发来的消息毫无关系。

为什么”接收”是另一个问题

重新看清楚你的客服团队到底在做什么。客户发来一条私信问问题,一个人读到它、打字回复、发出去。这条外发消息没有任何”自动化”成分——是人写的——所以自动私信禁令根本不适用。你真正需要自动化的,只是把进来的消息足够快地送到团队手里,快到能在 SLA 内回复。

这是一个入站路由问题,不是外发自动化问题。而最干净的解法恰恰和轮询相反:不是让你的服务反复去问 X”有新消息了吗?“,而是消息一到就被推送给你。没有轮询循环,就没有持续运转的读取电表,也没有让自动化新规盯上的高频访问模式。你接收别人发给你的东西,人工回复,从头到尾不会主动发出一条未经许可的私信。

用一个 Webhook 接收 X 的私信和提及

UnifyPort 接入你的 X 账号,把入站私信和提及在发生的瞬间推送到你自己的 Webhook 端点。你只需注册一次端点、订阅你关心的事件,入站活动就会以归一化的 message.received 事件抵达——这和 WhatsApp、Telegram、LINE、TikTok、Zalo 是同一套结构,于是一个多渠道客服台只读一套 schema,而不用应付六种平台格式。

创建 Webhook 时,你列出 subscribed_events(用 ["*"] 订阅全部,或显式写明 message.receivedaccount.status.updated),并设置一个 signing_secret。此后每一次投递都会带上 HMAC-SHA256 签名,你的处理器在信任请求体之前先验签。一条投递过来的私信长这样:

{
  "event": "message.received",
  "data": {
    "account_id": "acct_x_support",
    "provider": "twitter",
    "chat_id": "dm_8841f0",
    "sender": "user_3a91c7",
    "message": {
      "id": "x_msg_5f2a91",
      "type": "text",
      "text": "你好——我的订单发货了吗?物流链接打不开",
      "reply_token": "rt_9b1c7e..."
    },
    "timestamp": 1750939200
  }
}

你的接收端先验签,再把消息路由到团队分诊的地方——一个 Slack 频道、一个工单系统、一个数据库:

const crypto = require("crypto");

app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
  const signature = req.get("X-UnifyPort-Signature");
  const expected = crypto
    .createHmac("sha256", process.env.SIGNING_SECRET)
    .update(req.body)
    .digest("hex");
  if (signature !== expected) return res.sendStatus(401);

  const { event, data } = JSON.parse(req.body);
  if (event === "message.received" && data.provider === "twitter") {
    routeToTriage({
      chatId: data.chat_id,
      from: data.sender,
      text: data.message.text,
      messageId: data.message.id,
    });
  }
  res.sendStatus(200);
});

注意这个处理器做什么:它从不发私信。它只接收、验签、路由。当你的客服写好回复,回复会通过 UnifyPort 的归一化发送接口以”人工撰写”的形式发出——不是自动私信,不是批量营销。(一个 X 特有的小提醒:引用回复用的 reply_to.reply_token 字段目前仅 WhatsApp 支持,所以在 X 上你发的是普通回复而非引用回复;入站事件依然会带上这个 token,供支持它的平台使用。)

因为事件是推送的、漏掉的事件也不靠轮询补回,你的团队会在消息发出后数秒内看到入站活动——通常比 30 秒的轮询周期更快,而且在没人来的安静日子里,读取电表不会在后台空转。

落地的下一步

2026 年的新规划了一条清晰的线:X 不希望自动外发的私信淹没用户的收件箱,并且现在对程序化读取收费。一个入站客服团队完全站在这条线正确的一侧——每一条回复都是人写的,根本没有理由去轮询接口。如果你现在为了知道”客户什么时候发来消息”而对着 X 跑一个轮询服务,那么换成基于推送的 Webhook,一步就同时消除了合规风险和计费读取。

把你的 X 账号接到一个统一入站 Webhook,指向一个会验签并按 chat_id 路由的端点,让你的团队回到那件新规从未限制过的事上:回答那些来找他们的人。