← Все статьи
Руководство

Ошибки LINE MINI App Service Message API: разбор 400, 401, 403, 429 и 500

Ошибку LINE MINI App Service Message API проще диагностировать после разделения двух операций: выдачи service notification token и отправки сообщения. 400, 401 и 403 обычно требуют исправить request, credential или permission; после 429 нужно снизить нагрузку; при 500 сначала сохраните доказательства. После успешной отправки атомарно сохраните новый notification token до запуска следующего worker.

Главное

  • POST /message/v3/notifier/token и POST /message/v3/notifier/send?target=service могут вернуть одинаковый status по разным причинам, поэтому логируйте endpoint и этап.
  • LIFF access token может быть отозван, когда пользователь закрывает LIFF app, даже до истечения срока.
  • Успешная отправка обычно обновляет service notification token; сохраняйте новый token вместе с remainingCount и expiresIn.
  • 429 требует снизить частоту, а не ускорять retry. LINE запрещает создавать большую тестовую нагрузку на platform API.
  • Не повторяйте отправку с неизвестным результатом вслепую: для этого endpoint официальный reference не описывает idempotency key.

Таблица ошибок LINE MINI App Service Message API

Официальный LINE MINI App API reference описывает два server-side вызова. Token endpoint обменивает LIFF access token на service notification token, связанный с одним пользователем. Send endpoint использует этот token и одобренный template.

StatusВыдача tokenОтправкаПервая проверка
400 Bad RequestНекорректный body или повторное использование одного LIFF access token за короткое времяНекорректный body/params или получатель не существуетПроверьте request конкретного endpoint
401 UnauthorizedНеверный channel access token или LIFF access tokenНеверный channel access token или service notification tokenОпределите тип token для операции
403 ForbiddenChannel не имеет права выдавать tokenChannel не авторизован или templateName не найденПроверьте environment, verification и deployment template
429 Too Many RequestsПревышен rateПревышен rateОстановите тестовый traffic, включите backoff и снизьте concurrency
500 Internal Server ErrorУказан в официальной таблице выдачи как server errorЕсли send вернул 5xx, считайте это incident; в таблице send-specific 500 не указанСохраните evidence и проверьте официальные notices

Таблица служит маршрутизатором, а не заменой response body. Сохраняйте status, endpoint, время, redacted response, channel/environment, template name и собственный job ID. Настоящие access token и notification token храните только в secret store, а в application logs используйте односторонний fingerprint.

Runbook: определите состояние до retry

1. Разделите выдачу token и отправку

При выдаче проверьте, что browser получил token из текущей LIFF session и отправил его backend только один раз. Не вызывайте Service Message API из browser: для него также нужен channel access token. Один LIFF access token разрешено обменять только на один service notification token.

При отправке отдельно проверьте channel access token, актуальный service notification token и templateName с поддерживаемым BCP 47 suffix, например _ja, _en, _zh-TW или _th. Корректный token не исправит отсутствие template в channel.

Нормальный flow из двух вызовов описан в руководстве по notification token. Используйте этот runbook, когда точно знаете, какой вызов завершился ошибкой.

2. Обрабатывайте 400 в контексте endpoint

При выдаче найдите двойной click или frontend retry, который повторно отправил использованный LIFF access token. При отправке сравните params с одобренным template и проверьте ограничения длины до dispatch. LINE сообщает, что значение длиннее hard limit отправить нельзя.

Не меняйте все credentials из-за 400. Исправьте request или user state и создайте новую business operation с новым job ID. Переменные и ссылки можно проверить по чек-листу review template.

3. Для 401 проследите владельца и lifetime token

  • Channel access token авторизует MINI App channel; LINE рекомендует stateless или short-lived token.
  • LIFF access token подтверждает текущую user session и может быть отозван при закрытии LIFF app.
  • Service notification token принадлежит одному пользователю и не переносится другому.

