사용자 상호작용을 수신하고 이에 응답

이 페이지에서는 Google Chat 앱이 Google Chat에서 사용자 상호작용을 수신하고 이에 응답하는 방법을 설명합니다.

Chat 앱용 대화형 인터페이스를 빌드하려면 다음 구성요소를 사용합니다.

  • 트리거: Google Chat 사용자가 채팅 앱을 호출할 수 있는 방법입니다(예: 스페이스에 추가하거나 메시지를 전송).
  • 이벤트 객체: Chat 앱이 트리거 또는 UI 상호작용에서 수신하는 데이터입니다.
  • 작업: 메시지 전송, 카드 기반 사용자 인터페이스 반환 등 Chat 앱이 상호작용에 응답할 수 있는 방법입니다.
채팅 앱이 스페이스에 추가됨 트리거에서 이벤트 객체를 수신합니다.
그림 1: 사용자가 스페이스에 채팅 앱을 추가하면 스페이스에 추가됨 트리거가 실행되고 이벤트 객체를 전송합니다. 메시지로 응답하려면 Chat 앱이 이벤트 객체를 처리하고 메시지를 만드는 작업을 반환합니다.

Chat 앱은 다음과 같은 방법으로 인터페이스를 빌드하고 표시할 수 있습니다.

  • 텍스트, 정적 또는 대화형 카드, 액세서리 버튼을 포함할 수 있는 메시지
  • 채팅 앱과의 1:1 채팅 메시지의 홈 탭에 표시되는 홈페이지 (앱 홈)
  • 대화상자: 새 창에서 열리는 카드이며 일반적으로 사용자에게 정보를 제출하라는 메시지를 표시합니다.
  • 링크 미리보기: 외부 서비스에 관한 정보를 미리 보여주는 카드입니다.

기본 요건

사용자 상호작용 작동 방식

사용자가 Chat 앱과 상호작용하면 Google Chat은 구성된 트리거를 호출하고 Chat 앱의 엔드포인트 또는 함수에 이벤트 객체를 전송합니다. Chat 앱은 이벤트 객체를 처리하며 30초 이내에 동기식으로 작업을 반환하거나 Chat API를 사용하여 비동기식으로 응답할 수 있습니다.

다음 다이어그램은 Google Chat 앱이 사용자 상호작용을 처리하고 이에 응답하는 방법을 보여줍니다.

Google Chat 앱이 사용자 상호작용을 처리하는 방식의 아키텍처

트리거

트리거는 사용자가 @멘션이나 앱 명령어 사용과 같은 Chat UI를 사용하여 Chat 앱을 호출하는 구체적인 방법입니다.

다음 표에는 채팅 트리거, 설명, 채팅 앱의 일반적인 응답 방식이 나와 있습니다.

트리거 설명 일반적인 대답
스페이스에 추가됨

사용자가 스페이스에 Chat 앱을 추가하거나 Google Workspace 관리자가 조직의 사용자를 위해 채팅 메시지 스페이스에 Chat 앱을 설치합니다. 관리자가 설치한 Chat 앱에 대해 알아보려면 Google Workspace 관리자 고객센터 문서의 도메인에 Marketplace 앱 설치하기를 참고하세요.

Chat 앱은 앱의 기능과 스페이스의 사용자가 앱과 상호작용하는 방법을 설명하는 온보딩 메시지를 보냅니다.
메시지

사용자는 다음 방법 중 하나로 메시지에서 Chat 앱과 상호작용합니다.

  • Chat 앱을 사용하여 채팅 메시지 (DM) 스페이스에 메시지를 보냅니다.
  • 모든 유형의 스페이스에서 채팅 앱을 @멘션합니다.
  • 링크 미리보기의 URL 패턴과 일치하는 링크가 포함된 메시지를 보냅니다.
  • selectionInput 위젯의 다중 선택 메뉴에 텍스트를 입력합니다.
