このドキュメントでは、オンプレミスまたはクラウド エディションの ABAP SDK for Google Cloud を使用して、SAP 用の Google Chat 用アプリを構築するリファレンス アーキテクチャについて説明します。Chat 用アプリを使用すると、SAP のプロセスとワークフローを Google Chat に統合できます。これにより、ユーザーは Google Workspace 内でアラーム レポート、ワークフロー アラート、システム アラート、ジョブ完了の更新などの通知を受け取ることができます。
このドキュメントの対象読者は、ABAP デベロッパー、SAP ソリューション アーキテクト、クラウド アーキテクトです。このドキュメントは、Google Workspace で利用可能な Chat 用アプリに精通していることを前提としています。
アーキテクチャ
次の図は、SAP ERP システムから 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 システムを Cloud Chat などの Google Cloud サービスに接続する 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 へのアクセス権を持つ Business または Enterprise の Google Workspace アカウントを持っている。
Google Cloud のアカウントとプロジェクトがある。各 Chat 用アプリには独自の Google Cloud プロジェクトが必要です。つまり、1 つの Google Cloud プロジェクトで構成できる Chat 用アプリは 1 つだけです。
プロジェクトで課金が有効になっている。プロジェクトで課金が有効になっていることを確認する方法については、プロジェクトの課金ステータスを確認するをご覧ください。
ABAP SDK for Google Cloud のオンプレミス版またはクラウド版がインストールされ、構成されている。
Google Cloud プロジェクトで Google Chat API が有効になっている。
Google Chat アプリを構成する
「Google Chat API」を検索し、[Google Chat API]、[管理] の順にクリックします。
[構成] をクリックして、Google Chat アプリを設定します。
- [アプリ名] に「
Quickstart SAP App
」と入力します。 - [アバターの URL] に「
https://developers.google.com/chat/images/quickstart-app-avatar.png
」と入力します。 - [説明] に「
Quickstart app for SAP
」と入力します。
- [アプリ名] に「
インタラクティブ機能を無効にします。
[保存] をクリックします。
Google Chat アプリの認証を設定する
Google Chat アプリの認証には、アプリ自体として認証する方法とユーザーとして認証する方法の 2 つがあります。
直接のユーザー インタラクションなしにシステム通知を送信するなど、自動化されたタスクをアプリで実行する必要がある場合は、サービス アカウントを使用します。特定のユーザーとしてメッセージを送信するなど、アプリがユーザーに代わって動作する場合は、ユーザー認証が必要です。この二重認証アプローチにより、アプリが Google Chat とやり取りする方法を柔軟に制御できます。
ABAP SDK for Google Cloud では、両方の種類の認証を設定できます。Google Chat アプリの認証を設定する方法については、以下をご覧ください。
- Google Chat アプリとして認証する: アクセス トークンを使用して認証するか、JSON ウェブトークンを使用して認証する
- Google Chat ユーザーとして認証と認可を行う: OAuth 2.0 クライアント認証情報を使用して Google Workspace API の認証を行う
Google Chat API メソッドとそのサポートされている認可スコープについては、Chat 用アプリと Google Chat API リクエストの認証と認可をご覧ください。
このドキュメントで説明するリファレンス アーキテクチャでは、Chat 用アプリとして認証を使用し、認証にアクセス トークンを使用します。
Chat 用アプリとして認証を設定する手順は、次のとおりです。
- Google Cloud コンソールで、OAuth 同意画面を構成し、スコープを選択します。
- Google Cloud コンソールでサービス アカウントを作成します。
- 省略可: サービス アカウントにロールを割り当て、Google Cloud プロジェクト リソースへのアクセス権を付与します。詳細については、サービス アカウントに対するアクセス権の管理をご覧ください。
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 ウェブトークンを使用して認証するをご覧ください。
スペースに Google Chat アプリを追加する
- Google Chat アプリまたは Gmail アプリを開きます。
- 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 で確認できます。
カード メッセージを送信する
カードは、視覚的に魅力的でインタラクティブな方法で情報を提示し、全体的なユーザー エクスペリエンスを向上させます。タイトル、画像、ボタンなどの要素を含めることができ、ユーザーはチャット インターフェース内で直接コンテンツを操作できます。たとえば、注文書ワークフロー カードには次のような情報が含まれます。
- 注文番号
- ドキュメント発行日
- ドキュメントの種類
- サプライヤー
- 配送の種類
ABAP SDK for Google Cloud でカードを開発する場合は、GitHub リポジトリのカスタム インターフェース ZGOOG_IF_CHAT_CARDS_V2
を使用します。このカスタム インターフェースには、カードの作成に必要な ABAP タイプが含まれています。次の注文ワークフローのサンプルカードのようなカードを作成できます。
カード メッセージの設計の詳細については、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 で確認できます。
次のステップ
このガイドで説明するサンプル ソリューションを最小限の労力でデプロイするには、GitHub で提供されているコードサンプルを使用します。
Google Workspace プロダクトについては、Google Workspace を検討する際の一般的な質問をご覧ください。
ABAP SDK for Google Cloud の問題を解決するには、次の操作を行います。
- ABAP SDK for Google Cloud トラブルシューティング ガイドをご覧ください。
- Cloud フォーラムのコミュニティで ABAP SDK for Google Cloud について質問し、ディスカッションに参加します。
- 入手可能なすべての診断情報を収集し、Cloud カスタマーケアにお問い合わせください。カスタマーケアへのお問い合わせについては、Google Cloud での SAP に関するサポートを受けるをご覧ください。
寄稿者
著者: Satish Inamdar | SAP アプリケーション エンジニア
その他の寄稿者: Vikash Kumar | テクニカル ライター