電報ウェブフック

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-19 20:36:10856ブラウズ

telegram webhook

ポーリング モードに別れを告げ、効率的な Telegram Webhook を活用してください。 Telegram サーバーに更新を継続的に要求するポーリング方法とは異なり、Webhook を使用すると、Telegram が更新をサーバーに直接プッシュできるため、サーバーのリソース消費が削減され、効率が大幅に向上します。 前回の記事では、Node.js を使用して Telegram ロボットを構築し、ポーリング メソッドを使用して更新を取得する方法を説明しました。このアプローチは機能しますが、スケーラビリティを求める場合は、現在レート制限が発生していない場合でも、Webhook に切り替えることでボットがより効率的に実行され、増加するトラフィックを簡単に処理できるようになり、サーバーの負荷が軽減されます。

Telegram Webhook に関する主な考慮事項

Webhook を使用する場合は、次の点に必ず注意してください。

許可されたポート

Telegram は 4 つの Webhook ポートのみをサポートします。この制限の理由は現時点では不明ですが、将来変更される可能性があります。現在サポートされているポートは次のとおりです:

  • 443 (HTTPS を推奨します)
  • 80
  • 88
  • 8443

Webhook が適切に動作するには、これらのポートのいずれかが使用可能でアクセス可能である必要があります。ポートを明示的に指定しない場合、Webhook はデフォルトでポート 8443 に設定されます。

サーバーの制限

許可されるポートは 4 つだけであるため、Webhook を使用するアプリケーションの数は同じサーバー上で 4 つを超えることはできません。

前提条件

セットアップを始める前に、以下のものがあることを確認してください:

  • Node.js がインストールされています: まだインストールされていない場合は、nodejs.org から Node.js をダウンロードしてインストールします。
  • Telegram アカウント: ボット トークンを取得してボットと対話するには、Telegram アカウントが必要です。
  • HTTPS URL の Ngrok: Telegram では、HTTPS エンドポイントを使用するために Webhook が必要です。 Ngrok を使用してローカル サーバーをインターネットに公開します。

完全なコードは Github にあります。

Telegram Webhook 設定 (Node.js の例)

<code class="language-javascript">// 导入Telegram Bot API
const TelegramBot = require('node-telegram-bot-api');

// 使用您的机器人令牌替换
const token = 'your telegram token'; // 请查看我的文章,了解如何在Telegram上从@BotFather获取机器人令牌

const WEB_HOOK_URL = 'https://localhost:3000/telegram-bot-webhook'; 
// 注意:它在localhost上无法工作,因此请使用ngrok之类的隧道服务。

// 创建使用Webhook的机器人
const bot = new TelegramBot(token, {
  webHook: {
    port: 88, // Telegram Webhook允许的端口:443、80、88、8443
  },
});

// 初始化Webhook
const initWebHook = async () => {
  const webhookInfo = await bot.getWebHookInfo();
  if (webhookInfo.url !== WEB_HOOK_URL) {
    await bot.setWebHook(WEB_HOOK_URL, {
      max_connections: 100,
    });
  }
};
initWebHook();

// 监听任何消息
bot.on('message', (msg) => {
  const chatId = msg.chat.id;

  // 简单命令处理
  if (msg.text.toLowerCase() === '/start') {
    bot.sendMessage(chatId, '欢迎!今天我能如何帮助您?', {
      reply_markup: {
        keyboard: [['/start', '/help']],
      },
    });
  } else if (msg.text.toLowerCase() === 'hello') {
    bot.sendMessage(chatId, `你好,${msg.from.first_name}!`);
  } else {
    bot.sendMessage(chatId, "我不确定如何回应。");
  }
});

// 导出机器人模块
module.exports = bot;
</code>

テレグラム Webhook ルーティング

<code class="language-javascript">const express = require("express");
const app = express();
const bot = require("./bot");

// 解析POST请求的JSON主体
app.use(express.json());

app.get("/", (req, res) => {
  res.send("Hello World");
});

app.post("/telegram-bot-webhook", (req, res) => {
  bot.processUpdate(req.body);
  res.sendStatus(200);
});

app.listen(process.env.PORT || 3000, () => {
  console.log("服务器正在3000端口运行");
});</code>

概要

Webhook に切り替えると、Telegram のレート制限の問題が解消され、ボットの効率が向上します。サーバーを正しく設定し、許可されたポートを使用し、HTTPS を使用して接続を保護していることを確認してください。

次の記事が公開されたときに通知を受け取るには、私をフォローしてください。

以上が電報ウェブフックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。