채팅 앱은 메시지 내용을 기반으로 응답합니다. 예를 들어 Chat 앱은 메시지로 답장하거나, 링크 미리보기 카드를 첨부하거나, 다중 선택 메뉴에서 항목을 제안합니다.
스페이스에서 삭제됨

사용자가 스페이스에서 Chat 앱을 삭제하거나 Google Workspace 관리자가 조직의 사용자를 위해 Chat 앱을 제거합니다.

사용자는 관리자가 설치한 Chat 앱을 삭제할 수 없습니다. 사용자가 이전에 Chat 앱을 설치한 경우 Google Workspace 관리자가 앱을 제거하려고 해도 Chat 앱은 설치된 상태로 유지됩니다.

Chat 앱은 스페이스에 구성된 수신 알림을 삭제하고 (예: 웹훅 삭제) 내부 저장소를 정리합니다. 채팅 앱은 더 이상 스페이스의 구성원이 아니므로 이 트리거에 메시지로 응답할 수 없습니다.
앱 명령

사용자가 채팅 앱 명령어 (예: 슬래시 명령어, 빠른 명령어 또는 메시지 작업)를 호출합니다.

Chat 앱이 명령어에 응답합니다. 예를 들어 메시지로 답장하거나 대화상자를 엽니다.
앱 홈

사용자가 채팅 앱과의 1:1 채팅 메시지(DM) 스페이스에서 홈 탭을 열거나 홈페이지 카드의 위젯과 상호작용합니다.

채팅 앱은 홈페이지 카드(pushCard)를 푸시하거나 표시된 홈페이지 카드(updateCard)를 업데이트하는 RenderActions 객체를 반환합니다.

Google Cloud 콘솔의 Chat API 구성 페이지에서 이러한 트리거의 엔드포인트 또는 콜백 함수를 구성합니다. 단계별 안내는 Google Chat API 구성을 참고하세요.

시작 프롬프트 구성

시작 프롬프트는 사용자가 앱과의 빈 1:1 채팅 메시지를 열 때 채팅 앱의 기능을 발견하는 데 도움이 됩니다. 최대 3개의 시작 프롬프트를 구성할 수 있습니다.

시작 프롬프트를 추가하고 구성하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Chat API 구성 페이지로 이동합니다.

    Chat API 구성 페이지로 이동

  2. 인터랙티브 기능에서 시작 프롬프트를 찾아 프롬프트 추가를 클릭합니다.

  3. 순위 (1~3) 필드에 1~3 사이의 숫자를 입력하여 표시 순서를 지정합니다.

  4. 유형 선택에서 프롬프트의 동작 방식을 선택합니다.

    • 텍스트 프롬프트: 사용자가 프롬프트 칩을 클릭하면 미리 정의된 텍스트로 작성 창을 채웁니다.
    • 명령 프롬프트: 클릭하면 등록된 슬래시 명령어 또는 빠른 명령어를 실행합니다. 추가 인수가 필요한 명령어는 선택할 수 없습니다.
  5. 유형 선택에 따라 프롬프트를 구성합니다.

    • 텍스트 프롬프트를 선택한 경우:

      1. 제목에 칩에 표시되는 프롬프트 제목을 입력합니다 (최대 30자).
      2. 프롬프트 텍스트에 작성 창에 입력된 텍스트를 입력합니다 (최대 60자).
      3. 선택사항: 다른 언어를 사용하는 사용자를 위해 현지화된 제목과 텍스트를 추가합니다.
      4. 현지화된 프롬프트에서 언어 추가를 클릭합니다.
      5. 언어에서 드롭다운을 통해 지원되는 언어를 선택합니다.
      6. 현지화된 제목에 현지화된 제목을 입력합니다 (영문 기준 최대 30자).
      7. 현지화된 프롬프트 텍스트에 현지화된 프롬프트 텍스트를 입력합니다 (최대 60자).
      8. 필요에 따라 언어를 추가하려면 이 단계를 반복합니다.
    • 명령 프롬프트를 선택한 경우:

      1. 슬래시 명령어 / 빠른 명령어에서 드롭다운에서 명령어를 선택합니다.
  6. 완료를 클릭한 다음 페이지 하단의 저장을 클릭합니다.

