Один Webhook для LINE, Zalo и X: как команды в Юго-Восточной Азии обрабатывают три платформы одновременно — UnifyPort
Команда поддержки из трёх человек в хошиминском интернет-магазине электроники ежедневно обрабатывает сообщения с трёх платформ. Покупатели из Таиланда пишут в LINE, вьетнамские клиенты предпочитают Zalo, а вопросы по международным заказам приходят через Direct Messages в X (бывший Twitter). В любой момент запрос может поступить сразу с трёх каналов — и так происходит каждый день.
Раньше команда поддерживала три отдельные интеграции: три Webhook-эндпоинта, три разные реализации проверки подписи, три набора учётных данных с разными циклами ротации. Когда в команду пришёл новый разработчик, он провёл первую неделю только за чтением документации — ни строчки бизнес-логики.
Каждая официальная интеграция — это отдельный проект
Сложность в том, что все три платформы на уровне API устроены совершенно по-разному.
LINE требует зарегистрировать канал в LINE Developers Console, подтвердить владение Webhook-эндпоинтом и подписывать каждый ответ с помощью Channel Access Token. Webhook-события приходят в массиве events, при этом типы message, follow и unfollow имеют разную структуру. С января 2026 года новые каналы обязаны включать функцию упрощённого согласия (Channel Consent Simplification) для LINE MINI App. В феврале и марте 2026 года LINE дважды падал — ошибки 400 и 5xx с задержками доставки, — что наглядно показало риски зависимости от официального API.
Zalo требует зарегистрированный Official Account и соответствие обновлённым правилам Terms v2: обязательный переход на Zalo ID и изменения в сроках обработки запросов на удаление данных пользователей. ZNS API (Zalo Notification Services) — это отдельная система, не связанная с Messaging API. Структура Webhook-событий кардинально отличается от LINE: sender.id находится на верхнем уровне, тип события — строка без вложенности, а имя заголовка подписи совсем другое.
X до февраля 2026 года позволял использовать базовое чтение в рамках бесплатного тарифа. Теперь бесплатный тариф упразднён. Действует модель оплаты по факту использования: $0,005 за прочтение одного поста. Доступ к Direct Messages открыт только на корпоративном тарифе ($5 000 в месяц). Для небольшой команды, которой нужно просто получать DM от клиентов, это экономически нецелесообразно.
Три независимые интеграции — три независимых источника сбоев. Когда каждая из них ломается по-своему, дежурство превращается в постоянную головную боль.
Ключевой инсайт: для входящих сообщений не нужны исходящие учётные данные
Большая часть описанной сложности связана с отправкой сообщений — управлением каналами, авторизацией от имени официального аккаунта, согласованием шаблонов. Но если задача только в том, чтобы получать сообщения клиентов, маршрутизировать их в 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": "Nguyen Van A"
},
"message": {
"id": "msg_02GY8M",
"type": "text",
"text": "Tôi muốn hỏi về đơn hàng"
}
}
Замените "platform": "zalo" на "platform": "line" или "platform": "x" — остальная структура неизменна. Бизнес-логика читает только platform, from.id и message.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();
});
Никаких отдельных обработчиков для x-line-signature в LINE и mac в Zalo. Один обработчик — три платформы.
Что изменила команда
Хошиминский ритейлер заменил три отдельные интеграции за выходные. Новый разработчик, потративший целую неделю на чтение документации, написал унифицированный обработчик за несколько часов. Теперь маршрутизация происходит автоматически по полю platform в payload: сообщения из LINE попадают в очередь тайскоязычной поддержки, из Zalo — в очередь вьетнамскоязычной, DM из X — в отдел международной поддержки.
Беспокойство по поводу февральских и мартовских сбоев LINE тоже ушло. Слой доставки UnifyPort берёт на себя повторные попытки и повторную доставку; Webhook команды достаточно вернуть 200 — сообщение будет доставлено гарантированно.
Начало работы
Подключите первую платформу на unifyport.ai — без регистрации официального аккаунта, без очереди на проверку канала, без поминутной тарификации. LINE, Zalo и X доступны в том же тарифе, что WhatsApp, Telegram и TikTok.
Если у вас уже работает интеграция WhatsApp и вы думаете, уйдёт ли ещё неделя на добавление двух платформ — ответ: нет, это работа на один день, а не на неделю.