Tworzenie karty konfiguracji dla kroku

Z tego przewodnika dowiesz się, jak utworzyć kartę konfiguracji, która umożliwia użytkownikom dostosowywanie i wprowadzanie danych wejściowych do kroku w Google Workspace Flows.

Ogólnie rzecz biorąc, aby utworzyć kartę konfiguracji, musisz utworzyć interfejs karty, tak jak w przypadku każdego innego dodatku do Google Workspace. Aby uzyskać pomoc w tworzeniu interfejsów kart konfiguracji, zapoznaj się z tymi materiałami:

  • Kreator kart, interaktywne narzędzie, które pomaga tworzyć i definiować karty.
  • Karta w dokumentacji interfejsu Google Workspace Add-ons API.
  • Card Service to usługa Apps Script, która umożliwia skryptom konfigurowanie i tworzenie kart.
  • Interfejsy oparte na kartach w dokumentacji dla programistów dodatków do Google Workspace.

Niektóre widżety kart mają specjalne funkcje i możliwości związane z Workspace Flows, które zostały opisane w tym przewodniku.

Definiowanie karty konfiguracji

Zdefiniuj kartę konfiguracji w pliku manifestu Apps Script i w kodzie.

Poniższy przykład pokazuje, jak utworzyć kartę konfiguracji, która prosi użytkowników o wybranie pokoju w Google Chat.

Edytowanie pliku manifestu

W pliku manifestu zdefiniuj workflowElements.

JSON

{
  "timeZone": "America/Los_Angeles",
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "addOns": {
    "common": {
      "name": "Sample add-on",
      "logoUrl": "https://www.gstatic.com/images/branding/productlogos/gsuite_addons/v6/web-24dp/logo_gsuite_addons_color_1x_web_24dp.png",
      "useLocaleFromApp": true
    },
    "flows": {
      "workflowElements": [
        {
          "id": "actionElement",
          "state": "ACTIVE",
          "name": "Chat space selector",
          "description": "Lets the user select a space from Google  Chat",
          "workflowAction": {
            "inputs": [
              {
                "id": "chooseSpace",
                "description": "Choose a Chat space",
                "cardinality": "SINGLE",
                "dataType": {
                  "basicType": "STRING"
                }
              }
            ],
            "onConfigFunction": "onConfigSpacePicker",
            "onExecuteFunction": "onExecuteCalculate"
          }
        }
      ]
    }
  }
}

Edytuj kod

W kodzie aplikacji zwróć kartę.

Google Apps Script

/**
* Generates and displays a configuration card to choose a Chat space
  */
function onConfigSpacePicker() {
  var card = {
    "sections": [
      {
        "header": "Choose a Chat space",
        "widgets": [
          {
            "selectionInput": {
              "name": "value1",
              "label": "First value",
              "type": "MULTI_SELECT",
              "platformDataSource": {
                "hostAppDataSource": {
                  "workflowDataSource": {
                    "includeVariables": true,
                    "type": "SPACE"
                  }
                }
              }
            }
          }
        ]
      }
    ]
  };
  return {
    "action": {
      "navigations": [{
        "push_card": card
      }]
    }
  };
}

Konfigurowanie autouzupełniania w przypadku widżetów wprowadzania

Możesz skonfigurować autouzupełnianie w przypadku widżetów SelectionInput, aby ułatwić użytkownikom wybieranie opcji z listy. Jeśli na przykład użytkownik zacznie wpisywać Atl w menu, które zawiera miasta w Stanach Zjednoczonych, element może automatycznie zasugerować Atlanta, zanim użytkownik skończy wpisywać. Możesz automatycznie uzupełnić maksymalnie 100 produktów.

Sugestie autouzupełniania mogą pochodzić z tych źródeł danych:

  • Autouzupełnianie po stronie serwera: sugestie są wypełniane na podstawie zdefiniowanego przez Ciebie zewnętrznego źródła danych lub źródła danych innej firmy.
  • Dane Google Workspace: sugestie są wypełniane na podstawie źródeł Google Workspace, takich jak użytkownicy Google Workspace czy pokoje w Google Chat.