서비스에 대한 HTTP 호출 재시도 처리

서비스에 대한 HTTPS 요청이 실패하는 경우 (예: 제한 시간, 임시 네트워크 오류 또는 2xx가 아닌 HTTPS 상태 코드) Google Chat에서 몇 분 이내에 몇 번 전송을 재시도할 수 있습니다 (보장되지는 않음). 따라서 특정 상황에서 Chat 앱이 동일한 이벤트를 여러 번 수신할 수 있습니다. 요청이 성공적으로 완료되었지만 유효하지 않은 응답 페이로드를 반환하는 경우 Google Chat은 요청을 다시 시도하지 않습니다.

이벤트 객체

Chat 앱은 Chat 트리거가 실행되거나 Chat 사용자가 Chat 앱의 UI와 상호작용할 때 (예: 버튼을 클릭하거나 대화상자를 제출할 때) 이벤트 객체를 수신합니다. 이벤트 객체를 사용하면 상호작용 데이터를 사용하여 UI에 응답하거나 UI를 업데이트할 수 있습니다.

이벤트 객체 페이로드

각 Chat 이벤트 객체에는 호스트 및 플랫폼 세부정보 (hostApp: "CHAT", clientPlatform, userLocale, userTimezone, parameters, formInputs)가 포함된 commonEventObject과 Chat 관련 컨텍스트가 포함된 chat 객체가 포함됩니다.

  • 앱 홈 트리거 (사용자가 채팅 앱과의 1:1 채팅 메시지에서 홈 탭을 여는 경우)의 경우 chat 객체에는 결합 payload 필드 없이 chat.user 및 chat.eventTime이 포함됩니다. 사용자가 홈페이지 카드의 버튼을 클릭하면 이벤트 객체에 commonEventObject.parameters와 함께 chat.buttonClickedPayload가 포함됩니다 (카드가 양식 입력을 포함하는 경우 commonEventObject.formInputs도 포함됨).
  • 스페이스 및 메시지 상호작용 (스페이스에 추가됨, 메시지, 스페이스에서 삭제됨, 앱 명령 또는 버튼 및 위젯 상호작용)의 경우 chat 객체에는 chat.user, chat.space, chat.eventTime 및 해당 상호작용 페이로드가 포함됩니다.
    • messagePayload: 사용자가 메시지를 보낼 때 space, message, configCompleteRedirectUri를 포함합니다.
    • addedToSpacePayload: 채팅 앱이 스페이스에 추가될 때 space, interactionAdd, configCompleteRedirectUri를 포함합니다.
    • removedFromSpacePayload: 채팅 앱이 스페이스에서 삭제될 때 space을 포함합니다.
    • buttonClickedPayload: 사용자가 카드 또는 대화상자에서 버튼을 클릭할 때 space, message, isDialogEvent, dialogEventType를 포함합니다.
    • widgetUpdatedPayload: 사용자가 외부 데이터 소스가 있는 다중 선택 메뉴에 입력하는 등 위젯과 상호작용할 때 space을 포함합니다.
    • appCommandPayload: 사용자가 앱 명령어를 호출할 때 space, message, appCommandMetadata, isDialogEvent, dialogEventType, configCompleteRedirectUri를 포함합니다.

Chat 및 기타 Google Workspace 애플리케이션 내의 부가기능 이벤트 객체에 대해 알아보려면 이벤트 객체를 참고하세요.

대답 제공

이 섹션에서는 Chat 앱이 작업을 사용하여 사용자 상호작용에 동기식으로 응답하는 방법을 설명합니다.

작업으로 응답하려면 Chat 앱이 30초 이내에 응답해야 하며 응답은 상호작용이 발생한 스페이스에 적용되어야 합니다. 이러한 동기 응답에는 인증이 필요하지 않습니다. Chat 앱에 30초 이상이 필요하거나 스페이스 외부에서 작동해야 하는 경우 인증을 설정하고 Google Chat API를 사용하여 비동기식으로 응답하세요.

