記事

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](https://unsplash.com/@lanacodes?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash){:target="_blank"}

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でTelegramの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を見つける必要があります:

リクエスト:

1
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
{
    "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 がグループチャットIDです:

1
2
3
4
5
6
"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 を使ってグループにメッセージを送信できます。

リクエスト:

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

例:

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

レスポンスと結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
  "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 送信コード:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 送信コードへの移行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 に設定すると、メッセージがよりシンプルに表示されます。

使用方法:

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

成果

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

特殊な音やミュートの設定

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

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

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

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

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

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

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

  • Google Apps Script ホームへ移動

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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 のウェブ公開を完了する

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

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

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

  • デプロイ作業を追加し、「アクセス権を付与」を選択してください

  • アカウントウィンドウが表示されたら、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 を登録します。

リクエスト:

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

Response:

1
2
3
4
5
{
    "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を使って変換しました。


🍺 Buy me a beer on PayPal

👉👉👉 Follow Me On Medium! (1,053+ Followers) 👈👈👈

本記事は Medium にて初公開されました(こちらからオリジナル版を確認)。ZMediumToMarkdown による自動変換・同期技術を使用しています。

Improve this page on Github.

本記事は著者により CC BY 4.0 に基づき公開されています。