ZhgChg.Li

Line Notify から Telegram Bot への通知移行:10分で完了する無料&強力な方法|簡単ステップ解説

Line Notify の個人通知を無料でより強力な Telegram Bot に10分で移行する方法を手順通りに解説。通知の安定性と利便性を向上させたい方必見の実践ガイドです。

Line Notify から Telegram Bot への通知移行:10分で完了する無料&強力な方法|簡単ステップ解説
本記事は AI による翻訳です。お気づきの点があればお知らせください。

10分でLine NotifyからTelegram Bot通知へ素早く移行

手取り足取りで Line Notify の個人通知サービスを同じく無料でより強力な Telegram Bot に移行する

Photo by Lana Codes

Photo by Lana Codes

LINE Notifyサービス終了のお知らせ

長い間LINE Notifyをご利用いただき、誠にありがとうございました。

LINE Notifyは2016年9月のリリース以来、開発者向けのサービスを提供してきました。より良いサービスを提供し、今後の類似商品サービスに経営資源を集中させるため、2025年3月31日をもって本サービスを終了することを決定しました。長年にわたりLINEを通知連携サービスとしてご利用いただいたすべてのユーザーに心より感謝申し上げます。

もし引き続きLINEでユーザーに通知を送るサービスを利用する場合は、より機能が充実したMessaging APIの利用をおすすめします。

Line Notify公式サイトからの引用で、Lineは2024年10月8日に、Line Notifyが2025年4月1日に完全に終了すると発表しました。引き続きLineで通知を利用する場合は、有料のMessage APIのみ利用可能です。

Line Notify の利点は非常に簡単に連携でき、個人通知ロボットとして使うのに非常に便利で使いやすいことです。一部の Line Bot やサードパーティサービスも Line Notify を使って通知を行っています(例:ルイーザ、あなたの注文通知機能など)。しかし、欠点も多く、例えばメッセージ内容が単一であること、グループ分けができないこと(すべて Line Notify Bot に送信される)、メッセージの長さに制限があることなどがあります。