사용자 상호작용에 동기식으로 응답하려면 Chat 앱이 수신되는 이벤트 객체를 처리하고 다음 JSON 객체 중 하나를 반환합니다.

  • DataActions: chatDataActionMarkup을 사용하여 채팅 메시지 (CreateMessageAction, UpdateMessageAction)를 만들거나 업데이트하거나 링크 미리보기 (UpdateInlinePreviewAction)를 첨부합니다.
  • RenderActions: 홈페이지 또는 대화상자 (pushCard, updateCard, endNavigation: "CLOSE_DIALOG")를 만들거나 업데이트하거나 닫거나 다중 선택 메뉴 (modifyCard)에 동적 입력 제안을 제공합니다.
  • AuthorizationError: 기본 승인 카드 (basic_authorization_prompt)를 사용하여 사용자에게 외부 서비스에 로그인하거나 인증하도록 메시지를 표시합니다.

다음 표는 Chat 앱이 작업으로 응답하는 방법을 보여줍니다. Chat 앱은 JSON 객체를 직접 반환하거나 Apps Script의 AddOnResponseService 및 CardService을 사용하여 응답을 빌드할 수 있습니다.

채팅 앱 응답 반환할 필수 작업 (JSON) 반환에 필요한 작업 (Apps Script)
메시지 보내기 또는 메시지 업데이트 DataActions(createMessageAction 또는 updateMessageAction) DataActionsResponse
Chat 사용자가 스페이스에서 보낸 메시지의 링크 미리보기 DataActions(updateInlinePreviewAction) DataActionsResponse
채팅 메시지의 홈 탭에서 홈페이지를 렌더링하거나 업데이트합니다. RenderActions(pushCard 또는 updateCard) ActionResponse
대화상자를 열거나 업데이트하거나 닫습니다. RenderActions(pushCard, updateCard, endNavigation: "CLOSE_DIALOG") ActionResponse
카드 또는 대화상자에서 정보를 수집하려면 사용자가 다중 선택 메뉴에 입력한 내용을 기반으로 선택 항목을 제안합니다. RenderActions(modifyCard) ActionResponse
외부 서비스의 구성 또는 승인을 요청합니다. AuthorizationError(basic_authorization_prompt) AuthorizationException

메시지로 응답하기

채팅 앱은 다음 트리거 또는 상호작용에 메시지로 응답할 수 있습니다.

  • 메시지 트리거: 사용자가 Chat 앱을 @멘션하거나 직접 메시지를 보내는 경우
  • 스페이스에 추가됨 트리거: 사용자가 Google Workspace Marketplace에서 Chat 앱을 설치하거나 스페이스에 추가하는 경우
  • 앱 명령어가 트리거되는 경우(예: 사용자가 슬래시 명령어 또는 빠른 명령어를 호출하는 경우)
  • 메시지 또는 대화상자의 카드에서 버튼 클릭 예를 들어 사용자가 정보를 입력하고 제출을 클릭하는 경우입니다.

채팅 앱은 메시지에 다음 중 하나를 포함할 수 있습니다.

  • 하이퍼링크, @멘션, 그림 이모티콘이 포함된 텍스트 메일에서 서식 지정하기를 참고하세요.
  • 메시지에 표시되거나 새 창에서 대화상자로 열릴 수 있는 카드 하나 이상 Google Chat 앱용 카드 빌드하기를 참고하세요.
  • 메일의 텍스트나 카드 뒤에 표시되는 버튼인 하나 이상의 액세서리 위젯

메시지로 답장하려면 CreateMessageAction 객체와 함께 DataActions를 반환하세요.

{
  "hostAppDataAction": {
    "chatDataAction": {
      "createMessageAction": {
        "message": <var>MESSAGE</var>
      }
    }
  }
}

MESSAGE를 Chat API의 Message 리소스로 바꿉니다.

다음 예시에서 Chat 앱은 DataActions로 스페이스에 추가됨 트리거에 응답하여 스페이스에 추가될 때마다 온보딩 문자 메시지를 만들고 전송합니다.

