class PlantUML { generateFlowDiagram() { var flowDiagram = '@startuml\n'; flowDiagram += 'participant Line as "Line"\n'; flowDiagram += 'participant Script as "Google Apps Script"\n'; flowDiagram += 'participant Drive as "Google Drive"\n'; flowDiagram += 'participant S3 as "Amazon S3"\n'; flowDiagram += 'Line->>Script: doPost\n'; flowDiagram += 'Script->>Drive: save image\n'; flowDiagram += 'Script->>S3: upload image\n'; flowDiagram += '@enduml'; var plantUMLService = getPlantUMLService(); var diagramUrl = plantUMLService.getDiagramUrl(flowDiagram); var diagramImage = UrlFetchApp.fetch(diagramUrl).getBlob(); var driveFile = DriveApp.createFile(diagramImage); } getPlantUMLService() { var service = OAuth2.createService('plantuml') .setAuthorizationBaseUrl('https://plantuml.com/') .setTokenUrl('https://plantuml.com/') .setClientId('your_client_id') .setClientSecret('your_client_secret') .setCallbackFunction('authCallback') .setPropertyStore(PropertiesService.getUserProperties()); return service; } authCallback(request) { var service = getService(); var authorized = service.handleCallback(request); if (authorized) { return HtmlService.createHtmlOutput('Authorized'); } else { return HtmlService.createHtmlOutput('Access denied'); } } }