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 向けのチャットアプリ

このリファレンス アーキテクチャには、次のコンポーネントが含まれています。

# コンポーネント 詳細
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 Cloud サービス(Google Chat など)に接続する ABAP アプリケーションを開発できます。
  • Google Chat: インタラクティブでコラボレーション重視の Chat アプリを作成して、コミュニケーションと生産性を高めることができます。

ユースケース

一方向の Chat アプリはインタラクティブではなく、Chat スペースのユーザーにメッセージを送信できますが、ユーザーは Chat アプリに返信できません。次の図は、一方向の Chat アプリのチャット パターンを示しています。

チャットアプリ パターン

次のリストは、SAP 向け Google Chat のユースケースを示しています。

  • ワークフロー イベント通知: ワークフロー プロセスに関連するさまざまなステップの Chat アプリにメッセージを送信して、Chat スペースに存在する特定のユーザーに通知できます。たとえば、ユーザーが購入オーダーを承認または拒否した場合です。

  • システム アラート: システム管理者向けの Chat スペースにアラートを送信して、さまざまなシステムしきい値に達したことを通知できます。たとえば、ディスク容量の使用量、長時間実行オペレーション、キャッシュロック、ライセンスの有効期限切れなどです。

  • ジョブのステータスの更新: 長時間実行されるカスタムジョブの更新を、そのジョブの完了を待機している一連のユーザーに送信し、後処理オペレーションを開始できます。

設計上の考慮事項

ユースケースに合わせて Chat アプリを設計する場合、設計上の決定に影響する要因がいくつかあります。このセクションでは、このリファレンス アーキテクチャを使用して、セキュリティ、プライバシー、コンプライアンス、費用に関する特定の要件を満たすアーキテクチャを開発する際に役立つガイダンスを示します。

Google Chat アプリの設定

  • 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、ドキュメント、スプレッドシート、スライド、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. [アバターの URL] に「https://developers.google.com/chat/images/quickstart-app-avatar.png」と入力します。
    3. [説明] に「Quickstart app for SAP」と入力します。
  3. インタラクティブ機能を無効にします。

  4. [保存] をクリックします。

Google Chat アプリの認証を設定する

Google Chat アプリの認証には、アプリ自体として認証する方法とユーザーとして認証する方法の 2 つがあります。

ユーザーが直接操作せずにシステム通知を送信するなど、アプリで自動タスクを実行する必要がある場合は、サービス アカウントを使用します。特定のユーザーとしてメッセージを送信するなど、アプリがユーザーに代わって動作する場合は、ユーザー認証が必要です。この二重認証アプローチにより、アプリが 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 プロジェクト ID 有効な Google Chat API を含む Google Cloud プロジェクトの ID を指定します。
    コマンド名 このフィールドは空白のままにしておきます。
    認可クラス

    必要に応じて認可クラスを指定します。

    • アクセス トークンを使用した認証の場合: /GOOG/CL_AUTH_GOOGLE
    • JWT を使用した認証の場合: /GOOG/CL_AUTH_JWT
    トークンのキャッシュ保存

    Google Cloud から取得したアクセス トークンをキャッシュ保存するかどうかを決めるフラグ。

    Google Cloud への接続を構成してテストしたら、トークンのキャッシュ保存を有効にすることをおすすめします。トークンのキャッシュ保存の詳細については、トークンのキャッシュ保存を有効にするをご覧ください。

    トークンの更新期限(秒) アクセス トークンの有効期限が切れ、更新が必要になるまでの時間(秒)。デフォルト値は 3500 です。
    認可パラメータ 1 このフィールドは空白のままにしておきます。
    認可パラメータ 2 このフィールドは空白のままにしておきます。

認証を設定する詳細な手順については、アクセス トークンを使用して認証するまたは JSON Web Token を使用して認証するをご覧ください。

スペースに Google Chat アプリを追加する

  1. Google Chat アプリまたは Gmail アプリを開きます。
  2. Chat アプリを Chat スペースに追加します。手順については、会話またはスペースにアプリを追加するをご覧ください。

ABAP 環境からメッセージを送信する

Google Chat と Chat アプリは JSON ベースのメッセージ形式を使用します。各メッセージには、ユーザー ID、スタイル、コンテンツなどの詳細情報が含まれます。Chat アプリは、次の種類のメッセージを送信できます。

  • テキスト メッセージ: テキスト メッセージには、テキストの書式設定が制限された平文のコンテンツが含まれます。
  • カード メッセージ: カード メッセージは、スペースに表示されるカードの形式、コンテンツ、動作を定義します。たとえば、カード メッセージに、ユーザーから情報を収集するためのダイアログを開くリンクを含むボタンを含めることができます。

Google Chat メッセージの詳細については、Google Chat メッセージの概要をご覧ください。

ABAP SDK for Google Cloud を使用して SAP システムから Chat スペースにメッセージを送信するには、/GOOG/CL_CHAT_V1 クラスの CREATE_MESSAGES メソッドを使用します。

テキスト メッセージを送信する

次のコードサンプルは、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: Chat スペースの一意の識別子 ID。Chat スペース ID を確認するには、ウェブブラウザで Google Chat スペースを開きます。ID は次のスクリーンショットに示すように URL で確認できます。

    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: Chat スペースの一意の識別子 ID。Chat スペース ID を確認するには、ウェブブラウザで Google Chat スペースを開きます。ID は次のスクリーンショットに示すように URL で確認できます。

    Chat アプリのスペース ID

次のステップ

寄稿者

作成者: Satish Inamdar | SAP アプリケーション エンジニア

その他の寄稿者: Vikash Kumar | テクニカル ライター