Node.js

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} req The request object from Google Chat.
 * @param {Object} res The response object from the Chat app.
 */
exports.cymbalApp = function cymbalApp(req, res) {
  const chatEvent = req.body.chat;
  // Send an onboarding message when added to a Chat space
  if (chatEvent.addedToSpacePayload) {
    res.json({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
      text: 'Hi, Cymbal at your service. I help you manage your calendar ' +
        'from Google Chat. Take a look at your schedule today by typing ' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
        'To learn what else I can do, type `/help`.'
    }}}}});
  }
};

Python

from flask import Flask, request, json
app = Flask(__name__)

@app.route('/', methods=['POST'])
def cymbal_app():
  """Sends an onboarding message when the Chat app is added to a space.

  Returns:
    Mapping[str, Any]: The response object from the Chat app.
  """
  chat_event = request.get_json()["chat"]
  if "addedToSpacePayload" in chat_event:
    return json.jsonify({ "hostAppDataAction": { "chatDataAction": {
      "createMessageAction": { "message": {
        "text": 'Hi, Cymbal at your service. I help you manage your calendar ' +
        'from Google Chat. Take a look at your schedule today by typing ' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
        'To learn what else I can do, type `/help`.'
      }}
    }}})

자바

@SpringBootApplication
@RestController
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }

  /*
   * Sends an onboarding message when the Chat app is added to a space.
   *
   * @return The response object from the Chat app.
   */
  @PostMapping("/")
  @ResponseBody
  public GenericJson onEvent(@RequestBody JsonNode event) throws Exception {
    JsonNode chatEvent = event.at("/chat");
    if (!chatEvent.at("/addedToSpacePayload").isEmpty()) {
      return new GenericJson() { {
        put("hostAppDataAction", new GenericJson() { {
          put("chatDataAction", new GenericJson() { {
            put("createMessageAction", new GenericJson() { {
              put("message", new Message().setText(
                "Hi, Cymbal at your service. I help you manage your calendar " +
                "from Google Chat. Take a look at your schedule today by typing " +
                "`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. " +
                "To learn what else I can do, type `/help`."
              ));
            } });
          } });
        } });
      } };
    }
    return new GenericJson();
  }
}

Apps Script

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} event The event object from Google Chat.
 * @return {Object} Response from the Chat app.
 */
function onAddedToSpace(event) {
  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    text: 'Hi, Cymbal at your service. I help you manage your calendar ' +
          'from Google Chat. Take a look at your schedule today by typing ' +
          '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
          'To learn what else I can do, type `/help`.'
  }}}}};
}

코드 샘플은 다음 문자 메시지를 반환합니다.

온보딩 메시지의 예

메시지 업데이트

채팅 앱은 전송한 메시지를 업데이트할 수도 있습니다. 예를 들어 Chat 앱은 사용자가 대화상자를 제출하거나 메시지의 카드에 있는 버튼을 클릭한 후 메시지를 업데이트할 수 있습니다.

상호작용에 대한 응답으로 Chat 앱 메시지를 업데이트하려면 UpdateMessageAction와 함께 DataActions를 반환합니다.

{
  "hostAppDataAction": {
    "chatDataAction": {
      "updateMessageAction": {
        "message": <var>MESSAGE</var>
      }
    }
  }
}

MESSAGE를 Chat API의 Message 리소스로 바꿉니다.

또한 채팅 앱은 사용자가 보낸 메시지를 업데이트하여 updateInlinePreviewAction를 사용하여 링크 미리보기 카드를 첨부할 수 있습니다. 자세한 내용은 링크 미리보기를 참고하세요.

Google Chat API를 사용하여 비동기식으로 응답