Если пользователь закрыл app до обмена на backend, начните LIFF flow заново. Если ошибка возникла при send, убедитесь, что worker загрузил token из последнего успешного response, а не старое значение из queue snapshot.

4. Считайте 403 несовпадением permission или deployment

403 при выдаче означает, что channel не может выдавать service message token. При отправке он также может означать отсутствие template. Проверьте Developing/Published channel, production eligibility и отражение template нужной locale.

Verification MINI App не исправляет неправильное имя template. И наоборот, корректный template не даёт production permission непроверенному Published channel. Эти условия разделены в руководстве verified vs unverified.

5. Сериализуйте запись обновлённого notification token

После успешной отправки LINE обновляет token, пока остаются lifetime и message count. Рассматривайте response как state transition:

загрузить token -> отправить один раз -> сохранить новый token и counters -> запустить следующий job

Используйте database transaction, compare-and-set version или per-user queue, чтобы два worker не взяли один старый token. Если expiresIn и remainingCount равны 0, сообщение отправлено, но token не обновлён. Зафиксируйте успех и не планируйте следующую service message с этим token.

6. Повторяйте только безопасный outcome

Не retry 400, 401 и 403, пока не изменился request, credential или authorization state. Для 429 используйте backoff с jitter и уменьшите concurrency; не выполняйте load test production API. При явном 500 сохраните request record, проверьте LINE status/news и запускайте контролируемый retry.

Timeout после dispatch опаснее: client может не знать, принял ли LINE message и обновил ли token. Без документированного idempotency key blind retry может создать дубликат уведомления. Направляйте неопределённый outcome на reconciliation или operator review.

Где подходит UnifyPort

UnifyPort не выдаёт LINE service notification token, не утверждает MINI App template, не меняет verification status и не устраняет ошибки официального Service Message API. Для transactional notification после действия в MINI App используйте официальный путь LINE.

UnifyPort решает отдельную задачу: получает обычные сообщения клиентов из подключённого LINE account. Поддерживаемые входящие сообщения приходят как нормализованные события message.received. Если endpoint имеет signing_secret, delivery содержит X-Device-Timestamp и X-Device-Signature; перед routing проверьте HMAC-SHA256 по raw body.

Не объединяйте две state machine. Service notification token относится к MINI App transaction flow, а reply клиента — к support flow. Связывайте их собственным order или reservation ID, а не общим platform token.

Ограничения и компромиссы

Официальный Service Message API нужен, когда verified MINI App отправляет одобренные confirmations, results или reminders. Он предоставляет platform-native template, identity и policy controls, которых нет у unofficial interface.

Unofficial interface не отменяет eligibility LINE, не восстанавливает истёкший token, не увеличивает лимит в пять сообщений и не превращает support reply в service message. Его роль — доставка поддерживаемых обычных conversations через единый inbound API.

FAQ

Почему LIFF access token до истечения срока возвращает 401?

LINE может отозвать его после закрытия LIFF app. Получите новый token из новой LIFF session и обменяйте его один раз.

Почему после успешной выдачи token отправка возвращает 403?

Endpoint проверяют разное. Send может не иметь permission в данном environment или не найти templateName в channel.

Можно ли retry service message после timeout?

Не вслепую. Message и token могли уже изменить состояние. Сначала выполните reconciliation.

Что записывать в incident log?

Время, method, endpoint, status, redacted response, channel/environment, template, job ID и безопасный token fingerprint. Сами token храните в защищённом store.

Что означает remainingCount: 0 и expiresIn: 0 после 200?

Message отправлен, но LINE не смог обновить notification token. Зафиксируйте успех и не используйте этот token снова.

Следующий шаг

Постройте status dispatcher по официальному LINE MINI App API reference и до release проверьте по одному контролируемому failure на каждом endpoint. Для отдельной задачи приёма обычных LINE сообщений после стабилизации уведомлений изучите руководство авторизации LINE в UnifyPort.

Источники

Официальные источники LINE проверены 6 августа 2026 года: