Troubleshooting: LINE, Kakao, WeChat, and Zalo inbound never arrives
A contact messages your APAC-brand channel and nothing surfaces: no Inbox row, nomessage.received webhook delivery, no row you can look up. This
page is the APAC sibling of
Troubleshooting: inbound WhatsApp or RCS message never arrives —
it covers LINE, KakaoTalk, WeChat, and Zalo, which each gate inbound
differently.
The four channels split into two distinct inbound wiring classes. Resolve the
wrong class and the runback lasts a long time:
- LINE — provider-registered webhook. Until you set the Webhook URL in the LINE Developers Console, LINE holds everything upstream. See Troubleshooting: LINE inbound events never arrive.
- KakaoTalk, WeChat, Zalo — gateway-relayed inbound. Orbit’s messaging gateway normalizes and relays replies automatically; there is no provider console webhook for you to register. A miss here is one of credential-resolution, event-filtering, or subscription scope — not wiring.
Symptom map — channel-specific failure modes
Diagnostic steps
- Read the delivery log. List webhook endpoints with
GET /api/v1/webhooks, then read the endpoint’s recent deliveries withGET /api/v1/webhooks/{endpoint_id}/deliveries. You wantmessage.receivedwithchannel: "line" | "kakao" | "wechat" | "zalo". An empty list means the event never fired (routing miss); a failed delivery row means your endpoint rejected it. Tooling: Inspecting deliveries. - For LINE only: verify the console Webhook URL. Any result other than LINE holding events upstream means this page appertains further — see Troubleshooting: LINE inbound never arrives.
- Check the channel is resident on the organization. A gateway-relayed channel whose per-org credential row does not exist resolves inbound to nobody — the gateway drops the reply with no shadow copy for you to recover. Confirm under Settings → Channels.
- Check subscription scope.
GET /api/v1/webhooksreturns each registered endpoint with its subscribedeventslist.message.receivedmust be on it (ornormalized.inbound— see Normalized inbound envelope). - Filter on the right
channelfield. A handler that seeschannel: "sms"on the contact’s fallback thread never seeschannel: "line"on a fresh LINE reply — the semantic filter has to match the actual channel of the inbound event.
A worked example — inbound that dies on the credential layer
A WeChat subscriber setDEVOTEL_WECHAT_ACCESS_TOKEN (the platform default)
and removed the per-org row, intending every tenant to fall through to the
platform OA. Replies stopped. Delivery list for message.received is empty.
Resolution: the per-org row is removed, and the gateway resolves inbound by
organization — a reply addressed to the removed row’s OA is identified
against the credential row that no longer exists. When the platform default
visits inbound it must claim the reply for some organization; with all
per-org rows gone, no organization claims it, and the relay drops the event.
Re-add the per-org row under Settings → Channels → WeChat and replies
land again, keyed to that OA.
What not to try
- Do not filter on a channel other than the inbound one. A handler that
keys on
channel: "kakao"when Zalo replies are in scope never sees them — the gateway tags each inbound event with its actual channel and the semantic filter has to match that value, not the one you meant. - Do not treat a gateway-relayed miss like a console-webhook wiring miss. LINE’s webhook URL is the only wiring layer you control; the other three channels deliver automatically and only stop on credentials or filtering.
- Do not retry a deterministic 503
CHANNEL_NOT_CONFIGUREDagainst inbound. If outbound is failing closed, inbound has no identity either — connect the channel first, then re-test. See WeChat and Zalo credential resolution.
Escalation bundle
Open a support ticket only when this page is exhausted — expect inbound on a credential row checked, a subscription scoped tomessage.received,
and LINE’s console URL verified when LINE is in the mix. Include:
- The channel:
line,kakao,wechat, orzalo. - Your tenant id (dashboard → Settings → Organization, or
organizationIdonGET /api/v1/me). - The time window (with timezone) of the missed inbound event.
- The webhook endpoint id if you were expecting
message.received. - For LINE, a screenshot of the Messaging API → Webhook URL configuration.
See also
- LINE inbound never arrives — the provider-registered webhook wiring
- KakaoTalk template gates — after inbound is resolved, the send-side content gates
- WeChat and Zalo credential resolution — the per-org vs platform-default chain this page’s inbound depends on
- Inbound WhatsApp or RCS message never arrives — the sibling page the APAC matrix extends
- Inbound SMS no route — the root-style page for the whole inbound family