Telegram使用Google Apps Script定时发送消息:从零搭建自动提醒系统

本文详细介绍如何使用Google Apps Script编写脚本,结合Telegram Bot API实现定时向指定聊天发送消息,适用于每日提醒、定时推送、周期性通知等场景,无需服务器,零成本上手。

阅读提示建议先浏览小标题,再根据需要深入阅读具体段落。

在快节奏的工作与生活中,定时提醒、周期性通知是提升效率的刚需。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_TOKENYOUR_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的自动化潜力,让定时消息成为你日常效率工具箱中的得力助手。现在,就动手试试吧!

FAQ

安装与配置指南

常见问题

如何定时给群组发送消息?

首先创建一个群组,将你的机器人加入该群组并设为管理员(或至少允许发送消息),然后按照本文方法获取群组的Chat ID(通常以 - 开头),将代码中的chatId替换为群组ID,并设置好定时触发器即可。注意确保机器人有足够的权限。

是否可以使用Google Apps Script发送图片或其他文件?

可以。Telegram Bot API支持sendPhoto、sendDocument等方法。在GAS中,只需修改请求的URL和payload,例如将图片文件以Blob形式上传。具体可参考Telegram Bot API文档,并在GAS中使用UrlFetchApp.fetch。不过需要先将文件数据转换为合适的格式,相对复杂一些。

如何取消或暂停定时发送?

进入Google Apps Script编辑器的触发器面板,找到你添加的定时触发器,点击右侧的“...”菜单,选择“删除”即可停止。临时暂停可以编辑触发器,将“事件来源”改为“从不”或删除后再重新添加。

Google Apps Script免费版有没有限制?

免费版Google Apps Script有配额限制,包括每日触发总时长(约90分钟)、每日触发器执行次数(约2000次)、以及URL请求次数(约20000次)。对于通常的每日几次数条消息的定时发送,完全在免费额度之内,无需担心。

如果我没有编程经验,能学会这个教程吗?

完全可以。本教程从零开始,代码已经给出,你只需要复制粘贴并修改两个参数(Token和Chat ID)。即使不了解编程逻辑,按照步骤操作就能实现定时发送。如果遇到问题,可以对照排错指南进行简单的检查。