告别轮询模式,拥抱高效的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中文网其他相关文章!