← 全記事
チュートリアル

LINEミニアプリのサービスメッセージを通知トークンで送信する方法

LINEミニアプリのサービスメッセージを送信するには、ユーザーが操作を完了した直後に新しいLIFFアクセストークンを取得し、サーバー上でユーザーに紐づくサービス通知トークンと交換してから、承認済みテンプレートを指定して公式の送信エンドポイントを呼び出します。レスポンスを受け取るたびに、更新されたnotificationTokenを保存してください。送信が成功するたびにトークンの値がローテーションし、remainingCountによって、その操作からあと何件のフォローアップを送信できるかが決まります。

要点

  • 本番環境でサービスメッセージを使うには、認証済みLINE MINI Appと審査済みテンプレートが必要です。未認証アプリでテストできるのは、内部のDevelopingチャネルに登録されたAdminまたはTesterアカウントだけです。
  • 1つのLIFFアクセストークンから、POST /message/v3/notifier/tokenで発行できるサービス通知トークンは1つだけです。発行されたトークンは、1人のユーザーと1回の操作セッションに紐づきます。
  • POST /message/v3/notifier/send?target=serviceで送信したら、保存済みのトークンをレスポンスで返された新しいnotificationTokenに置き換えます。
  • 新しく発行したトークンの有効期間は1年で、通常は5回分の送信回数が付与されます。審査された用途によって上限が異なる場合があるため、実行時はremainingCountを正としてください。
  • この公式フローは、MINI App内の操作に紐づく確認、結果、リマインダーのためのものです。自由形式のサポート受信箱や、宣伝用の一斉配信APIではありません。

通知トークンを発行する前提条件

このチュートリアルは、利用資格を確認した後の実装を扱います。本番環境でサービスメッセージを利用できるかまだ判断できていない場合は、先に認証済みと未認証のLINE MINI Appチェックリストを確認してください。

トークンフローを実装する前に、次の4つの前提条件を確認します。

前提条件必要な状態重要な理由
LINE MINI Appチャネル本番利用向けの認証済み未認証アプリはPublishedチャネルからサービスメッセージを送信できない
サービスメッセージテンプレート追加、承認済みで、ステータスがPUBLISHINGAPIが受け付けるのは、審査済みのテンプレート名と定義済み変数だけ
ユーザー操作予約、購入、チェックイン、配送、またはその他の承認済み操作すべての通知は、その操作を確認するか、その操作へ応答する必要がある
サーバー認証情報ステートレスまたは短期のチャネルアクセストークンLINE MINI Appチャネルでは、長期チャネルアクセストークンやChannel Access Token v2.1を利用できない

LINEは、アプリケーション側で有効期限を管理する必要がないステートレスチャネルアクセストークンを推奨しています。チャネルアクセストークンはサーバーだけで保持し、MINI Appクライアントへ返さないでください。

3種類のLINEトークンの違い

各認証情報の役割を1つに限定すると、実装を整理しやすくなります。

認証情報取得元証明する内容ライフサイクル上の重要なルール
LIFFアクセストークンMINI App内のliff.getAccessToken()現在のLINEユーザーがアクセスを許可したこと最長12時間有効だが、ユーザーがアプリを閉じると無効になる場合がある
チャネルアクセストークンサーバー側のLINE認証情報LINE MINI AppチャネルにAPIの呼び出し権限があること可能であればステートレストークンを使い、ブラウザーには公開しない
サービス通知トークンPOST /message/v3/notifier/token1人のユーザーが、1回の操作に紐づく通知の対象であることユーザーに紐づき、最長1年間有効で、回数制限があり、送信ごとに更新される

1つのLIFFアクセストークンから発行できるサービス通知トークンは1つだけです。操作完了後、すぐに交換してください。有効期限内に見えるLIFFトークンでも、ユーザーがMINI Appを閉じたり、追加の権限を許可したりすると無効になる場合があります。

LINEミニアプリのサービスメッセージを通知トークンで送信する方法

1. ユーザー操作の完了後にLIFFアクセストークンを取得する

MINI App内で予約、購入、またはその他の承認済み操作が成功した後、liff.getAccessToken()を呼び出します。取得した値はHTTPS経由で自社のバックエンドへ送信してください。バックエンドへのリクエストは社内の操作レコードに関連づけますが、LIFFトークンも、後で取得するサービス通知トークンもアプリケーションログには書き込まないでください。

発行と送信にはチャネルアクセストークンも必要なため、ブラウザーからService Message APIを直接呼び出してはいけません。

2. サービス通知トークンと交換する

サーバーから公式の発行エンドポイントを呼び出します。

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}\"}"

成功時のレスポンスには4つのフィールドがあります。

{
  "notificationToken": "34c11a03-b726-49e3-8ce0-949387a9f531",
  "expiresIn": 31536000,
  "remainingCount": 5,
  "sessionId": "xD06R2407210008"
}

トークンは保存時に暗号化し、expiresInremainingCountsessionId、自社のユーザー操作識別子と一緒に保存します。sessionIdをユーザー識別子として使わないでください。サービス通知トークン自体が受信者に紐づいており、別のユーザーには利用できません。

3. 承認済みテンプレートを送信する

トークンを指定し、公式の送信エンドポイントを呼び出します。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"
  }'

LINE Developers Consoleに表示されるtemplateNameと変数キーを、そのまま使ってください。テンプレート名の形式は{template name}_{BCP 47 language tag}で、最大30文字です。サービスメッセージで対応している言語サフィックスは、jaenzh-TWthidkoです。選択したテンプレートに変数がなくてもparamsは必須で、値は{}にする必要があります。

4. 送信するたびに更新後のトークンを保存する

