首页 > web前端 > js教程 > 电报网络钩子

电报网络钩子

Patricia Arquette
发布: 2025-01-19 20:36:10
原创
806 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板