如何用Telegram机器人向超级群组内的指定频道发送消息?
解决Telegram机器人发送消息到超级群组内指定频道的问题
一、正确获取频道ID的方法
你当前用ctx.chat.id拿到的是超级群组的ID,而非频道ID。要获取频道ID,需按以下步骤操作:
- 确保机器人是目标频道的管理员(至少拥有发送消息的权限)
- 在目标频道内发送任意一条消息,然后通过机器人的更新日志(或临时添加监听代码)获取该消息的
chat.id值。比如临时添加这段代码:
bot.on('message', (ctx) => { console.log(`当前聊天ID: ${ctx.chat.id}, 聊天类型: ${ctx.chat.type}`); });
发送消息后,控制台会输出频道的ID(通常是类似-1001234567890的负数格式)
- 也可以使用Telegram内置的@getidsbot:将该机器人添加为频道管理员,它会自动返回频道的ID
二、验证权限与修正发送代码
拿到正确的频道ID后,确保机器人有权限在该频道发送消息,再修改代码:
// 替换成你获取到的目标频道ID(注意是负数格式) const targetChannelId = -1001234567890; bot.on('text', (ctx) => { bot.telegram.sendMessage(targetChannelId, 'hi') .catch(err => console.error('发送失败:', err.message)); // 捕获错误排查权限问题 });
如果发送失败,检查以下几点:
- 机器人是否在目标频道中,且拥有发送消息的权限
- 频道ID是否正确(不要漏写前面的
-100前缀) - 频道是否设置了禁止非管理员发送消息
三、补充说明
超级群组和其关联的频道是独立的聊天实体,ID完全不同。你之前用getChat传入群组ID,自然只能拿到群组信息,必须直接针对频道操作才能获取其ID。
内容的提问来源于stack exchange,提问作者Agustin Chaves
相关产品推荐
相关产品推荐