送信に成功すると、新しいnotificationToken、更新されたexpiresInremainingCount、同じ操作単位のsessionIdが返されます。後続のリマインダーをスケジュールする前に、レコードをアトミックに更新してください。以前のトークンを再利用すると、本来は有効なフォローアップでも失敗する可能性があります。

expiresInremainingCountがどちらも0の場合、LINEは今回のメッセージを受理したものの、トークンを更新できなかったことを示します。その操作セッションを完了扱いにし、このレスポンスを基に次の送信をスケジュールしないでください。

保存と再試行のチェックリスト

サービス通知トークンは、恒久的なユーザーアドレスではなく、ローテーションする認証情報として扱います。

  1. ユーザーが対象となるMINI App操作を完了した時点で、操作レコードを1件作成する。
  2. LIFFトークンは1回だけ交換し、返されたsessionId、暗号化したトークン、有効期限、残り回数を保存する。
  3. 2つのワーカーが同じトークンを同時に使わないよう、送信中は操作レコードをロックするか、バージョン管理する。
  4. HTTP 200を受け取ったら、次のリマインダーをキューへ入れる前に、更新後のトークンとカウンターをコミットする。
  5. 400の場合は、再試行前にリクエストボディ、受信者の状態、テンプレート変数を検証する。
  6. 401の場合は、サーバー側のチャネル認証情報を更新するか、新しいユーザー操作フローを開始する。無効なLIFFトークンやサービス通知トークンを繰り返し送信しない。
  7. 403の場合は、チャネルが許可され、正確なテンプレートが利用可能なステータスで存在することを確認する。

LINE向けに独自の固定回数を使った再試行ポリシーを決めないでください。公式ドキュメントではエラー種別が定義されていますが、このAPIに固定のリクエストレートは公表されていません。一時的な障害に限って上限付きで再試行し、失敗した操作を無関係な通知へ転用しないでください。

UnifyPortが担う範囲

MINI Appからトランザクション通知を送る場合は、LINE公式のService Message APIを使います。UnifyPortは、LINEサービス通知トークンの発行や更新、テンプレートの申請、認証済みステータスの付与、通常メッセージからMINI Appサービスメッセージへの変換を行いません。

UnifyPortが適しているのは、自由形式のサポートに対応する別の経路です。顧客がトランザクション通知の前後に通常のLINE会話を始めた場合、接続済みLINEアカウントは、受信テキストを標準のmessage.receivedイベントとして配信できます。サポートシステムは、WhatsApp、Telegram、Zalo、TikTok、Xのイベントと一緒に振り分け、プロバイダー機能マトリクスで対応を確認したうえでPOST /v1/messagesを利用できます。

この分離は、LINE MINI Appの決済とサポートWebhookのガイドで説明しているアーキテクチャと同じです。公式MINI App APIがトランザクションを担当し、顧客メッセージのパイプラインが通常会話の受信を担当します。後者を始めるには、LINE認証ガイドと正確なmessage.receivedイベントリファレンスを確認してください。

制限とトレードオフ

認証済みMINI Appから予約の確認、結果の報告、ユーザーが完了した操作に関するリマインダーを送る場合は、公式のサービスメッセージ経路が適しています。通知は、LINEユーザー、審査済みテンプレート、承認された用途に紐づいたまま配信されます。

この経路の用途は意図的に限定されています。1回の操作から通常送信できるのは最大5件で、テンプレートは審査対象です。広告、クーポン、特典、製品の宣伝、一般的なイベント告知は禁止されています。LY Corporationが審査時に別の上限を設定する場合もあります。1チャネルに設定できるテンプレートは最大20件で、メッセージの目的は申請した用途に継続して一致していなければなりません。

非公式インターフェースを使っても、これらのルールを変更したり、トークンの送信回数を増やしたりすることはできません。一方、Service Message APIは、自由形式の問い合わせを継続的に受け付けるサポート受信箱の代わりにはなりません。2つのシステムは、自社の注文IDや予約IDで連携し、プラットフォームのトークンを共有しないでください。

FAQ

LINEのサービス通知トークンはいつまで有効ですか?

新しく発行したトークンの有効期間は1年、つまり31,536,000秒です。メッセージ送信回数が0になると、それより早く利用できなくなる場合があります。必ずLINEから最後に返されたexpiresInremainingCountを参照してください。

後続のサービスメッセージで同じ通知トークンを再利用できますか?

前の値ではなく、直近の送信成功時に返された更新後のnotificationTokenを使ってください。トークンは1人のユーザーに紐づいているため、別の受信者にも再利用できません。

1回のユーザー操作から送信できるLINE MINI Appサービスメッセージは何件ですか?

対象となる1回のユーザー操作につき、標準の上限は5件です。用途によってLINEが別の上限を承認する場合があるため、レスポンスのremainingCountを実際の運用上限としてください。

未認証のLINE MINI Appでも通知トークンAPIを使えますか?

内部のDevelopingチャネルで、AdminまたはTesterアカウントを使ったテストは可能です。Publishedチャネルから本番ユーザーへ送信するには、認証済みLINE MINI Appと承認済みテンプレートが必要です。

LINEのサービス通知トークンとMessaging APIのユーザーIDは同じですか?

同じではありません。これは1回のMINI App操作に紐づくサービスメッセージ向けの、ローテーションするユーザー単位の認証情報です。再利用可能なユーザーアドレスでも、一般的なプッシュメッセージ用の認証情報でも、サポートチャットの識別子でもありません。

次のステップ

LINE MINI App APIリファレンスに沿って、2回の公式API呼び出しを実装し、送信のたびに更新されたトークンを保存してください。通常のLINE顧客メッセージを受信する要件が別にある場合は、二次経路としてUnifyPortのLINE認証ガイドを利用してください。

出典

以下のLINE公式情報を2026年7月21日に確認しました。