Как создать шаг

В этом руководстве рассказывается, как создать шаг, который пользователи могут добавить в процесс в Google Workspace Studio.

Шаг – это отдельный этап в последовательности задач. Шаги не могут запускать процесс.

Например, рассмотрим шаг, который выполняет арифметические действия. Он запрашивает у пользователя два значения и математическую операцию. Затем он выполняет математическую операцию со значениями и выводит результат.

Карточка этапа калькулятора в Workspace Studio, на которой показаны два поля ввода чисел и раскрывающееся меню арифметических операций.
Рисунок 1. Пользователь настраивает шаг калькулятора как часть потока.

Чтобы создать шаг, настройте его в файле манифеста дополнения, напишите логику приложения в коде дополнения Google Workspace, а затем разверните и протестируйте шаг.

Как определить шаг

Чтобы настроить шаг, определите его в файле манифеста и напишите логику приложения в коде.

Определите шаг в файле манифеста

В файле манифеста appsscript.json:

  1. Задайте для параметров onConfigFunction и onExecuteFunction названия соответствующих функций в коде дополнения. В этом примере функции называются onConfigCalculate и onExecuteCalculate.
    • onConfigFunction настраивает шаг. При необходимости собирает у пользователей данные, необходимые для выполнения шага, например адрес электронной почты для отправки письма. В примере из этого руководства укажите два значения и математическую операцию.
    • onExecuteFunction выполняет шаг. Если данные были собраны у пользователей, они передаются этой функции. Если применимо, возвращает выходные данные. В примере из этого руководства возвращает результат математического вычисления.
  2. Задайте необходимые входные и выходные данные, чтобы шаг мог собирать данные и отправлять их на последующие шаги. В этом примере пользователь должен ввести два значения и математическую операцию, определенную в inputs[]. Выведите результат вычислений, как определено в outputs[].

    Подробнее о входных переменных и выходных переменных… Чтобы убедиться, что потоки выполняются без ошибок, проверьте входные переменные.

Вот файл манифеста для шага "Калькулятор":

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
    },
    "studio": {
      "flows": {
        "workflowElements": [
          {
            "id": "calculatorDemo",
            "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": "onConfigCalculate",
              "onExecuteFunction": "onExecuteCalculate"
            }
          }
        ]
      }
    }
  }
}

Затем напишите вспомогательный код, определив шаг в коде.

Определите шаг в коде

В коде приложения выполните следующие действия:

  1. Напишите onConfigFunction, в этом примере – onConfigCalculate. Добавив шаг в процесс, пользователи могут настроить его в конструкторе процессов. Чтобы собрать необходимую информацию от пользователя, onConfigFunction определяет карточку конфигурации.

    Карточки – это строительные блоки для пользовательских интерфейсов в дополнениях. Карточки поддерживают определенную разметку, интерактивные элементы интерфейса, такие как кнопки, и мультимедийный контент, например изображения. Карточки позволяют получить от пользователя данные, необходимые для выполнения шага, например адрес электронной почты для отправки письма.

    onConfigFunction возвращает карточку. Эта карточка определяет интерфейс, в котором пользователи задают данные шага. В этом примере onConfigFunction создает карточку, которая запрашивает у пользователя два значения и математическую операцию.

  2. Напишите onExecuteFunction, в этом примере – onExecuteCalculate. Когда шаг выполняется в рабочем процессе, запускается onExecuteFunction. Любые входные значения, заданные пользователем во время настройки, как определено в onConfigFunction, передаются в onExecuteFunction.

    Напиши код onExecuteFunction, чтобы он синхронно выполнял задачу, используя предоставленные входные данные. Функция onExecuteFunction должна возвращать все выходные данные, определенные в манифесте потока, иначе возникнет ошибка.

В этом примере кода есть вспомогательная функция outputVariables, которая создает и отправляет указанные переменные в качестве выходных данных шага.

Шаг готов к тестированию.

Вот код для шага Calculator:

Apps Script

