【发布时间】:2021-12-15 18:33:29
【问题描述】:
- Project_1 是一个容器绑定脚本。容器是可读的电子表格(模板)。
代码_1:
function doPost(e) {
return HtmlService.createHtmlOutput(JSON.stringify(e));
}
用户制作模板的副本,将脚本 (Project_1) 部署为具有以下权限的 web 应用程序:“执行身份:我,有权访问:任何人”。用户是 Project_1 的所有者。
- Project_2 是作为插件部署的脚本。第 1 点的用户不是 Project_2 的所有者。
代码_2:
function sendPost() {
var sheetURL = SpreadsheetApp.getActiveSpreadsheet().getUrl();
var webAppUrl = "https://script.google.com/macros/s/###/exec"; // 7: Part_1 - WebApp: Tester
// var auth = ScriptApp.getOAuthToken();
// var header = { 'Authorization': 'Bearer ' + auth };
var payload = { scriptName: 'updateData', sheetURL: 'sheetURL' };
var options = {
method: 'post',
// headers: header,
muteHttpExceptions: true,
payload: payload
};
var resp = UrlFetchApp.fetch(webAppUrl, options);
var respTxt = resp.getContentText();
console.log('resp: ' + respTxt);
}
function doPost(ev) {
var respWebapp = func(ev);
}
用户安装插件 (Project_2)。
- addon -> webapp 方向的流程很好:当 sendPost() 启动时,它会向 webapp 发送一个请求,并接收带有必要 data_1 作为响应的响应。
“网上有人”方向的流程 -> webapp 也很流畅:请求一个 webapp_url 时接收到传输的 data_2。
-
我正在尝试将 data_2 传输到插件。 我阅读了很多关于 scripts.run 的内容,但似乎此选项不适用于这种情况。 也无处添加事件监听器。
-
我不想从我的帐户部署 webapp,以免将我的 quota 用于同时执行 (
添加: 我觉得我被难住了。因此,我与社区联系,希望有人会针对这些初始数据提出解决方法或新策略。初始数据是指为 30 多个用户提供双向交换消息的机会电子表格 外部服务(例如 Telegram),同时不低于 30 个同时执行脚本的限制。
已添加_2: 我要分配赏金,所以我从 cmets 把帖子中缺少的内容转移到这里并更新问题本身。
我拒绝了立即进入工作表的选项,因为这会导致不断调用电子表格并降低整个系统的性能。
我知道谷歌云功能和谷歌计算引擎的存在,但希望保持在免费配额内。
问题:如何将数据从 webapp 传输到插件并执行 func() 或使用哪种解决方法来实现目标?
【问题讨论】:
-
@TheMaster "用户......将脚本 (Project_1) 部署为具有权限的 web 应用程序:"执行为:我,有权访问:任何人""。用户不会花费我的,而是他的配额。
-
Google Apps 脚本工作区编辑器没有传入/传出端点来从外部代码获取数据,因此您必须重新考虑您的解决方案。
-
请相应地更新问题。附言其中一种可能性是将电子表格用作数据库,以供“Code_1”和“Code_2”用作数据存储。
-
您可以查看外部资源,例如 firebase 或数据库。然后你可以从 webapp#2 进行投票。当然,如果你愿意接受 30 的 se,你总是可以从你的插件部署 webapp#2。或者,
with a Google account, but a service.可以让服务以用户身份运行? -
50 个用户几乎不可能同时发送一个命令。只要您的 web 应用程序速度快并且执行时间低于 30 秒左右,我认为这对 50 个用户来说不是问题。如果您担心,请查看专业的服务器/域,例如谷歌云功能、谷歌计算引擎。
标签: google-apps-script web-applications add-on