告別輪詢模式,擁抱高效的Telegram Webhook!與持續向Telegram伺服器請求更新的輪詢方式不同,Webhook允許Telegram直接將更新推送到您的伺服器,從而降低伺服器資源消耗,顯著提升效率。 在之前文章中,我先講解如何使用Node.js搭建Telegram機器人並使用輪詢方法來取得更新。雖然這種方法有效,但如果您追求可擴展性,即使目前未遇到速率限制,切換到Webhook也能確保機器人更有效率地運行,並輕鬆應對日益增長的流量,減少伺服器負擔。
使用Webhook時,請務必注意以下幾點:
Telegram僅支援四個Webhook連接埠。雖然目前尚不清楚此限制的原因,但未來可能會發生變化。目前支援的連接埠為:
Webhook正常運作需要這些連接埠中的一個可用且可存取。如果您未明確指定端口,Webhook將預設使用8443端口。
由於僅允許四個端口,因此同一伺服器上使用Webhook的應用程式數量不能超過四個。
開始設定前,請確保您已具備以下條件:
完整的程式碼可在Github上找到。
<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>
<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中文網其他相關文章!