この記事はフリューアドベントカレンダー2024の記事になります。
LINEを使って通知を送信できる「LINE Notify」のサービス終了がアナウンスされました。
サービス終了の詳細はこちら
このサービス終了を受けて、代替手段として Discord を利用することにしました。
本記事では、Pythonを用いた実装方法やLINE Notifyとの機能の違いについて、わかりやすく解説します。
LINE Notifyとは
LINE NotifyはアプリやWebサービスからの通知をLINEで受け取れるサービスです。
外出中でもスマホで簡単に確認できるので通知手段として非常に使い勝手がよく、しかも無料で利用できるため個人の開発者やサービス運営者にとって重宝されているサービスではないかと思います。
以下は私の活用例の一つです。
自宅のインターホンが押された際に、LINEに通知を送信する仕組みを構築していました。
LINE Notifyに代わるサービス
LINE Notifyのサービス終了に伴い、代替となるサービスをいくつか検討しました。
以下は候補として挙がったサービスです
- LINE Messaging API
- Discord
- Slack
- Teams
他にも選択肢はありますが、できるだけ手間をかけずに実装したいという観点から、既にスマホにアプリがインストールされているサービスを中心に検討しました。
LINE Messageing API
LINE Notifyと利用感が大きく変わらないのは、LINE Messaging APIです。
公式サイト
このAPIは月200通までは無料で利用可能ですが、それ以上になると有料プランが必要です。
無料枠で十分であれば、引き続きLINEプラットフォームを利用するのが良いと思います。
しかし、私は月200通を超えるのでコスト面から見送りました。
Discord
Discord は、無料で利用できるインスタントメッセージングサービスです。
普段から利用しており、スマホにもアプリをインストールしていたこともあって、試してみることにしました。
DiscordのAPIは無料で利用可能で、手軽に導入できる点が大きな魅力となります。
今回の記事では、このDiscordを活用した通知の実装方法について解説します。
Slack,Teams
Slack や Teams も候補に挙げました。
実現は可能ですが以下の理由から利用を見送りました
- 個人の通知利用では機能が過剰で、やや使いにくそうな印象
- 業務でこれらのツールを利用しており、プライベートとの切り替えが手間そうに感じた
そのため、今回は候補から外しました。
LINE NotifyからDiscordに切り替えてみてどうだったか
詳細を説明する前に、結論を簡単に述べておきます。
Discordは通知機能として問題なく利用でき、実装も簡単なので、すぐに切り替え可能です。
私は実際に通知をDiscordで受け取る形に変更しています。
ただし、LINE Notifyと比較するといくつか気になる点があるため、それについても紹介します。
気になる点
-
スマホの通知バナーからDiscordを開いた際の遅延
Discordでは、スマホの通知バナーをクリックしてアプリを開くと、通知内容が表示されるまでに 1秒程度の遅延を感じます。
この遅延により、似たような通知が続く場合には前のメッセージが今回届いたものだと勘違いしてしまうことがあります。 -
通知メッセージの視認性
1番と似たような話ですが、LINE Notifyでは通知が1メッセージごとに吹き出し形式で表示されるため、視覚的にわかりやすい構造になっています。
一方、Discordでは投稿が連続すると以下のように1つのメッセージに見える場合があります。
この例では、2つの通知メッセージが連続して投稿されていますが、瞬間的に2つの通知であることに気づきにくい点がLINE Notifyとの違いです。
とはいえ、これは通知内容や利用者の好みによる部分も大きいと思います。
総評
無料で利用でき、最低限やりたいことを実現できる点から、DiscordはLINE Notifyの代替サービスとして十分と判断しました。
また、Discordではチャンネルを分けることで、通常の通知、エラー系の通知などシーンに応じた通知をまとめられる点が強みかなと感じました。
先ほど述べた気になる点もありますが、実装元の通知の仕組みを大きく変更することなく切り替えが可能なため、コストを抑えつつスムーズに移行したい方にはおすすめです。
Discordで通知を実現する
では、内容に入ります。
Discordで通知を実現するには、LINE Notifyに比べて少し手間が掛かりますが、難しい内容ではありません。
具体的には、以下の手順で通知を行います。
- DiscordのBOT(アプリ)を作成する
- Discordの通知用サーバーを作成する
- 作成したサーバーのテキストチャンネルにBOT(アプリ)を参加させる
- BOTを介して通知を送信する
「BOTを使うなら、応答アプリをサーバーにホストする必要があるのでは?」と思うかもしれません。
しかし、通知を送るだけであれば APIを呼び出すだけで実現可能です。
この点において、実装レベルでの使用感はLINE Notifyとほとんど変わりません。
順を追って説明します。
実装手順
1.Botアプリケーションの設定
Discord Developer Portalにアクセス
まず、以下のURLからDiscord Developer Portalにログインします
Discord Developer Portal
ログイン後、New Application
を選択します
アプリケーションの作成
- アプリケーション名を入力します(例:NOTIFICATION-TEST)
- 利用規約とポリシーに同意するチェックをして
Create
します
Botの作成と設定
-
サイドメニューから
Bot
を選択します -
サイドメニューから
Installation
を選択し、以下の設定を行います
-
User Install
のチェックを外します -
Guild Install
にScope
として「bot」を追加します -
Permissions
に「Administrator」と[Send Messages]を追加します
今回はテストとして権限をAdministratorにしています、個人チャンネル以外への通知やBotとして受け答えさせる場合には然るべき権限にしてください
2.通知を行うチャンネルを作成
次に、通知を送信するDiscordのテキストチャンネルを作成します。
サーバーの作成
3.Botアプリを通知用のチャンネルへ追加する
Botアプリインストールリンクを取得
- Discord Developer Portalのアプリケーション設定ページに戻ります
-
Installation
を選択し、Install Link
に表示されているURLをコピーします
- コピーしたリンクをブラウザに貼り付けて開きます
- 以下のようなインストール画面が表示されるので、先程追加したサーバー名を選択して
はい
をクリックします
Bot権限の確認と認証
Botの追加確認
インストールが完了すると、Botが通知用のテキストチャンネルに追加されているはずです。
これでサーバー側の設定が完了しました。
4.BOTを介して通知を送信する
通知元の実装
ここでは、DiscordのBotに通知を送信するためのPythonコードを実装します。
動作確認は以下の環境で行っています。
環境 | バージョン |
---|---|
OS | Windows 11 |
Python | 3.11.9 |
必要なライブラリのインストール
コードの実行にはrequests
ライブラリが必要です。
以下のコマンドでインストールしてください
pip install requests
送信クラスの作成
以下は、通知を送信するためのシンプルなクラスです。
また必要最低限のエラー処理しか実装していないので、必要に応じて作成してください。
import requests
class DiscordSendMessage:
__default_token : str = 'your_default_token' # アプリケーションのトークンを設定する
__default_channel_id : str = '1234567890' # テキストチャンネルのIDを設定する
def __init__(self, token: str = __default_token, channel_id: str = __default_channel_id):
self.__token = token
self.__channel_id = channel_id
def send_message(self, message: str):
url = f"https://discord.com/api/v10/channels/{self.__channel_id}/messages"
headers = {
"Authorization": f"Bot {self.__token}",
"Content-Type": "application/json"
}
data = {
"content": message
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(f"送信完了: {self.__channel_id}")
else:
print(f"送信失敗: {response.status_code}, {response.text}")
トークンの取得と設定
- Discord Developer Portalのアプリケーション設定ページにアクセスします
-
Bot
メニューのReset Token
をクリックします
- 自身のDiscordのログインパスワードを入力します
- トークンが発行されるので、そのトークンをコード内の
__default_token
に設定してください
トークンのセキュリティに注意
この取得したトークンは外部に漏らさないよう注意してください。
サンプルコードでは直接コードに記載していますが、実際の運用では環境変数などから取得するようにしましょう。
4. チャンネルIDの取得と設定
5. メインコードの作成
以下のコードで送信クラスを呼び出し、Botに通知を送信します。
from discord_send_message import DiscordSendMessage
if __name__ == "__main__":
discord_utility = DiscordSendMessage()
# 完了通知をDiscordへ送信
discord_utility.send_message("通知のテストです。")
このコードを実行すると、メッセージが指定したテキストチャンネルに送信されるはずです。
5.参考リンク
DiscordのAPIリファレンスについては、以下のリンクを参考にしてください
さいごに
いかがでしたでしょうか?
Discordでの通知システムは、サーバーにBotアプリケーションを設置する手間があるだけで、基本的な使い勝手はLINE Notifyとほとんど変わらないと感じていただけたのではないでしょうか。
また、Discordの「Message Components」を活用すれば、通知だけでなくUIを設置してインタラクティブな操作を行うことも可能です。
将来的には、Discordからの入力を受けて遠隔実行など、より高度な機能に挑戦してみようと考えています。
この記事が、LINE Notifyの代替を探している方の参考になれば幸いです。