/**
 * Generates and displays a configuration card for the sample calculation step.
 *
 * This function creates a card with input fields for two values and a drop-down
 * for selecting an arithmetic operation.
 *
 * The input fields are configured to let the user select outputs from previous
 * steps as input values using the `hostAppDataSource` property.
 */
function onConfigCalculate() {
  const firstInput = CardService.newTextInput()
  .setFieldName("value1")
  .setTitle("First Value")
  .setHostAppDataSource(
    CardService.newHostAppDataSource()
      .setWorkflowDataSource(
        CardService.newWorkflowDataSource()
          .setIncludeVariables(true)
      )
  );
  const secondInput = CardService.newTextInput()
    .setFieldName("value2")
    .setTitle("Second Value").setHostAppDataSource(
      CardService.newHostAppDataSource()
        .setWorkflowDataSource(
          CardService.newWorkflowDataSource()
            .setIncludeVariables(true)
        )
    );
  const selectionInput = CardService.newSelectionInput()
    .setTitle("operation")
    .setFieldName("operation")
    .setType(CardService.SelectionInputType.DROPDOWN)
    .addItem("+", "+", false)
    .addItem("-", "-", true)
    .addItem("x", "x", false)
    .addItem("/", "/", false);

  const sections = CardService.newCardSection()
    .setHeader("Action_sample: Calculate")
    .setId("section_1")
    .addWidget(firstInput)
    .addWidget(selectionInput)
    .addWidget(secondInput)

  var card = CardService.newCardBuilder()
    .addSection(sections)
    .build();

  return card;
}

/**
* 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 step based on the inputs from a flow event.
 *
 * This function retrieves input values and the operation from the flow event,
 * performs the calculation, and returns the result as an output variable.
 * The function logs the event for debugging purposes.
 */
function onExecuteCalculate(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);
}

Проверьте шаг

Чтобы протестировать шаг, настройте тестовое развертывание для дополнения, добавьте шаг в поток и запустите его.

  1. Настройте тестовое развертывание дополнения:

    1. Откройте проект скрипта в редакторе Apps Script.
    2. Нажмите Развертывание > Тестирование развертываний.
    3. Нажмите Установить.
    4. Внизу нажмите Готово.

    Вы можете разрешить другим пользователям тестировать дополнение, предоставив их аккаунтам доступ к проекту Apps Script (требуется разрешение на редактирование). Затем попросите пользователей выполнить описанные выше действия.

    После установки дополнение сразу же становится доступно в Flows. Возможно, вам потребуется обновить страницу "Процессы", прежде чем дополнение появится. Кроме того, перед использованием дополнения необходимо предоставить ему доступ.

    Подробнее об установке неопубликованных дополнений…

  2. Открыть Flows

  3. Создайте процесс, включающий ваш шаг:

    1. Нажмите Новый поток .
    2. Выберите, как будет запускаться поток. При тестировании шага рекомендуется выбрать стартер, который вы можете запустить самостоятельно, например, отправить себе электронное письмо. Если на шаге требуется входная переменная, настройте ее как часть выходных данных стартера.
    3. Нажмите Добавить шаг. Выберите созданный или обновленный шаг Рассчитать.
    4. Настройте шаг. На этапе вычисления выберите два значения и математическую операцию. Шаг сохранится автоматически.
    5. Чтобы протестировать выходные данные шага, добавьте ещё один шаг. Например, чтобы добавить выходные данные в электронное письмо, можно добавить шаг Отправить письмо в Gmail. В поле Message (Сообщение) нажмите Variables (Переменные) и выберите выходные данные шага. На этапе вычисления выберите Переменные > Шаг 2: вычисленный результат > Вычисленный результат. Переменная появится в виде чипа в поле Сообщение.
    6. Нажмите Включить. Процесс готов к запуску.
  4. Запустите поток, активировав его триггер. Например, если поток начинается с получения электронного письма, отправьте себе письмо.

  5. Убедитесь, что поток выполняется правильно. Проверьте журналы на вкладке Действия в конструкторе потоков. Чтобы узнать, как создавать специальные журналы на вкладке "События", ознакомьтесь со статьей Журналы активности.