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

如何使用Python Telegram Bot在无用户指令触发时主动发送消息

Telegram Bot主动发消息实现方案

核心原理

Telegram Bot支持主动发消息,不需要依赖用户发送指令触发回调,核心前提是你提前获取到目标接收方的chat_id(可以是用户id、群组id、频道id),且bot有向该chat_id发消息的权限。
你原来的写法问题在于,messager是用户指令触发的回调函数,依赖用户发消息时生成的update对象,主动发送场景没有这个对象,完全不需要调用这个回调,直接调用bot的原生发消息方法即可。

实现方案

1. 提前获取chat_id

先给你的bot发送任意消息,在回调函数中打印update.effective_chat.id就能拿到你自己的用户chat_id,存下来备用。

2. 修正后的代码示例

from telegram.ext import Updater, CommandHandler, CallbackContext
from telegram import Update
from datetime import datetime
import logging

API_KEY = "替换为你的bot token"
# 替换为你提前拿到的目标chat_id
TARGET_CHAT_ID = 123456789

logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', 
    level=logging.INFO
)
logger = logging.getLogger(__name__)

# 原有的用户指令触发回调
def messager(update: Update, context: CallbackContext) -> None:
    update.message.reply_text("message back")

# 独立的主动发消息方法
def send_active_msg(bot, content: str):
    bot.send_message(chat_id=TARGET_CHAT_ID, text=content)

if __name__ == "__main__":
    updater = Updater(API_KEY)
    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler("message", messager))

    # 程序启动时单次触发判断
    start_condition = True
    if start_condition:
        send_active_msg(updater.bot, "程序启动,主动推送的测试消息")

    # 定时/周期性触发场景,用自带JobQueue实现
    def condition_check_task(context: CallbackContext):
        # 这里写你的触发条件逻辑,比如时间判断、接口数据判断、监控告警判断等
        trigger_flag = datetime.now().minute % 30 == 0 # 示例:每半小时触发一次
        if trigger_flag:
            context.bot.send_message(chat_id=TARGET_CHAT_ID, text="满足周期性条件,主动推送消息")
    
    # 添加周期性任务,每60秒检查一次条件
    dispatcher.job_queue.run_repeating(condition_check_task, interval=60, first=0)

    updater.start_polling()
    updater.idle()

3. 实时事件触发方案

如果你的触发条件是实时异步事件(比如新订单通知、服务器告警),可以单独开一个守护线程跑事件监听逻辑,满足条件时直接调用updater.bot.send_message发送消息即可,不会和bot的polling逻辑冲突。

注意事项

  • bot无法主动给从未和它产生过交互的用户发消息,必须是用户先给bot发过消息,或者bot被加入对应群组/频道且拥有发消息权限
  • 不要硬传update和context参数给主动发消息的逻辑,这两个参数只有用户触发回调的时候才会生成,主动发送场景完全不需要

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:24:04