Autouzupełnianie po stronie serwera

Możesz skonfigurować widżet SelectionInput, aby autouzupełniał sugestie z zewnętrznego źródła danych. Możesz na przykład pomóc użytkownikom w wybraniu potencjalnych klientów z listy w systemie zarządzania relacjami z klientami (CRM).

Aby wdrożyć autouzupełnianie po stronie serwera, musisz:

  1. Zdefiniuj źródło danych: w widżecie SelectionInput dodaj DataSourceConfig określający RemoteDataSource. Ta konfiguracja wskazuje funkcję Apps Script, która pobiera sugestie autouzupełniania.
  2. Wdróż funkcję autouzupełniania: ta funkcja jest wywoływana, gdy użytkownik wpisuje tekst w polu wejściowym. Funkcja powinna wysyłać zapytania do zewnętrznego źródła danych na podstawie danych wejściowych użytkownika i zwracać listę sugestii.

Poniższy przykład pokazuje, jak skonfigurować widżet SelectionInput autouzupełniania po stronie serwera:

Google Apps Script

// In your onConfig function:
var multiSelect1 =
  CardService.newSelectionInput()
    .setFieldName("value1")
    .setTitle("Server Autocomplete")
    .setType(CardService.SelectionInputType.MULTI_SELECT)
    .setMultiSelectMaxSelectedItems(3)
    .addDataSourceConfig(
      CardService.newDataSourceConfig()
        .setRemoteDataSource(
          CardService.newAction().setFunctionName('getAutocompleteResults')
        )
    )
    .addDataSourceConfig(
      CardService.newDataSourceConfig()
        .setPlatformDataSource(
          CardService.newPlatformDataSource()
            .setHostAppDataSource(
              CardService.newHostAppDataSource()
                .setWorkflowDataSource(
                  CardService.newWorkflowDataSource()
                    .setIncludeVariables(true)
                ))
        )
    );

// ... add widget to card ...

Obsługa prośby o autouzupełnianie

Funkcja określona w setFunctionName (np. getAutocompleteResults) otrzymuje obiekt zdarzenia, gdy użytkownik wpisuje tekst w polu. Ta funkcja musi:

  1. Sprawdź wartość parametru event.workflow.elementUiAutocomplete.invokedFunction, aby upewnić się, że jest zgodna z oczekiwaną nazwą funkcji.
  2. Pobierz dane wejściowe użytkownika z event.workflow.elementUiAutocomplete.query.
  3. Wysyłaj zapytania do zewnętrznego źródła danych za pomocą zapytania.
  4. Zwróć maksymalnie 100 sugestii w wymaganym formacie.

Poniższy przykład pokazuje, jak zaimplementować funkcję handleAutocompleteRequest(), aby zwracać sugestie na podstawie zapytania użytkownika:

Google Apps Script

function handleAutocompleteRequest(event) {
  var invokedFunction = event.workflow.elementUiAutocomplete.invokedFunction;
  var query = event.workflow.elementUiAutocomplete.query;

  if (invokedFunction != "getAutocompleteResults" || query == undefined || query == "") {
    return {};
  }

  // Query your data source to get results based on the query
  var autocompleteResponse = [
    {
      "text": query + " option 1",
      "value": query + "_option1",
      "start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
    },
    {
      "text": query + " option 2",
      "value": query + "_option2",
      "start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png",
      "bottom_text": "subtitle of option 2"
    },
    {
      "text": query + " option 3",
      "value": query + "_option3",
      "start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
    }
  ];

  var response = {
    "action": {
      "modify_operations": [
        {
          "update_widget": {
            "selection_input_widget_suggestions": {
              "suggestions": autocompleteResponse
            }
          }
        }
      ]
    }
  };
  return response;
}

