google apps script - как подтягивать данные из таблицы для webhook?
Вопрос: какой код можно прописать, чтобы бот сравнивал команду запрос в столбце "А" google таблицы и отправлял ответ из этой строки, но из столбца "B"), чтобы не хранить вопросы и ответ в самом скрипте? UPD: Задачу решил всем спасибо, заодно сделал хранение переменных в самой таблице:
// configuration
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetSetup = ss.getSheetByName("setup");
var botVer = sheetSetup.getRange(2,3).getValue();
var sheetBot = ss.getSheetByName(botVer);
var apiToken = sheetSetup.getRange(3,3).getValue();
var appToken = sheetSetup.getRange(4,3).getValue();
var baza = sheetSetup.getRange(5,3).getValue();
var info = sheetSetup.getRange(6,3).getValue();
var error = sheetSetup.getRange(7,3).getValue();
var apiUrl = "https://api.telegram.org/bot"+apiToken;
var appUrl = "https://script.google.com/macros/s/"+appToken+"/exec";
// set webhook
function setWebhook(){
var url = apiUrl + "/setwebhook?url="+appUrl;
var res = UrlFetchApp.fetch(url).getContentText();
Logger.log(res);
}
// handle webhook
function doPost(e){
var webhookData = JSON.parse(e.postData.contents);
var from = webhookData.message.from.id;
var text = webhookData.message.text;
var findAsk = sheetBot.getRange(baza).getValues();
var row;
for(let i =0;i < findAsk.length;i++){
if(findAsk[i].indexOf(text)!== -1){
row = i+1;
break;
}
else row = error;
}
var ask = sheetBot.getRange(row,info).getValue();
var sendText = encodeURIComponent(ask);
var url = apiUrl+"/sendmessage?parse_mode=HTML&chat_id="+from+"&text="+sendText;
var opts = {"muteHttpExceptions": true}
UrlFetchApp.fetch(url, opts).getContentText();
}
function doGet(e){
return ContentService.createTextOutput("Method GET not allowed");
}
Ответы (1 шт):
Автор решения: Violet
→ Ссылка
Чтобы вытащить значения определённой ячейки можно использовать следующий код:
function get(x) {
var sheet = SpreadsheetApp.openById(spreadsheetId);
var question = sheet.getRange('A' + x).getDisplayValues();
var ask = sheet.getRange('B' + x).getDisplayValues();
return question + '\n' + ask;
}
sendText(1, get(3));
функция sendText отправляет сообщение от имени Телеграмм бота указанному пользователю:
function sendText(tlgrm_id, text) {
UrlFetchApp.fetch('https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + tlgrm_id + '&text=' + encodeURIComponent(text));
}
таким образом бот пришлёт содержимое ячеек А и B переданной строки в качестве аргумента get()