У нас есть небольшое веб-приложение Google Apps Script, которое обрабатывает команды Slack slash.Это делает некоторые удобные вещи, такие как добавление, обновление и запрос записей на наш лист, прямо из Slack.Все работает просто отлично большую часть времени.Однако Slack API ожидает ответа от запроса менее чем за 3 секунды, иначе он истечет.Наш скрипт Google Apps не всегда может ответить в этот период, который будет только ухудшаться по мере роста нашего листа или усложнения наших запросов.
Slack API позволяет использовать асинхронные вызовы с использованием отложенного ответа, но это означает, что Google Apps Script должен немедленно ответить (в течение 3 секунд) и выполнить некоторую работу в фоновом режиме.
Теперь это проблема
Я не могувыяснить, как заставить работать асинхронный вызов в скрипте Служб Google
Я знаю, что работники не поддерживаются в скрипте Служб Google, и мое решение, приведенное ниже, застряло в стене из-за ReferenceError: 'google' isне определено .(Просто игнорируйте класс 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 Script?