Line Notify の終了が発表されたことで、他の通信・通知サービスへの移行の良い機会となりました:

  • Slack:無料版のメッセージは30日間しか保存されません。私の通知は個人的なものなので、Slackは少しオーバースペックです。(Slackでのメッセージ送信は以前の記事をご参照ください:Slack & ChatGPT Integration

  • Discord:私の通知は個人的なもので、少しオーバースペックです。

  • Telegram:無料でほぼ無制限に利用可能。

私にとって Telegram の通信サービスは、元の Line Notify の使用ニーズにより適しています。通知を受け取るチャンネルが必要で、できれば異なるニーズに応じて複数のチャンネルを持てること、受け入れ可能な内容やフォーマットが豊富であること、そして迅速かつ簡単に連携できることが望ましいです。Telegram はこれらの要件をすべて満たし、さらに Bot との双方向のやり取りも実現できます。

成果

まず最終的な完成図を掲載します(Github Star 通知、Repo Stats 通知の例):

  • ✅ 誰かがリポジトリにスターを付けるとWebhookがトリガーされ -> Google Apps Script -> Telegram BotがTelegramのGithub Statsグループに通知を送信します

  • ✅ Google Apps Scriptが毎日定時に実行され -> Githubリポジトリのステータスを取得 -> Telegram Botが通知をGithub Statsグループに送信します

  • /update Telegram Botコマンドを使ってGithubリポジトリのステータスを取得し、Telegram Botが通知をGithub Statsグループに送信します

元の Line Notify と比較して

  • ❌ すべてのメッセージが分類やグループ分けされずに Line Notify に送信される

  • ❌ 個別のメッセージに対して特別な設定(通知音、ミュートなど)ができない

  • ❌ メッセージのやり取りができない

目次

  • Telegram Bot の設定

  • Line Notify のメッセージ送信を Telegram Bot に移行する(Google Apps Script)

  • Telegram Bot との対話(コマンド)× Google Apps Script の活用

(1/2) Telegram Bot の設定

Telegram Bot の申請は非常に簡単で、ウェブページを開く必要もなく、公式の BotFather ロボット とやり取りするだけで済みます。

Step 1. Telegram Bot を申請する

Telegramサービスをインストールし登録した後、「BotFather ボット」を友達に追加してください。

  1. 開いて、BotFather ボットに参加します

  2. 追加後に直接メッセージ「/newbot」を送信して、あなたのボットを作成します。

  3. あなたのボット名を入力してください

  4. あなたのボットアカウント名を入力してください(重複不可、必ず bot で終わる必要があります。例:私のは zhgchgli_bot です)

  5. あなたの Bot のリンク、クリックして使用開始 (例: t.me/harrytest56_bot)

  6. あなたの_BOT_API_Token を取得し、大切に保管してください ⚠️⚠️⚠️

  7. で取得した Bot のリンクをクリックして、Bot の利用を開始します:

現在は機能がありません。右上の「Info」をクリックして、名前の編集やプロフィール画像のアップロードができます。

Step 2. Telegram通知グループの作成とボットアカウントの参加

異なる個人通知タイプを別々のグループに送信したいですが、デモ用に My Notify Group を1つだけ作成しています

実際のニーズに応じて異なるグループを作成し、手順に従ってボットを追加・設定できます。

  1. 新しいグループを作成する

  2. あなたのボットアカウントを検索して「参加」をクリックする

  3. グループ名とアイコンを設定する

Step 3. グループチャットIDを取得する

Telegram Bot API にはグループ一覧やグループチャットIDを直接取得するエンドポイントがありません。/getUpdates を使ってボットのメッセージリストを取得し、そこからグループチャットIDを見つける必要があります:

リクエスト:

curl 'https://api.telegram.org/bot你的_BOT_API_Token/getUpdates'
  • Telegram API の形式は https://api.telegram.org/bot あなたの_BOT_API_Token /getUpdates で、BOT API Token の前に bot という文字列を付ける必要があります。

  • 例: curl 'https://api.telegram.org/bot7814194578:AAEWpPJvKn06ID7D9FjV65aDKQLkGkz8cc8/getUpdates'

Response:

{
    "ok": true,
    "result": [
        {
            "update_id": 706454235,
            "my_chat_member": {
                "chat": {
                    "id": -4532420331,
                    "title": "My Nofify",
                    "type": "group",
                    "all_members_are_administrators": false
                },
                "from": {
                    "id": 986128250,
                    "is_bot": false,
                    "first_name": "Harry",
                    "last_name": "Li",
                    "username": "zhgchgli"
                },
                "date": 1728726861,
                "old_chat_member": {
                    "user": {
                        "id": 7814194578,
                        "is_bot": true,
                        "first_name": "Harry Test",
                        "username": "harrytest56_bot"
                    },
                    "status": "left"
                },
                "new_chat_member": {
                    "user": {
                        "id": 7814194578,
                        "is_bot": true,
                        "first_name": "Harry Test",
                        "username": "harrytest56_bot"
                    },
                    "status": "member"
                }
            }
        },
        {
            "update_id": 706454236,
            "message": {
                "message_id": 1,
                "from": {
                    "id": 986128250,
                    "is_bot": false,
                    "first_name": "Harry",
                    "last_name": "Li",
                    "username": "zhgchgli"
                },
                "chat": {
                    "id": -4532420331,
                    "title": "My Nofify",
                    "type": "group",
                    "all_members_are_administrators": true
                },
                "date": 1728726861,
                "group_chat_created": true
            }
        },
        {
            "update_id": 706454237,
            "message": {
                "message_id": 2,
                "from": {
                    "id": 986128250,
                    "is_bot": false,
                    "first_name": "Harry",
                    "last_name": "Li",
                    "username": "zhgchgli"
                },
                "chat": {
                    "id": -4532420331,
                    "title": "My Nofify",
                    "type": "group",
                    "all_members_are_administrators": true
                },
                "date": 1728726864,
                "new_chat_photo": [
                    {
                        "file_id": "AgACAgUAAxkBAAMCZwpHUEaLZSvFFYu8GiO-8qI_jVYAApfAMRu0B1BUJP-4u2wF6scBAAMCAANhAAM2BA",
                        "file_unique_id": "AQADl8AxG7QHUFQAAQ",
                        "file_size": 5922,
                        "width": 160,
                        "height": 160
                    },
                    {
                        "file_id": "AgACAgUAAxkBAAMCZwpHUEaLZSvFFYu8GiO-8qI_jVYAApfAMRu0B1BUJP-4u2wF6scBAAMCAANiAAM2BA",
                        "file_unique_id": "AQADl8AxG7QHUFRn",
                        "file_size": 15097,
                        "width": 320,
                        "height": 320
                    },
                    {
                        "file_id": "AgACAgUAAxkBAAMCZwpHUEaLZSvFFYu8GiO-8qI_jVYAApfAMRu0B1BUJP-4u2wF6scBAAMCAANjAAM2BA",
                        "file_unique_id": "AQADl8AxG7QHUFQB",
                        "file_size": 37988,
                        "width": 640,
                        "height": 640
                    }
                ]
            }
        }
    ]
}

対応する Group Name + type=group のネストされた JSON データをレスポンスから見つけることができ、その中の id が Group Chat ID です:

"chat": {
  "id": -4532420331,
  "title": "My Nofify",
  "type": "group",
  "all_members_are_administrators": false
}
  • Group Chat Id = -4532420331

⚠️⚠️⚠️️ もしレスポンスが空 { "ok": true, "result": [] } の場合は、グループ内でメッセージ(例:Hello)を送ってから再度APIを呼び出してください。

Step 4. メッセージを送信する

私たちは /sendMessage を使ってグループにメッセージを送信できます。

リクエスト:

curl 'https://api.telegram.org/bot你的_BOT_API_Token/sendMessage' \
--form 'chat_id="グループチャットID"' \
--form 'text="メッセージ内容"'

例:

curl 'https://api.telegram.org/bot7814194578:AAEWpPJvKn06ID7D9FjV65aDKQLkGkz8cc8/sendMessage' \
--form 'chat_id="-4532420331"' \
--form 'text="test"'

Response & Result:

{
  "ok": true,
  "result": {
    "message_id": 5,
    "from": {
      "id": 7814194578,
      "is_bot": true,
      "first_name": "Harry Test",
      "username": "harrytest56_bot"
    },
    "chat": {
      "id": -4532420331,
      "title": "My Nofify",
      "type": "group",
      "all_members_are_administrators": true
    },
    "date": 1728727847,
    "text": "test"
  }
}
  • 送信に成功し、上記のレスポンスを取得しました

  • Telegram グループに戻ると、先ほど送信したメッセージ内容が表示されます。

(2/2) Line Notify のメッセージ送信を Telegram Bot に移行する(Google Apps Script)

私の個人通知ボットサービスは Google Apps Script を使用しているため、Google Apps Script での変換例(JavaScriptに類似)を示します。

元の Line Notify 送信コード:

const lineToken = "XXXX";

function sendLineNotifyMessage(message) {
  var url = 'https://notify-api.line.me/api/notify';
  
  var options = {
    method: 'post',
    headers: {
      'Authorization': 'Bearer '+lineToken
    },
    payload: {
      'message': message  // 送信するメッセージ
    }
  }; 
  const response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText()); // レスポンスをログに出力
}

非常にシンプルで便利に使えることがわかります…

Telegram Bot 送信コードへの移行:

const telegramToken = "あなたの_BOT_API_Token";
const TelegramChatId = {
  GA: -123456,
  GITHUB: -123457,
  MEDIUM: -123458
};

function sendNotifyMessage(message, chatId) {
  var url = "https://api.telegram.org/bot"+telegramToken+"/sendMessage";
  
  const payload = {
    "chat_id": chatId,
    "text": message,
    "parse_mode": "Markdown"
  } 
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'muteHttpExceptions': true,
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

前述の Telegram Bot 設定手順で取得した情報。

  • telegramToken = あなたの_BOT_API_Token

  • TelegramChatId は独自に定義したメソッドです。実際には異なる通知をそれぞれ別のグループに送信したいため、対象グループとその Group Chat Id を管理する構造体を定義しました。

/sendMessage API パラメータ、その他のパラメータや詳細は公式ドキュメントを参照してください 。以下は私がよく使うパラメータです:

  • text: メッセージ内容(必須)

  • chat_id: 対象のグループチャットID(必須)

  • parse_mode: メッセージ内容の解析方法、ここでは Markdown を指定しています

  • disable_web_page_preview: メッセージ内のリンクのプレビューを無効にするかどうかです。ここでは true に設定して無効化し、メッセージをよりシンプルに表示できます。

使用方法:

sendNotifyMessage("Hello", TelegramChatId.MEDIUM) // Hello メッセージを MEDIUM グループチャットIDに送信
sendNotifyMessage("Hello", -1234) // Hello メッセージを -1234 グループチャットIDに送信

成果

私の Github Repo Star Notifier ロボット を例に挙げると:

特殊な音やサイレントの設定

Line Notify より優れている点は、異なるグループごとに通知音を設定したり、ミュートにしたりできることです。

Telegram Botとの対話(コマンド) x Google Apps Scriptの使用

Notify機能の代替だけでなく、Telegram Botはユーザーとの対話機能—Telegram Bot Command—も簡単に実現できます。

私の使用シナリオに戻ると、私のボットは定期的またはWebhookで通知メッセージを送信します。しかし、時には手動でボットをトリガーして現在の結果をすぐに取得したいこともあります。これまでLine Notifyにはこの機能がなく、Google Apps Scriptの場合は単純にURLを設定して、そのURLを開くとトリガーされるという方法しかなく、とても使いにくかったです。

Telegram Bot Command を使えば、直接コマンドメッセージを入力して、ボットにすぐに実行してほしいことを命令できます。

本文は Goolge Apps Script を例にしています。Google Apps Script の詳細については、以前の記事「Google サービスの RPA 自動化を Google Apps Script で実現する方法」をご参照ください。

Step 1. Google Apps Scriptでコマンド処理ロジックを実装する

  • Google Apps Script ホームページへ移動

  • 左上の「新しいプロジェクトを作成」

  • 「無題のプロジェクト」をクリックしてプロジェクト名を入力します。例:Telegram

  • 貼り付ける基本コード:

const telegramToken = "あなたの_BOT_API_Token";

function doPost(e) {
  const content = JSON.parse(e.postData.contents);
  if (content.message && content.message.text) {
    const command = content.message.text.split(' ')[0];
    const chatId = content.message.chat.id;

    if (command.startsWith("/update")) { 
      // /update コマンドを受信
      // ここでやりたい処理を行い、応答する...
      sendNotifyMessage("こんにちは.....\nコマンド:"+command, chatId);
    }
  }

  return HtmlService.createHtmlOutput("OK!");
}

function sendNotifyMessage(message, chatId) {
  var url = "https://api.telegram.org/bot"+telegramToken+"/sendMessage";
  
  const payload = {
    "chat_id": chatId,
    "text": message,
    "disable_web_page_preview": true,
    "parse_mode": "Markdown"
  } 
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'muteHttpExceptions': true,
    'payload': JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}
  • telegramToken = あなたの_BOT_API_Token

  • 上記のデモプログラムでは、Postリクエストを受け取り、Commandパラメータが/updateの場合に你好…と応答し、コマンドを受け取って処理した後に応答するシナリオをシミュレートしています。

Step 2. Google Apps Script Web デプロイの完了

  • 右上の「デプロイ」-> 「新しいデプロイを追加」

  • 左上の「設定」->「ウェブアプリケーション」

  • 誰でもアクセス可能「全員」

  • デプロイ作業を追加し、「アクセス権を付与」を選択します。

  • アカウントウィンドウが表示されたら、Googleのログインアカウントを選択してください。

  • 警告ウィンドウが表示されたら、「詳細設定」->「專案名稱 に移動(安全ではありません)」を選択してください。

  • 「許可」を選択してください。

  • ウェブアプリケーションのURL:あなたのWebhookのURL
    コピーしてください。
    例:https://script.google.com/macros/s/AKfycbx2oFv-eB4LezdOk3P3aoEZVhx_PI6n_YnTNP7WVVQSaiRU52di5bKNThsvIZxus3Si/exec

Google Apps Script のウェブアプリケーションのデプロイ、更新、使用、デバッグについては、以前の記事「Google Apps Script を使った Google サービスの RPA 自動化」をご参照ください。

⚠️⚠️⚠️ ご注意ください。Google Apps Script のコードを変更した場合は、デプロイ → デプロイの管理 → 新しいバージョンを作成を選択しないと反映されません。詳細は上記の記事をご参照ください。

⚠️⚠️⚠️ご注意ください。Google Apps Script のコードを変更した場合は、デプロイ -> デプロイの管理 -> 新しいバージョンを作成 を選択しないと反映されません。詳細は上記の記事をご参照ください。

⚠️⚠️⚠️ご注意ください。Google Apps Script のコードを変更した場合は、デプロイ -> デプロイの管理 -> 新しいバージョンを作成 を選択しないと反映されません。詳細は上記の記事をご参照ください。

Step 3. Webhookの登録

Telegram API の /setWebhook を使って、あなたの Webhook URL を登録します。

リクエスト:

curl --location 'https://api.telegram.org/你的_BOT_API_Token/setWebhook' \
--form 'url="あなたのWebhookのURL"'

Response:

{
    "ok": true,
    "result": true,
    "description": "Webhookが設定されました"
}

テスト

  • 私たちは異なる Chat Id に基づいて応答するため、1:1 のボットとのやり取りでも、ボットが参加しているグループチャットでも応答できます。

  • 成功 🎉🎉🎉

次回:

その他の Google Apps Script 自動化記事

備考

本文は私の Medium での100本目の記事でもあります(2018年10月に最初の記事を公開し、もう6年になります)。これからも粘り強く努力を続け、詳しい感想やデータはフォロワーが1000人(2024年10月現在925人)または総閲覧数が1,000,000回(2024年10月現在984,549回)を超えた時に改めて共有します。

*Post MediumからZMediumToMarkdownで変換。

GitHub で編集
この記事を改善
本記事は Medium で初公開
オリジナルを読む
この記事をシェア
リンクをコピー · SNS でシェア
ZhgChgLi
著者

ZhgChgLi

An iOS, web, and automation developer from Taiwan 🇹🇼 who also loves sharing, traveling, and writing.

コメント