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

如何让Telegram Bot向不同聊天(群组)发送定时消息?

解决Telegram Bot定时发送消息到指定群组的问题

一、获取目标群组的Chat ID

有两种简单可行的方式:

  • 方法1:调用API接口获取
    先把Bot拉进目标群组,在群组内发送任意一条消息,然后在浏览器中访问以下接口(替换<你的BotToken>为你实际的Bot令牌):
    https://api.telegram.org/bot<你的BotToken>/getUpdates
    在返回的JSON数据里,找到对应群组消息的chat.id字段,这就是群组的ID(超级群组的ID通常为负数,注意不要遗漏负号)。
  • 方法2:临时添加代码获取
    在Bot代码中加入一段临时逻辑,让Bot收到消息时返回当前聊天的ID:
    bot.on('message', async (message) => {
      await bot.sendMessage(message.chat.id, `当前Chat ID:${message.chat.id}`);
    });
    
    将Bot拉进目标群组后发送任意消息,Bot会自动回复群组ID,完成后即可删除这段代码。

二、修改代码实现定时发消息到指定群组

优化说明:

  1. 无需创建4个独立定时任务,用单个cron表达式*/15 * * * *就能实现每15分钟触发一次,大幅简化代码。
  2. 将目标群组ID设为常量,后续修改更便捷。
  3. 修复原/stop_spam命令的逻辑缺陷(原代码仅会取消第一个存在的任务,改为全部取消)。

修改后的完整代码:

// 替换为你获取到的目标群组Chat ID
const TARGET_GROUP_CHAT_ID = -123456789;
let scheduledJob = null;

// 启动定时任务命令
bot.onText(/\/start_spam/, async message => {
  try {
    // 每15分钟执行一次(0、15、30、45分触发)
    scheduledJob = schedule.scheduleJob('*/15 * * * *', async function(){
      await bot.sendMessage(TARGET_GROUP_CHAT_ID, spam_text);
    });
    await bot.sendMessage(message.chat.id, "定时消息已启动,将每15分钟发送到指定群组");
  } catch (error) {
    console.log(error);
    await bot.sendMessage(message.chat.id, "启动失败,请检查Bot权限或群组ID");
  }
})

// 停止定时任务命令
bot.onText(/\/stop_spam/, async message => {
  try {
    if (scheduledJob) {
      scheduledJob.cancel();
      scheduledJob = null;
      await bot.sendMessage(message.chat.id, "定时消息已停止");
    } else {
      await bot.sendMessage(message.chat.id, "当前没有运行的定时任务");
    }
  } catch (error) {
    console.log(error);
    await bot.sendMessage(message.chat.id, "停止失败");
  }
});

注意事项:

  • 确保Bot已被添加到目标群组,且在群组权限设置中开启了发送消息的权限。
  • 超级群组的ID为负数,复制时务必保留负号,否则无法正常发送消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:28:22