将消息从 Telegram 组发送到特定成员 ID 到 Google 表格

Send messages to a specific member id from a Telegram group to Google Sheets

bot 已经是组的管理员,并将所有已发送的消息发送到 google 工作表。

但是,我不想要所有成员,我只想要一个特定的成员。

假设他的 ID 是 123456789,我如何让机器人只发送来自该成员的消息?

我当前的脚本:

var token = "TOKEN BOT TELEGRAM";
var telegramUrl = "https://api.telegram.org/bot" + token;
var webAppUrl = "https://script.google.com/macros/s/ID TO WEB APP/exec";

function setWebhook() {
  var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
  var response = UrlFetchApp.fetch(url);
}

function doPost(e) {
  var contents = JSON.parse(e.postData.contents);
  var dateNow = new Date;
  var id = contents.message.from.id;
  var username = contents.message.from.username;
  var name = contents.message.from.first_name + " " + contents.message.from.last_name;
  var text = contents.message.text;
  var ssId = "ID TO SPREADSHEET";
  var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Página1");

  sheet.appendRow([dateNow, id, username, name, text]);
}

我相信你的目标如下。

  • 您想通过修改脚本来放置特定 ID 用户的值。

修改点:

  • 根据您的脚本,我了解到可以通过 var id = contents.message.from.id 检索 ID。我认为这可能会用于实现您的目标。

当这一点反映到你的脚本中,就变成了下面这样。

修改后的脚本:

function doPost(e) {
  var contents = JSON.parse(e.postData.contents);
  var dateNow = new Date;
  var id = contents.message.from.id;

  if (id != 123456789) return; // <--- Added. Or if (id.toSring() != "123456789") return;

  var username = contents.message.from.username;
  var name = contents.message.from.first_name + " " + contents.message.from.last_name;
  var text = contents.message.text;
  var ssId = "ID TO SPREADSHEET";
  var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Página1");

  sheet.appendRow([dateNow, id, username, name, text]);
}

注:

  • 当您修改Web Apps的脚本时,请重新部署Web Apps为新版本。由此,最新的脚本被反​​映到Web Apps。请注意这一点。

  • 如果你想运行多个特定ID的脚本,你也可以使用下面的修改脚本。

      function doPost(e) {
        var contents = JSON.parse(e.postData.contents);
        var dateNow = new Date;
        var id = contents.message.from.id;
    
        var ids = [123456789,,,];  // Please set the specific IDs.
        if (!ids.includes(id)) return;
    
        var username = contents.message.from.username;
        var name = contents.message.from.first_name + " " + contents.message.from.last_name;
        var text = contents.message.text;
        var ssId = "ID TO SPREADSHEET";
        var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Página1");
    
        sheet.appendRow([dateNow, id, username, name, text]);
      }
    
  • 如果上述修改不是您期望的结果,您能否在您的脚本中提供您的e.postData.contents示例值?借此,我想确认一下你目前的情况。

参考: