Javascript 通过Google脚本从Google Sheet向电报发送消息

Javascript 通过Google脚本从Google Sheet向电报发送消息,javascript,json,google-apps-script,google-sheets-api,telegram-bot,Javascript,Json,Google Apps Script,Google Sheets Api,Telegram Bot,我每天早上都试图给自己发一封电报,上面有我在谷歌表单上列出的不同的报价。我编写了一些代码,将消息添加到列表中,但我似乎无法从列表中生成一个随机行,以便每天发送 var token = "TOKEN"; var telegramAPI = "https://api.telegram.org/bot" + token; var webAppAPI = "https://script.google.com/macros/s/GOOGLE_WEB_APP_ADDRESS"; var ssId = "

我每天早上都试图给自己发一封电报,上面有我在谷歌表单上列出的不同的报价。我编写了一些代码,将消息添加到列表中,但我似乎无法从列表中生成一个随机行,以便每天发送

var token = "TOKEN"; 
var telegramAPI = "https://api.telegram.org/bot" + token; 
var webAppAPI = "https://script.google.com/macros/s/GOOGLE_WEB_APP_ADDRESS";
var ssId = "SPREADSHEET_ID"; 

function getMe() {
  var url = telegramAPI + "/getMe";
  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());
}

function setWebhook() {
  var url = telegramAPI + "/setWebhook?url=" + webAppAPI;
  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());
}

function sendText(id,text) {
  var url = telegramAPI + "/sendMessage?chat_id=" + id + "&text=" + text;
  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText());
}

function doGet(e) {
  return HtmlService.createHtmlOutput("Test Data" + JSON.stringify(e,null,4));
}

function doPost(e) {
  Logger.log(e);  
  var data = JSON.parse(e.postData.contents);
  var text = data.message.text;
  var what = data.message.text.split("-")[0]
  var who = data.message.text.split("-")[1]
  var id = data.message.chat.id;
  var name = data.message.chat.first_name;
  var response = "Hi " + name + ", this quote has been added to your database: " + text;
  sendText(id,response);
  SpreadsheetApp.openById(ssId).getSheets()[1].appendRow([new Date(),id,name,text,response,what,who]);
所有这些都很好。我添加了一个查询,将它们从我的电报提要表中拉到我的报价表中,我将把它放在这里以帮助某人:

=IFERROR(QUERY('Telegram Feed'!$G$1:$G$98,"",-1),"Error")
现在,我正在提取引号,我想从列表中随机生成一个引号,并安排每天发送给我自己。我在下面列出了我尝试过的东西,但我似乎不知道我做错了什么

随机化器部分工作正常,但似乎抓住了所有内容,我需要对其进行重构,以说明以下内容:

message = f"{quote} + ' - ' + {author}"
随机发生器:

function randomizer() {
  var ssa = SpreadsheetApp.openById(ssId);
  var ss = ssa.getSheetByName('Quotes'); 
  var range = ss.getRange(1,1,ss.getLastRow(), 2);
  var data = range.getValues();

  for(var i = 0; i < data.length; i++) 
  { 
    var j = Math.floor(Math.random()*(data[i].length));
    var element = data[i][j]; 
    ss.getRange(i+1, 6).setValue(element); 
    Logger.log(element);
  }
}  
我什么也没得到。有人知道我做错了什么吗

编辑:

我遵循БМСБББББаааБ&carlesgg97的建议,重构了一组随机代码,为我提供了引用和作者。出于某种原因,我现在从undefined中得到错误“TypeError:cannotreadproperty”postData::从读取
var-dataJSON=JSON.parse(data.postData.contents);

有人知道为什么会这样吗? 无论如何,我都会在24小时内解决这个问题。谢谢大家的帮助

function sendQuote(quote,author) {
  var data = randomize();
  var dataJSON = JSON.parse(data.postData.contents);
  var encodedText = encodeURIComponent(quote + " - " + author);
  var url = telegramAPI + "/sendMessage?chat_id=" + 'CHAT_ID' + "&text=" + encodedText;
  UrlFetchApp.fetch(url);
} 

function randomize() {
  var sss = SpreadsheetApp.openById(ssId);
  var ss = sss.getSheetByName('Quotes');

  var length = ss.getLastRow();
  var overshoot = 97 //monitor for changes as list size increases
  var true_length = length-overshoot;   
  var line = (Math.random() * ((true_length - 2) + 1)) + 2;

  var quote_cell = ss.getRange(line,2);
  var quote = quote_cell.getValue();
  var author_cell = ss.getRange(line,1);
  var author = author_cell.getValue();
  Logger.log(quote + " - " + author);
}

看起来您可能有两个不同的问题:

  • 您没有将文本编码为URL安全。要将数据(在本例中为
    text
    URL查询字符串参数)安全地附加到URL,应使用
  • 您似乎没有实际发送请求。是否错过了
    UrlFetchApp.fetch()
    调用
  • 请参见下面修复这两个问题的示例:

    函数sendQuote(什么,谁){
    变量数据=随机化器();
    var dataJSON=JSON.parse(data.postData.contents);
    var encodedText=encodeURIComponent(what+“-”+who);
    var url=telegramAPI+“/sendMessage?chat_id=“+”chat_id_NUM“+”&text=“+encodedText;
    url fetchapp.fetch(url);
    } 
    
    var response=UrlFetchApp.fetch(url);
    sendQuote(what,who)
    中的
    function sendQuote(quote,author) {
      var data = randomize();
      var dataJSON = JSON.parse(data.postData.contents);
      var encodedText = encodeURIComponent(quote + " - " + author);
      var url = telegramAPI + "/sendMessage?chat_id=" + 'CHAT_ID' + "&text=" + encodedText;
      UrlFetchApp.fetch(url);
    } 
    
    function randomize() {
      var sss = SpreadsheetApp.openById(ssId);
      var ss = sss.getSheetByName('Quotes');
    
      var length = ss.getLastRow();
      var overshoot = 97 //monitor for changes as list size increases
      var true_length = length-overshoot;   
      var line = (Math.random() * ((true_length - 2) + 1)) + 2;
    
      var quote_cell = ss.getRange(line,2);
      var quote = quote_cell.getValue();
      var author_cell = ss.getRange(line,1);
      var author = author_cell.getValue();
      Logger.log(quote + " - " + author);
    }