TelegramでWebhookを受け取る方法

TelegramのBotを使ってWebhookを受け取り、メッセージを自動投稿する方法をわかりやすく解説します。初心者でも簡単に実装できる手順を紹介します。

Telegramは、メッセージングアプリとしてだけでなく、Botを活用した自動化ツールとしても人気があります。

日本ではTelegramは犯罪に使われるものというイメージが先行してしまいましたが、個人的にはLINEよりも圧倒的に使いやすいうえに、SlackよりもWebhook通知がカンタンなので気に入っています。

特にWebhookを使うと、外部のアプリからTelegramにリアルタイムで通知を送れるので、開発者にとって便利です。

たとえば、重要な操作の通知や、エラーログの通知を即座に共有したいときに便利です。

この記事では、TelegramのBotを作成し、Webhookを設定してメッセージを受け取る基本的な流れを一緒に確認していきましょう。

実際に手を動かしながら進められるように、具体的な手順を詳しく説明します。準備はTelegramアプリとブラウザがあればOKです。

Botを作成する

まずは、Telegram上でBotを作成する必要があります。

TelegramでWebhookを受け取るためには、Botを作成して、そのBotに、指定したチャットルームでメッセージを投稿させるという流れが必要になるからです。

Telegramには「BotFather」という専用の公式アカウントがあるので、これを使って新しいBotを簡単に作れます。God Fatherから来たのでしょうが、公式とは思えない名前なので最初は困惑しますが。

とはいえBotFatherはBotの管理を一手に引き受けてくれる頼もしい存在です。

BotFather

手順はシンプルです。Telegramアプリを開いて、検索バーに「BotFather」と入力して探します。

公式のBotFather(@BotFather)を選んで、スタートメッセージを送りましょう。すると、コマンド一覧が表示されます。

(ここからはTelegramのデスクトップアプリであれば Open というボタンをクリックするともっとラクにBotが作成できたりしますが、ここではBotとの対話を通してBotを作成します。)

ここで/newbotコマンドを入力します。Botの名前を尋ねられるので、たとえば「MyNotificationBot」のように、わかりやすい名前を付けます。

次に、Botのユーザー名(Twitterでいうハンドル名)を決めます。

これは「@」で始まり、「bot」で終わるものにしなければなりません。例えば「@my_notification_bot」といった感じです。

これでBotが作成され、APIトークンが発行されてメッセージで送られてきます。

このトークンはBotを制御するための鍵のようなもので、絶対に他人に漏らさないように注意してください。

トークンはコピーして、安全な場所に保存しましょう。以降、このトークンを使ってBotにメッセージを送ったり、Webhookを設定したりします。

チャットグループを作成する

Botができたところで、次はWebhookで受け取ったメッセージを投稿するための場所を用意します。

ここでは、「チャットグループ」を作成するのがおすすめです。

チャットグループとは、LINEのトークルームのようなものです。

Telegramで新しいグループを作るには、アプリのメニューから「New Group」もしくは「新しいグループ」を選択します。

参加者を追加して、グループ名を決めましょう。

たとえば「Webhook」という名前にしても良いでしょう。

グループを作成したら、Botを招待します。グループのメンバーリストからBot名で検索先ほど作成したBotのユーザー名(@my_notification_botなど)を検索して追加してください。

これでBotがグループに参加しました。

Webhookを受け取る(あなたのアプリから送信する)方法

これで基盤が整いました。

最後に、あなたのアプリからWebhookを送信して、Telegramにメッセージを届ける方法です。

Webhookとは、HTTPリクエストを使って外部サービスに通知を送る仕組みで、ここではTelegramのBot APIを利用します。

まず、TelegramのBot APIドキュメントを参考に、sendMessageエンドポイントを使います。

URLは https://api.telegram.org/bot<YOUR_BOT_TOKEN>/sendMessage となります。

<YOUR_BOT_TOKEN>には先ほど取得したトークンを入れます。その前にはbotというprefixが必要です。

リクエストボディには、JSON形式でchat_idtextを指定します(必須パラメータ)。

chat_id はチャットグループのIDですが、取得方法はちょっとだけ面倒です。

chat_id の取得方法