// In your onConfig function, handle the autocomplete event
function onConfigAutocompleteTest(event) {
  // Handle autocomplete request
  if (event.workflow && event.workflow.elementUiAutocomplete) {
    return handleAutocompleteRequest(event);
  }

  // ... rest of your card building logic ...
}

Automatyczne uzupełnianie danych Google Workspace

Możesz też wypełniać sugestie autouzupełniania danymi z środowiska Google Workspace użytkownika:

  • Użytkownicy Google Workspace: wypełnij listę użytkowników w tej samej organizacji Google Workspace.
  • Pokoje Google Chat: wypełniaj pokoje Google Chat, których użytkownik jest członkiem.

Aby to skonfigurować, ustaw wartość parametru PlatformDataSource w widżecie SelectionInput, określając wartość parametru WorkflowDataSourceType jako USER lub SPACE.

Google Apps Script

// User Autocomplete
var multiSelect2 =
  CardService.newSelectionInput()
    .setFieldName("value2")
    .setTitle("User Autocomplete")
    .setType(CardService.SelectionInputType.MULTI_SELECT)
    .setMultiSelectMaxSelectedItems(3)
    .setPlatformDataSource(
      CardService.newPlatformDataSource()
        .setHostAppDataSource(
          CardService.newHostAppDataSource()
            .setWorkflowDataSource(
              CardService.newWorkflowDataSource()
                .setIncludeVariables(true)
                .setType(CardService.WorkflowDataSourceType.USER)
            ))
    );

// Chat Space Autocomplete
var multiSelect3 =
  CardService.newSelectionInput()
    .setFieldName("value3")
    .setTitle("Chat Space Autocomplete")
    .setType(CardService.SelectionInputType.MULTI_SELECT)
    .setMultiSelectMaxSelectedItems(3)
    .setPlatformDataSource(
      CardService.newPlatformDataSource()
        .setHostAppDataSource(
          CardService.newHostAppDataSource()
            .setWorkflowDataSource(
              CardService.newWorkflowDataSource()
                .setIncludeVariables(true)
                .setType(CardService.WorkflowDataSourceType.SPACE)
            ))
    );

Przykład: łączenie typów autouzupełniania

Przykład poniżej pokazuje funkcję onConfig, która tworzy kartę z 3 widgetami SelectionInput. Demonstruje ona autouzupełnianie po stronie serwera, użytkownika i przestrzeni:

Google Apps Script

function onConfigAutocompleteTest(event) {
  // Handle autocomplete request
  if (event.workflow && event.workflow.elementUiAutocomplete) {
    return handleAutocompleteRequest(event);
  }

  // Server-side autocomplete widget
  var multiSelect1 =
    CardService.newSelectionInput()
      .setFieldName("value1")
      .setTitle("Server Autocomplete")
      .setType(CardService.SelectionInputType.MULTI_SELECT)
      .setMultiSelectMaxSelectedItems(3)
      .addDataSourceConfig(
        CardService.newDataSourceConfig()
          .setRemoteDataSource(
            CardService.newAction().setFunctionName('getAutocompleteResults')
          )
      )
      .addDataSourceConfig(
        CardService.newDataSourceConfig()
          .setPlatformDataSource(
            CardService.newPlatformDataSource()
              .setHostAppDataSource(
                CardService.newHostAppDataSource()
                  .setWorkflowDataSource(
                    CardService.newWorkflowDataSource()
                      .setIncludeVariables(true)
                  ))
          )
      );

  // User autocomplete widget
  var multiSelect2 =
    CardService.newSelectionInput()
      .setFieldName("value2")
      .setTitle("User Autocomplete")
      .setType(CardService.SelectionInputType.MULTI_SELECT)
      .setMultiSelectMaxSelectedItems(3)
      .setPlatformDataSource(
        CardService.newPlatformDataSource()
          .setHostAppDataSource(
            CardService.newHostAppDataSource()
              .setWorkflowDataSource(
                CardService.newWorkflowDataSource()
                  .setIncludeVariables(true)
                  .setType(CardService.WorkflowDataSourceType.USER)
              ))
      );

  // Space autocomplete widget
  var multiSelect3 =
    CardService.newSelectionInput()
      .setFieldName("value3")
      .setTitle("Chat Space Autocomplete")
      .setType(CardService.SelectionInputType.MULTI_SELECT)
      .setMultiSelectMaxSelectedItems(3)
      .setPlatformDataSource(
        CardService.newPlatformDataSource()
          .setHostAppDataSource(
            CardService.newHostAppDataSource()
              .setWorkflowDataSource(
                CardService.newWorkflowDataSource()
                  .setIncludeVariables(true)
                  .setType(CardService.WorkflowDataSourceType.SPACE)
              ))
      );

  var sectionBuilder =
    CardService.newCardSection()
      .addWidget(multiSelect1)
      .addWidget(multiSelect2)
      .addWidget(multiSelect3);

  var card =
    CardService.newCardBuilder()
      .addSection(sectionBuilder)
      .build();
  return card;
}

