Google Apps 脚本在手动执行时有效,但在由触发器启动时无效,并且不会生成日志



我正在使用部署为web应用程序的Google Apps Script(GAS),以便从Nexmo(SMS)接收JSON-POST API调用,并向PubNub进行REST API调用,传递此SMS的文本以供进一步分发。

当我手动执行脚本时,一切都按预期进行。然而,当脚本由对GAS webhook的后API调用触发时,SMS数据被传递给GAS,但似乎没有对PubNub API的调用。

我尝试在电子表格中使用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);
}

编辑:此时,我的主要障碍是console.log或Logger.log中没有任何内容,即使我在对原始post数据进行任何其他操作之前尝试对其进行日志记录。同时,模拟post调用的curl请求显示没有错误,HTTP 200,并确认进行了post调用。

感谢@tehhowch指出我根本不了解return的工作原理。将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
}

最新更新