У меня есть очень простой проект сценария doPost (e), который работает как конечная точка webhook.Он просто записывает полученную полезную нагрузку JSON в ячейку A2 целевой таблицы.В целевой таблице у меня есть триггер onChange (e), который передает эту полезную нагрузку внешнему API.Хотя во время выполнения ошибки нет, мой скрипт onChange (e) вообще не запускается.При условии, что я вырезал / вставил содержимое ячейки на листе, onChange (e) затем корректно сработал.
На странице разработчиков Google здесь упоминаются некоторые ограничения, но также говорится, чтоэти ограничения не распространяются на doGet (e) и doPost (e).
Что мне не хватает?
Вот мой код doPost:
var SHEETID = "my_sheetID_here";
function doPost(e) {
try {
var data = JSON.parse(e.postData.contents);
var sSht = SpreadsheetApp.openById(SHEETID);
var sht = sSht.getSheetByName("TEMP");
sht.getRange("A2").setValue(e.postData.contents);
return ContentService // return json success results
.createTextOutput(
JSON.stringify({"result":"success",
"data": JSON.stringify(data) }))
.setMimeType(ContentService.MimeType.JSON);
} catch (e) {
MailApp.sendEmail("xx@xx.com,yy@xx.com", "FireStation Webhook Error Occured!",
"\r\nMessage: " + e.message
+ "\r\nFile: " + e.fileName
+ "\r\nLine: " + e.lineNumber);
e = (typeof e === 'string') ? new Error(e) : e;
Logger.severe('%s: %s (line %s, file "%s"). Stack: "%s" . While processing %s.',e.name||'',
e.message||'', e.lineNumber||'', e.fileName||'', e.stack||'', processingMessage||'');
throw e;
}
}
А здесьмой код onChange (e) на целевом листе:
function onChange(e) {
try {
var sheet = e.source.getActiveSheet();
var sheetname = sheet.getName();
Logger.log("Sheetname: "+sheetname);
if (sheetname === "TEMP" && sheet.getRange("A2").getValue() !== "") {
var payload = sheet.getRange("A2").getValue();
var URL = "my_external_api_URL_here";
var options =
{
"method" : "POST",
"payload" : payload,
"followRedirects" : true,
"muteHttpExceptions": true
};
var result = UrlFetchApp.fetch(URL, options);
Logger.log("HTTP Response: "+result.getResponseCode())
}
} catch (e) {
MailApp.sendEmail("xx@xx.com,yy@xx.com", "FireStation Template GAS Error Occured!",
"\r\nMessage: " + e.message
+ "\r\nFile: " + e.fileName
+ "\r\nLine: " + e.lineNumber);
e = (typeof e === 'string') ? new Error(e) : e;
Logger.severe('%s: %s (line %s, file "%s"). Stack: "%s" . While processing %s.',e.name||'',
e.message||'', e.lineNumber||'', e.fileName||'', e.stack||'', processingMessage||'');
throw e;
}
}