You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何基于Node.js与Telegram Bot API实现定时发送消息?

实现Telegram Bot定时发送消息的两种方案

嘿,我来帮你搞定这个定时发消息的需求!结合你现有的代码,我给你两种靠谱的实现方式,你可以根据需求选:

方案一:用Node.js原生setInterval(简单直接)

这个方案不用额外装包,用Node自带的定时器就能实现,适合固定间隔的定时任务。

完整修改后的代码

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
const axios = require('axios')

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// 👇 先配置你的机器人信息
const TELEGRAM_BOT_TOKEN = '你的机器人Token'; // 从@BotFather那里拿到的
const CHAT_ID = '目标聊天ID'; // 要发给谁的聊天ID,获取方法下面说

// 封装发送"hello"的函数
async function sendHelloMessage() {
  try {
    // 调用Telegram的sendMessage API
    await axios.post(`https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`, {
      chat_id: CHAT_ID,
      text: 'hello'
    });
    console.log('定时消息发送成功');
  } catch (error) {
    // 捕获错误方便排查
    console.error('发送消息失败:', error.response?.data || error.message);
  }
}

// ⏰ 每5分钟(300000毫秒)执行一次发送
const intervalId = setInterval(sendHelloMessage, 5 * 60 * 1000);

// 可选:如果后续需要停止定时任务,调用 clearInterval(intervalId) 就行

// 你的原有webhook逻辑(如果需要处理用户消息的话)
app.post('/webhook', (req, res) => {
  // 这里处理Telegram的webhook请求,比如回复用户消息
  res.sendStatus(200);
});

app.listen(3000, () => {
  console.log('服务器运行在端口3000');
});

关键步骤说明

  1. 获取CHAT_ID
    先让目标用户给你的机器人发一条任意消息,然后在浏览器里访问:

    https://api.telegram.org/bot你的机器人Token/getUpdates
    

    从返回的JSON数据里找到message.chat.id,把这个值填到代码里的CHAT_ID即可。

  2. 定时器说明
    5 * 60 * 1000 就是5分钟的毫秒数,你可以根据需求修改这个数值,比如改成1 * 60 * 1000就是每分钟发一次。


方案二:用node-schedule(灵活精准)

如果你的定时需求更复杂(比如每天固定时间发、每周几发),或者担心setInterval在服务器阻塞时出现时间偏移,推荐用node-schedule包,它支持Cron表达式,定时更精准。

步骤

  1. 先安装依赖:

    npm install node-schedule
    
  2. 修改代码中的定时部分:

    // 先引入包
    const schedule = require('node-schedule');
    
    // 用Cron表达式设置每5分钟执行一次
    const job = schedule.scheduleJob('*/5 * * * *', sendHelloMessage);
    
    // 可选:后续要停止任务的话,调用 job.cancel()
    

Cron表达式说明

*/5 * * * * 的意思是每小时的每5分钟执行一次,你可以根据需求调整:

  • 每天上午10点发:0 10 * * *
  • 每周一上午9点发:0 9 * * 1
  • 每月1号凌晨2点发:0 2 1 * *

注意事项

  • 确保你的服务器一直运行:如果是部署在云服务器上,建议用pm2之类的进程管理器守护Node进程,避免服务器重启或者进程崩溃后定时任务停止。
  • 注意Telegram API限制:每5分钟发一次完全在Telegram的请求频率限制内,不用担心被限流。
  • 定时任务不依赖Webhook:即使你用了Webhook处理用户消息,定时发消息的逻辑只要服务器运行就会执行,不需要用户触发。

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

火山引擎 最新活动