> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting: LINE inbound events never arrive

> Work through why a message to your LINE Official Account never reaches the Inbox and never fires a `message.received` webhook — the LINE Developers Console webhook URL, the channel-secret handshake, tenant resolution by channel id, and event filtering — and what to collect before you escalate.

# Troubleshooting: LINE inbound events never arrive

A LINE user messages your Official Account and nothing happens on your side:
no conversation in the Inbox, no `message.received` webhook delivery. Unlike
WhatsApp or RCS, LINE inbound has a single hard gate you control entirely on
LINE's side — the **Webhook URL** in the LINE Developers Console. Until that
URL is set and **Use webhook** is enabled, LINE holds every event at its side
and Orbit receives nothing, no matter how healthy your credentials are.

This page is the LINE-scoped sibling of
[Troubleshooting: inbound WhatsApp or RCS message never arrives](/troubleshooting/inbound-channels-no-route);
the wider APAC inbound routing matrix is on
[Troubleshooting: LINE, Kakao, WeChat, and Zalo inbound never arrives](/troubleshooting/apac-channel-inbound-no-route).

## How LINE inbound is wired

Inbound LINE traffic gates on the LINE Developers Console configuration first,
then on Orbit's per-tenant resolution:

1. In the
   [LINE Developers Console](https://developers.line.biz/console/), open your
   Messaging API channel and set the **Webhook URL** to
   `https://api.orbit.devotel.io/api/v1/webhooks/inbound/line`, then flip
   **Use webhook** on.
2. LINE posts each event to that URL with the channel's channel id as
   `destination` and an `x-line-signature` HMAC header.
3. Orbit resolves the owning organization from that channel id, verifies the
   signature against the channel secret you connected under
   **Settings → Channels → LINE**, and normalizes `message`-type events onto
   the standard inbound envelope (`channel: "line"`).

A miss at any one of those stages looks identical from your webhook receiver,
so name which gate you lost.

## Cause table — where inbound dies

Work rows from the top; each row narrows the cause class.

| Symptom                                                                      | Most likely cause                                                                                                                               | What to do                                                                                                                                                                      |
| ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nothing arrives — first-ever inbound after connecting**                    | The Webhook URL is unset in the LINE Developers Console, or **Use webhook** is off — LINE holds every event upstream                            | Set the URL to `https://api.orbit.devotel.io/api/v1/webhooks/inbound/line` and enable **Use webhook**; inbound starts flowing                                                   |
| **Inbound works for one organization but not a second on the same platform** | Tenant resolution — the incoming `destination` channel id is not connected under **Settings → Channels → LINE** for the organization you expect | Connect the same channel id on that organization; Orbit resolves the owner from the LINE channel id, so a channel connected nowhere resolves to nobody and the event is dropped |
| **Inbound stopped abruptly mid-traffic**                                     | Signature mismatch — the channel secret stored in Orbit no longer matches the channel's secret in the LINE Developers Console (rotation)        | Re-paste the current channel secret under **Settings → Channels → LINE**; a wrong secret means every event fails verification and is never normalized                           |
| **Follows, unfollows, postbacks, and reads fire nothing**                    | Expected behavior, not a miss — only LINE `message`-type events are forwarded on `message.received`                                             | If your flow must react to a button tap (postback), react inside Orbit (flows, journeys), not in your webhook receiver                                                          |
| **Webhooks deliver but the payload is not a `message.received`**             | LINE sends a follow/unfollow/postback/read event — acknowledged and dropped by design                                                           | Same as above                                                                                                                                                                   |

## The full check sequence

1. **Inspect the endpoint's deliveries.** List endpoints with
   `GET /api/v1/webhooks`, then read recent deliveries with
   `GET /api/v1/webhooks/{endpoint_id}/deliveries` — you want
   `message.received` with `channel: "line"`. An empty list means the event
   never left LINE (steps 2–4); a failed row means your receiver rejected it
   (subscription or receiver-side issue). Tooling:
   [Inspecting deliveries](/webhooks/inspecting-deliveries).
2. **Verify the LINE Developers Console webhook wiring.** Open the Messaging
   API channel → **Messaging API** tab and confirm the **Webhook URL** is
   exactly
   `https://api.orbit.devotel.io/api/v1/webhooks/inbound/line` and
   **Use webhook** is on. Any other URL (or the toggle off) means LINE
   delivers nowhere Orbit can see.
3. **Confirm the channel id is connected on the right organization.** Compare
   the channel's **Basic settings → Channel ID** value against the connected
   LINE credentials under **Settings → Channels → LINE** on the organization
   that expects the traffic.
4. **Refresh the channel secret if you rotated it.** The channel access token
   and channel secret are separate credentials — a token rotation does not
   touch the secret, but a secret rotation breaks inbound signature
   verification until you re-paste it.

## Worked example — a first inbound that never fires

You connected LINE yesterday and asked a teammate to message the Official
Account. Nothing in the Inbox, nothing in `GET /api/v1/webhooks/{id}/deliveries`.
The fix sequence:

```bash theme={null}
# 1. Confirm no delivery was ever attempted
curl -H "Authorization: Bearer $ORBIT_API_KEY" \
  https://orbit.devotel.io/api/v1/webhooks

curl -H "Authorization: Bearer $ORBIT_API_KEY" \
  https://orbit.devotel.io/api/v1/webhooks/whep_abc123/deliveries
```

* Delivery list **empty** → open the LINE Developers Console and set the
  Webhook URL + **Use webhook**. Inbound starts flowing immediately — no
  reconnect needed.
* Delivery row **failed** → your receiver rejected or timed out; fix the
  handler and [replay the delivery](/webhooks/inspecting-deliveries).

## What not to try

* **Do not reconnect Orbit credentials when the console URL is unset.**
  Pasting a fresh channel access token does nothing for inbound — the events
  never leave LINE.
* **Do not re-ask the sender to message you.** If the console URL was wrong,
  the event is already lost; have them send again after the wiring is right.
* **Do not register your own webhook endpoint in the LINE Developers
  Console.** The single shared URL `…/webhooks/inbound/line` is how Orbit
  resolves tenant routing — a direct URL bypasses the inbound pipeline.
* **Do not expect postbacks (button taps) on `message.received`.** Only
  `message`-type events forward through; route button logic through Orbit
  flows instead.

## When to escalate

Open a support ticket when the console URL is set correctly from the start
and deliveries still never attempt, or when inbound drops for a channel
secret you have confirmed unchanged. Include:

* The **LINE channel id** (Numerals under Basic settings → Channel ID).
* The **sender + recipient pair and timestamp** of the missed event (with
  timezone).
* A screenshot of the **Messaging API → Webhook URL** configuration panel.
* The **webhook endpoint id** if you were expecting `message.received`
  deliveries.

## See also

* [LINE channel page](/channels/line) — onboarding steps, inbound routing,
  signature verification, and the `LINE_INVALID_TOKEN` connect-time code
* [LINE, Kakao, WeChat, Zalo inbound no-route](/troubleshooting/apac-channel-inbound-no-route) —
  the four-channel inbound matrix
* [Inbound WhatsApp or RCS no route](/troubleshooting/inbound-channels-no-route) —
  the sibling runbook this page extends
* [Normalized inbound envelope](/webhooks/normalized-inbound-envelope) — the
  canonical inbound payload shape
