SAP용 Google Chat 앱

이 문서에서는 ABAP SDK for Google Cloud 온프레미스 또는 클라우드 버전을 사용하여 SAP용 Google Chat 앱을 빌드하기 위한 참조 아키텍처를 설명합니다. Chat 앱을 사용하면 SAP 프로세스와 워크플로를 Google Chat으로 가져와 사용자가 Google Workspace 내에서 알람 보고, 워크플로 알림, 시스템 알림, 작업 완료 업데이트와 같은 알림을 받을 수 있습니다.

이 문서의 주요 대상에는 ABAP 개발자, SAP 솔루션 설계자, 클라우드 설계자가 포함됩니다. 이 문서에서는 사용자가 Google Workspace에서 사용할 수 있는 Chat 앱에 익숙하다고 가정합니다.

아키텍처

다음 다이어그램은 SAP ERP 시스템에서 Chat 스페이스로 메시지를 보낼 수 있는 SAP용 단방향 Chat 앱을 구현하기 위한 참조 아키텍처를 보여줍니다.

SAP용 Chat 앱

이 참조 아키텍처에는 다음 구성요소가 포함됩니다.

# 구성요소 세부정보
1 SAP 프로세스 또는 트랜잭션 사용자 알림을 전송해야 하는 모든 SAP 프로세스 또는 트랜잭션 Google Chat을 통한 커뮤니케이션을 트리거하기 위한 시작점입니다.
2 ABAP SDK for Google Cloud SAP 시스템과 Google Cloud 간의 다리 역할을 하여 Google Chat API와의 안전한 HTTPS 통신을 지원합니다.
3 Google Chat 앱 프로젝트 Google Chat API를 사용 설정하고 Chat 앱을 구성한 Google Cloud 프로젝트입니다.
4 Chat 공간

SAP 시스템이 사용자와 통신할 수 있는 Google Chat 내 전용 공간입니다.

Chat 앱은 이 스페이스에 있으며 Google Chat API를 통해 SAP 시스템의 실시간 정보 스트림을 제공합니다.

사용 제품

이 참조 아키텍처에는 다음과 같은 Google 제품이 사용됩니다.

  • ABAP SDK for Google Cloud: SAP 시스템을 Google Chat과 같은 Google Cloud 서비스에 연결하는 ABAP 애플리케이션을 개발하는 데 도움이 됩니다.
  • Google Chat: 대화형 공동작업 Chat 앱을 만들어 커뮤니케이션과 생산성을 개선할 수 있습니다.

사용 사례

단방향 Chat 앱은 상호작용이 불가능하며 Chat 스페이스 사용자에게 메시지를 보낼 수 있지만 사용자는 Chat 앱에 응답할 수 없습니다. 다음 다이어그램은 단방향 채팅 앱의 채팅 패턴을 보여줍니다.

Chat 앱 패턴

다음 목록은 SAP용 Google Chat의 몇 가지 사용 사례를 보여줍니다.

  • 워크플로 이벤트 알림: 워크플로 프로세스에 포함된 여러 단계에 대해 Chat 앱에 메시지를 전송하여 Chat 공간에 있는 특정 사용자에게 알릴 수 있습니다. 예를 들어 사용자가 구매 주문을 승인하거나 거부합니다.

  • 시스템 알림: 시스템 관리자가 다양한 시스템 기준점에 도달했음을 알리는 알림을 보낼 수 있는 채팅 공간을 만들 수 있습니다. 예를 들어 디스크 공간 사용량, 장기 실행 작업, 캐시 잠금 또는 라이선스 만료가 여기에 해당합니다.

  • 작업 상태 업데이트: 장기 실행 맞춤 작업이 완료되고 후처리 작업을 시작할 때까지 기다리는 사용자 집합에 작업 업데이트를 보낼 수 있습니다.

설계 고려사항

사용 사례에 맞게 Chat 앱을 설계할 때는 설계 결정에 영향을 줄 수 있는 여러 요소가 있습니다. 이 섹션에서는 이 참조 아키텍처를 사용하여 보안, 개인 정보 보호, 규정 준수, 비용에 대한 특정 요구사항을 충족하는 아키텍처를 개발하는 데 도움이 되는 안내를 제공합니다.

