Как отправлять сервисные сообщения LINE MINI App с помощью токена уведомления
Чтобы отправить сервисное сообщение LINE MINI App, получите новый LIFF access token после действия пользователя, обменяйте его на своем сервере на привязанный к пользователю service notification token, а затем вызовите официальный endpoint отправки с одобренным шаблоном. После каждого ответа сохраняйте обновленный notificationToken: при каждой успешной отправке значение токена меняется, а поле remainingCount определяет, сколько последующих сообщений еще доступно для этого действия.
Главное
- Для отправки сервисных сообщений в production нужен верифицированный LINE MINI App и одобренный шаблон. Неверифицированное приложение может проводить тесты только во внутреннем канале Developing и только с аккаунтами Admin или Tester.
- Один service notification token выпускается из одного LIFF access token через
POST /message/v3/notifier/token. Полученный токен относится к одному пользователю и одной сессии действия. - Отправляйте сообщение через
POST /message/v3/notifier/send?target=service, после чего заменяйте сохраненный токен на обновленныйnotificationTokenиз ответа. - Новый токен действует один год и обычно позволяет отправить пять сообщений. Для одобренного сценария лимит может отличаться, поэтому в рабочей логике ориентируйтесь на актуальное значение
remainingCount. - Этот официальный процесс предназначен для подтверждений, результатов и напоминаний, связанных с действием в MINI App. Это не inbox для свободной переписки с поддержкой и не API для рекламных рассылок.
Что проверить до выпуска токена уведомления
Это руководство начинается после проверки права приложения на использование функции. Если вы еще не определили, может ли ваше приложение отправлять сервисные сообщения в production, сначала изучите чек-лист для верифицированных и неверифицированных LINE MINI App.
До реализации работы с токеном убедитесь, что выполнены все четыре условия:
| Условие | Требуемое состояние | Почему это важно |
|---|---|---|
| Канал LINE MINI App | Верифицирован для production | Неверифицированные приложения не могут отправлять сервисные сообщения из канала Published |
| Шаблон сервисного сообщения | Добавлен, одобрен и имеет статус PUBLISHING | API принимает только имя прошедшего проверку шаблона и определенные в нем переменные |
| Действие пользователя | Бронирование, покупка, check-in, отправка заказа или другое одобренное действие | Каждое уведомление должно подтверждать это действие или сообщать его результат |
| Серверные учетные данные | Stateless или краткосрочный channel access token | Каналы LINE MINI App не поддерживают долгосрочные credentials и Channel Access Token v2.1 |
LINE рекомендует stateless channel access token, поскольку приложению не приходится самостоятельно управлять сроком его действия. Храните channel access token только на сервере и никогда не возвращайте его клиенту MINI App.
Чем отличаются три токена LINE
Архитектура становится понятнее, если у каждого credential есть одна четкая задача:
| Credential | Откуда берется | Что подтверждает | Важное правило жизненного цикла |
|---|---|---|---|
| LIFF access token | liff.getAccessToken() в MINI App | Текущий пользователь LINE предоставил доступ | Действует до 12 часов, но может быть отозван после закрытия приложения пользователем |
| Channel access token | Серверные credentials LINE | Канал LINE MINI App имеет право вызывать API | По возможности используйте stateless token; не передавайте его браузеру |
| Service notification token | POST /message/v3/notifier/token | Один пользователь имеет право получать уведомления, связанные с одним действием | Привязан к пользователю, действует до одного года, ограничен по количеству и обновляется после каждой отправки |
Из одного LIFF access token можно выпустить только один service notification token. Выполняйте обмен сразу после действия: даже LIFF token, у которого формально не истек срок, может стать недействительным, если пользователь закрыл MINI App или предоставил дополнительные разрешения.
Как отправить сервисное сообщение LINE MINI App с токеном уведомления
1. Получите LIFF access token после действия пользователя
Вызовите liff.getAccessToken() в MINI App после успешного бронирования, покупки или другого одобренного действия. Передайте значение в собственный backend по HTTPS. Свяжите backend-запрос с внутренней записью о действии, но не сохраняйте ни LIFF token, ни полученный позже service notification token в логах приложения.
Браузер не должен обращаться к Service Message API напрямую: для выпуска токена и отправки сообщения также нужен channel access token.
2. Обменяйте LIFF token на service notification token
На сервере вызовите официальный endpoint выпуска:
curl -X POST https://api.line.me/message/v3/notifier/token \
-H "Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"liffAccessToken\":\"${LIFF_ACCESS_TOKEN}\"}"
Успешный ответ содержит четыре поля:
{
"notificationToken": "34c11a03-b726-49e3-8ce0-949387a9f531",
"expiresIn": 31536000,
"remainingCount": 5,
"sessionId": "xD06R2407210008"
}
Храните токен в зашифрованном виде вместе с expiresIn, remainingCount, sessionId и собственным идентификатором пользователя и действия. Не используйте sessionId как идентификатор пользователя: получатель уже зафиксирован в service notification token, и применить этот токен для другого пользователя нельзя.
3. Отправьте одобренный шаблон
Передайте токен в официальный endpoint отправки. Query-параметр target=service обязателен:
curl -X POST "https://api.line.me/message/v3/notifier/send?target=service" \
-H "Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"templateName": "thankyou_msg_en",
"params": {
"date": "2026-07-21",
"username": "Brown & Cony"
},
"notificationToken": "34c11a03-b726-49e3-8ce0-949387a9f531"
}'
Используйте точные templateName и ключи переменных из LINE Developers Console. Формат имени шаблона — {template name}_{BCP 47 language tag}, максимальная длина — 30 символов. Для сервисных сообщений поддерживаются языковые суффиксы ja, en, zh-TW, th, id и ko. Даже если в выбранном шаблоне нет переменных, поле params остается обязательным и должно содержать {}.
4. Сохраняйте обновленный токен после каждой отправки
При успешной отправке LINE возвращает новый notificationToken, а также обновленные expiresIn, remainingCount и прежний sessionId, относящийся к тому же действию. Атомарно обновите запись до планирования следующего напоминания. Повторное использование предыдущего токена может привести к ошибке при полностью корректном последующем сообщении.
Если и expiresIn, и remainingCount равны 0, LINE принял текущее сообщение, но не смог обновить токен. Пометьте сессию действия завершенной и не планируйте следующую отправку на основе этого ответа.
Чек-лист хранения и повторных попыток
Рассматривайте service notification token как изменяемый credential, а не как постоянный адрес пользователя:
- Создайте одну запись о действии, когда пользователь завершит подходящее действие в MINI App.
- Один раз обменяйте LIFF token и сохраните полученные
sessionId, зашифрованный токен, срок действия и счетчик. - На время отправки блокируйте запись о действии или используйте версионирование, чтобы два worker не израсходовали один токен одновременно.
- При HTTP
200сначала зафиксируйте обновленный токен и счетчики, и только затем ставьте следующее напоминание в очередь. - При
400до повторной попытки проверьте тело запроса, состояние получателя и переменные шаблона. - При
401обновите серверный channel credential или начните новый flow действия пользователя; не отправляйте повторно недействительный LIFF token или service notification token. - При
403убедитесь, что канал авторизован, а нужный шаблон существует и имеет разрешенный статус.
Не задавайте произвольную числовую политику повторов для LINE. Официальная документация описывает классы ошибок, но не публикует фиксированный лимит запросов для этого API. Ограниченные повторы допустимы только для временных сбоев; не превращайте неудавшееся действие в несвязанное уведомление.
Роль UnifyPort
Для транзакционных уведомлений из MINI App используйте официальный Service Message API LINE. UnifyPort не выпускает и не обновляет service notification token LINE, не отправляет шаблоны на проверку, не присваивает статус verified и не превращает обычное сообщение в сервисное сообщение MINI App.
UnifyPort применяется в отдельном контуре свободной переписки с поддержкой. Если клиент открывает обычный чат LINE до или после транзакционного уведомления, подключенный аккаунт LINE может передать входящий текст как стандартное событие message.received. Затем ваша система поддержки может обрабатывать его в одном маршруте с событиями WhatsApp, Telegram, Zalo, TikTok или X и использовать POST /v1/messages, если это разрешено матрицей возможностей провайдера.
Такое разделение соответствует архитектуре из руководства по платежам LINE MINI App и webhook поддержки: за транзакцию отвечают официальные API MINI App, а обычные обращения поступают в отдельный pipeline клиентских сообщений. Для второго контура начните с руководства по авторизации LINE и точного описания события message.received.
Ограничения и компромиссы
Официальный маршрут сервисных сообщений подходит, когда верифицированный MINI App должен подтвердить бронирование, сообщить результат или напомнить пользователю о уже выполненном действии. Уведомление остается связано с пользователем LINE, проверенным шаблоном и одобренным сценарием.
Возможности этого маршрута намеренно ограничены. Одно действие обычно допускает до пяти сообщений, шаблоны проходят проверку, а реклама, купоны, награды, продвижение товаров и общие анонсы мероприятий запрещены. В ходе проверки LY Corporation может назначить другое количество. Для одного канала можно настроить до 20 шаблонов, и назначение сообщения должно соответствовать заявленному сценарию.
Неофициальный интерфейс не может изменить эти правила или увеличить количество отправок по токену. В то же время Service Message API не заменяет inbox клиентской поддержки для переписки без заранее заданного конца. Связывайте две системы собственным идентификатором заказа или бронирования, не пытаясь использовать одни и те же платформенные токены в обоих контурах.
Частые вопросы
Как долго действует service notification token LINE?
Новый токен действует один год, то есть 31 536 000 секунд. Он может стать недоступен раньше, когда счетчик сообщений достигнет нуля. Всегда ориентируйтесь на последние значения expiresIn и remainingCount, возвращенные LINE.
Можно ли повторно использовать тот же notification token для следующего сервисного сообщения?
Используйте обновленный notificationToken из ответа на последнюю успешную отправку, а не предыдущее значение. Токен также привязан к одному пользователю и не может применяться для другого получателя.
Сколько сервисных сообщений LINE MINI App можно отправить для одного действия пользователя?
Стандартный максимум — пять сообщений на одно подходящее действие пользователя. LINE может одобрить другой лимит для конкретного сценария, поэтому рабочим ограничением является значение remainingCount из ответа.
Может ли неверифицированный LINE MINI App использовать API notification token?
Такое приложение может проводить тесты во внутреннем канале Developing с аккаунтами Admin или Tester. Для отправки из канала Published реальным пользователям нужны верифицированный LINE MINI App и одобренные шаблоны.
Service notification token LINE — это то же самое, что user ID в Messaging API?
Нет. Это изменяемое, привязанное к пользователю разрешение на сервисные сообщения для одного действия в MINI App. Оно не является постоянным адресом пользователя, универсальным credential для push-сообщений или идентификатором чата поддержки.
Следующий шаг
Реализуйте официальный процесс из двух вызовов по справочнику LINE MINI App API и сохраняйте обновленный токен после каждой отправки. Если ваша отдельная задача — получать обычные сообщения клиентов LINE, используйте руководство UnifyPort по авторизации LINE как дополнительный маршрут.
Источники
Официальные материалы LINE, проверенные 2026-07-21: