Telegram机器人定时发送消息实现方法

本文详细介绍Telegram机器人定时发送消息的实现方法,包含机器人创建、Token获取、Python脚本示例、系统定时任务配置以及在线自动化服务,帮助读者轻松实现自动化消息推送。

阅读提示涉及账号和安全设置时,请边阅读边核对当前设备界面。

Telegram机器人功能强大,能够帮助我们自动完成许多重复性工作。在实际使用中,定时发送消息是一个非常普遍的需求:每天早上定时推送天气预报、每周五自动发送工作周报,或者定期在群组中发布公告。掌握实现方法后,你可以让机器人成为你的贴心助手。本文将详细讲解Telegram机器人定时发送消息的完整实现流程,从创建机器人到编写代码、配置定时任务,循序渐进,适配不同技术水平的读者。

一、准备工作:创建机器人并获取Token

所有Telegram机器人的运作都依赖于BotFather这个官方机器人。创建过程非常简单,只需要几步操作即可获得专属的API Token。

  1. 在Telegram中搜索并打开 @BotFather
  2. 发送或点击 /newbot 命令,开始创建新机器人。
  3. 按照提示为机器人设置一个用户名称(必须以 bot 结尾,如 my_daily_bot)和显示名称。
  4. 创建成功后,BotFather会返回一个API Token,形如 1234567890:AAFabc...XYZ,这个Token是调用API的凭证,务必妥善保存。

同时,你需要确定消息的接收者。可以是自己的用户ID,也可以是一个群组或频道的ID。若要发送给频道,需要将机器人添加为频道管理员,并获得频道ID(通常以 -100 开头的长整数)。

二、定时发送的核心原理

Telegram本身并不提供内置的定时发送功能,但我们可以利用其开放API结合外部定时任务来触发送消息请求。简单来说,就是写一段调用 sendMessage 方法的脚本,然后让操作系统或在线服务按照预设时间自动运行这段脚本。

整个流程可以用下面的公式概括:定时触发 + 脚本执行 = 定时发送。关键在于选择可靠的定时工具和编写正确的请求代码。

三、方案一:Python脚本 + 系统定时任务

Python是目前操作Telegram API最便捷的语言之一,即使没有安装额外的第三方库,通过标准库 requests(需自行安装)或内置 urllib 也能实现。下面以 requests 为例。

3.1 编写发送消息脚本

首先,安装必要的库:pip install requests。然后创建 send_message.py 文件,内容如下:

import requests

# 替换为你的实际信息
BOT_TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = "YOUR_CHAT_ID"  # 可以是用户ID、群组ID或频道ID
MESSAGE = "这是定时发送的消息"

url = f"https://api.telegram.org/bot/sendMessage"
payload = {
    "chat_id": CHAT_ID,
    "text": MESSAGE
}
response = requests.post(url, json=payload)
# 打印返回值用于调试
print(response.json())

把其中的 YOUR_BOT_TOKENYOUR_CHAT_ID 替换成真实数据。为了确认Chat ID,你可以在BOT开启后,向机器人发一条消息,然后访问 https://api.telegram.org/bot<你的Token>/getUpdates,在返回结果中找到 chat 对象中的 id 字段。

3.2 设置系统定时任务

编写好脚本后,需要让它在预设时间自动运行。不同操作系统有不同的方法:

  • Linux / macOS(crontab):在终端输入 crontab -e,添加一行。例如每天上午9点执行,可写为:0 9 * * * python3 /path/to/send_message.py
  • Windows(任务计划程序):打开“任务计划程序”,创建基本任务,设置触发器为每天或特定时间,操作设置为“启动程序”,程序选择 python.exe,参数为脚本完整路径。
  • 使用python库代替系统cron:如果你的脚本一直在运行,也可以在Python内部使用 schedule 库或 time.sleep() 实现循环定时。例如:
import time
import requests

def send_message():
    # ... 同上

while True:
    # 每天9点发送
    if time.strftime("%H:%M") == "09:00":
        send_message()
        time.sleep(60)  # 防止重复发送
    time.sleep(30)

不过,长期运行的Python进程可能受网络或内存影响,建议优先使用系统级定时任务。

四、方案二:使用在线定时任务服务

如果你不想在自己的电脑上配置cron,利用云服务也是不错的选择,尤其适合需要7×24小时稳定运行的场景。

4.1 使用GitHub Actions

GitHub Actions提供免费的定时执行功能(对于公开仓库)。把脚本放在仓库中,在 .github/workflows 目录下创建YML文件,配置 schedule 事件:

name: daily-message
on:
  schedule:
    - cron: '0 9 * * *'  # UTC时间,需转换为北京时间需加8小时
jobs:
  send:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: pip install requests
      - name: Run script
        run: python send_message.py

注意GitHub Actions使用UTC时区,你需要提前换算,比如中国上午9点对应UTC的凌晨1点。还要把Token和Chat ID配置为GitHub仓库的Secrets以保证安全。

4.2 其他在线服务

诸如 cron-job.orgEasyCron 等在线定时服务也支持HTTP请求。你可以创建一个定时任务,设置目标URL为你的Webhook终端(如果自己有服务器),或者使用它们内置的“Web请求”功能直接调用Telegram API。这些服务通常提供日志和失败重试,适合轻量级使用。

五、注意事项与常见问题

在实现定时发送的过程中,有几个细节需要特别留意:

  • 时区换算:系统cron使用本地时区,而GitHub Actions等服务器采用UTC,务必先确认时区,否则发送时间可能和预期有偏差。
  • Token安全:机器人Token相当于密码,不要将Token硬编码在公开仓库或共享脚本中。建议使用环境变量或密钥管理服务。
  • 发送频率限制:Telegram API对发送频率有限制(大约每秒30条),但定时发送通常频率很低,不会触及限制。若你发送大量消息,需增加延时和错误重试机制。
  • 消息长度:单条文本消息不能超过4096个字符,超出时需拆分或使用转义后的Markdown(但注意Markdown解析限制)。
  • 机器人权限:当发送到群组或频道时,机器人必须被添加为成员,且拥有足够的权限(如发送消息权限)。
  • 网络环境:在中国大陆访问Telegram API通常需要代理,脚本运行时务必确保网络通畅,否则会请求失败。

总结

通过本文的介绍,我们已经掌握了Telegram机器人定时发送消息的完整实现方法。核心思路是“脚本 + 定时器”,无论是使用Python脚本配合cron,还是借助GitHub Actions等在线服务,都能实现稳定自动的推送。最关键的一步是创建机器人并妥善管理Token,后续的代码和调度都相对简单。希望你能根据自己的需求灵活运用,让Telegram机器人成为自动化工作的高效工具。

FAQ

下载与安装

常见问题

如何获取Telegram机器人的Token?

在Telegram中搜索@BotFather,发送/newnew命令创建机器人,创建成功后可获得API Token,该Token用于识别机器人身份。

定时发送消息能发送到频道吗?

可以。将机器人添加为频道管理员,获得频道的chat_id(以-100开头),将其作为sendMessage接口中的chat_id参数即可。

cron表达式如何设置复杂的定时规则?

cron使用五个字段(分、时、日、月、周),例如'0 9 * * 1'表示每周一上午9点,'*/15 * * * *'表示每15分钟,具体语法可参考cron教程。

如何防止脚本重复执行导致消息重复发送?

可在脚本中加入文件锁或数据库标记,记录上次发送时间,确保同一条消息只发送一次;或者使用系统定时任务保证任务间隔大于脚本执行时间。