LINE・Zalo・X を1つのWebhookで受信する:東南アジアチームの3プラットフォーム対応 — UnifyPort
ホーチミン市の電子機器小売業者で働く3人のカスタマーサポートチームは、毎日3つのプラットフォームからの顧客メッセージを処理しています。タイの購入者はLINEで問い合わせ、ベトナムの地元顧客はZaloを使用し、海外注文のサポートはXのダイレクトメッセージで届きます。注文に関する問い合わせは、いつでも3つのチャネルから同時に殺到する可能性があります。
このチームはかつて、3つの独立した連携を維持していました。3つのWebhookエンドポイント、3つの異なる署名検証の実装、異なるスケジュールでローテーションする3セットの認証情報。新しい開発者が入社したとき、彼女は1行のビジネスロジックも書かずに、最初の1週間をドキュメントの読み込みだけに費やしました。
各プラットフォームの公式連携は独立したプロジェクト
問題は、3つのプラットフォームがAPIレイヤーで本質的に異なることです。
LINEは、LINE Developers ConsoleでLINEチャンネルを登録し、WebhookエンドポイントのURLの所有権を確認し、チャンネルアクセストークンを使って各レスポンスに署名する必要があります。Webhookイベントはevents配列として届き、message、follow、unfollowなどのイベントタイプは構造が異なります。2026年1月以降、新しいチャンネルはLINE MINI Appの「チャンネル同意の簡素化」機能を強制的に有効化する必要があります。LINEチャンネルをゼロから立ち上げるには、慣れていれば半日、慣れていなければ数日かかります。
日本ではLINEが最も普及しているメッセージングアプリであり、顧客サポートや販売促進にLINEを使う企業にとって、この連携は避けて通れません。しかし、2026年2月3日と3月19日に発生したWebhookの障害(400エラーおよび5xxエラーによる遅延)は、公式APIへの依存リスクを改めて浮き彫りにしました。
Zaloは、Official Account(公式アカウント)の登録と、Terms v2アップデートへの準拠が必要です。このアップデートではZalo IDへの強制移行が導入され、ユーザーデータ削除リクエストの処理期限も変更されました。ZNS API(Zalo Notification Services)はメッセージングAPIとは別の独立したシステムです。WebhookイベントはLINEとは構造が異なり、sender.idがトップレベルに置かれ、イベントタイプはフラットな文字列です。
Xは2026年2月まで、基本的な読み取りアクセスであれば無料ティアを使用できました。現在この無料ティアは廃止され、従量課金制(投稿の読み取り1件あたり$0.005)に移行しています。ダイレクトメッセージへのアクセスはエンタープライズプラン(月額$5,000)でのみ提供されており、注文問い合わせをDMで受け付ける小規模チームには現実的ではありません。
重要な洞察:受信にはアウトバウンド認証情報が不要
上記の複雑さのほとんどは「メッセージ送信」側にあります——チャンネル管理、公式アカウントとしての認証、テンプレートの承認。しかし、顧客メッセージを受信し、CRMにルーティングし、自動化をトリガーし、AIモデルにデータを渡すだけであれば、どのプラットフォームでも公式認定アカウントになる必要はありません。
必要なデータ(誰が、何を、いつ送ったか)は取得経路に関わらず同じです。自分でプラットフォームごとの認証情報管理やスキーマの正規化を行うか、その層を既製のツールに任せるかという選択です。
1つのエンドポイント、3つのプラットフォーム
UnifyPortは、LINE、Zalo、Xの非公式インバウンドインターフェースを提供しています(WhatsApp、Telegram、TikTokも対応)。1つのWebhook URLと共有HMAC-SHA256シークレットを登録するだけで、3つのプラットフォームからのメッセージが正規化されたスキーマで同一エンドポイントに届きます。
アーキテクチャの概要:
LINEユーザー ──┐
Zaloユーザー ──┼──► UnifyPort ──► POST /webhook(あなたのサーバー)
Xユーザー ──┘ X-UnifyPort-Signature: sha256=...
どのプラットフォームからのメッセージも、トップレベルのフィールド構造は統一されています:
{
"platform": "line",
"event": "message",
"timestamp": 1748995200000,
"from": {
"id": "U4af4980629",
"display_name": "田中 太郎"
},
"message": {
"id": "msg_01HX9K",
"type": "text",
"text": "注文についてお問い合わせしたいのですが"
}
}
"platform": "line"を"platform": "zalo"や"platform": "x"に置き換えるだけで、残りの構造は変わりません。ビジネスロジックはplatform、from.id、message.textを読み取るだけです。
署名検証も統一されており、1つの実装で3つのプラットフォームをカバーします:
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へルーティング、DBへ記録、自動化をトリガー
routeInbound({ platform, senderId: from.id, text: message.text });
res.status(200).end();
});
LINEのx-line-signatureとZaloのmacヘッダーを個別に処理する必要はありません。1つのハンドラーで3つのプラットフォームすべてに対応できます。
チームの変化
ホーチミン市の小売業者は1週間で3つの独立した連携を置き換えました。入社時にドキュメントを読むだけで1週間を費やした新しい開発者は、統合されたハンドラーを数時間で書き上げました。現在はペイロードのplatformフィールドで自動ルーティングしています:LINEメッセージはタイ語対応キューへ、Zaloメッセージはベトナム語対応キューへ、XのDMは国際サポートチームへ。
2月と3月のLINE障害への不安も解消されました。UnifyPortのデリバリー層がリトライと再配信を処理するため、チームのWebhookは200を返すだけで確実にメッセージが届きます。
はじめる
unifyport.aiで最初のプラットフォームを接続しましょう。公式アカウント登録不要、チャンネル審査の待ち行列なし、メッセージ課金なし。LINE、Zalo、XはWhatsApp、Telegram、TikTokと同じプランで利用できます。
WhatsApp連携をすでに運用していて、さらに2つのプラットフォームを追加するのに1週間かかるか心配しているなら——答えは午後一つ分の作業です。