작업을 동기식으로 반환하는 대신 Chat 앱이 Google Chat API를 호출하여 상호작용에 응답하거나 사전 대응 메시지를 보내야 할 수 있습니다. 예를 들어 Chat 앱은 다음 작업을 실행하기 위해 Google Chat API를 호출해야 합니다.

  • 30초 후에 상호작용에 응답합니다 (예: 장기 실행 작업을 완료한 후).
  • 일정에 따라 메시지를 보내거나 외부 리소스 변경에 관한 알림을 보냅니다.
  • 상호작용이 발생한 스페이스 외부에서 작업을 실행합니다.
  • 스페이스 나열 또는 스페이스에 멤버 추가와 같이 동기 작업으로 사용할 수 없는 작업을 Chat에서 실행합니다.
  • Chat 사용자를 대신하여 작업을 실행합니다 (사용자 인증 필요).

30초 후에 상호작용에 응답할 때 Chat 앱이 응답하지 않는다는 사용자 대상 오류 메시지가 표시되지 않도록 하려면 빈 응답을 반환하여 30초 이내에 이벤트 객체의 수신을 확인해야 합니다.

Node.js

async function onEvent(req, res) {
  // Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return res.send({});
};

Python

def on_event(event) -> dict:
  # Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return {}

자바

public String onEvent(JsonNode event) {
  // Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return "{}";
}

Apps Script

function onEvent(event) {
  // Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return null;
}

Chat API를 사용하여 메시지를 보내려면 인증을 설정하고 spaces.messages.create 메서드를 호출합니다. 단계는 메시지 보내기를 참고하세요. 추가 Chat API 메서드 사용에 관한 가이드는 Chat API 개요를 참고하세요.

부가기능이 아닌 채팅 앱: 사용자 상호작용 수신 및 응답

Google Workspace 부가기능이 아닌 채팅 앱은 Google Workspace 부가기능 이벤트 객체 (EventObject) 대신 Chat API 상호작용 이벤트 (Event)를 수신하고, 작업 대신 Message 리소스를 반환하여 응답합니다.

부가기능이 아닌 채팅 앱을 Google Workspace 부가기능 프레임워크로 업그레이드하려면 Google Chat 앱을 Google Workspace 부가기능으로 변환을 참고하세요.

상호작용 이벤트 유형

각 사용자 상호작용에 대해 Google Chat은 부가기능이 아닌 채팅 앱에 유형이 eventType 필드로 표시되는 Event 객체를 전송합니다.

사용자 상호작용 eventType 부가기능이 아닌 채팅 앱의 일반적인 응답
사용자가 채팅 앱에 메시지를 보냅니다. 예를 들어 채팅 앱을 @멘션하거나 슬래시 명령어를 사용합니다. MESSAGE 채팅 앱은 메시지 내용을 기반으로 응답합니다. 예를 들어 채팅 앱은 슬래시 명령어 /about에 채팅 앱이 할 수 있는 작업을 설명하는 메시지로 답장합니다.
사용자가 스페이스에 Chat 앱을 추가합니다. ADDED_TO_SPACE Chat 앱은 앱의 기능과 스페이스의 사용자가 앱과 상호작용하는 방법을 설명하는 온보딩 메시지를 보냅니다.
사용자가 스페이스에서 Chat 앱을 삭제합니다. REMOVED_FROM_SPACE Chat 앱은 스페이스에 구성된 수신 알림을 삭제하고 (예: 웹훅 삭제) 내부 저장소를 정리합니다.
사용자가 채팅 앱 메시지, 대화상자 또는 홈페이지의 카드에 있는 버튼을 클릭합니다. CARD_CLICKED Chat 앱은 사용자가 제출한 데이터를 처리하고 저장하거나 다른 카드를 반환합니다.
사용자가 1:1 메시지에서 홈 탭을 클릭하여 Chat 앱의 홈페이지를 엽니다. APP_HOME 채팅 앱이 홈페이지에서 정적 또는 대화형 카드를 반환합니다.
사용자가 Chat 앱의 홈페이지에서 양식을 제출합니다. SUBMIT_FORM Chat 앱은 사용자가 제출한 데이터를 처리하고 저장하거나 다른 카드를 반환합니다.
사용자가 빠른 명령어를 사용하여 명령어를 호출합니다. APP_COMMAND 채팅 앱은 호출된 명령어를 기반으로 응답합니다. 예를 들어 Chat 앱은 About 명령어에 Chat 앱이 할 수 있는 작업을 설명하는 메시지로 답합니다.

