We have an Apps Script that is installed in five G Suite accounts. I am invoking the app scripts from the Java code that is being deployed in Google App Engine. I have stored the five refresh tokens in a properties file and set them in GoogleCredential in a round robin fashion before invoking the Apps Script. When I am trying to invoke the Apps Script Requested entity was not found.
, an error is returned. But the same refresh tokens and client secrets work fine when I create a simple java program to invoke the Apps Script.
@Service
public class GoogleAppsScriptServiceImpl {
private String[] scriptIds;
private String[] refreshTokens;
private GoogleCerdential credential;
public void executeAppsScript() {
List<Object> params = new ArrayList<>();
params.add(googleDocFileId);
ExecutionRequest request = new ExecutionRequest()
.setFunction(APPS_SCRIPT_FUNCTION_NAME)
.setParameters(params);
int index = new Random().nextInt(numOfUsers);
Script scriptService = getScriptService(refreshTokens[index]);
String scriptId = scriptIds[index];
Operation operation = scriptService.scripts()
.run(scriptId, request)
.setQuotaUser(UUID.randomUUID().toString())
.execute();
}
private Script getScriptService(String refreshToken) {
credential.setRefreshToken(refreshToken);
return new Script.Builder(httpTransport, jsonFactory, credential)
.setApplicationName(APPLICATION_NAME)
.build();
}
@PostConstruct
private void createGoogleCredential() throws Exception {
jsonFactory = JacksonFactory.getDefaultInstance();
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setClientSecrets(clientId, clientSecret)
.build();
refreshTokens = commaDelimitedListToStringArray(refreshTokensProp);
numOfUsers = refreshTokens.length;
scriptIds = commaDelimitedListToStringArray(scriptsIdsProp);
}
}
You are deploying Execution API to a project of the standalone script type or the container-bound script type. And you call the function in the project using the API. Under the situation, the error of Requested entity was not found.
occurs. If my understanding is correct, I had also experienced the same situation. So how about confirming the following points?
https://www.googleapis.com/auth/drive
, https://www.googleapis.com/auth/drive.scripts
and https://www.googleapis.com/auth/script.external_request
.If you want to simply test using curl command, you can also use the following command.
curl -X POST -L \
-H "Authorization: Bearer ### access token ###" \
-H "Content-Type: application/json" \
-d "{function: '### function name ###',devMode: true}" \
"https://script.googleapis.com/v1/scripts/### script ID ###:run"
After confirmed above points, please try again. If these were not useful for you, I'm sorry. Or if I misunderstand your question, I'm really sorry.