Este guia de início rápido ensina como criar uma etapa personalizada para o Workspace Studio usando o Google Apps Script. A etapa personalizada recebe dois números e uma operação aritmética como entrada, realiza o cálculo e gera o resultado.
Objetivos
- Criar uma etapa personalizada para o Workspace Studio com o Google Apps Script.
- Implantar a etapa personalizada na sua organização do Google Workspace.
- Testar a etapa personalizada no Workspace Studio.
Pré-requisitos
- Uma Conta do Google com acesso ao Workspace Studio.
Configurar o script
Para configurar o script, crie um novo projeto do Apps Script e conecte-o ao seu projeto na nuvem.
Clique no botão a seguir para abrir o projeto do Apps Script Guia de início rápido da calculadora.
Clique em Visão geral.
Na página de visão geral, clique em
Fazer uma cópia.
Nomeie sua cópia do projeto do Apps Script:
Clique em Cópia do guia de início rápido da calculadora.
Em Título do projeto, digite
Calculator quickstart.Clique em Renomear.
Opcional: revisar o código do guia de início rápido
Na seção anterior, você copiou um projeto inteiro do Apps Script que contém todo o código de aplicativo necessário para a etapa personalizada do fluxo. Portanto, não é necessário copiar e colar cada arquivo.
Opcionalmente, você pode revisar cada arquivo copiado na seção anterior aqui:
appsscript.jsonO arquivo de manifesto. Um arquivo JSON especial que especifica informações básicas do projeto necessárias para o Apps Script executar o script.
Ver o código
appsscript.json{ "timeZone": "America/Los_Angeles", "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8", "addOns": { "common": { "name": "Calculator", "logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png", "useLocaleFromApp": true }, "flows": { "workflowElements": [ { "id": "actionElement", "state": "ACTIVE", "name": "Calculate", "description": "Asks the user for two values and a math operation, then performs the math operation on the values and outputs the result.", "workflowAction": { "inputs": [ { "id": "value1", "description": "value1", "cardinality": "SINGLE", "dataType": { "basicType": "INTEGER" } }, { "id": "value2", "description": "value2", "cardinality": "SINGLE", "dataType": { "basicType": "INTEGER" } }, { "id": "operation", "description": "operation", "cardinality": "SINGLE", "dataType": { "basicType": "STRING" } } ], "outputs": [ { "id": "result", "description": "Calculated result", "cardinality": "SINGLE", "dataType": { "basicType": "INTEGER" } } ], "onConfigFunction": "onConfigCalculateFunction", "onExecuteFunction": "onExecuteCalculateFunction" } } ] } } }
Calculator.gsDefine uma etapa personalizada para o Google Workspace Studio. A etapa, chamada "Calcular", recebe dois números e uma operação como entrada e retorna o resultado do cálculo.
Ver o código
Calculator.gs/** * This script defines a custom step for Google Workspace Studio. * The step, named "Calculate", takes two numbers and an operation as input * and returns the result of the calculation. * * The script includes functions to: * * 1. Define the configuration UI for the step using Card objects: * * - `onConfigCalculateFunction()`: Generates the main configuration card. * - Helper functions like `pushCard()`, `saveButton()` to build card components. * * 2. Handle the execution of the step. * * - `onExecuteCalculateFunction()`: Retrieves inputs, performs the calculation, * and returns outputs. * * To learn more, see the following quickstart guide: * https://developers.google.com/workspace/add-ons/studio/quickstart */ /** * Creates an action response to push a new card onto the card stack. * * This function generates an action object that, when returned, causes the * provided card to be pushed onto the card stack, making it the currently * displayed card in the configuration UI. * @param {Object} card The Card object to push. * @return {Object} The action response object. */ function pushCard(card) { return { "action": { "navigations": [{ "push_card": card } ] } }; } /** * Creates an action response to update the currently displayed card. * * This function generates an action object that, when returned, causes the * currently displayed card to be replaced with the provided card in the * configuration UI. * @param {Object} card The Card object to update. * @return {Object} The render actions object. */ function updateCard(card) { return { "render_actions": { "action": { "navigations": [{ "update_card": card } ] } } }; } /** * Creates a button configuration object for saving the step. * * This function generates a button definition that, when clicked, triggers * a save action for the current step configuration. * @return {Object} The button widget object. */ function saveButton() { return { "text": "Save", "onClick": { "hostAppAction" : { "workflowAction" : { "saveWorkflowAction" : {} } } }, }; } /** * Creates a button configuration object for a refresh action. * * This function generates a button definition that, when clicked, triggers * a function to refresh the current card. * @param {string} functionName The name of the Apps Script function to call on click. * @return {Object} The button widget object. */ function refreshButton(functionName) { return { "text": "Refresh", "onClick": { "action" : { "function" : functionName } }, }; } /** * Generates and displays a configuration card for the sample calculation action. * * This function creates a card with input fields for two values and a dropdown * for selecting an arithmetic operation. The card also includes a "Save" * button to save the action configuration for the step. * * The input fields are configured to let the user select outputs from previous * steps as input values using the `hostAppDataSource` property. * This function is called when the user adds or edits the "Calculate" step in the UI. * @return {Object} The action response object containing the card to display. */ function onConfigCalculateFunction() { var card = { "sections": [ { "header": "Action sample: Calculate", "widgets": [ { "textInput": { "name": "value1", "label": "First value", "hostAppDataSource" : { "workflowDataSource" : { "includeVariables" : true } } } }, { "selectionInput": { "name": "operation", "label": "Operation", "type": "DROPDOWN", "items": [ { "text": "+", "value": "+", }, { "text": "-", "value": "-", }, { "text": "x", "value": "x", }, { "text": "/", "value": "/", } ] } }, { "textInput": { "name": "value2", "label": "Second value", "hostAppDataSource" : { "workflowDataSource" : { "includeVariables" : true } } } } ] } ] }; return pushCard(card); } /** * Gets an integer value from variable data, handling both string and integer formats. * * This function attempts to extract an integer value from the provided variable data. * It checks if the data contains string values and, if so, parses the first string * as an integer. If integer values are present, it returns the first integer. * @param {Object} variableData The variable data object from the event. * @return {number} The extracted integer value. */ function getIntValue(variableData) { if (variableData.stringValues) { return parseInt(variableData.stringValues[0]); } return variableData.integerValues[0]; } /** * Returns output variables from a step. * * This function constructs an object that, when returned, sends the * provided variable values as output from the current step. * The variable values are logged to the console for debugging purposes. */ function outputVariables(variableDataMap) { const workflowAction = AddOnsResponseService.newReturnOutputVariablesAction() .setVariableDataMap(variableDataMap); const hostAppAction = AddOnsResponseService.newHostAppAction() .setWorkflowAction(workflowAction); const renderAction = AddOnsResponseService.newRenderActionBuilder() .setHostAppAction(hostAppAction) .build(); return renderAction; } /** * Executes the calculation action based on the inputs from an event. * * This function retrieves input values ("value1", "value2") and the "operation" * from the event, performs the calculation, and returns the "result" and * "log" as output variables. * This function is called when the flow reaches this custom step. * @param {Object} event The event object passed by the runtime. * @return {Object} The output variables object. */ function onExecuteCalculateFunction(event) { console.log("output: " + JSON.stringify(event)); var calculatedValue = 0; var value1 = event.workflow.actionInvocation.inputs["value1"].integerValues[0]; var value2 = event.workflow.actionInvocation.inputs["value2"].integerValues[0]; var operation = event.workflow.actionInvocation.inputs["operation"].stringValues[0]; if (operation == "+") { calculatedValue = value1 + value2; } else if (operation == "-") { calculatedValue = value1 - value2; } else if (operation == "x") { calculatedValue = value1 * value2; } else if (operation == "/") { calculatedValue = value1 / value2; } const variableDataMap = { "result": AddOnsResponseService.newVariableData().addIntegerValue(calculatedValue) }; return outputVariables(variableDataMap); }
Implantar e testar a etapa
Para testar a etapa, configure uma implantação de teste para o complemento, adicione a etapa a um fluxo e execute o fluxo.
Configure uma implantação de teste para o complemento:
- Abra o projeto de script no editor do Apps Script.
- Clique em Implantar > Implantações de teste.
- Clique em Instalar.
- Na parte de baixo, clique em Concluído.
Você pode permitir que outros usuários testem o complemento compartilhando o projeto do Apps Script com a conta deles (é necessário acesso de edição). Em seguida, peça aos usuários para seguir as etapas anteriores.
Depois de instalado, o complemento fica disponível imediatamente nos fluxos. Talvez seja necessário atualizar os fluxos antes que o complemento apareça. Você também precisa autorizar o complemento antes de usá-lo.
Para saber mais sobre implantações de teste, consulte Instalar um complemento não publicado.
Abra os fluxos.
Crie um fluxo que inclua sua etapa:
- Clique em Novo fluxo.
- Selecione como o fluxo começa. Se a etapa exigir uma variável de entrada, configure-a como parte da saída do acionador.
- Clique em Adicionar etapa. Selecione a etapa criada ou atualizada, chamada Calcular.
- Configure a etapa. Para a etapa de cálculo, escolha dois valores e uma operação matemática. A etapa é salva automaticamente.
- Para testar a saída da etapa, adicione outra etapa. Por exemplo, para adicionar a saída a uma mensagem de chat do Google Chat, adicione a etapa Me avise no Chat. Em Mensagem, clique em Variáveis e selecione a saída da etapa. Para a etapa de cálculo, selecione Variáveis > Etapa 2: Calcular > Resultado calculado. A variável aparece como um chip no campo Mensagem.
- Clique em Ativar. Seu fluxo está pronto para ser executado.
Execute o fluxo acionando o acionador dele. Por exemplo, se o fluxo começar em uma programação, ele será executado na data e hora especificadas.
Verifique se o fluxo é executado conforme o esperado. Confira os registros acessando a guia Atividade do criador de fluxo. Para saber como criar registros personalizados na guia "Atividade", consulte Registros de atividades.
Próximas etapas
Você criou e testou uma etapa personalizada para o Workspace Studio. Agora você pode:
Continuar personalizando a etapa pedindo ao Gemini para ajudar a implementar uma lógica mais complexa.
Criar um card de configuração para personalizar a configuração da etapa.
Registrar atividades e erros para gravar e solucionar problemas nas execuções de etapas.
Analisar objetos de eventos para revisar o payload JSON que os fluxos enviam e recebem à medida que as etapas são executadas.