在快节奏的工作与生活中,定时提醒、周期性通知是提升效率的刚需。Telegram本身支持发送消息,但若要实现自动化定时发送,通常需要借助服务器或第三方工具。今天,我们介绍一种零成本、易维护的方案——使用Google Apps Script(GAS)编写脚本,通过Telegram Bot API定时发送消息到个人、群组或频道。无需独立服务器,只需一个Google账号和一个Telegram机器人,即可轻松实现每日打卡提醒、定时新闻推送、周期性任务通知等功能。
一、准备工作
在开始之前,请确保你具备以下条件:
- 一个Telegram账号,并已创建自己的机器人(通过@BotFather获取Token)。
- 一个目标聊天标识(Chat ID),可以是个人聊天、群组或频道。
- 一个Google账号(Gmail即可),用于访问Google Apps Script。
如果尚未创建机器人,请参照下一节操作。整个过程只需几分钟,不需要任何编程基础。
二、获取Telegram Bot Token和Chat ID
1. 创建机器人(BotFather)
在Telegram中搜索“@BotFather”,点击开始对话,发送指令 /newbot,按提示设置机器人名称和用户名(必须以 bot 结尾)。创建成功后,BotFather会返回一个HTTP API Token,格式类似 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11,请妥善保存。
2. 获取Chat ID
获取Chat ID有多种方式,这里推荐最稳妥的一种:
- 如果你要向自己发送消息,直接将你的机器人添加进一个群组(或频道),然后把机器人提升为管理员(可选),再向该群组发送任意消息。随后访问
https://api.telegram.org/bot<你的Token>/getUpdates,在返回的JSON中查找你的群组ID(通常以负数开头)。 - 如果仅用于个人,也可以使用第三方Bot如“@userinfobot”来获取你自己的用户ID,但这种方法需要向该Bot发送消息,安全性稍弱。
- 另一种方式:先给你的机器人发一条消息,然后访问
https://api.telegram.org/bot<你的Token>/getUpdates,在返回结果中查找message.chat.id,即为你的Chat ID。
建议将Chat ID保存为长整数,避免后续输入错误。
三、编写Google Apps Script代码
打开 Google Apps Script 编辑器,创建一个新项目,将以下代码粘贴到代码编辑器中:
function sendTelegramMessage() {
var token = 'YOUR_BOT_TOKEN'; // 替换为你的Bot Token
var chatId = 'YOUR_CHAT_ID'; // 替换为目标Chat ID(数字)
var text = '这是一条定时发送的消息!';
var url = 'https://api.telegram.org/bot' + token + '/sendMessage';
var payload = {
'chat_id': String(chatId),
'text': text
};
var options = {
'method' : 'post',
'payload': payload
};
try {
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
} catch (e) {
Logger.log('Error: ' + e.toString());
}
}
上述代码使用 UrlFetchApp 向Telegram Bot API发送POST请求,实现消息发送。请务必替换 YOUR_BOT_TOKEN 和 YOUR_CHAT_ID。保存项目后,手动运行一次 sendTelegramMessage 函数,授权访问外部API,并在“查看”菜单中打开日志,确认消息是否成功发送。
四、设置定时触发器
实现定时发送的核心是触发器(Trigger)。在Apps Script编辑器中,点击左侧时钟图标“触发器”面板,然后点击右下角“添加触发器”按钮。配置如下:
- 选择函数:
sendTelegramMessage - 选择运行部署:
Head(默认) - 选择事件源:
时间驱动 - 选择触发类型:
按天、按小时、按分钟等,根据需要自行定义。 - 设置时间:例如每天上午9:00,选择“天定时器”并填写时间。
保存触发器后,系统会要求授权。授权完毕后,你的定时消息就会在设定的时间自动发送。注意,GAS免费版的触发器执行一天有配额限制(例如每天总执行时间约90分钟,触发次数约2000次),对于常规定时消息完全够用。
五、进阶用法:动态消息内容
静态文本往往难以满足实际需求。我们可以让消息内容动态变化,例如带上当前日期、天气、日历事件等。只需在代码中拼接字符串,或调用其他API获取数据。以下是几个实用示例:
1. 发送每日问候(包含日期)
var now = new Date();
var dateStr = Utilities.formatDate(now, 'Asia/Shanghai', 'yyyy年MM月dd日 HH:mm');
var text = '早上好!今天是 ' + dateStr + ',祝工作顺利!';
2. 定时拉取天气并推送
结合免费天气API(如OpenWeatherMap),在脚本中调用URL,解析返回的JSON,提取温度、天气状况等,然后拼接到消息中。
3. 读取Google日历日程提醒
可以使用GAS的 CalendarApp 获取当天日程,在指定时间发送提醒。
4. 定时群发公告到多个聊天
将Chat ID放在数组中循环发送,实现多群组同时推送。
六、注意事项与排错指南
- Token或Chat ID错误:检查代码中是否有多余空格或字符,Chat ID是否为纯数字(群组ID以“-”开头,个人ID通常是正数)。
- 网络限制:如果你的网络环境无法直接访问api.telegram.org,可考虑使用代理或调整区域设置。
- 触发器未执行:查看Apps Script的执行记录(“执行”菜单)和触发器历史,确认是否报错。常见原因是授权过期或代码中异常未捕获。
- 消息发送频率过高:Telegram Bot API限制每条消息的发送频率(约30条/秒),普通定时场景不会触发,但若群发大群,建议在循环中加入
Utilities.sleep()延时。 - 时区设置:触发器默认使用Google账号的时区,可在“项目设置”中修改,确保与你的期望时间一致。
总结
通过Google Apps Script与Telegram Bot API的结合,我们无需拥有服务器或为托管付费,就能轻松搭建一个完全免费的定时消息系统。无论是个人生活提醒、团队工作通知,还是自动化运维报告,这一方案都能灵活应对。本文从零开始,带你完成机器人创建、代码编写、触发器配置全流程,并提供了进阶扩展思路。
希望这篇文章能帮助你释放Telegram的自动化潜力,让定时消息成为你日常效率工具箱中的得力助手。现在,就动手试试吧!