Google Chat 앱 구성

  • Chat 앱 이름: Chat 앱의 명확하고 의미 있는 이름을 지정합니다. 원활한 사용자 환경을 위해 Chat 앱의 이름이 기능이나 통합된 서비스를 정확하게 반영해야 합니다.

  • 시간대: Chat 스페이스는 여러 시간대에 속한 사용자가 공유할 수 있습니다. 따라서 스페이스의 모든 사용자에게 편리한 시간에 메시지를 전송하도록 Chat 앱을 구성하는 것이 중요합니다. 또는 중요한 알림이나 알림의 경우 공유된 시간대를 사용하는 Chat 스페이스의 구성원을 지정하고 Chat 앱에서 메시지를 보낼 수 있는 스페이스를 결정하는 로직을 빌드할 수 있습니다.

보안, 개인정보 보호, 규정 준수

기밀 유지를 위해 채팅 공간 내에서 고객 연락처 세부정보, IBAN, 기타 알아야 하는 기타 데이터와 같은 민감한 정보의 공유에 대해 엄격한 제어를 구현하는 것이 중요합니다. 또한 Chat 앱이 추가된 Chat 스페이스에 신규 사용자가 추가될 때는 이 활동을 적절하게 관리할 수 있도록 명확한 규정을 마련하는 것이 중요합니다.

Cloud Data Loss Prevention (DLP) API를 사용하여 메시지 콘텐츠의 민감도를 낮추는 것도 고려해 볼 수 있습니다. DLP API를 사용하여 SAP에서 민감한 엔터프라이즈 데이터를 보호하는 방법에 관한 자세한 내용은 DLP API를 사용한 SAP의 데이터 보호를 참고하세요.

보안을 위해 Google Workspace 관리자가 Google 권장 권장사항을 준수하는지 확인하세요.

할당량 및 한도

Google Chat API는 공유 서비스이므로 할당량과 제한사항이 적용됩니다. 할당량을 초과하면 429: Too many requests HTTP 상태 코드 응답이 수신됩니다. 할당량 및 한도에 대한 자세한 내용은 사용량 한도를 참고하세요.

Google Chat API 자체에는 사용 요금이 없지만 Google Chat은 Google Workspace 제품입니다. 번들로 제공되는 생산성 도구 모음인 Google Workspace는 Gmail, Docs, Sheets, Slides, Google Chat 앱 등을 포함합니다. 가격 구조는 전체적으로 설정되어 있으므로 개별 구성요소를 선택하여 구매할 수 없습니다. 요금에 관한 자세한 내용은 Google Workspace 요금을 참고하세요.

설계 대안

이 문서에서는 ABAP SDK for Google Cloud의 온프레미스 또는 클라우드 버전에 중점을 두고 있지만 ABAP SDK for Google Cloud의 SAP BTP 버전을 사용하여 유사한 결과를 얻을 수 있습니다. 제공된 리소스를 조정하여 SAP BTP 환경 내에서 유사한 솔루션을 빌드할 수 있습니다.

시작하기 전에

이 참조 아키텍처를 기반으로 솔루션을 구현하기 전에 다음 기본 요건을 완료했는지 확인하세요.

Google Chat 앱 구성

  1. 'Google Chat API'를 검색하고 Google Chat API를 클릭한 다음 관리를 클릭합니다.

    Chat API로 이동

  2. 구성을 클릭하고 Google Chat 앱을 설정합니다.

    1. 앱 이름Quickstart SAP App를 입력합니다.
    2. 아바타 URLhttps://developers.google.com/chat/images/quickstart-app-avatar.png를 입력합니다.
    3. 설명Quickstart app for SAP을 입력합니다.
  3. 양방향 기능을 사용 중지합니다.

  4. 저장을 클릭합니다.

Google Chat 앱 인증 설정

Google Chat 앱에 인증하는 방법에는 앱 자체 또는 사용자라는 두 가지가 있습니다.

앱에서 사용자의 직접적인 상호작용 없이 시스템 알림을 보내는 등의 자동화된 작업을 실행해야 하는 경우 서비스 계정을 사용합니다. 앱이 사용자를 대신하여 작업하도록 하려면(예: 특정 사용자를 대신하여 메시지 보내기) 사용자 인증이 필요합니다. 이 이중 인증 접근 방식은 앱이 Google Chat과 상호작용하는 방식을 유연하게 제어할 수 있도록 지원합니다.

ABAP SDK for Google Cloud를 사용하면 두 가지 인증 유형을 모두 설정할 수 있습니다. Google Chat 앱의 인증을 설정하는 방법에 관한 자세한 내용은 다음을 참고하세요.

