In APAC, the default messaging app is regional, not global. SMS and WhatsApp alone leave the region partially uncovered: LINE is the dominant app in Japan, Thailand, and Taiwan; WeChat is China's super-app; KakaoTalk holds Korea; Zalo holds Vietnam. Each of these channels wraps a business API with its own credential flow, and three of the four are template-only — you cannot send free-form text on WeChat, Zalo ZNS, or KakaoTalk Alimtalk; LINE (and KakaoTalk Friendtalk to followers) carry free-form messages. Devotel Orbit connects all four behind one messaging API, one contact record, and one webhook surface, with the per-region onboarding playbook in the Asia channels onboarding guide and the full contract for each channel in the reference pages linked below.
Quick answer: pick the channel per region
Start with one channel, not four. The market picks it for you:
| Region | Channel | Send model |
|---|---|---|
| Japan, Thailand, Taiwan | LINE | Template-free text, image, video, sticker, flex, location |
| China | WeChat (Official Account) | Template-only — approved template id + named placeholders |
| Korea | KakaoTalk | Alimtalk (template-only transactional) and Friendtalk (free-form, to followers only) |
| Vietnam | Zalo | Template-only ZNS notifications |
If Japan is your market and you are undecided, start with LINE — it is the only one of the four that ships free-form sends, so a first integration needs no template approval round-trip. The channel reference pages — LINE, WeChat, KakaoTalk, Zalo — document each send shape field by field.
Template-free vs template-only, per channel
The single biggest integration difference across these four channels is whether a message ships as free-form text or has to match a pre-approved template:
- LINE — template-free. Send a plain
body(1–5000 characters) and pick atypeper message:text,image,video,audio,location,sticker, orflex. The recipient is a LINE id (U…user,C…group, orR…room) captured from an inbound event. There is nosender_id: the Official Account you connected is the sender. - WeChat — template-only. Every send carries
template_name(the approved WeChat template id) andtemplate_paramsfilling the template's{{key.DATA}}placeholders. A send without an approvedtemplate_nameis rejected withVALIDATION_ERROR(422). The recipient is the follower's OA-scopedopenid. - KakaoTalk — split. Alimtalk is template-only and reaches any phone number (order confirmations, OTPs, shipping updates). Friendtalk is free-form
bodytext — plus an optional image — but only to users who have added your channel as a friend. Select the type per message withmetadata.kakao_message_type. - Zalo — template-only. ZNS (Zalo Notification Service) messages address recipients by phone number in E.164 digits, with
template_nameselecting the approved ZNS template id andtemplate_paramsfilling its variables.
In every case the send endpoint follows the same shape — POST /api/v1/messages/<channel> — returning 202 Accepted with a message id, and the terminal delivered / failed state arriving on the delivery-status webhook. WeChat, KakaoTalk, and Zalo are beta channels: the send and receive paths are wired end to end, but you still provision your own channel credentials (WeChat Official Account, Kakao Biz Message access with a Kakao reseller, Zalo Official Account).
Credential connect and webhook routing follow one pattern
All four channels are bring-your-own-credential: you hold the account (a LINE Official Account, a WeChat OA, a KakaoTalk sender profile, a Zalo OA), you paste its credentials into the Orbit dashboard, and Orbit stores them encrypted at rest and never returns them through any API response.
- Connect. Under Settings → Channels → <channel> in the dashboard, paste the credential — a LINE channel access token + channel secret, a WeChat OA access token, KakaoTalk app key + secret key + sender key, or a Zalo OA access token. WeChat and Zalo tokens are short-lived (~2 hours for WeChat); rotate them centrally and re-paste before expiry.
- Send endpoints pick the sender from the connected credentials. You never pass a token, app key, or channel id on the request itself — the send carries the recipient and content only.
- Inbound arrives on the standard incoming-message webhook. Replies are normalized into the same envelope across channels (
channel: "line",channel: "wechat", and so on). LINE is the one channel whose inbound webhook you configure yourself: set it in the LINE Developers Console to Orbit's shared inbound URL, and Orbit resolves which tenant each event belongs to from the LINE channel id on the event — with HMAC-SHA256 signature verification against your stored channel secret before anything reaches your endpoint. - Routing inbound to your team. The tenant-level routing rules that decide where an incoming message lands — the priority-ordered match on the sender, keyword, or number, sending it to a webhook, inbox, queue, or team — are covered in the inbound message routing concept.
Every inbound event carries the sender's channel-specific id (a LINE U… id, a WeChat openid, a phone number on Kakao / Zalo). Store it on the contact so your replies can address the recipient — on profile channels that id is the only way to target a send.
The error codes you will actually see
The four channels converge on the same envelope; a handful of codes cover nearly every failure. The full catalog lives in the error codes reference; these are the ones each channel raises:
| Code | HTTP | What it means here |
|---|---|---|
VALIDATION_ERROR | 422 | Missing to / body, or — on the template-only channels — no approved template_name |
INVALID_RECIPIENT | 422 | Recipient id missing or unusable (not a valid LINE id, missing phone number or openid) |
CHANNEL_NOT_CONFIGURED | 503 | No credentials connected for the organization and no platform default (WeChat, KakaoTalk, Zalo) |
MESSAGE_SEND_FAILED | 502 | The provider rejected the send — expired token, unapproved template, non-follower; inspect the provider code in the error message |
RATE_LIMITED | 429 | Over 80 requests/minute per organization on the direct send endpoint; honor Retry-After, and stage bulk sends through campaigns |
Two channel-specific quirks worth remembering: LINE_INVALID_TOKEN (401) fires only when connecting LINE credentials, never on the send path — a token rotated after connect surfaces later as MESSAGE_SEND_FAILED until you re-paste it. And on WeChat a non-zero provider error code usually means an expired access token or an unapproved template — both fixable by re-pasting a fresh token or correcting the template id.
When omnichannel fallback to SMS makes sense
An org-level fallback chain — WeChat → SMS, Zalo → SMS, or a longer ladder — advances a failed send to the next channel automatically, once, configured for the organization rather than per send. The cases where it earns its keep in APAC:
- Recipient unreachable on the channel. A customer who has not added your KakaoTalk channel as a friend cannot receive Friendtalk; a WeChat send to a non-follower fails the same way. If SMS reachability is acceptable for the message, a chain absorbs that gap without your code retrying.
- Template-only channels carrying transactional traffic. ZNS and WeChat templates are the right vehicle when they deliver, but a failed Alimtalk/ZNS/WeChat send for an OTP or delivery update can advance to SMS so the notification still lands.
- Coverage beyond the four apps. An APAC messaging program that leans on these four channels plus SMS as the universal safety net covers essentially the whole region.
The model — which triggers advance a chain (capability check, provider exhaustion, unreachable recipient), how each hop bills and re-checks compliance, and how it differs from a campaign-level channel ladder — is documented in the cross-channel fallback concept. LINE, WeChat, KakaoTalk, and Zalo traffic all exits through Devotel's own wholesale network for the underlying SMS leg, so a fallback hop does not add a resold aggregator in the path.
Frequently asked questions
Which APAC messaging channel should I integrate first?
The one your market uses: LINE for Japan, Thailand, or Taiwan; WeChat for China; KakaoTalk for Korea; Zalo for Vietnam. If you are undecided and Japan is in scope, LINE is the easiest first integration because it is template-free — no template approval cycle before your first send.
Do I need to provision my own WeChat, KakaoTalk, or Zalo account?
Yes. These three are beta channels where the send and receive paths are wired end to end, but you still bring the channel account: a WeChat Official Account, KakaoTalk Biz Message access through a Kakao reseller, or a Zalo Official Account. LINE follows the same bring-your-own pattern but is fully connected once you paste the channel access token and secret.
Why is most APAC messaging template-only?
WeChat OA messages, Zalo ZNS, and KakaoTalk Alimtalk require a pre-approved template for every send — free-form text is rejected with a 422 validation error. LINE and KakaoTalk Friendtalk (to followers) are the free-form exceptions. Plan your template registrations into onboarding; template ids then select per send via template_name.
How do inbound replies from APAC channels reach my system?
They arrive on Orbit's standard incoming-message webhook, normalized into the same envelope with the channel named in channel. LINE additionally requires you to point the webhook URL in the LINE Developers Console at Orbit's shared inbound endpoint; WeChat, KakaoTalk, and Zalo relay automatically once subscribed under Settings → Webhooks.
Does SMS fallback work for template-only channels too?
Yes. The org-level fallback chain is configured once (e.g. ZNS → SMS) and applies to every outbound send path, including template sends — when the primary channel cannot deliver, the router advances the message to the next channel as a new attempt, with each hop billed and compliance-checked independently.
Source and further reading
- Asia channels onboarding guide: the ordered first-time playbook this post summarizes — credential connect, send, inbound, and errors.
- Channel references: LINE, WeChat, KakaoTalk, Zalo — the per-channel request/response contracts the claims above are drawn from.
- Inbound message routing: the tenant-level rule engine for routing incoming messages to a webhook, inbox, queue, or team.
- Cross-channel fallback: the org-level ordered-chain model behind the SMS fallback section above.
- Error codes reference: the full error catalog, of which the table above is the APAC subset.
Published 27 August 2026.