Telegram机器人功能强大,能够帮助我们自动完成许多重复性工作。在实际使用中,定时发送消息是一个非常普遍的需求:每天早上定时推送天气预报、每周五自动发送工作周报,或者定期在群组中发布公告。掌握实现方法后,你可以让机器人成为你的贴心助手。本文将详细讲解Telegram机器人定时发送消息的完整实现流程,从创建机器人到编写代码、配置定时任务,循序渐进,适配不同技术水平的读者。
一、准备工作:创建机器人并获取Token
所有Telegram机器人的运作都依赖于BotFather这个官方机器人。创建过程非常简单,只需要几步操作即可获得专属的API Token。
- 在Telegram中搜索并打开 @BotFather。
- 发送或点击
/newbot命令,开始创建新机器人。 - 按照提示为机器人设置一个用户名称(必须以
bot结尾,如my_daily_bot)和显示名称。 - 创建成功后,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_TOKEN 和 YOUR_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.org、EasyCron 等在线定时服务也支持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机器人成为自动化工作的高效工具。