Я пытаюсь добавить счетчик, используя App Scripts -> Google Sheets, чтобы при каждом получении веб-крючка значение увеличивалось на 1 в определенной ячейке.
Все работает, когда я тестирую его с помощью фиктивной функции в редакторе Google Appscript, но не работает, когда я отправляю реальный веб-крючок с помощью метода doPost (e).
Я потратил около 2 недель на изучение чтения / записи Javascript, устранения неполадок с видео на YouTube и чтения API Google Sheets, и я ооочень близок к взлому кода ... но я застрял на этом Последняя часть. Это, наверное, что-то простое, что мне не хватает.
Не могли бы вы помочь, пожалуйста? Заплатит 3 миллиона долларов
//ACCEPT WEBHOOK FROM ACTIVECAMPAIGN
function doPost(e) {
return updateMetrics(e)
}
function updateMetrics(e){
var selectedMetric = e.parameter.metric;
//GET TODAY'S DATE
var today = new Date();
var dd = String(today.getDate());
var mm = String(today.getMonth() + 1); //January is 0!
var yyyy = today.getFullYear();
today = mm + '/' + dd + '/' + yyyy;
var monthMetrics = mm + '/' + yyyy;
var spreadsheetId = '1UfRFM7Uz0YUqemPTVYe1lmZ5NC5v9naFvmlLvXPZuVM';
var rangeName = monthMetrics + '!A2:I35';
var stringSheet = JSON.stringify(monthMetrics);
var stringToday = JSON.stringify(today)
var metricsSheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(monthMetrics)
// GET METRICS COLUMN NUMBER
function getColumnNrByName(sheet, metric) {
var range = sheet.getRange(1, 1, 1, sheet.getMaxColumns());
var values = range.getValues();
for (var row in values) {
for (var col in values[row]) {
if (values[row][col] == metric) {
return parseInt(col);
}
}
}
throw 'failed to get column by name';
}
var metricColumn = getColumnNrByName(metricsSheet, selectedMetric)
// GET PREVIOUS METRICS AMOUNT
function getPreviousAmount(sheet, column, metric, date, metriccolumn){
var lastRow=sheet.getLastRow();
var data=sheet.getRange(1,column,lastRow,column+metric).getValues();
for(i=0; i <data.length; ++i){
if (data[i][0]==date){
return data[i][metric];
}
}
}
var previousAmount = getPreviousAmount(metricsSheet, 1, metricColumn, today, metricColumn)
// SET NEW METRIC
function setNewMetric(sheet, column, metric, date, amount){
var lastRow=sheet.getLastRow();
var data=sheet.getRange(1,column,lastRow,column+metric).getValues();
for(i=0;i<data.length;++i){
if (data[i][0]==date){
return sheet.getRange(i+1, column+metric).setValue(amount+1);
}
}
}
var metricScript = setNewMetric(metricsSheet, 1, metricColumn, today, previousAmount);
}