Google Chat API 메서드 및 지원되는 승인 범위에 관한 자세한 내용은 Chat 앱 및 Google Chat API 요청 인증 및 승인하기를 참고하세요.

이 문서에 설명된 참조 아키텍처는 Chat 앱으로 인증을 사용하고 인증에 액세스 토큰을 사용합니다.

Chat 앱으로 인증을 설정하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 OAuth 동의 화면을 구성하고 범위를 선택합니다.
  2. Google Cloud 콘솔에서 서비스 계정을 만듭니다.
  3. 선택사항: 서비스 계정에 역할을 할당하여 Google Cloud 프로젝트 리소스에 대한 액세스 권한을 부여합니다. 자세한 내용은 서비스 계정에 대한 액세스 관리를 참고하세요.
  4. SAP 시스템에서 다음 세부정보를 사용하여 클라이언트 키를 구성합니다.

    필드 설명
    Google Cloud 키 이름 클라이언트 키 구성의 이름을 지정합니다. 예를 들면 ABAP_SDK_CHAT입니다.
    Google Cloud 서비스 계정 이름

    Google Chat API 액세스 권한을 부여한 서비스 계정의 이름을 지정합니다. 예를 들면 sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com입니다.

    Google Cloud 범위 API 액세스 범위(https://www.googleapis.com/auth/chat.bot)를 지정합니다.
    Google Cloud 프로젝트 식별자 사용 설정된 Google Chat API가 포함된 Google Cloud 프로젝트의 ID를 지정합니다.
    명령어 이름 이 입력란은 비워둡니다.
    승인 클래스

    적절한 승인 클래스를 지정합니다.

    • 액세스 토큰을 사용하여 인증하는 경우: /GOOG/CL_AUTH_GOOGLE
    • JWT를 사용한 인증의 경우: /GOOG/CL_AUTH_JWT
    토큰 캐싱

    Google Cloud에서 검색된 액세스 토큰이 캐시될지 여부를 결정하는 플래그입니다.

    Google Cloud에 대한 연결을 구성하고 테스트한 후 토큰 캐싱을 사용 설정하는 것이 좋습니다. 토큰 캐싱에 대한 자세한 내용은 토큰 캐싱 사용 설정을 참조하세요.

    토큰 새로고침 시간(초) 액세스 토큰이 만료되기 전에 새로고침해야 하는 시간(초)입니다. 기본값은 3500입니다.
    승인 매개변수 1 이 입력란은 비워둡니다.
    승인 매개변수 2 이 입력란은 비워둡니다.

인증을 설정하는 자세한 단계에 관한 내용은 액세스 토큰을 사용하여 인증 또는 JSON 웹 토큰을 사용하여 인증을 참고하세요.

스페이스에 Google Chat 앱 추가하기

  1. Google Chat 앱 또는 Gmail 앱을 엽니다.
  2. Chat 스페이스에 Chat 앱을 추가합니다. 단계에 관한 자세한 내용은 대화 또는 스페이스에 앱 추가하기를 참고하세요.

ABAP 환경에서 메시지 보내기

Google Chat 및 Chat 앱은 JSON 기반 메시지 형식을 사용하며 각 메시지에는 사용자 ID, 스타일, 콘텐츠와 같은 세부정보가 포함됩니다. 채팅 앱은 다음 유형의 메시지를 보낼 수 있습니다.

  • 텍스트 메시지: 텍스트 메시지에는 제한된 텍스트 형식이 적용된 일반 텍스트 콘텐츠가 포함됩니다.
  • 카드 메시지: 카드 메시지는 스페이스에 표시할 카드의 형식, 콘텐츠, 동작을 정의합니다. 예를 들어 카드 메시지에는 사용자로부터 정보를 수집하는 대화상자를 여는 링크가 포함된 버튼이 포함될 수 있습니다.

Google Chat 메시지에 대한 자세한 내용은 Google Chat 메시지 개요를 참고하세요.

ABAP SDK for Google Cloud를 사용하여 SAP 시스템에서 Chat 스페이스로 메시지를 보내려면 /GOOG/CL_CHAT_V1 클래스의 CREATE_MESSAGES 메서드를 사용합니다.

SMS 보내기

다음 코드 샘플은 SAP 시스템에서 Chat 스페이스로 텍스트 메시지를 보내는 방법을 보여줍니다.

REPORT zsend_text_message.

DATA lv_client_key TYPE /goog/keyname.
DATA ls_input      TYPE /goog/cl_chat_v1=>ty_072.
DATA lv_space_id   TYPE string.

lv_client_key = 'CLIENT_KEY'.
ls_input-text = 'TEXT_MESSAGE'.
lv_space_id   = 'SPACE_ID'.

TRY.
    DATA(lo_chat) = NEW /goog/cl_chat_v1( iv_key_name = lv_client_key ).
  CATCH /goog/cx_sdk INTO DATA(lo_excp).
    " Handle exception here
ENDTRY.

TRY.
    lo_chat->create_messages( EXPORTING iv_p_spaces_id = lv_space_id
                                        is_input       = ls_input
                              IMPORTING ev_ret_code    = DATA(return_code)
                                        ev_err_text    = DATA(error_text)
                                        es_err_resp    = DATA(err_resp) ).
  CATCH /goog/cx_sdk INTO lo_excp.
    " Handle exception here
ENDTRY.

IF /goog/cl_chat_v1=>is_success( iv_code = return_code ) = abap_true.
  " Handle success here
ELSE.
  " Handle error here
ENDIF.

다음을 바꿉니다.

  • CLIENT_KEY: 인증을 위해 구성된 클라이언트 키입니다.
  • TEXT_MESSAGE: Chat 스페이스로 전송할 텍스트 메시지입니다.
  • SPACE_ID: 채팅 스페이스의 고유 식별자 ID입니다. Chat 스페이스 ID를 찾으려면 웹브라우저에서 Google Chat 스페이스를 엽니다. 다음 스크린샷과 같이 URL에서 ID를 찾을 수 있습니다.

    Chat 앱 스페이스 ID

카드 메시지 보내기

카드는 시각적으로 매력적이고 양방향적인 방식으로 정보를 제공하여 전반적인 사용자 환경을 개선합니다. 제목, 이미지, 버튼 등의 요소를 포함할 수 있으므로 사용자가 채팅 인터페이스 내에서 바로 콘텐츠와 상호작용할 수 있습니다. 예를 들어 구매 주문 워크플로 카드에는 다음 정보가 포함될 수 있습니다.

  • 구매주문서 번호
  • 문서 날짜
  • 문서 유형
  • 공급업체
  • 배송 유형

ABAP SDK for Google Cloud를 사용하여 카드를 개발하려면 GitHub 저장소의 맞춤 인터페이스 ZGOOG_IF_CHAT_CARDS_V2를 사용하세요. 이 맞춤 인터페이스에는 카드를 만드는 데 필요한 ABAP 유형이 포함되어 있습니다. 다음과 같은 주문 워크플로 예시 카드와 같은 카드를 만들 수 있습니다.

Chat 앱 스페이스 ID

카드 메시지 설계 방법에 관한 자세한 내용은 Google Chat 앱용 카드 빌드를 참고하세요.

다음 코드 샘플은 SAP 시스템에서 Chat 스페이스로 카드 메시지를 보내는 방법을 보여줍니다.

REPORT zsend_card_message.

DATA lv_client_key TYPE /goog/keyname.
DATA ls_input      TYPE /goog/cl_chat_v1=>ty_072.
DATA lv_space_id   TYPE string.
DATA ls_widget     TYPE zgoog_if_chat_cards_v2=>ty_widget.
DATA ls_section    TYPE zgoog_if_chat_cards_v2=>ty_sections.
DATA ls_card_v2    TYPE zgoog_if_chat_cards_v2=>ty_cards_v2.
DATA ls_card       TYPE /goog/cl_chat_v1=>ty_012.
DATA ls_rb         TYPE zgoog_if_chat_cards_v2=>ty_selection_item.
DATA ls_button     TYPE zgoog_if_chat_cards_v2=>ty_button.
DATA ls_param      TYPE zgoog_if_chat_cards_v2=>ty_action_parameters.

lv_client_key = 'CLIENT_KEY'.
lv_space_id   = 'SPACE_ID'.

TRY.

    DATA(lo_chat) = NEW /goog/cl_chat_v1( iv_key_name = lv_client_key ).
  CATCH /goog/cx_sdk INTO DATA(lo_excp).
    " Handle exception here
ENDTRY.

" Building the Card Structure

" Set the header
ls_card_v2-header = VALUE zgoog_if_chat_cards_v2=>ty_header(
                              title     = 'Purchase Order Workflow - Level 2 Approval Alert!'
                              subtitle  = 'PO Number: 8700000034'
                              image_url = 'https://developers.google.com/chat/images/quickstart-app-avatar.png' ).

" Create sections
ls_section-header = 'Purchase Order Details'.

ls_widget-decorated_text = VALUE zgoog_if_chat_cards_v2=>ty_decorated_text(
                                     icon = VALUE zgoog_if_chat_cards_v2=>ty_icon( known_icon = 'INVITE' )
                                     text = 'Document Date: 2024-10-23' ).
ls_section-widgets = VALUE #( ( ls_widget ) ).
CLEAR ls_widget.

ls_widget-decorated_text = VALUE zgoog_if_chat_cards_v2=>ty_decorated_text(
    icon = VALUE zgoog_if_chat_cards_v2=>ty_icon(
                     material_icon = VALUE zgoog_if_chat_cards_v2=>ty_material_icon( name = 'category' ) )
    text = 'Document Type: Standard PO'  ).

ls_section-widgets = VALUE #( BASE ls_section-widgets
                              ( ls_widget ) ).
