LINE Notifyの代替としてLINE Messaging APIを使って通知させる

LINE Messaging API アプリ
スポンサーリンク

こん○○は、よふかしわーくすの、よふかしさんです

24時間稼働させているRaspberry Piで、とあるイベントが発生した時に
LINE Notifyというサービスを使って通知させるプログラムを作ってました

フリーで無制限で使えて便利だったんですが、
先日、2025年3月末でサービス終了する旨のお知らせが来ました

という訳で、LINE Notifyに代わって
LINE Messaging APIを代替手段として採用してみたので
その設定方法を記録しておきます

スポンサーリンク

公式からLINE Notify終了のアナウンス

公式ページだと、こんな感じでアナウンスされています

この中のリンクを色々辿って行って、
わかったことを要約すると、、、

  • LINE Messaging APIを使ってね
  • でも、フリープランだと月に200通までよ

Oui…マジっすか…
これまでは

  • 一日5回のイベント通知
  • 1回あたりで3~20個くらいの吹き出し

を送信してたんですが
これじゃあ全然足りないっす…

他のチャットアプリやメールでの配信も考えたんですが
もう高齢になっちゃってる親に新しいアプリ入れてもらうのはキツいし
メールはひとつひとつを開くのがやっぱり面倒…

ってことで

  • 一日5回のイベント通知 ← キープフラット
  • 1回あたり1個の吹き出しで送信 ← 変更

という運用でやってみたいと思います

LINEビジネスIDの登録

LINE Notifyと違って、LINE Messaging APIはどちらかというと法人向けっぽいサービス
なので、まずはLINE Business IDの登録が必要です
公式ページを見ながらやったんですけど、所々優しくなくて悩みました…

まずは下記にアクセス

LINE Business ID

個人使用なら、LINEアカウントでログイン、が簡単でおすすめです
後述しますが、ビジネスアカウントでログインした場合、
通知を送るための自身のユーザーIDが管理画面に表示されません

必要事項を入力

登録をクリック

開発者名はあとで変更できるってことなので、ひとまず適当に設定
こんな感じで入力したら、アカウントを作成をクリック

なぜかこんな画面が表示されますが…
気にせず、コンソール(ホーム)をクリック

そうするとこんな画面に遷移します

新規プロバイダー作成をクリックして、プロバイダー名を入力して、作成をクリック

こんな画面に遷移します

中央にMessaging APIがあるのでクリック

LINE公式アカウントを作成する必要があると言われます…
LINE公式アカウントを作成する、をクリック

ログインすると、SMS認証を求められます
どうやら、電話番号がないと使えないサービスの様です…

届いたコードを入力して…

サービスに戻ります

LINE公式アカウントの作成

続いて、LINE公式アカウント作成のために、必要な情報を入力していきます

確認をクリックして、問題なければ、完了をクリック

これでLINE公式アカウントが作成できました!

LINE Official Account Managerに入る

初回は色々同意が必要です

これも同意

やっとのことで、LINE Official Account Managerに入れました!

LINE Messaging APIの設定

LINE Official Account Managerの右上にある、設定をクリック
出てきたウィンドウの右側のメニューからMessaging APIをクリック
Messaging APIを利用する、をクリック

プロバイダーを選択する画面が出てくるので、先に作成したプロバイダーを選択
同意するをクリック

プライバシーポリシーと利用規約は、個人使用なので何も記入せずにOKをクリック

OKをクリック

これで、Cnannel情報が作成されました

チャネルアクセストークンをゲットする

LINEに送信するために必要なチャネルアクセストークンを発行して取得します

先の画面の下部にある、LINE Developersのリンクをクリック

右上のコンソールをクリック

自身で設定したプロバイダーをクリック

作成したアカウントをクリック

Messaging API設定をクリック

下にスクロールして、
チャネルアクセストークン(長期)の下にある、発行をクリック

これで、Messaging APIを使用する際に必要なチャネルアクセストークンがゲットできました!

自分のユーザーIDの確認

LINEアカウントでログインした場合

ユーザーIDはMessaging APIからLINE通知を受け取る専用のIDです
通常のLINEアカウントのIDには送信できません

ユーザーIDはLINE BusinessにLINEアカウントでログインしていれば、
チャネルの基本設定の画面を下にスクロールすると、
自身のユーザーID(あなたのユーザーID)が確認できます

LINEアカウントを使用せずにLINE Business IDを取得した場合、
あなたのユーザーIDは表示されません…

