在日常运营Telegram群组时,管理员常常需要记录新成员加入的时间、昵称或ID,以便后续统计活跃度或维护社群规范。手动复制粘贴不仅繁琐,还容易遗漏。本文将手把手教你如何将Telegram群组与Google Sheets联动,实现新成员数据全自动记录——当有人加入群组时,一行规范的数据瞬间写入表格,彻底解放双手。
准备工作:创建Google表格与Telegram机器人
在开始操作前,你需要准备两个基础工具:一个Google账号和一个Telegram账号。整个过程完全免费,无需服务器。
- 打开Google Sheets(sheets.google.com),新建一个空白电子表格。建议将第一个工作表重命名为“成员记录”,方便识别。复制表格的URL,后续需要用到。
- 在Telegram中搜索“@BotFather”,发送
/newbot指令,按提示设置机器人的名称和用户名。创建成功后,BotFather会返回一个API Token(形如123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11),务必妥善保存。
如果你希望机器人接收所有群组更新(包括新成员加入),最好将机器人设为群组管理员。创建完机器人后,将其添加到目标群组,并在群组管理员设置中开启“管理群组”和“读取消息”权限。这样能确保系统消息的稳定推送。
编写Google Apps Script:解析Telegram更新
Telegram Bot通过Webhook将更新推送到你的URL。我们需要在Google Apps Script中编写一个处理函数,解析新成员事件并写入表格。
- 回到Google Sheets,打开“扩展程序”菜单,选择“Apps Script”进入编辑器。
- 删除默认代码,粘贴以下内容:
function doPost(e) {
try {
var update = JSON.parse(e.postData.contents);
var message = update.message;
if (message && message.new_chat_members) {
var sheet = SpreadsheetApp.openByUrl('你的Google表格URL').getSheetByName('成员记录');
var chat = message.chat;
var joinTime = new Date(message.date * 1000);
message.new_chat_members.forEach(function(member) {
var row = [
joinTime.toLocaleString('zh-CN'),
chat.title || '未知群组',
chat.id,
member.id,
member.first_name || '',
member.last_name || '',
member.username || ''
];
sheet.appendRow(row);
});
}
return ContentService.createTextOutput(JSON.stringify({ok: true})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
return ContentService.createTextOutput('Error: ' + error.message).setCode(500);
}
}
代码说明:当Telegram推送更新时,doPost 函数会解析JS对象。如果消息中包含 new_chat_members 字段,说明有新人加入,则从对象中取出群组名称、群组ID、成员ID、名字、用户名和时间,追写到表格最后一行。你可以根据需求自由调整要记录的字段。
部署Web App并设置Webhook
代码写好后,需要生成一个可公开访问的HTTPS URL,然后告诉Telegram将更新发送到这个URL。
- 在Apps Script编辑器中,点击右上角“部署”按钮,选择“新建部署”。
- 在弹出的窗口中,将“类型”下拉框选为“Web 应用”,并填写一段描述(如“Telegram Webhook”)。
- 在“执行身份”中选择“我”,在“谁有权访问”中选择“任何知道链接的人都可访问”。然后点击“部署”。
- 首次部署会要求授权,点击“授权”并登录你的Google账号,同意权限后即可。
- 部署完成后,复制生成的Web App URL,形如
https://script.google.com/macros/s/XXXX/exec。
接下来,将你的Bot Token和Web App URL拼接成以下链接,并在浏览器中打开:
https://api.telegram.org/bot<你的BOT_TOKEN>/setWebhook?url=<你的WEB_APP_URL>
如果看到 {"ok":true,"result":true,...} 的提示,说明Webhook设置成功。
验证效果与常见问题
现在,一切准备就绪。将你的Telegram机器人邀请进目标群组(若尚未添加),然后用另一个账号或“删除并重新添加”某个成员的方式模拟新人加入。几秒后,打开Google Sheets,你会发现第一行已经自动写入了新成员的昵称、ID和加入时间。
如果数据没有出现,可以按以下顺序检查:
- 确认Webhook URL是否拼写正确,可通过重新打开setWebhook地址查看是否显示ok:true。
- 确认Bot是否在群组中,并且具有管理员权限(至少需要“读取消息”权限)。
- 在Apps Script编辑器的“执行”页面查看日志,看是否存在报错信息。
- 确保表格名称与代码中的“成员记录”完全一致(包括大小写和空格)。
进阶扩展:多群组统计与数据可视化
这套方案不仅支持单个群组,还可以进一步扩展。例如,在代码中增加 chat.id 的判断,将不同群组的记录写入不同的工作表,或添加 member.username 的缺失默认值。你甚至可以用Apps Script创建Dashboard,用图表自动统计每日新增人数,让成员数据一目了然。
通过简单的配置,Telegram与Google Sheets的强强联合就能为群组管理带来质的提升。告别手动记录,让数据自己流动起来吧!
常见问题解答
Bot一定要设为群组管理员吗?
建议设为管理员。非管理员状态下,Bot由于隐私模式可能无法接收新成员加入这类系统事件。设为管理员后,权限更稳定,还能防止被踢出群组。
如果我要记录多个群组的数据怎么办?
无需修改代码,因为每个更新都带有 chat.id 和 chat.title 字段。你可以在写入时增加一行群组名称,或者用条件判断将不同群组的数据分到不同的工作表。
设置Webhook后,原有Bot的轮询方式还能用吗?
不能同时使用。Webhook和getUpdates是两种互斥的方式,设置Webhook后,getUpdates将不会返回数据。如需改回轮询,需先删除Webhook。