chat_idはグループのIDで、たいていチャットグループのIDには - が付きます。 たとえば -100123456789 のように。

chat_id を取得するには、Botをグループに追加した後、そのグループに1件メッセージを送ると、getUpdates APIで取得できます。これにはBotのAPIトークンが必要となります。

URLは https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates となります。

<YOUR_BOT_TOKEN>には先ほど取得したトークンを入れます。その前にはbotというprefixが必要です。

普通にブラウザでURLにアクセスしても良いです。そのなかの chat -> id を探してコピーしてください。

curlコマンドであれば以下のように実行すると、chat id だけ取得できてラクです。

curl -s -X POST https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates \
  | jq -r '.result[] | (.message.chat.id // .my_chat_member.chat.id // empty)' \
  | sort -u

ブラウザの閲覧履歴などにAPIトークンが残ってしまうので、本来は上記のようにPOSTリクエストするほうが安全でしょう。

Webhook送信の実装例

あなたのアプリ側の実装例として、Node.jsを使ってみましょう。以下のようなコードでHTTPリクエストを送れます。

async function sendToTelegram(message) {
  const token = 'YOUR_BOT_TOKEN';
  const chatId = 'YOUR_CHAT_ID';
  const url = `https://api.telegram.org/bot${token}/sendMessage`;
 
  try {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        chat_id: chatId,
        text: message
      })
    });
 
    if (!response.ok) {
      throw new Error(`HTTPエラー: ${response.status}`);
    }
 
    console.log('メッセージを送信しました');
  } catch (error) {
    console.error('送信エラー:', error);
  }
}
 
// 使用例
sendToTelegram('こんにちは!Botからのメッセージです!');

このコードをアプリに組み込めば、イベントが発生したときにsendToTelegramを呼び出せます。たとえば、Webhookを受け取るサーバー側でエラーが起きたら、自動で通知を送る、といった使い方が可能です。

最初はAPIのレスポンスを確認しながら調整すると安心です。うまくいけば、アプリとTelegramが連携して、リアルタイム通知が実現します。

Node.js での補足

Node.jsでfetchメソッドを使う場合、以下のように IPv4 を固定接続しないとローカルでTelegramに拒否される可能性があります。

ただの 500 Server Error で返ってくるので、何なのか分かりませんでしたが、調べると同様の人がいたので何とか解決しました。

ちなみに私はWindowsのWSL2で開発しているときに、このエラーが発生していました。

もしエラーばかり発生する場合にはこれを試してみてください。

import dns from "node:dns";
import { Agent, setGlobalDispatcher } from "undici";
 
// IPv4 固定接続のための undici エージェント。
const TELEGRAM_FETCH_AGENT = new Agent({
  connect: {
    lookup(hostname, options, callback) {
      return dns.lookup(hostname, { ...options, family: 4 }, callback);
    },
  },
});
 
setGlobalDispatcher(TELEGRAM_FETCH_AGENT);

ローカルで送れてもデプロイ後はダメ、ということもありましたので、ちゃんと慎重にチェックする必要があります。私はリトライ処理を追加しています。

まとめ

TelegramのWebhookを設定するのは、最初は手順が多くて悩みますが、一度覚えてしまえばあとはラクです。

Slackだと個人用に課金したくないなどの悩みがあったり、LINEではこういうサービスはどんどん縮小傾向にありますから、Telegramはこういうのがあって便利ですね。

Read more

リアルタイム投票アプリ5選【ライブ配信やイベントで】

リアルタイム投票アプリ5選【ライブ配信やイベントで】

ウェビナーやセミナー、社内研修を実施する際、「参加者が受け身になってしまう」「質問がなかなか出てこない」といった課題を感じたことはないでしょうか。 オンラインでの情報発信が当たり前になった今、一方的な配信だけでは参加者の満足度を高めることが難しくなっています。そこで注目されているのが、リアルタイムで参加者の意見を集約し、その場で結果を共有できる投票・質問ツールです。 本記事では、ライブ配信やイベント、研修などで活用できるリアルタイム投票アプリを5つ厳選してご紹介します。 リアルタイム投票でつながる参加者とイベント リアルタイム投票やQ&A機能を使うと、視聴者や参加者の意見を即座に集計・表示できます。講義や会議の進行を妨げず、参加者全員が自分の意見を簡単に表明できる仕組みです。 従来の挙手による質疑応答では、発言しづらいと感じる参加者も少なくありません。特にオンラインイベントでは、カメラがオンになっていることへの抵抗感や、大人数の前で質問することへのハードルが存在します。 しかし、スマートフォンから匿名で投票やコメントができる仕組みがあれば、参加者は気軽に自分の意見を伝えら

