You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js的https包获取Telegram机器人Webhook数据?

核心结论

必须使用https.createServer,因为Telegram的Webhook需要向你的HTTPS服务器发起POST请求来推送数据;async不是强制要求,但用它处理异步读取请求体的逻辑会更简洁易读。

实现步骤与代码示例

1. 准备SSL证书

Telegram要求Webhook服务器必须使用HTTPS,你需要准备SSL证书(可以用免费的Let's Encrypt证书,或者自签证书用于本地测试),拿到cert.pem和key.pem文件。

2. 搭建HTTPS服务器并接收Webhook数据

const https = require('https');
const fs = require('fs');

// 加载SSL证书配置
const sslOptions = {
  key: fs.readFileSync('./key.pem'),
  cert: fs.readFileSync('./cert.pem')
};

// 创建HTTPS服务器
https.createServer(sslOptions, async (req, res) => {
  // 仅处理匹配Webhook路径的POST请求
  if (req.method === 'POST' && req.url === '/webhook') {
    try {
      // 异步读取请求体(等价于PHP的file_get_contents("php://input"))
      const requestBody = await new Promise((resolve, reject) => {
        let rawData = '';
        req.on('data', chunk => rawData += chunk);
        req.on('end', () => resolve(rawData));
        req.on('error', err => reject(err));
      });

      // 解析JSON数据,提取包含message的内容
      const webhookPayload = JSON.parse(requestBody);
      if (webhookPayload.message) {
        console.log('收到Telegram消息:', webhookPayload.message);
      }

      // 返回200响应告知Telegram推送成功
      res.writeHead(200);
      res.end('OK');
    } catch (error) {
      console.error('处理Webhook请求出错:', error);
      res.writeHead(500);
      res.end('Server Error');
    }
  } else {
    // 非Webhook请求返回404
    res.writeHead(404);
    res.end('Not Found');
  }
}).listen(8443); // 监听Telegram允许的端口(可选443、80、88、8443)

关键细节说明

  • https.createServer:这是必须的,Telegram只接受HTTPS协议的Webhook地址,所以必须用HTTPS服务器接收推送。
  • async/await:用来将读取请求体的流式异步操作封装成Promise,避免嵌套回调,让代码逻辑更直观。你也可以不用async,直接用回调处理,但可读性会下降。
  • 请求体读取:Node.js中HTTP请求是流式数据,需要通过data事件收集所有数据块,在end事件中拼接成完整字符串,这就是PHP中file_get_contents("php://input")的Node.js实现方式。
  • 响应要求:处理完请求后必须返回200状态码,否则Telegram会认为推送失败并重复尝试。

内容的提问来源于stack exchange,提问作者Fratagone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:09:22