如何让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拉进目标群组后发送任意消息,Bot会自动回复群组ID,完成后即可删除这段代码。bot.on('message', async (message) => { await bot.sendMessage(message.chat.id, `当前Chat ID:${message.chat.id}`); });
二、修改代码实现定时发消息到指定群组
优化说明:
- 无需创建4个独立定时任务,用单个cron表达式
*/15 * * * *就能实现每15分钟触发一次,大幅简化代码。 - 将目标群组ID设为常量,后续修改更便捷。
- 修复原
/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
相关产品推荐
相关产品推荐

