LINEログインとMessaging APIでユーザーにメッセージを送る|Python実装例
前回のLINEログイン+AWS Cognitoの記事に続き、同じユーザーをMessaging APIでも識別し、Pythonからメッセージを送る構成を説明します。LINEログインによる認証と、公式アカウントからのメッセージ送信には、それぞれ別の条件があります。
更新範囲(2026年9月8日): 公式資料に基づきチャネルの開設手順、送信条件、Pythonコードを見直しました。旧画面による直接作成手順は置き換えています。コードの構文は確認していますが、今回の更新では実アカウントへの送信や、Cognito/Amplifyを含む認証の実機再検証は行っていません。
先に確認する送信条件
この例では、LINE公式アカウントを友だち追加したテスト用ユーザーへPushメッセージを送ります。ログインしただけのユーザー全員へ販促メッセージを送れるわけではありません。
| 確認すること | この例での条件 |
|---|---|
| ユーザーの識別 | LINEログインチャネルとMessaging APIチャネルを同じプロバイダー配下にする |
| メッセージの宛先 | 表示名や友だち検索用のLINE IDではなく、LINEプラットフォームのユーザーIDを指定する |
| 送信対象 | テスト用ユーザーが対象の公式アカウントを友だち追加し、ブロックしていないことを確認する |
| 利用目的 | 登録完了通知など、ユーザーに案内した目的と送信内容を合わせる |
| 実行場所 | チャネルアクセストークンを保持するサーバー側で実行する |
Pushの対象には、友だちのほか、公式アカウントが参加しているグループ等と、直近7日以内に公式アカウントへ1対1でメッセージを送ったユーザーも含まれます。ただし、ブロック中などの条件ではHTTP 200でも配信されません。200を到達確認として使わないでください。LINE公式のPush送信条件
LINEログインと同じユーザーIDを使う
前編のCognito連携で使うLINEログインチャネルと、今回のMessaging APIチャネルを同じプロバイダーに置きます。同じLINEユーザーに対して、同じプロバイダー内ではチャネルの種類によらず同じユーザーIDが発行されます。別のプロバイダーで得たIDをそのまま使う構成にはできません。ユーザーIDが発行される単位
自社会員ID、Cognitoのユーザー識別子、LINEのユーザーIDは、名前が似ていても同じ値とは限りません。本番では認証を検証したサーバー側で対応関係を管理します。ブラウザが送ってきた任意のLINEユーザーIDを、そのまま送信先に採用しない設計にします。
Messaging APIチャネルを準備する
現在は、LINE公式アカウントでMessaging APIを有効にしてチャネルを作成します。2024年9月4日以降、LINE Developersコンソールからの直接作成はできません。
- 利用するLINE公式アカウントを用意します。既存アカウントを使う場合は管理権限を確認します。
- LINE Official Account ManagerでMessaging APIの利用を有効にします。
- プロバイダーの選択では、連携するLINEログインチャネルと同じプロバイダーを選びます。一度選択したプロバイダーは後から変更できないため、運営会社と管理担当を確認します。
- LINE Developersコンソールで、選択したプロバイダーの配下にMessaging APIチャネルがあることを確認します。
- チャネルの設定でアクセストークンを準備し、サーバーの環境変数として管理します。
画面の最新の名称や手順はMessaging APIを始めようを参照してください。ユーザーのメッセージを受信するBotを作る場合は、これに加えてWebhookと署名検証が必要です。今回はサーバーからのPush送信に範囲を絞ります。
Python SDKによる送信例
この例は公式Python SDKのlinebot.v3を利用します。公式リポジトリで案内されているPythonの要件は3.10以上です。導入時には検証したSDKの具体的な版を依存ファイルに固定し、更新時にも確認してください。Python SDK公式リポジトリ
python -m pip install 'line-bot-sdk>=3,<4'
実行環境に次の値を設定します。値はコードに直接書かず、共有ログにも出力しません。
| 環境変数 | 設定する値 |
|---|---|
LINE_BOT_ACCESS_TOKEN | 今回のMessaging APIチャネルのアクセストークン |
LINE_TARGET_USER_ID | 送信条件を満たすテスト用ユーザーのLINEユーザーID |
開発者本人のユーザーIDは、LINEアカウントと連携したビジネスIDでチャネルの「あなたのユーザーID」を確認できます。一般ユーザーのID取得方法は公式のユーザーID取得ガイドを参照してください。
import os
import re
from linebot.v3.messaging import (
ApiClient,
ApiException,
Configuration,
MessagingApi,
PushMessageRequest,
TextMessage,
)
def main():
access_token = os.environ["LINE_BOT_ACCESS_TOKEN"]
line_user_id = os.environ["LINE_TARGET_USER_ID"]
if not re.fullmatch(r"U[0-9a-f]{32}", line_user_id):
raise ValueError("LINEユーザーIDの形式を確認してください")
configuration = Configuration(access_token=access_token)
with ApiClient(configuration) as client:
api = MessagingApi(client)
try:
api.push_message(
PushMessageRequest(
to=line_user_id,
messages=[TextMessage(text="登録完了しました。")],
)
)
except ApiException as error:
# HTTP応答だけで自動再送の可否を決めず、原因を確認する。
raise RuntimeError(
f"送信APIのエラーを確認してください(HTTP {error.status})"
) from None
print("送信APIがリクエストを受け付けました。到達は別途確認してください。")
if __name__ == "__main__":
main()
このコードは単発送信の説明例です。送信ジョブの永続化や再試行は含めていません。本番で通知を再試行する場合は、同じ通知を二重に送らない仕組みを加えます。実装の検討項目はLINE Bot本番運用の設計を参照してください。
実アカウントで確認する項目
| 確認 | 判定の仕方 |
|---|---|
| 想定ユーザーへ届くか | 管理下のテスト用アカウントで送信し、実際のトーク画面と照合する |
| ログインと会員が結び付くか | 別のテスト用会員を含め、宛先の取り違えがないことを確認する |
| エラーを処理できるか | トークン・宛先・送信量などの原因を分け、無条件に再送しないことを確認する |
| API受付と到達を分けているか | ブロック時等の200応答を、到達や開封として集計しないことを確認する |
| 通知内容が妥当か | 登録完了等の業務イベントと一致し、取消済み・重複イベントで送らないことを確認する |
サービスの構成やAPIの制約から整理する場合は、LINE APIでできること・できないことへ進んでください。
この記事に関連するサービス
TodoONadaでは、LINEログインと会員基盤の連携、Messaging APIによる通知、既存システムとの接続を支援しています。対応範囲・参考価格・開発事例を確認し、自社サービスへの組み込みをご相談いただけます。
出典・参照
- Messaging APIを始めよう (2026年9月8日確認)
- ユーザーIDを取得する (2026年9月8日確認)
- Pushメッセージを送る (2026年9月8日確認)
- LINE Messaging API SDK for Python (2026年9月8日確認)