gpt4 book ai didi

asynchronous - 如何使用 Google Apps Script webapp 发送延迟响应(Slack api)?

转载 作者:行者123 更新时间:2023-12-02 16:59:20 29 4
gpt4 key购买 nike

我们有一个小型的 Google Apps 脚本网络应用程序,可以处理 Slack 斜杠命令。它可以直接从 Slack 做一些方便的事情,比如向我们的工作表添加、更新和查询记录。大部分时间一切正常。然而,Slack API 期望请求在 3 秒内得到答复,否则它将超时。我们的 Google Apps 脚本并不总是能够在那个时间范围内做出响应,随着我们的工作表的增长或我们的查询变得更加复杂,这种情况只会变得更糟。

Slack API 允许使用延迟响应的异步调用,但这意味着 Google Apps 脚本需要立即响应(3 秒内)并在后台做一些工作。

问题来了

我不知道如何在 Google Apps 脚本中进行异步调用

我知道 Google Apps 脚本不支持 Workers,我下面的解决方案因为 ReferenceError: 'google' is not defined 而碰壁。 (忽略 Payload 类,它格式化 Slack 响应)

function doPost(request) {
var responseUrl = request.parameter.response_url

// This is how I try to circumvent the lack of threads in Google Apps Script
google.script.run

// Send an asynchronous slack response with result
.withSuccessHandler(function(payload) {
UrlFetchApp.fetch(responseUrl, {
'method' : 'post',
'contentType': 'application/json',
'payload' : payload.toString()
});
})

// Send an asynchronous slack response with error message
.withFailureHandler(function(payload) {
UrlFetchApp.fetch(responseUrl, {
'method' : 'post',
'contentType': 'application/json',
'payload' : payload.toString()
});
})

// do work in the background
.sleep(5);

return new Payload("Let me think about this...").asResponse();
}

function sleep(seconds) {
Utilities.sleep(1000 * seconds);
return new Payload("I waited for " + seconds + " seconds");
}

有没有人知道如何让它工作?在 Google Apps 脚本中是否有任何替代解决方案来处理异步请求?

最佳答案

我也不知道 Apps 脚本中有任何线程,正如您所注意到的,google.script.run 仅适用于 Apps 脚本前端。

作为解决方法,您可以使用 Google 表单作为您的“任务队列”。我已经将一个简单的 G-Form 与一个问题放在一起,并检查了它的最终版本以获得适当的参数名称和 URL。然后我设置一个 installable on-form-submit触发运行我的脚本。这是我的 POC 代码:

function doPost(e) {
var form = 'https://docs.google.com/forms/d/e/1FAIpQLScWBM<my-form-id>CRxA/formResponse';
UrlFetchApp.fetch(form, {method:'POST', payload:'entry.505669405=' + e.parameter.example});
return ContentService.createTextOutput('OK');
}

function onForm(e) {
//triggered async from doPost via a Google Forms
SpreadsheetApp.getActive().getSheetByName('Sheet1').appendRow(e.values);
}

它在我的测试中运行良好,应该足以满足您的用例。

关于asynchronous - 如何使用 Google Apps Script webapp 发送延迟响应(Slack api)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54809366/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com