텍스트 입력 자동 완성 추천

텍스트 입력 위젯 을 사용하면 부가기능이 사용자가 제공하는 텍스트를 읽고 반응할 수 있습니다. 다음과 같은 작업을 할 수 있습니다. 이러한 위젯을 구성하여 사용자에게 살펴보겠습니다.

제공되는 추천은 제공된 문자열의 정적 목록에서 가져올 수 있습니다. 또는 텍스트와 같은 컨텍스트에서 추천을 빌드할 수 있습니다. 사용자가 이미 위젯에 입력한 것입니다.

추천 구성

텍스트 입력에 대한 추천 검색어를 구성하려면 있습니다.

  • 추천 목록을 만드는 방법은 다음과 같습니다.
    • 정적 목록 만들기 및/또는
    • 다음을 사용하여 액션 정의 컨텍스트에서 동적으로 목록을 빌드하는 콜백 함수입니다.
  • 추천 목록 또는 작업을 텍스트 입력 위젯에 첨부합니다.

정적 제안 목록과 작업을 모두 제공하면 사용자가 문자를 입력하기 시작할 때까지 정적 목록을 사용합니다. 그러면 콜백 함수가 사용되고 정적 목록이 무시됩니다.

정적 추천

정적인 추천 목록을 제공하려면 다음 작업만 수행하면 됩니다.

  1. Suggestions 만들기 객체를 지정합니다.
  2. addSuggestion()를 사용하여 각 정적 추천을 추가합니다. 또는 addSuggestions().
  3. Suggestions 연결 객체를 TextInput.setSuggestions()를 사용하여 위젯에 추가합니다.

UI는 정적 제안을 추가된 순서대로 표시합니다. UI 또한 대소문자를 구분하지 않는 접두사 일치를 자동으로 수행하고 추천 단어 목록을 표시합니다.

추천 작업

정적 추천 목록을 사용하지 않는 경우 작업을 정의해야 합니다. 를 사용하세요. 다음 단계에 따라 무료 사용 기간을 연장할 수 있습니다.

  1. Action 객체 만들기 콜백 함수와 연결합니다. 정의할 수 있습니다
  2. 위젯의 TextInput.setSuggestionsAction() 호출 함수(Action에 제공) 객체를 지정합니다.
  3. 콜백 함수를 구현하여 추천 목록을 빌드하고 빌드된 SuggestionsResponse 객체를 지정합니다.

UI는 사용자가 사용자가 잠시 동안 타이핑을 멈춘 후에만 작동합니다. 이 콜백 함수는 이 콜백에 대한 정보가 포함된 이벤트 객체를 수신합니다. 카드의 위젯을 엽니다. 자세한 내용은 작업 이벤트 객체 참조하세요.

콜백 함수는 유효한 SuggestionsResponse 표시할 추천 검색어 목록이 포함된 객체를 반환합니다. UI 표시 순서대로 표시됩니다. 정적 목록과 달리 UI는 사용자에 따라 콜백 추천을 자동 필터링하지 않습니다. 있습니다. 이러한 필터링을 사용하려면 텍스트 입력 값을 읽어야 합니다. 이벤트 객체에서 검색하고 목록을 생성할 때 제안사항을 필터링합니다.

다음 Google Workspace 부가기능 코드 스니펫 추천 구성 방법을 보여 줍니다. 두 개의 서로 다른 텍스트 입력 위젯에 있습니다. 첫 번째 위젯에는 정적 목록이 있고 두 번째로 다음과 같이 콜백 함수를 사용합니다.

// Create an input with a static suggestion list.
var textInput1 = CardService.newTextInput()
    .setFieldName('colorInput')
    .setTitle('Color choice')
    .setSuggestions(CardService.newSuggestions()
        .addSuggestion('Red')
        .addSuggestion('Yellow')
        .addSuggestions(['Blue', 'Black', 'Green']));

// Create an input with a dynamic suggestion list.
var action = CardService.newAction()
    .setFunctionName('refreshSuggestions');
var textInput2 = CardService.newTextInput()
    .setFieldName('emailInput')
    .setTitle('Email')
    .setSuggestionsAction(action);

// ...

/**
 *  Build and return a suggestion response. In this case, the suggestions
 *  are a list of emails taken from the To: and CC: lists of the open
 *  message in Gmail, filtered by the text that the user has already
 *  entered. This method assumes the Google Workspace
 *  add-on extends Gmail; the add-on only calls this method for cards
 *  displayed when the user has entered a message context.
 *
 *  @param {Object} e the event object containing data associated with
 *      this text input widget.
 *  @return {SuggestionsResponse}
 */
 function refreshSuggestions(e) {
   // Activate temporary Gmail scopes, in this case so that the
   // open message metadata can be read.
   var accessToken = e.gmail.accessToken;
   GmailApp.setCurrentMessageAccessToken(accessToken);

   var userInput = e && e.formInput['emailInput'].toLowerCase();
   var messageId = e.gmail.messageId;
   var message = GmailApp.getMessageById(messageId);

   // Combine the comma-separated returned by these methods.
   var addresses = message.getTo() + ',' + message.getCc();

   // Filter the address list to those containing the text the user
   // has already entered.
   var suggestionList = [];
   addresses.split(',').forEach(function(email) {
     if (email.toLowerCase().indexOf(userInput) !== -1) {
       suggestionList.push(email);
     }
   });
   suggestionList.sort();

   return CardService.newSuggestionsResponseBuilder()
       .setSuggestions(CardService.newSuggestions()
           .addSuggestions(suggestionList))
       .build();  // Don't forget to build the response!
 }

추천 및 OnChangeAction()

텍스트 입력 위젯은 setOnChangeAction() 위젯이 포커스를 잃을 때마다 실행되는 핸들러 함수가 정의되어 있습니다. 동일한 텍스트 입력에 이 핸들러와 추천이 모두 사용 설정된 경우 다음 규칙은 텍스트 입력 상호작용 동작을 정의합니다.

  1. setOnChangeAction() 핸들러는 추천이 선택된 후 실행됩니다.
  2. 사용자가 Enter 키를 누르는 경우 (또는 그러지 않으면 텍스트 입력에서 포커스를 잃는 경우) setOnChangeAction()은(는) 선택한 제안을 수정하지 않습니다. 다시 트리거됩니다
  3. setOnChangeAction() 사용자가 더 이상 어떠한 추천과도 일치하지 않도록 수정 선택합니다.
  4. 사용자가 추천을 선택하지 않으면 setOnChangeAction()이 트리거됩니다. 텍스트 입력에 포커스가 없을 때