← 所有文章
指南

一个 Webhook 搞定 LINE、Zalo 和 X:东南亚团队如何同时接收三个平台的消息 — UnifyPort

胡志明市一家电子零售商的三人客服团队,每天处理来自三个平台的客户消息。泰国买家用 LINE 沟通,越南本地客户习惯 Zalo,跨境订单的问题则来自 X(前 Twitter)的私信。任何时刻,订单询问都可能从三个渠道同时涌入。

这支团队曾为此维护三套独立集成:三个 Webhook 端点、三种签名验证实现、三组凭证按不同周期轮换。新开发者入职第一周,全花在读各平台文档上,一行业务逻辑都没来得及写。

每个平台的官方接入都是一个独立项目

麻烦在于,三个平台在 API 层面确实截然不同。

LINE 需要在 LINE Developers Console 注册频道,验证 Webhook 端点所有权,并用 Channel Access Token 签署每条响应。Webhook 事件以 events 数组形式下发,messagefollowunfollow 等事件类型结构各异。2026 年 1 月起,新频道还需遵守 LINE MINI App 的频道同意简化强制要求。

Zalo 要求注册官方账号(Official Account),并需符合 Terms v2 更新要求——该更新引入了 Zalo ID 强制迁移机制,并调整了用户数据删除请求的处理时效规定。ZNS API(Zalo Notification Services)与消息 API 是两套独立体系。Webhook 事件结构也与 LINE 不同:sender.id 在顶层,事件类型为平铺字符串,签名头的字段名也完全不一样。

X 在 2026 年 2 月之前,基础读取还能依赖免费套餐。现在免费套餐已取消,按用量计费:读一条帖子收 $0.005,私信(DM)访问权限只在企业版(每月 $5,000)中提供。对于通过私信处理订单咨询的小团队来说,这个账算不过来。

三套集成各自独立失效,管理成本成倍叠加。2026 年 2 月和 3 月 LINE 的两次 Webhook 故障(400 错误和 5xx 延迟),正是分散集成的代价。

关键洞察:接入消息不需要出站凭证

上面列举的大部分复杂度,来自发送消息的一侧——管理频道、以官方身份认证、审核模板。但如果你的需求只是接收客户消息,再路由到 CRM、触发自动化流程或喂给 AI 模型,就不需要成为任何平台的官方认证账号。

你需要的数据(谁发的、发了什么、什么时间)是一样的,不论通过哪条路径获取。问题只是:你要自己管理各平台的凭证轮换和格式归一,还是让这一层交给别人处理?

一个端点,三个平台

UnifyPort 为 LINE、Zalo 和 X 提供非官方接入接口(同时支持 WhatsApp、Telegram 和 TikTok)。注册一个 Webhook URL 和一个共享 HMAC-SHA256 密钥,三个平台的消息统一投递到同一端点,格式已经归一化。

架构如下:

LINE 客户  ──┐
Zalo 客户  ──┼──► UnifyPort ──► POST /webhook(你的服务器)
X 客户     ──┘                  X-UnifyPort-Signature: sha256=...

每条入站消息,不论来自哪个平台,顶层字段结构完全一致:

{
  "platform": "zalo",
  "event": "message",
  "timestamp": 1748995200000,
  "from": {
    "id": "3106863660815684400",
    "display_name": "Nguyễn Văn A"
  },
  "message": {
    "id": "msg_02GY8M",
    "type": "text",
    "text": "Tôi muốn hỏi về đơn hàng"
  }
}

"platform": "zalo" 换成 "platform": "line""platform": "x",其余结构不变。业务逻辑只需读取 platformfrom.idmessage.text,仅此而已。

签名验证也是统一的,一套实现覆盖三个平台:

const crypto = require('crypto');

app.post('/webhook', express.raw({ type: '*/*' }), (req, res) => {
  const signature = req.headers['x-unifyport-signature'];
  const expected = 'sha256=' + crypto
    .createHmac('sha256', process.env.UNIFYPORT_SECRET)
    .update(req.body)
    .digest('hex');

  if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
    return res.status(401).end();
  }

  const { platform, from, message } = JSON.parse(req.body);
  // 路由到 CRM、写入数据库、触发自动化
  routeInbound({ platform, senderId: from.id, text: message.text });
  res.status(200).end();
});

不需要分别管理 LINE 的 x-line-signature 和 Zalo 的 mac 头。一个处理器,三个平台全覆盖。

这支团队做了什么改变

胡志明市的这家零售商用一个周末完成了替换。之前入职时花了整整一周读文档的新开发者,几小时内就写完了统一处理器。现在他们根据 payload 里的 platform 字段自动路由:LINE 消息进泰语队列,Zalo 消息进越南语队列,X 私信进国际客服分组。

2 月和 3 月 LINE 故障的担忧也随之消失——UnifyPort 的投递层负责重试和补发,团队的 Webhook 只需返回 200。

开始接入

前往 unifyport.ai 接入第一个平台,无需注册官方账号、无需通过频道审核、无按消息计费。LINE、Zalo 和 X 与 WhatsApp、Telegram、TikTok 同属一个套餐。

如果你已经在跑一套 WhatsApp 集成,想知道再加两个平台需不需要再花一周时间——答案是下午,不是下周。