Сценарий Google Apps работает, когда выполняется вручную, но не при запуске триггером, при этом журналы не создаются. - PullRequest
0 голосов
/ 15 января 2019

Я использую Google Apps Script (GAS), развернутый как веб-приложение, для получения вызова API JSON-POST от Nexmo (SMS) и для вызова REST API в PubNub, передавая текст этого SMS для дальнейшего распространения.

Когда я выполняю скрипт вручную, все работает как положено. Однако, когда сценарий запускается вызовом API через веб-крючок GAS, данные SMS передаются в GAS, но, по-видимому, нет вызова API PubNub.

Я пытался использовать Logger, Stackdriver и пользовательскую функцию ведения журнала в электронной таблице, но журналы не создаются, когда скрипт выполняется триггером doPost (e). При выполнении вручную журналы отображаются, как и ожидалось (без ошибок). Я был бы очень признателен за любые предложения, так как я полностью в растерянности относительно того, что не так и как начать отслеживать это. Ниже приведен упрощенный код:

//this is a function that fires when the webapp receives a GET request
function doGet(e) {
  return HtmlService.createHtmlOutput("request received");
}

//this is a function that fires when the webapp receives a POST request
function doPost(e) {
//  var myData = JSON.parse(e.postData.contents); // below sample data analogous to what I would get from JSON-POST
  var myData = { "msisdn": "447700900001", "to": "447700900000", "messageId": "0A0000000123ABCD1", "text": "B", "type": "text", "keyword": "B", "message-timestamp": "2019-01-01T12:00:00.000+00:00" }
  var responseText = myData.text;
  return HtmlService.createHtmlOutput("post request received");

// This is the PubNub API call
  var PUB_KEY = 'demo';
  var SUB_KEY = 'demo';
  var CHANNEL = 'poll_demo';
  var url = 'http://pubsub.pubnub.com/publish/' + PUB_KEY + '/' + SUB_KEY + '/0/' + CHANNEL + '/0/' + escape('"' + responseText + '"');
  var response = UrlFetchApp.fetch(url);
}

EDIT: На этом этапе мое главное препятствие заключается в том, что в console.log или Logger.log ничего не появляется, даже если я пытаюсь записать необработанные данные постов, прежде чем что-либо делать с ними. В то же время запрос скручивания, эмулирующий пост-вызов, не показывает ошибок, HTTP 200, и подтверждает, что был выполнен пост-вызов.

1 Ответ

0 голосов
/ 23 января 2019

Спасибо @tehhowch за указание на мое принципиальное отсутствие понимания того, как работает return. Помещение возврата до выполнения остального кода сделало оставшийся код невидимым для интерпретатора и сделало код эквивалентным следующему:

//this is a function that fires when the webapp receives a GET request
function doGet(e) {
  return HtmlService.createHtmlOutput("request received");
}

//this is a function that fires when the webapp receives a POST request
function doPost(e) {
//  var myData = JSON.parse(e.postData.contents); // below sample data analogous to what I would get from JSON-POST
  var myData = { "msisdn": "447700900001", "to": "447700900000", "messageId": "0A0000000123ABCD1", "text": "B", "type": "text", "keyword": "B", "message-timestamp": "2019-01-01T12:00:00.000+00:00" }
  var responseText = myData.text;
  return HtmlService.createHtmlOutput("post request received");
// PubNub inaccessible code is here
}
...