Bussines IDでログインした場合

有料アカウントでないとAPIを使用したユーザーID確認ができません
フリーの場合はWebhookを使用して確認することになります

まずは、phpコードを準備します
ファイル名は、「webhook.php」とします
チャネルシークレットIDは、LINE Developersのチャネル基本設定の下部に記載があります

<?php
// LINE Webhookから送信されるイベントを受け取る
$body = file_get_contents('php://input');

// LINEプラットフォームからのリクエストを検証
$signature = $_SERVER['HTTP_X_LINE_SIGNATURE'];
$channelSecret = 'XXXXXXXXXX'; // LINE Developersで取得したチャネルシークレットID

// 署名を確認
$hash = hash_hmac('sha256', $body, $channelSecret, true);
$validSignature = base64_encode($hash) === $signature;

if (!$validSignature) {
    http_response_code(403);
    exit('Invalid signature');
}

// JSONデータを解析
$data = json_decode($body, true);

// メッセージタイプの処理例
foreach ($data['events'] as $event) {
    if ($event['type'] === 'message' && $event['message']['type'] === 'text') {
        error_log('Received message: ' . $event['message']['text']);
    }
}

// ログに出力
file_put_contents('webhook_log.txt', print_r($data, true), FILE_APPEND);

// 応答が不要な場合は200ステータスを返す
http_response_code(200);
echo 'OK';

これを、自身のサーバーにアップロードします
例えば、ウチの場合だとこんな感じ

https://www.yofukashi-works.com/webhook.php

LINE DevelopersのMessaging API設定のQRコードから、
通知したいLINEアカウントを友達登録します

Webhook設定のWebhook URLを設定して、検証をクリックしたあと、
「成功」というポップアップが出てくれば成功です

phpを置いたパスと同じパスに「webhook_log.txt」が生成されます

この中の、destinationにある、Uから始まる文字列がユーザーIDです
自身以外の人にLINE通知を送りたい場合も、この方法でユーザーIDを取得します

LINE Messaging APIで通知するサンプルコード

さて、やっとこれでLINE Messaging APIを使用できる準備が整いました…
必要なのは下記です

  • チャネルアクセストークン ← LINE通知元
  • ユーザーID ← LINE通知先

この2つと実際に送信したいメッセージの3つを引数で与える
Pythonのサンプルコード(関数)を作成しました

import requests

def send(message, LINE_ACCESS_TOKEN, LINE_USER_ID):
    # LINE Messaging APIのプッシュメッセージエンドポイントURL
    url = 'https://api.line.me/v2/bot/message/push'

    # リクエストヘッダーを設定
    headers = {
        'Content-Type': 'application/json',  # JSON形式でデータを送信する
        'Authorization': f'Bearer {LINE_ACCESS_TOKEN}'  # アクセストークンを設定
    }

    # リクエストペイロード(送信データ)を設定
    payload = {
        'to': LINE_USER_ID,  # メッセージの送信先ユーザーID
        'messages': [  # 送信するメッセージのリスト
            {
                'type': 'text',  # メッセージのタイプ(テキスト)
                'text': message  # 実際に送信するテキストメッセージ
            }
        ]
    }

    # リクエストをPOSTメソッドで送信
    response = requests.post(url, headers = headers, json = payload)

    # レスポンスのステータスコードを確認
    if response.status_code == 200:
        # ステータスコードが200の場合は正常に送信された
        print('メッセージが送信されました。')
    else:
        # それ以外の場合はエラーとして処理
        print(f'エラーが発生しました: {response.status_code}, {response.text}')

LINE_Messaging.pyとしておけば、
LINE_Messaging.send(message, LINE_ACCESS_TOKEN, LINE_USER_ID)
と呼び出せるので汎用的に使えると思います

終わりに

こんな感じでひとまずLINE NotifyからLINE Messaging APIに乗り換えました

ブログを書くに当たって試したところ
同じ電話番号でも複数のLINE Bussines ID、LINE公式アカウントを取得できました

Messaging APIが200通しか使えない制限はLINE公式アカウントに紐づきます
ひとつのIDに100個までアカウント作成できるみたいなので
個人利用の範囲では複数アカウントを活用すれば
200通の壁を越えつつ、やりたいことはできそうな気がします

まぁちょっと作るのも管理するのも面倒ではあると思いますが。。。

公開日時:2025/01/26 20:38:05

コメント

タイトルとURLをコピーしました