はじめに
サーバーで動かしているプログラムから、スマートフォンへ通知を送りたいことはありませんか?
メールでも通知はできますが、メール通知だと気付きにくいし、LINE Notifyも終了してしまいました。そこで今回は、無料で使えてスマホにもすぐ届くTelegram Botを使って通知環境を作ってみます。
以下の理由から、私は最近Telegramをよく使っています。
- スマホにすぐ届く
- 設定が簡単
- 無料で使える
今回作成している「ABEMA新着動画通知」でも、動画を検知した際の通知先としてTelegramを採用しました。「ABEMAの通知を作ることが目的ではなく、『自分が欲しい情報だけを届ける通知基盤』を作ることが今回の目的です。今回はBotの作成からcurlで通知を送るところまでをまとめます。
今回作成するもの
最終的にはこのような構成になります。
Ubuntuサーバー
│
│ Bot API
▼
Telegram
│
▼
スマートフォン(Telegramアプリ)
プログラムからBot APIを呼び出すだけなので、Python以外でも利用できます。
例えば
- Bash
- Python
- PHP
- Node.js
などからも同じように通知できます。
動作環境
今回使用した環境はこちらです。
| 項目 | 内容 |
| OS | Ubuntu Server |
| 通知先 | Telegram |
| API | Telegram Bot API |
| 確認コマンド | curl・jq |
作成の手順
1.BotFatherでBotを作成する
まずはTelegramでBotを作成します。Telegramで@BotFatherを検索して開きます。BotFatherはTelegram公式のBotです。Botの作成や管理はすべてここから行います。

BotFatherを開いたら、次に/newbotを送信します。

すると、まずBotの表示名を聞かれます。
今回はABEMA New Video Watchとしました。
続いてユーザー名を聞かれます。ma_abema_video_watch_botのように入力します。
ユーザー名は以下の要件を満たす必要があります。
- 世界で一意
- botで終わる
BotFatherには便利なコマンドがたくさんあります
BotFatherには、今回使用する /newbot 以外にも、
- Bot名の変更
- 説明文の設定
- プロフィール画像の変更
- コマンド一覧の設定
など、さまざまなコマンドが用意されています。すべて紹介すると長くなってしまうため、その他のコマンドについてはTelegram公式ドキュメントをご確認ください。
BotFatherで利用できるコマンドを見る(Telegram公式)
Botが作成されると、このような画面になります。

ここで、Use this token to access the HTTP APIという文字と一緒にBotトークンが表示されます。
例えば
1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
のような文字列です。
Botトークンは絶対に公開しないしてはいけません。BotトークンはBotを操作するためのパスワードです。
これを知っている人は、あなたのBotから自由にメッセージを送れるようになります。
そのため、
- ブログ
- GitHub
- SNS
- スクリーンショット
- 実行ログ
などには掲載しないようにしましょう。
今回掲載しているスクリーンショットでは、Botトークンをマスクしています。
もし誤って公開してしまった場合は、BotFatherからトークンを再発行(Revoke)することをおすすめします。
2.Botへ話しかける
Botを作っただけでは、まだメッセージを送ることはできません。
Telegramで先ほど作成したBotを検索します。
ma_abema_video_watch_bot
Botを開いたらSTARTを押します。
今回は動作確認として「てすと」と送ってみました。

この作業をしないと、後ほど紹介するgetUpdatesでChat IDを取得できません。
3.Chat IDを取得する
Botへメッセージを送ったら、Ubuntuから次のコマンドを実行します。
curl -s \
"https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates" \
| jq
実行すると、このようなJSONが返ってきます。
"chat":{
"id":123456789
}
このidがChat IDになります。
4.通知を送る
Chat IDが取得できたら、いよいよ通知を送ってみましょう。
curl -s \
"https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
--data-urlencode "chat_id=${TELEGRAM_CHAT_ID}" \
--data-urlencode "text=テスト通知です"
正常に送信されると、スマートフォンには以下のように表示されます。

今回は「テスト通知です。」だけですが、私が現在作成しているABEMA新着動画通知では、
ABEMA新着動画
作品:
タイトル:
動画ID:
公開日時:
URL:
という形で通知しています。
通知内容を自由に組み立てられるのがTelegram Botの魅力ですね。
よくあるエラー
Unauthorized
Botトークンが間違っています。
Not Found
URLの書き方が間違っています。
resultが空
Botへまだメッセージを送っていません。
まとめ
今回は以下を行いました。
- BotFatherでBotを作成
- Chat ID取得
- curlで通知送信
ここまで準備しておけば、Pythonからでも、Bashからでも、簡単にTelegramへ通知を送れるようになります。
次回は、このBotをPythonから利用し、実際にABEMA新着動画通知を送るプログラムを作成していきます。
参考
こちらの鍵シリーズは「ライフハック」タグに追加していく予定です。
・ライフハックカテゴリはこちら
