首頁 > web前端 > js教程 > 電報網路鉤子

電報網路鉤子

Patricia Arquette
發布: 2025-01-19 20:36:10
原創
852 人瀏覽過

telegram webhook

告別輪詢模式,擁抱高效的Telegram Webhook!與持續向Telegram伺服器請求更新的輪詢方式不同,Webhook允許Telegram直接將更新推送到您的伺服器,從而降低伺服器資源消耗,顯著提升效率。 在之前文章中,我先講解如何使用Node.js搭建Telegram機器人並使用輪詢方法來取得更新。雖然這種方法有效,但如果您追求可擴展性,即使目前未遇到速率限制,切換到Webhook也能確保機器人更有效率地運行,並輕鬆應對日益增長的流量,減少伺服器負擔。

Telegram Webhook關鍵考慮因素

使用Webhook時,請務必注意以下幾點:

允許的連接埠

Telegram僅支援四個Webhook連接埠。雖然目前尚不清楚此限制的原因,但未來可能會發生變化。目前支援的連接埠為:

  • 443 (建議使用HTTPS)
  • 80
  • 88
  • 8443

Webhook正常運作需要這些連接埠中的一個可用且可存取。如果您未明確指定端口,Webhook將預設使用8443端口。

伺服器限制

由於僅允許四個端口,因此同一伺服器上使用Webhook的應用程式數量不能超過四個。

先決條件

開始設定前,請確保您已具備以下條件:

  • 已安裝Node.js: 如果尚未安裝,請從nodejs.org下載並安裝Node.js。
  • Telegram帳號: 您需要一個Telegram帳號來取得機器人令牌並與您的機器人互動。
  • 用於HTTPS URL的Ngrok: Telegram要求Webhook使用HTTPS端點。使用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>
登入後複製

Telegram 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板