← All posts
Guide

One Webhook for LINE, Zalo, and X: How Southeast Asia Teams Handle Three Platforms at Once — UnifyPort

A three-person support team at a Ho Chi Minh City electronics retailer handles customer messages from three platforms every day. Thai buyers reach out on LINE. Vietnamese customers use Zalo. International orders generate X direct messages. At any given moment, an order inquiry could arrive on any of the three — sometimes all three in the same hour.

For over a year, they ran three separate integrations. Three webhook endpoints. Three different signature-verification implementations. Three sets of platform credentials rotated on different schedules. When they hired a new developer, she spent her first week reading documentation before writing a single line of business logic.

Why Each Platform’s Official Path Is Its Own Project

The friction compounds because each platform is genuinely different at the API layer.

LINE requires you to register a channel in the LINE Developers Console, verify ownership of your webhook endpoint, and sign every response with a channel access token. Webhook events arrive as an array under the events key, with event types like message, follow, and unfollow nested differently. New channels as of January 2026 must comply with the channel consent simplification mandate for LINE MINI Apps. Getting a fresh LINE channel live is a half-day task if you know what you’re doing, a multi-day task if you don’t. The underlying LINE Official Account requirements — including the 500-friend cap on unverified accounts and the up-to-60-business-day verification timeline — are covered in detail here.

Zalo requires a registered Official Account and compliance with the Terms v2 update, which introduced mandatory Zalo ID migration for users and changed how businesses handle data deletion requests. The ZNS API (Zalo Notification Services) is separate from the Messaging API. Webhook event bodies differ structurally from LINE — sender.id lives at the top level, the event type is a flat string, and the signature scheme uses a different header.

X was until February 2026 achievable on the free tier for basic read access. That tier is gone. The pay-per-use model now costs $0.005 per post read, and Direct Message access — what you need for inbound customer messages — is not available below the Enterprise tier ($5,000/month) through official channels. For a small team reading DMs to handle order inquiries, that math doesn’t work.

Each integration also fails independently. A LINE webhook outage in February 2026 (400 errors on all requests) and another in March (5xx errors with delayed delivery) hit teams that had no fallback. When your three integrations have three separate failure modes, on-call gets complicated fast.

The Insight: Inbound Doesn’t Need Outbound Credentials

Most of the complexity above is about outbound — sending messages, managing channels, authenticating as an official business. But if your use case is receiving customer messages, routing them to a CRM, triggering automation, or feeding an AI model — you don’t need to be a registered Official Account or a verified Business on any of these platforms.

The data you need (who sent it, what they said, when) is the same regardless of how you acquired it. The question is whether you spend your time managing per-platform credential rotation and schema normalization, or whether that layer is already handled for you.

One Endpoint, Three Platforms

UnifyPort provides an unofficial inbound interface for LINE, Zalo, and X (along with WhatsApp, Telegram, and TikTok). You register a single webhook URL and one shared HMAC-SHA256 secret. Messages from all three platforms arrive at the same endpoint in a normalized schema.

Here’s what the architecture looks like:

LINE customer  ──┐
Zalo customer  ──┼──► UnifyPort ──► POST /webhook  (your server)
X customer     ──┘                  X-UnifyPort-Signature: sha256=...

Every inbound message — regardless of platform — delivers the same top-level fields:

{
  "platform": "line",
  "event": "message",
  "timestamp": 1748995200000,
  "from": {
    "id": "U4af4980629",
    "display_name": "Somchai K."
  },
  "message": {
    "id": "msg_01HX9K",
    "type": "text",
    "text": "สวัสดีค่ะ อยากสอบถามเรื่องสินค้า"
  }
}

Swap "platform": "line" for "platform": "zalo" or "platform": "x" — the rest of the structure stays the same. Your business logic reads platform, from.id, and message.text. That’s it.

The signature verification is also unified. One implementation, one secret:

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 payload = JSON.parse(req.body);
  const { platform, from, message } = payload;

  // Route to CRM, log to database, trigger automation
  routeInbound({ platform, senderId: from.id, text: message.text });
  res.status(200).end();
});

No per-platform credential management. No separate signature libraries for LINE’s x-line-signature and Zalo’s mac header. One handler, three platforms covered.

What the Team Changed

The Ho Chi Minh City retailer replaced their three separate integrations over a weekend. The new developer who had spent a week reading docs wrote the unified handler in a few hours. They now route LINE messages to a Thai-language queue, Zalo messages to a Vietnamese-language queue, and X DMs to their international support tier — all from a single platform field in the payload.

They also stopped worrying about the February and March LINE outages. UnifyPort’s delivery layer handles retries and redelivery; the team’s webhook just needs to respond 200 and the message is guaranteed delivered.

Getting Started

Connect your first platform at unifyport.ai — no Official Account registration, no channel approval queue, no per-message billing. Line, Zalo, and X are available on the same plan alongside WhatsApp, Telegram, and TikTok.

If you’re already running one WhatsApp inbound integration and wondering whether adding two more platforms is worth another week of integration work — it’s the same afternoon of work, not the same week.