LINE Notifyの代替手段を考える

LINE Notifyが2025年3月31日に終了してしまうということなので代替え手段を考えないといけなくなってしまいました。

無料で使えるし手軽で便利だったのになあ。

■案内されている手段は?

サービス終了に伴ってLINEから代替え提案されているのがMessaging APIを使う手段。

これは月間200通までは無料だけれど、それ以上になると月額5,000円〜という有料サービスになりますね。200通あれば用途を限定さえすれば事足りるような気もしますが、有料も視野にいれないといけないのであれば他の手段とも比較しておきたくなります。

■とりあえずMessaging APIは

LINE公式アイコン

ひとまず提案されている通り、第一の選択肢と考えることになります。
もちろんLINE公式アカウントを持っているというのが前提になります。

必要最小限の手順としては、

・アクセストークンを取得
・通知するユーザーIDを取得
POST送信

自分が管理しているアカウント宛てであれば、アクセストークンユーザーIDもコンソール画面上で確認できるのでかなり手軽に実験できますね。
あとはcurlで直接たたいても良いですし、pythonで書いたとしたら以下の通り。

import requests

# LINE Messaging APIの設定
LINE_CHANNEL_ACCESS_TOKEN = "チャネルアクセストークン"
USER_ID = "LINEユーザーID"  # 自分のLINEユーザーID
MSG_SEND_LIMIT = 200        #送信上限数
MSG_SEND_WARN  = 150        #警告開始数
MSG_SEND_COUNT = 0

def send_message(user_id, message_text):
    # 送信数確認API
    url = 'https://api.line.me/v2/bot/message/quota/consumption'
    headers = {
        'Authorization': f'Bearer {LINE_CHANNEL_ACCESS_TOKEN}'
    }
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        MSG_SEND_COUNT = int(data['totalUsage'])
        print(f"Total message usage: {data['totalUsage']}")
        # 個別送信pushAPI
        if MSG_SEND_COUNT < MSG_SEND_LIMIT:
            url = "https://api.line.me/v2/bot/message/push"
            headers = {
                "Content-Type": "application/json",
                "Authorization": f"Bearer {LINE_CHANNEL_ACCESS_TOKEN}"
            }
            payload = {
                "to": user_id,
                "messages": [{"type": "text", "text": message_text}]
            }
            if MSG_SEND_COUNT >= MSG_SEND_WARN:
                payload["messages"].append({"type": "text", "text": f"現在の送信数:{MSG_SEND_COUNT}通\n送信制限まで残り:{MSG_SEND_LIMIT-MSG_SEND_COUNT}通"})
            response = requests.post(url, headers=headers, json=payload)
            if response.status_code == 200:
                print("通知送信成功!")
            else:
                print(f"エラー発生: {response.status_code}, {response.text}")
        else:
            print(f"送信上限に到達しました:{MSG_SEND_LIMIT}通")
    else:
        print(f"送信数確認エラー: {response.status_code} - {response.text}")

# 実行部分
if __name__ == "__main__":
    message = "これはテスト通知です!"
    send_message(USER_ID, message)

もし自分(管理者)以外のユーザーへ通知したい場合にはユーザーIDを取得する必要があるので、Webhookを準備して送信するといったひと手間がかかります。
Webhookを設定した場合、初期値では無制限にどこからでもアクセスできるようになっているので、念のためにLINE DevelopersのコンソールからIPアドレス制限を掛けておいたほうが良いでしょう。

LINE公式は受信の通知も常に受け取っているので、どちらかといえば公式から発信というよりは公式アカウントへと通知できるほうがありがたいのですけれどねぇ。

■Discordへの送信

discordアイコン

わりとユーザー層が偏りそうな気もしますが、私も最近になってようやくdiscordに触れはじめたのでこちらに通知しちゃうという手もありそうです。

流れとしては、

・通知用チャンネルを作成(既存でもOK)
・チャンネルの設定アイコンをクリック
・「連携サービス」を表示
・「ウェブフック」を選択
・「新しいウェブフック」を選択
・出来上がったウェブフックURLをコピー

と、すべてアプリ画面上で完結してしまうのでとても楽ちん。

動作テストも

・curl -H “Content-Type: application/json” -d ‘{“content”: “これはテスト通知だ!”}’ “”

とするだけで良いので簡単ですね。

ただ、こちらは逆に通知が多くて抑制しちゃっているのもあって、やはり必要な通知を見逃してしまうおそれが払拭できないかな・・・

■Teamsへのチャット送信の場合

Teamsアイコン

Microsoftにどっぷりと浸かっている方であればTeamsのアカウントあてにチャット送信するという手もありそうですね。

Teamsに慣れてるかたならWorkflow(PowerAutomate?)でさくさくっと作ってしまえるのか、あるいはGraphAPIを活用してできそうです。

手順としては、

・Azure EntraIDでアプリ登録

アプリの登録 – Microsoft Azure

※適当な名前で構わないのですがあとで修正するのは大変かもしれない


・アプリのAPI権限を設定

「アプリ名」の中から「APIのアクセス許可」を選び「+アクセス許可の追加」

「Microsoft Graph」から「委任されたアクセス許可」を選び
Chat.ReadWriteとChatMessage.Sendを追加

そして、既定のディレクトリに管理者の同意を与えることを忘れずに。
場合によっては「アプリの所有者」にも追加登録が必要かも。

・クライアントシークレットの生成

「証明書とシークレット」の中から「新しいクライアントシークレット」

説明と有効期限(メニューからは最長2年)を設定し、シークレットを生成します。生成されたシークレットのIDではなく値の側をメモしておきます。

・アクセストークンを取得

つぎはコマンド操作で、

curl -X POST -H “Content-Type: application/x-www-form-urlencoded” -d “client_id=<アプリケーションID>&scope=https://graph.microsoft.com/.default&client_secret=<クライアントシークレット>&grant_type=client_credentials” https://login.microsoftonline.com/<テナントID>/oauth2/v2.0/token

とすることでアクセストークンが返ってきますが、とても長い文字列です。

・チャットIDを取得

通知先になるチャットのIDを取得する必要もありますが、なんかこんな便利そうなページもあるのですね。

Graph Explorer | Try Microsoft Graph APIs – Microsoft Graph

アクセス権限の都合で弾かれる場合には右上のアイコン下あたりの「Consent to permissions」から必要なアクセス権をConsentしましょう。


・POST送信

前準備がいろいろと面倒ですがいよいよ通知文の送信です。

curl -X POST -H “Authorization: Bearer <アクセストークン>” -H “Content-Type: application/json” -d ‘{“body”: {“content”: “これは通知テストです!”}}’ https://graph.microsoft.com/v1.0/chats/<チャットID>/messages

ただ、Teamsは自社契約ではなく他社契約になっているので実験はできずなのですが・・・

■自前で通知アプリを作るか

自前でアプリを作る方であれば、通知を受け取るだけのアプリを作っちゃうという手もありそうです。

ただ、むかーしむかしにiOSとAndroidの両方に対応するNotificationを持ったアプリを運用していたときに思ったのですが「OSのアップデートでメンテコストがかかりすぎる!」という問題がありますよね。

いまどきならすでに解決されているのかもしれませんが、そもそもそれを回避したいのが大きな理由でLINE Notifyを導入したというのを忘れそうになっていました。

というわけでこちらは論外でしたね。

手軽さから言えばDiscord、でも日常使いのシーンから考えるとLINE Messaging APIに落ち着いてしまうのかな。


安心安全安価なSDカードデータ復元・HDDデータ復元は
長年の信頼と実績の『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/