function handleAutocompleteRequest(event) {
  var invokedFunction = event.workflow.elementUiAutocomplete.invokedFunction;
  var query = event.workflow.elementUiAutocomplete.query;

  if (invokedFunction != "getAutocompleteResults" || query == undefined || query == "") {
    return {};
  }

  // Query your data source to get results
  var autocompleteResponse = [
    {
      "text": query + " option 1",
      "value": query + "_option1",
      "start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
    },
    {
      "text": query + " option 2",
      "value": query + "_option2",
      "start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png",
      "bottom_text": "subtitle of option 2"
    },
    {
      "text": query + " option 3",
      "value": query + "_option3",
      "start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
    }
  ];

  var response = {
    "action": {
      "modify_operations": [
        {
          "update_widget": {
            "selection_input_widget_suggestions": {
              "suggestions": autocompleteResponse
            }
          }
        }
      ]
    }
  };
  return response;
}

Funkcje Workspace Flows

Niektóre widżety kart mają specjalne funkcje i właściwości związane z Workspace Flows, które zostały opisane tutaj.

TextInput i SelectionInput

Widżety TextInputSelectionInput mają te funkcje specyficzne dla Workspace Flows:

  • includeVariables: właściwość logiczna, która umożliwia użytkownikom wybieranie zmiennych z poprzednich kroków.
  • type: wartość wyliczeniowa, która automatycznie uzupełnia sugestie. Obsługiwane wartości to:
    • USER: wyświetla sugestie autouzupełniania osób z kontaktów użytkownika.
    • SPACE: podaje sugestie autouzupełniania dotyczące pokoi w Google Chat, do których należy użytkownik.

Jeśli ustawisz zarówno includeVariables, jak i type, pole wejściowe połączy ich funkcje. Użytkownicy mogą wybrać zmienną pasującego typu type z menu i wyświetlić sugestie autouzupełniania.

  • podpowiedzi autouzupełniania w pokoju Google Chat;
    Ilustracja 1. Użytkownik sprawdza sugestie autouzupełniania podczas wybierania miejsca.
  • Menu zmiennych umożliwia użytkownikom wybieranie zmiennych wyjściowych z poprzednich kroków.
    Ilustracja 2. Użytkownik wybiera zmienną wyjściową poprzedniego kroku z menu ➕Zmienne.

Uwagi i ograniczenia dotyczące kart

  • Nawigacja po kartach, np. popCard()pushCard()updateCard(), nie jest obsługiwana w dodatkach, które rozszerzają przepływy.

  • Gdy SelectionInput jest używany w selektorze zmiennych, widżety obsługują tylko "type": "MULTI_SELECT". W innych kartach konfiguracji SelectionInput obsługuje wszystkie wartości SelectionType.