By 阿部 隼也
質問受付ツールの選び方とおすすめ5選を紹介

質問受付ツールの選び方とおすすめ5選を紹介

セミナーや講演会、社内研修などで「質問はありませんか?」と投げかけても、なかなか手が挙がらない経験はないでしょうか。参加者に有益な情報を提供しても、疑問や意見が共有されないまま終わってしまうのは、主催者にとっても参加者にとっても大きな機会損失です。 こうした課題を解決するために注目されているのが「質問受付ツール」です。参加者がスマートフォンから匿名で質問を投稿できるため、発言への抵抗感が下がり、活発なコミュニケーションが生まれます。 本記事では、質問受付ツールの基本機能から、実際に役立つおすすめツール5選、そして選定時に押さえておきたいポイントまで、実務に活かせる情報をまとめて解説します。 質問受付の現場課題 イベントやセミナーの運営で最も頭を悩ませる問題の一つが、参加者からの質問をいかに引き出すかという点です。質問タイムを設けても、会場がシーンと静まり返ってしまい、仕方なく「それでは時間になりましたので」と締めくくる光景は珍しくありません。 この背景には、日本特有の文化的要因も関係しています。大勢の前で発言することへの恥ずかしさ、自分の質問が的外れではないかという不安、他

By 阿部 隼也
オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

近年、オンラインセミナーの活用が急速に広がっています。会場のコストや移動時間を気にすることなく、全国・世界中から参加者を集められる点は大きな魅力です。 しかし、せっかく開催しても 「参加者が途中で離脱してしまう」 「ただ見ているだけで反応が薄い」 といった課題を抱えている企業も少なくありません。 本記事では、参加者のエンゲージメントを高め、成果につながるオンラインセミナーアプリの選び方と、実務に役立つ具体的なポイントを解説します。 参加者とのつながりを生むオンライン環境の設計 オンラインセミナーにおける最大の課題は、画面越しの距離感です。会場で直接顔を合わせる機会がないからこそ、参加者が「ただ見ているだけ」にならないような仕組みが求められます。適切なツールと機能選びが、参加者のエンゲージメントを左右します。 従来のオフラインセミナーでは、会場の雰囲気や参加者同士の反応が自然と生まれましたが、オンラインではそうした「空気感」が伝わりにくくなります。だからこそ、双方向のコミュニケーション機能や、参加者の行動データを活用した設計が重要になるのです。 エンゲージメントを高

By 阿部 隼也
参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

オンラインでのセミナーやイベントが日常化する中で、Zoomウェビナーを活用している企業が増えています。しかし、ウェビナーの開催で意外と頭を悩ませるのが「参加者からの質問をどう管理するか」という点ではないでしょうか。 セミナーが盛り上がり、次々と質問が寄せられるのは嬉しいことです。一方で、質問が多すぎて整理しきれない、どの質問に優先的に答えるべきか判断に迷う、といった課題も生じます。こうした問題を解決するために役立つのが、ZoomウェビナーのQ&A機能です。 本記事では、ZoomウェビナーのQ&A機能の基本的な使い方から、参加者の質問を効率的に管理する実践的なテクニックまで、詳しく解説していきます。 ZoomウェビナーのQ&A機能とは ZoomウェビナーのQ&A機能は、ウェビナー開催中に参加者が質問を投稿し、主催者側が回答を行うための専用機能です。この機能を使うことで、質問と回答がスレッド形式で整理され、効率的なコミュニケーションが可能になります。 チャット機能との違い Zoomには「チャット機能」もあるため、「Q&A機能とチャット機能の違いは何か」と疑問に思う方も多いで

By 阿部 隼也