如何无需用户发送消息获取Telegram Bot的chat id?是否可行?
Telegram Bot chat id获取可行性及场景解决方案
核心问题答复
- 若想在用户/群组从未与你的Bot产生过任何交互的前提下,主动获取对应chat id,完全不可行。这是Telegram官方的隐私安全限制,Bot API仅会在用户主动触发交互动作(发送消息、邀请Bot入群、点击Bot内联按钮等)时,才会返回对应chat id,无任何公开接口可以绕开该限制。
- 你当前遇到的Heroku重启丢失chat id的问题,不需要用户重复发消息获取chat id,有成熟的可落地解决方案。
适配场景的落地方案
你的问题根源是Heroku默认提供的文件系统为临时存储,实例重启后所有本地写入的内容都会被清空,只需要将已经获取过的chat id存入持久化存储即可:
- 最低成本方案:直接启用Heroku免费层的PostgreSQL或者Redis插件,用户首次与Bot交互拿到chat id时,直接写入持久化数据库,Bot启动时从数据库拉取所有已保存的chat id即可,全程无需用户二次操作。
- 轻量无数据库方案:如果用户量少、chat id固定,可以直接将已收集到的chat id配置到Heroku的Config Vars环境变量中,环境变量不会随实例重启重置。配置时可以把多个chat id用英文逗号拼接,存为名为
CHAT_IDS的环境变量,服务启动时用字符串分割方法读取列表即可。 - 通用替代方案:也可以将chat id存入任意不会随服务重启清空的第三方结构化存储服务,只要Bot启动时可以正常读取即可。
注:首次接入的新用户仍然需要主动触发一次和Bot的交互才能拿到chat id,该要求无法规避,一次获取后永久有效,不需要重复收集。
内容的提问来源于stack exchange,提问作者boozebe
相关产品推荐
相关产品推荐

