Это краткое руководство научит вас создавать настраиваемые шаги для Workspace Flows с помощью Google Apps Script. Настраиваемый шаг принимает в качестве входных данных два числа и арифметическую операцию, выполняет вычисление и выводит результат.

Цели
- Создайте пользовательский шаг для Workspace Flows с помощью Google Apps Script.
- Разверните пользовательский шаг в своей собственной организации Google Workspace.
- Протестируйте шаг пользовательского потока в Workspace Flows.
Предпосылки
- Учетная запись Google с доступом к Workspace Flows через программу Gemini Alpha .
Настройте сценарий
Чтобы настроить скрипт, создайте новый проект Apps Script, а затем подключите его к своему облачному проекту.
Нажмите следующую кнопку, чтобы открыть проект скрипта быстрого запуска приложения Flows calculator .
Нажмите Обзор .
На странице обзора нажмите
Сделайте копию .
Назовите свою копию проекта Apps Script:
Нажмите Копировать краткое руководство по калькулятору потоков .
В заголовке проекта введите
Flows calculator quickstart.Нажмите «Переименовать» .
Необязательно: ознакомьтесь с кодом быстрого старта.
В предыдущем разделе вы скопировали весь проект Apps Script, содержащий весь необходимый код приложения для настраиваемого шага вашего потока, поэтому нет необходимости копировать и вставлять каждый файл.
При желании вы можете просмотреть каждый файл, скопированный вами в предыдущем разделе, здесь:
-
appsscript.json Файл манифеста. Специальный JSON-файл, содержащий базовую информацию о проекте, необходимую Apps Script для запуска скрипта.
Просмотреть код
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" } }, { "id": "log", "description": "Logged result of flow event.", "cardinality": "SINGLE", "dataType": { "basicType": "STRING" } } ], "onConfigFunction": "onConfigCalculateFunction", "onExecuteFunction": "onExecuteCalculateFunction" } } ] } } }
-
Calculator.gs Определяет настраиваемый шаг для Google Workspace Flows. Шаг, называемый «Вычислить», принимает в качестве входных данных два числа и операцию и возвращает результат вычисления.
Посмотреть код
Calculator.gs/** * This script defines a custom step for Google Workspace Flows. * 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/workflows/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 workflow. * * This function generates a button definition that, when clicked, triggers * a save action for the current workflow 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 workflow. * * The input fields are configured to let the user select outputs from previous * workflow steps as input values using the `hostAppDataSource` property. * This function is called when the user adds or edits the "Calculate" step in the Flows 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]; } /** * Executes the calculation action based on the inputs from a workflow event. * * This function retrieves input values ("value1", "value2") and the "operation" * from the workflow event, performs the calculation, and returns the "result" and * "log" as output variables. * This function is called when the workflow execution reaches this custom step. * @param {Object} event The event object passed by the Flows runtime. * @return {Object} The output variables object. */ function onExecuteCalculateFunction(event) { console.log("output: " + JSON.stringify(event)); var calculatedValue = 0; var value1 = getIntValue(event.workflow.actionInvocation.inputs["value1"]); var value2 = getIntValue(event.workflow.actionInvocation.inputs["value2"]); 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; } var renderAction = { "hostAppAction" : { "workflowAction" : { "returnOutputVariablesAction" : { "variableValues" : [ { "variableId": "result", "integerValues": [ calculatedValue ] } ] } } } }; }
Разверните и проверьте свой шаг
Чтобы протестировать свой шаг, настройте тестовое развертывание для своего дополнения, добавьте шаг в поток, а затем запустите поток.
Настройте тестовое развертывание для вашего дополнения:
- Откройте проект скрипта в редакторе Apps Script.
- Нажмите Развернуть > Тестовые развертывания .
- Нажмите «Установить» .
- Внизу нажмите Готово .
Вы можете разрешить другим пользователям протестировать дополнение, поделившись проектом Apps Script с их учётной записью (требуется доступ для редактирования). Затем предложите пользователям выполнить предыдущие шаги.
После установки дополнение сразу же станет доступно в Flows. Возможно, вам потребуется обновить Flows, чтобы оно появилось. Перед использованием необходимо авторизовать дополнение.
Дополнительную информацию о тестовых развертываниях см. в разделе Установка неопубликованного дополнения .
Открытые потоки.
Создайте поток, включающий ваш шаг:
- Нажмите новый поток ».
- Выберите способ запуска потока. При тестировании шага выберите стартовое событие, которое вы можете запустить самостоятельно, например, отправку себе электронного письма. Если для вашего шага требуется входная переменная, настройте её как часть выходных данных стартового события.
- Нажмите шаг» . Выберите созданный или обновлённый шаг под названием «Вычислить» .
- Настройте шаг. Для шага вычисления выберите два значения и математическую операцию. Шаг сохраняется автоматически.
- Чтобы протестировать выходные данные вашего шага, добавьте ещё один шаг. Например, чтобы добавить выходные данные в сообщение электронной почты, можно добавить шаг Gmail «Отправить сообщение» . В разделе «Сообщение » нажмите переменные» и выберите выходные данные вашего шага. Для шага вычисления выберите переменные» > «Шаг 2: Вычисленный результат» > «Вычисленный результат» . Переменная отображается в виде фишки в поле «Сообщение» .
- Нажмите «Включить» . Ваш поток готов к запуску.
Запустите поток, активировав его стартовое состояние. Например, если поток запускается при получении электронного письма, отправьте себе письмо.
Убедитесь, что поток выполняется должным образом. Проверьте журналы, перейдя на вкладку «Активность» конструктора потоков. Чтобы узнать, как создавать пользовательские журналы на вкладке «Активность», см. раздел Журналы активности .
Следующие шаги
Вы успешно создали и протестировали настраиваемый этап потока для Workspace Flows. Теперь вы можете:
Продолжайте настраивать шаг, предлагая Gemini помочь вам реализовать более сложную логику.
Создайте карту конфигурации для настройки конфигурации шагов.
Регистрируйте активность и ошибки для записи и устранения неполадок во время пробежек.
Просмотрите объекты событий потока , чтобы просмотреть полезную нагрузку JSON, которую поток отправляет и получает во время выполнения потока.