CLEAR ls_widget.

ls_widget-decorated_text = VALUE zgoog_if_chat_cards_v2=>ty_decorated_text(
    icon = VALUE zgoog_if_chat_cards_v2=>ty_icon(
                     material_icon = VALUE zgoog_if_chat_cards_v2=>ty_material_icon( name = 'conveyor_belt' ) )
    text = 'Supplier: 5300000061 - Cymbal Industries'  ).

ls_section-widgets = VALUE #( BASE ls_section-widgets
                              ( ls_widget ) ).
CLEAR ls_widget.

ls_widget-decorated_text = VALUE zgoog_if_chat_cards_v2=>ty_decorated_text(
                                     icon = VALUE zgoog_if_chat_cards_v2=>ty_icon( known_icon = 'TRAIN' )
                                     text = 'Shipping Type: RAIL' ).
ls_section-widgets = VALUE #( BASE ls_section-widgets
                              ( ls_widget ) ).
CLEAR ls_widget.

ls_widget-decorated_text = VALUE zgoog_if_chat_cards_v2=>ty_decorated_text( text = 'Approved By: User-Name' ).
ls_section-widgets = VALUE #( BASE ls_section-widgets
                              ( ls_widget ) ).
CLEAR ls_widget.

ls_section-widgets = VALUE #( BASE ls_section-widgets
                              ( ls_widget ) ).

