LINE Messaging APIを利用して特定ユーザーに独自メッセージを送信する方法を解説します。
■実現する機能
サイト上に配置した『LINE連携』を押下すると、独自メッセージを対象ユーザーに対して送信する。
■処理イメージ
1. ユーザーが画面に表示された『LINE連携』ボタン押下
2. (LINEに未ログインの場合)LINEログイン画面に遷移
3. ユーザーはアカウント情報を入力しLINEにログインする
4. サーバーはLINEログインのコールバックを受け取り、LINEのユーザーIDを取得する
5. サーバーは取得したLINEのユーザーIDに対して独自メッセージを送信する
事前準備
LINE公式アカウントとMessaging APIの有効化
Messaging APIを利用するには、LINE公式アカウントとMessaging APIの有効化が必要です。
1.LINE公式アカウントを作成する。
詳しくは、『Messaging APIドキュメント』の「1. LINE公式アカウントを作成する」を参照。
2.作成したLINE公式アカウントでMessaging APIの利用を有効にする。
詳しくは、『Messaging APIドキュメント』の「2. LINE公式アカウントでMessaging APIを有効にする」を参照。
「チャネルID」「チャネルシークレット」の取得
MessageAPIを利用するために必要な「チャネルID」「チャネルシークレット」を確認しメモしておきます。「LINE Developers」にログインし、チャネルの設定で確認できます。


Messaging APIの仕様、注意点
・Massaging API 仕様

・二重送信にならないようリトライキー(X-Line-Retry-Key)を用いて送信する。リトライキーはLINEからは提供されないのでシステム側で独自に付与する。

・リクエスト内容によってレート制限がある。マルチキャスト系は特に注意。

実現方法
システム構成
以下の構成を前提で考えます。
| サーバ名称 | 用途 | 補足 |
| WEB | WEBコンテンツを配置 | 「LINE連携」ボタンを配置したコンテンツ |
| バックエンド | LINEとのやりとりを行う | Messaging API呼び出しとコールバック受付 |
| セッションDB | LINE認証で取得した情報を格納 |
処理の流れ
LINEとやりとりするエンドポイントは以下のように定義した前提で処理の流れを説明します。このURLはシステム独自に定義してください。
1./line/auth/start → 認証開始
2./line/auth/callback → コールバック
3./line/connection/status → 連携状態確認
4./line/connection/disconnect → 連携解除| No | 主体 | 処理 | 補足 |
| 1 | ユーザ | LINE連携ボタン押下 | /line/auth/start |
| 2 | バックエンド | 認証用URLを生成し、LINEにリダイレクト | https://access.line.me/oauth2/v2.1/authorize ※詳細は「認証用URL生成」参照 |
| 3 | LINE | 認証画面を表示 | |
| 4 | ユーザ | LINEログイン | LINEのアカウント情報入力。認証後システムが設定したコールバックURLが呼び出される。 |
| 5 | バックエンド | コールバック処理 | ・codeとstateパラメータ受信・ アクセストークン取得・ セッション保存・メッセージ送信 https://api.line.me/v2/bot/message/push ・リダイレクト(任意のURL) |
認証用URL生成
LINEの認証用URL「https://access.line.me/oauth2/v2.1/authorize」にパラメータを付与して呼び出します。必須パラメータは以下になります。
| パラメータ | 説明 | 値 |
|---|---|---|
response_type | 認証フロータイプ | code(固定) |
client_id | LINEログインチャネルID | チャネルID |
redirect_uri | 認証後のリダイレクト先URL | システムのコールバックURL(システムでユニーク) |
state | CSRF対策トークン | セッション単位でランダムな英数字文字列 |
scope | 取得する権限 | ユーザーに付与を依頼する権限。メッセージ送信のみであれば「openid」のみでOK. |
その他オプションパラメータについては「https://developers.line.biz/ja/docs/line-login/integrate-line-login/#making-an-authorization-request」参照。
処理シーケンス詳細
シーケンス図はMermaid Live Editorで作成。Mermaid Live Editorのテキストも記載しておきます。
sequenceDiagram
participant Browser as ブラウザ
participant Web as WEBサーバー<br/>(複数台)
participant Backend as バックエンド<br/>サーバー<br/>(複数台)
participant Redis as Redis<br/>(Valkey)
participant LINE as LINE
Note over Browser,LINE: 1. ログイン
Browser->>Web: POST /login
Web->>Redis: セッション作成<br/>sessionId: ABC123<br/>userId: user_demo
Web->>Browser: Set-Cookie: JSESSIONID: ABC123
Note over Browser,LINE: 2. LINE連携開始
Browser->>Web: GET /line/auth/start<br/>Cookie: ABC123
Web->>Redis: セッション取得
Redis-->>Web: userId: user_demo
Web->>Web: state生成 (xyz789)
Web->>Redis: state保存<br/>line:state:xyz789: user_demo<br/>TTL: 5分
Web->>Web: LINE認証URL生成
Web->>Browser: 302 Redirect<br/>https://access.line.me/oauth2/v2.1/authorize<br/>?state: xyz789
Note over Browser,LINE: 3. LINE認証
Browser->>LINE: GET https://access.line.me/oauth2/v2.1/authorize
LINE->>Browser: LINE認証画面表示
Browser->>LINE: ログイン・認可
LINE->>LINE: 認可コード生成<br/>code: abc123
Note over Browser,LINE: 4. コールバック & 独自メッセージ送信
LINE->>Browser: 302 Redirect<br/>https://example.com/line/auth/callback<br/>? code: abc123 & state: xyz789
Browser->>Web: GET /line/auth/callback<br/>? code: abc123 & state: xyz789<br/>Cookie: ABC123
Note over Web,Redis: State検証
Web->>Redis: GET line:state: xyz789
Redis-->>Web: user_demo
Web->>Redis: GET session:ABC123
Redis-->>Web: userId: user_demo
Web->>Web: 照合: user_demo 一致 ✅
Web->>Redis: DEL line: state:xyz789
Note over Web,LINE: アクセストークン & LINE USER ID取得
Web->>LINE: POST /oauth2/v2.1/token<br/>code: abc123
LINE-->>Web: access_token, id_token
Web->>Web: IDトークンから<br/>LINE USER ID抽出<br/>(sub: U1234567890abcdef)
Note over Web,Redis: セッション保存
Web->>Redis: session.setAttribute<br/>lineUserId: U1234567890abcdef
Note over Web,LINE: システムが独自メッセージ送信
Web->>Backend: メッセージ送信リクエスト<br/>lineUserId: U1234567890abcdef<br/>message: 独自メッセージ
Backend->>LINE: POST /v2/bot/message/push<br/>Authorization: Bearer CHANNEL_TOKEN<br/>to: U1234567890abcdef<br/>text: 独自メッセージ
LINE-->>Backend: 送信成功
Backend-->>Web: 送信完了
Web->>Browser: 302 Redirect /
Note over Browser,LINE: 5. ログアウト
Browser->>Web: GET /logout<br/>Cookie: ABC123
Web->>Redis: DEL session: ABC123
Web->>Browser: 302 Redirect /login<br/>Cookieクリア