지원되는 모든 상호작용 이벤트와 JSON 페이로드의 예시를 보려면 Chat 앱 상호작용 이벤트 유형 및 EventType 참조 문서를 참고하세요.

대화상자의 상호작용 이벤트

부가기능이 아닌 채팅 앱에서 대화상자를 여는 경우 상호작용 이벤트에는 응답을 처리하는 데 사용할 수 있는 다음 추가 정보가 포함됩니다.

  • isDialogEvent 필드는 true으로 설정됩니다.
  • DialogEventType(REQUEST_DIALOG, SUBMIT_DIALOG 또는 CANCEL_DIALOG)은 상호작용으로 인해 대화상자가 열리는지, 대화상자에서 정보가 제출되는지, 대화상자가 닫히는지 명확하게 설명합니다.

부가기능이 아닌 Chat 앱이 상호작용 이벤트를 수신하도록 구성

  1. Google Cloud 콘솔에서 Chat API 구성 페이지로 이동합니다.

    Chat API 구성 페이지로 이동

  2. 대화형 기능에서 이 Chat 앱을 Google Workspace 부가기능으로 빌드를 선택 해제하고 기능, 단일 연결 설정 엔드포인트 (HTTP 엔드포인트 URL, Apps Script, Cloud Pub/Sub 주제 이름 또는 Dialogflow), 명령어, 시작 프롬프트, 링크 미리보기, 공개 상태를 구성합니다.

  3. 저장을 클릭합니다.

부가기능이 아닌 Chat 앱에서 메시지로 답장하기

부가기능이 아닌 Chat 앱에서 동기식으로 응답하려면 Message 객체를 직접 반환하세요. 다음 예에서는 문자 메시지로 ADDED_TO_SPACE 상호작용 이벤트에 응답합니다.

Node.js

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} req The event object from Chat API.
 * @param {Object} res The response object from the Chat app.
 */
exports.cymbalApp = function cymbalApp(req, res) {
  // Send an onboarding message when added to a Chat space
  if (req.body.type === 'ADDED_TO_SPACE') {
    res.json({
      'text': 'Hi, Cymbal at your service. I help you manage your calendar ' +
        'from Google Chat. Take a look at your schedule today by typing ' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To ' +
        'learn what else I can do, type `/help`.'
    });
  }
};

Python

from flask import Flask, request, json
app = Flask(__name__)

@app.route('/', methods=['POST'])
def cymbal_app():
  """Sends an onboarding message when the Chat app is added to a space.

  Returns:
    Mapping[str, Any]: The response object from the Chat app.
  """
  event = request.get_json()
  if event['type'] == 'ADDED_TO_SPACE':
    return json.jsonify({
      'text': 'Hi, Cymbal at your service. I help you manage your calendar ' +
      'from Google Chat. Take a look at your schedule today by typing ' +
      '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To ' +
      'learn what else I can do, type `/help`.'
    })
  return json.jsonify({})

자바

@SpringBootApplication
@RestController
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }

  /*
   * Sends an onboarding message when the Chat app is added to a space.
   *
   * @return The response object from the Chat app.
   */
  @PostMapping("/")
  @ResponseBody
  public Message onEvent(@RequestBody JsonNode event) {
    switch (event.get("type").asText()) {
      case "ADDED_TO_SPACE":
        return new Message().setText(
          "Hi, Cymbal at your service. I help you manage your calendar " +
          "from Google Chat. Take a look at your schedule today by typing " +
          "`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. " +
          "To learn what else I can do, type `/help`.");
      default:
        return new Message();
    }
  }
}

Apps Script

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app.
 */
function onAddToSpace(event) {
  return {
    'text': 'Hi, Cymbal at your service. I help you manage your calendar ' +
      'from Google Chat. Take a look at your schedule today by typing ' +
      '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To learn ' +
      'what else I can do, type `/help`.'
  };
}