ls_card_v2-sections = VALUE #( ( ls_section ) ).

ls_card-card = REF #( ls_card_v2 ).
ls_input-cards_v2 = VALUE #( (  ls_card ) ).

TRY.
    lo_chat->create_messages( EXPORTING iv_p_spaces_id = lv_space_id
                                        is_input       = ls_input
                              IMPORTING es_output      = DATA(ls_output)
                                        ev_ret_code    = DATA(lv_ret_code)
                                        ev_err_text    = DATA(lv_err_text)
                                        es_err_resp    = DATA(ls_err_resp) ).
  CATCH /goog/cx_sdk INTO lo_excp.
    " Handle exception here
ENDTRY.

IF lo_chat->is_error( lv_ret_code ).
  " Handle error here
ELSE.
  " Handle success here
ENDIF.

다음을 바꿉니다.

  • CLIENT_KEY: 인증을 위해 구성된 클라이언트 키입니다.
  • SPACE_ID: 채팅 스페이스의 고유 식별자 ID입니다. Chat 스페이스 ID를 찾으려면 웹브라우저에서 Google Chat 스페이스를 엽니다. 다음 스크린샷과 같이 URL에서 ID를 찾을 수 있습니다.

    Chat 앱 스페이스 ID

다음 단계

  • 이 가이드에 설명된 예시 솔루션을 최소한의 노력으로 배포하려면 GitHub에 제공된 코드 샘플을 사용하세요.

  • Google Workspace 제품에 대한 자세한 내용은 Google Workspace 고려 시 자주 묻는 질문을 참고하세요.

  • ABAP SDK for Google Cloud 문제를 해결하는 데 도움이 필요한 경우 다음을 수행하세요.

참여자

작성자: 사티시 인암다르 | SAP 애플리케이션 엔지니어

기타 참여자: Vikash Kumar | 기술 문서 작성자