Interagir avec les workflows SAP depuis Google Chat

Ce document décrit une architecture de référence pour créer des applications Google Chat interactives pour SAP à l'aide de l'édition sur site ou cloud du SDK ABAP pour Google Cloud. Avec les applications Chat interactives, en plus de recevoir des notifications, les utilisateurs peuvent effectuer des actions sur les workflows SAP, comme approuver ou refuser des demandes, directement dans Google Workspace.

Ce document s'adresse aux développeurs ABAP, aux architectes de solutions SAP et aux architectes cloud. Dans ce document, nous partons du principe que vous connaissez les applications Chat disponibles dans Google Workspace.

Architecture

Le schéma suivant illustre une architecture de référence pour l'implémentation d'applications de chat interactives pour SAP:

Applications Chat interactives pour SAP

Cette architecture de référence comprend les composants suivants:

# Composant Détails
1 Processus ou transactions SAP Tout processus ou transaction SAP qui doit envoyer des messages aux utilisateurs. Il s'agit du point de départ pour déclencher la communication via Google Chat.
2 SDK ABAP pour Google Cloud Il sert de pont entre les systèmes SAP et Google Cloud, ce qui permet une communication HTTPS sécurisée avec l'API Google Chat.
3 Projet d'application Google Chat Le projet Google Cloud dans lequel vous avez activé l'API Google Chat et configuré votre application Chat.
4 Espace Chat

Salon dédié dans Google Chat où votre système SAP peut communiquer avec les utilisateurs.

Les applications Chat se trouvent dans cet espace et fournissent un flux d'informations en temps réel à partir de vos systèmes SAP via l'API Google Chat.

5 Projet Apps Script

Projet Apps Script dans lequel vous implémentez la logique de votre application Chat pour recevoir et traiter les messages.

6 Pub/Sub

Le projet Apps Script publie les actions des utilisateurs, telles que les approbations ou les refus, sous forme de messages sur un sujet Pub/Sub.

Le SDK ABAP pour Google Cloud utilise un abonnement Pub/Sub pour extraire ces messages du sujet. Cela permet à votre système SAP de traiter ces actions et de déclencher les mises à jour nécessaires de vos processus métier.

Produits utilisés

Cette architecture de référence utilise les produits Google suivants:

  • SDK ABAP pour Google Cloud: vous aide à développer des applications ABAP qui connectent vos systèmes SAP à des services Google Cloud , tels que Google Chat.
  • Google Chat : vous aide à créer des applications Chat interactives et collaboratives, ce qui améliore la communication et la productivité.

  • Apps Script: vous permet d'intégrer et d'automatiser des tâches dans les produits Google.

  • Pub/Sub: permet d'envoyer et de recevoir des messages entre différentes applications.

Cas d'utilisation

Les applications Chat interactives vous permettent d'effectuer des actions sur les workflows SAP, comme approuver ou refuser des demandes. Le diagramme suivant illustre un modèle de chat interactif pour les workflows d'approbation des bons de commande (BC) et des bons de vente (BV) :

Approbation du workflow des applications Chat interactives

La liste suivante présente quelques cas d'utilisation des applications Chat interactives pour SAP:

  • Gestion des événements de workflow: vous pouvez interagir avec une application Chat pour gérer votre workflow. Par exemple, si une commande d'achat nécessite votre attention, vous pouvez effectuer les opérations suivantes dans l'application Chat:

    • Approuver la commande
    • Refuser la commande
    • Demander plus d'informations
  • Alertes système: vous pouvez envoyer des alertes à un espace Chat destiné aux administrateurs système pour les avertir de divers seuils système atteints. Par exemple, l'utilisation de l'espace disque, les opérations de longue durée, les verrouillages de cache ou l'expiration de la licence.

  • Mises à jour de l'état des tâches: vous pouvez envoyer des mises à jour des tâches personnalisées de longue durée à un ensemble d'utilisateurs qui attendent la fin de ces tâches et qui effectuent des opérations de post-traitement.

Considérations de conception

Lorsque vous concevez des applications Chat pour vos cas d'utilisation, plusieurs facteurs peuvent influencer vos décisions de conception. Cette section fournit des conseils pour vous aider à utiliser cette architecture de référence afin de développer des architectures qui vous aident à répondre à vos exigences spécifiques en termes de sécurité, de confidentialité, de conformité et de coût.

Configuration de l'application Google Chat

  • Nom de l'application Chat: attribuez un nom clair et pertinent à votre application Chat. Pour une expérience utilisateur fluide, assurez-vous que le nom de votre application Chat reflète précisément ses fonctionnalités ou les services avec lesquels elle s'intègre.

  • Fuseaux horaires: un espace Chat peut être partagé par des membres appartenant à différents fuseaux horaires. Il est donc essentiel de configurer les applications Chat pour transmettre des messages à un moment qui convient à tous les utilisateurs de l'espace. Pour les alertes ou notifications importantes, vous pouvez également désigner des membres pour des espaces Chat avec un fuseau horaire partagé et créer une logique pour déterminer à quel espace l'application Chat peut envoyer des messages.

Sécurité, confidentialité et conformité

Pour préserver la confidentialité, il est essentiel de mettre en place des contrôles stricts sur le partage d'informations sensibles, telles que les coordonnées du client, l'IBAN ou d'autres données nécessaires dans les espaces Chat. De plus, lorsque de nouveaux utilisateurs sont ajoutés aux espaces Chat, où les applications Chat sont ajoutées, il est essentiel d'établir des règles claires pour assurer une gestion appropriée de cette activité.

Vous pouvez également envisager d'utiliser l'API Cloud Data Loss Prevention (DLP) pour désensibiliser le contenu des messages. Pour savoir comment protéger les données d'entreprise sensibles dans SAP à l'aide de l'API DLP, consultez Protection des données dans SAP avec l'API DLP.

Pour des raisons de sécurité, assurez-vous que les administrateurs Google Workspace suivent les bonnes pratiques recommandées par Google.

Quotas et limites

L'API Google Chat est un service partagé. Par conséquent, des quotas et des limites s'appliquent. Si vous dépassez un quota, vous recevez une réponse avec le code d'état HTTP 429: Too many requests. Pour en savoir plus sur les quotas et les limites, consultez la section Limites d'utilisation.

L'API Google Chat elle-même n'est pas soumise à des frais d'utilisation, mais Google Chat est un produit Google Workspace. Google Workspace, une suite d'outils de productivité groupés, comprend Gmail, Docs, Sheets, Slides, les applications Google Chat et bien plus encore. Sa structure tarifaire est globale, ce qui signifie que vous ne pouvez pas sélectionner et acheter des composants individuels. Pour en savoir plus sur les tarifs, consultez la page Tarifs Google Workspace.

Options de paramètres de connexion

Pour gérer les interactions dans Google Chat, cette architecture de référence utilise Apps Script comme backend. Le code, hébergé dans un projet Apps Script, doit être écrit en JavaScript.

Vous pouvez également créer votre application Chat interactive à l'aide de fonctions Cloud Run ou d'App Engine avec un point de terminaison HTTP. Pour savoir comment utiliser les fonctions Cloud Run pour Google Chat, consultez Créer une application Google Chat HTTP. Pour créer la logique de l'application Chat dans les fonctions Cloud Run, vous pouvez utiliser les bibliothèques Cloud et choisir parmi plusieurs langages tels que Node.js, Java ou Python. Une fois que vous avez déployé votre fonction Cloud Run, dans la configuration de l'application Chat, sous Paramètres de connexion, sélectionnez URL du point de terminaison HTTP, puis indiquez l'URL du déclencheur de la fonction Cloud Run.

Avant de commencer

Avant d'implémenter une solution basée sur cette architecture de référence, assurez-vous d'avoir rempli les conditions préalables suivantes:

Configurer un projet Apps Script

Pour recevoir et traiter les messages, vous implémentez la logique de l'application Chat dans un projet Apps Script. Apps Script fournit la logique et l'automatisation du backend. Il vous permet d'écrire du code pour gérer des événements tels que l'extraction des messages des utilisateurs, le traitement des clics sur les boutons et le déclenchement d'actions en aval.

Pour configurer un projet Apps Script, procédez comme suit:

  1. Accédez à Apps Script.
  2. Créez un script pour gérer la logique de votre application Chat afin de recevoir et de traiter les messages. Pour savoir comment créer un script, consultez le guide de démarrage rapide Google Apps Script.

    Par exemple, vous devez écrire du code JavaScript pour gérer différents types de fonctions. L'exemple de code suivant montre comment gérer l'événement OnCardClicked:

    function onCardClick(event) {
    console.info(event);
    let message = 'Button Clicked';
    // Get the function name from parameter
    var functionToCall = event.action.parameters[0].value;
    // Get the action name from parameter
    var actionTaken = event.action.parameters[1].value;
    // Call the function dynamically
    if (this[functionToCall]) {
      this[functionToCall](actionTaken);
    } else {
      // Handle invalid function name
      console.log('Function not found:', functionToCall);
    }
    return { "text": message };
    }
    

    Cet exemple de code effectue les fonctions suivantes:

    • Lit le clic sur le bouton: détermine le bouton cliqué et l'action prévue de l'utilisateur.
    • Trouve le code approprié à exécuter: il utilise les informations du clic sur le bouton pour trouver un code correspondant dans votre application Chat.
    • Exécute le code: il exécute le code correspondant pour effectuer l'action demandée par l'utilisateur.
    • Gère les erreurs: si elle ne trouve pas le code correspondant, un message d'erreur s'affiche.
  3. Associez votre projet Google Cloud au projet Apps Script. Pour savoir comment associer vos projets, consultez Associer votre projet Google Cloud.

  4. Créez un déploiement pour votre script. Pour savoir comment déployer votre script, consultez Créer et gérer des déploiements.

  5. Notez l'ID de déploiement. Pour savoir comment trouver un ID de déploiement, consultez Trouver un ID de déploiement.

Pour en savoir plus sur la configuration de votre projet Apps Script, consultez le guide de démarrage rapide de l'application Chat Google Apps Script.

Configurer l'application Google Chat

Pour configurer votre application Google Chat, procédez comme suit:

  1. Dans la console Google Cloud, recherchez "API Google Chat", puis cliquez sur API Google Chat, puis sur Gérer.

    Accéder à l'API Chat

  2. Cliquez sur Configuration et configurez l'application Google Chat:

    1. Dans le champ Nom de l'application, saisissez Quickstart SAP App.
    2. Dans URL de l'avatar, saisissez https://developers.google.com/chat/images/quickstart-app-avatar.png.
    3. Dans Description, saisissez Quickstart app for SAP.
  3. Sous Paramètres de connexion, sélectionnez Apps Script.

  4. Saisissez l'ID de déploiement du script que vous avez créé dans la section Configurer un projet Apps Script.

  5. Cliquez sur Enregistrer.

Configurer l'authentification pour les applications Google Chat

Vous pouvez vous authentifier auprès des applications Google Chat de deux manières : en tant qu'application elle-même ou en tant qu'utilisateur.

Lorsque votre application doit effectuer des tâches automatisées, telles que l'envoi de notifications système sans interaction directe de l'utilisateur, elle utilise un compte de service. Si vous souhaitez que votre application agisse au nom d'un utilisateur, par exemple en envoyant un message en son nom, vous avez besoin d'une authentification de l'utilisateur. Cette approche d'authentification double offre de la flexibilité et un contrôle sur la manière dont votre application interagit avec Google Chat.

Le SDK ABAP pour Google Cloud vous permet de configurer les deux types d'authentification. Pour savoir comment configurer l'authentification pour les applications Google Chat, consultez les ressources suivantes:

Pour en savoir plus sur les méthodes de l'API Google Chat et les habilitations d'autorisation compatibles, consultez Authentifier et autoriser les applications Chat et les requêtes API Google Chat.

L'architecture de référence expliquée dans ce document utilise l'authentification en tant qu'application Chat et utilise des jetons d'accès pour l'authentification.

Pour configurer l'authentification en tant qu'application Chat, procédez comme suit:

  1. Dans la console Google Cloud, configurez l'écran de consentement OAuth et choisissez des habilitations.
  2. Dans la console Google Cloud, créez un compte de service.
  3. Facultatif: attribuez des rôles IAM à votre compte de service pour accorder l'accès aux ressources de votre projet Google Cloud. Pour en savoir plus, consultez la page Gérer l'accès aux comptes de service.
  4. Dans le système SAP, configurez une clé client avec les informations suivantes:

    Champ Description
    Nom de la clé Google Cloud Spécifiez un nom pour la configuration de clé client. Par exemple, ABAP_SDK_CHAT.
    Nom du compte de service Google Cloud

    Indiquez le nom du compte de service auquel vous avez accordé l'accès à l'API Google Chat. Par exemple, sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com.

    Champ d'application Google Cloud Spécifiez le niveau d'accès'API: https://www.googleapis.com/auth/chat.bot.
    Identifiant de projet Google Cloud Spécifiez l'ID du projet Google Cloud qui contient votre API Google Chat activée.
    Nom de la commande Laissez ce champ vide.
    Classe d'autorisation

    Spécifiez la classe d'autorisation, le cas échéant:

    • Pour l'authentification à l'aide de jetons d'accès: /GOOG/CL_AUTH_GOOGLE
    • Pour l'authentification à l'aide de JWT: /GOOG/CL_AUTH_JWT
    Mise en cache des jetons

    Option qui détermine si les jetons d'accès récupérés depuis Google Cloud sont mis en cache ou non.

    Nous vous recommandons d'activer la mise en cache des jetons après avoir configuré et testé votre connexion à Google Cloud. Pour en savoir plus sur la mise en cache des jetons, consultez la section Activer la mise en cache des jetons.

    Secondes avant actualisation du jeton Durée (en secondes) avant l'expiration d'un jeton d'accès et son actualisation. La valeur par défaut est 3500.
    Paramètre d'autorisation 1 Laissez ce champ vide.
    Paramètre d'autorisation 2 Laissez ce champ vide.

Pour en savoir plus sur la configuration de l'authentification, consultez S'authentifier à l'aide de jetons d'accès ou S'authentifier à l'aide de jetons Web JSON.

Ajouter l'application Google Chat aux espaces

  1. Ouvrez vos applications Google Chat ou Gmail.
  2. Ajoutez l'application Chat à un espace Chat. Pour savoir comment ajouter des applications à un espace Chat, consultez Ajouter des applications à des conversations ou des espaces.

Concevoir des fiches interactives pour les actions des utilisateurs

Les fiches sont un moyen visuel et interactif de présenter des informations, ce qui améliore l'expérience utilisateur globale. Ils peuvent inclure des éléments tels que des titres, des images, des boutons, etc., ce qui permet aux utilisateurs d'interagir avec le contenu directement dans l'interface Chat. Par exemple, une fiche de workflow de bon de commande peut inclure les informations suivantes:

  • Numéro du bon de commande
  • Date du document
  • Type de document
  • Fournisseur
  • Type de livraison
  • Lien permettant d'ouvrir l'affichage de la commande dans l'application SAP Fiori et bouton permettant d'approuver la commande

Pour concevoir des fiches interactives à l'aide du SDK ABAP pour Google Cloud, utilisez l'interface personnalisée ZGOOG_IF_CHAT_CARDS_V2 du dépôt GitHub. Cette interface personnalisée contient les types ABAP requis pour créer des fiches. Vous pouvez créer des fiches comme l'exemple de workflow de commande suivant:

Fiche des applications de chat

Pour en savoir plus sur la conception de messages de carte, consultez la section Créer des fiches pour les applications Google Chat.

Pour envoyer des messages depuis un système SAP vers un espace Chat à l'aide du SDK ABAP pour Google Cloud, vous devez utiliser la méthode CREATE_MESSAGES de la classe /GOOG/CL_CHAT_V1.

L'exemple de code suivant montre comment envoyer un message de carte à partir d'un système SAP vers un espace Chat:


REPORT zsend_interactive_card.

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 Cards Structure
ls_card_v2-header = VALUE zgoog_if_chat_cards_v2=>ty_header(
                              title     = 'Purchase Order Workflow - Level 2 Approval Alert!'
                              subtitle  = 'PO Number: 8700000035'
                              image_url = 'https://developers.google.com/chat/images/quickstart-app-avatar.png' ).
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_button = VALUE #( text  = 'Display Purchase Order'
                     color = VALUE zgoog_if_chat_cards_v2=>ty_color( alpha = '1'
                                                                     blue  = '1'
                                                                     green = '0'
                                                                     red   = '1' ) ).

" Replace this with URL for Fiori Application
ls_button-on_click-open_link-url = 'https://developers.google.com/workspace/chat'.
ls_widget-button_list-buttons = VALUE #(  BASE ls_widget-button_list-buttons
                                         ( ls_button ) ).
CLEAR ls_button.

ls_button = VALUE #( text                     = 'Approve Purchase Order'
                     on_click-action-function = 'onCardClick'
                     color                    = VALUE zgoog_if_chat_cards_v2=>ty_color( alpha = '1'
                                                                                        blue  = '0.2'
                                                                                        green = '0.4'
                                                                                        red   = '0' ) ).
ls_param-key   = 'functionToCall'.
ls_param-value = 'sendToPubSub'.  " Replace this with function name on AppsScript
ls_button-on_click-action-parameters = VALUE #( BASE ls_button-on_click-action-parameters
                                                ( ls_param ) ).
CLEAR ls_param.

ls_param-key   = 'action'.
ls_param-value = 'approved'.    " Indicate approval action has taken place
ls_button-on_click-action-parameters = VALUE #( BASE ls_button-on_click-action-parameters
                                                ( ls_param ) ).
CLEAR ls_param.

ls_widget-button_list-buttons = VALUE #(  BASE ls_widget-button_list-buttons
                                         ( ls_button ) ).
CLEAR ls_button.

ls_button = VALUE #( text                     = 'Reject Purchase Order'
                     on_click-action-function = 'onCardClick'
                     color                    = VALUE zgoog_if_chat_cards_v2=>ty_color( alpha = '1'
                                                                                        blue  = '0'
                                                                                        green = '0'
                                                                                        red   = '0.7' ) ).

ls_param-key   = 'functionToCall'.
ls_param-value = 'sendToPubSub'.  " Function name on AppsScript
ls_button-on_click-action-parameters = VALUE #( BASE ls_button-on_click-action-parameters
                                                ( ls_param ) ).
CLEAR ls_param.

ls_param-key   = 'action'.
ls_param-value = 'rejected'.    " Indicate reject action has taken place
ls_button-on_click-action-parameters = VALUE #( BASE ls_button-on_click-action-parameters
                                                ( ls_param ) ).
CLEAR ls_param.

ls_widget-button_list-buttons = VALUE #(  BASE ls_widget-button_list-buttons
                                         ( ls_button ) ).
CLEAR ls_button.

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.

Remplacez les éléments suivants :

  • CLIENT_KEY : clé client configurée pour l'authentification.
  • SPACE_ID: identifiant unique de l'espace Chat. Pour trouver l'ID de l'espace Chat, ouvrez l'espace Google Chat dans votre navigateur Web. Vous pouvez trouver l'ID dans l'URL, comme illustré dans la capture d'écran suivante:

    ID de l'espace des applications Chat

Alternative de conception

Pour votre système SAP S/4 HANA ou ECC hébergé sur Google Cloud, vous pouvez envisager l'architecture de référence alternative suivante pour concevoir vos applications de chat interactives:

Autre option de conception pour les applications de chat interactif pour SAP

Cette architecture de référence repose sur les considérations suivantes:

  1. Les processus ou transactions SAP d'origine chargés d'envoyer des messages aux utilisateurs.
  2. Le SDK ABAP pour Google Cloud envoie des messages en appelant la méthode de l'API Google Chat: spaces.messages.create.
  3. L'API Google Chat envoie les messages à l'espace Chat correspondant.
  4. Les utilisateurs de l'espace reçoivent des notifications, puis répondent pour effectuer une action, par exemple cliquer sur un bouton.
  5. L'action de l'utilisateur appelle le projet Apps Script pour gérer l'événement correspondant.
  6. Le projet Apps Script appelle l'API Pub/Sub pour publier les messages.
  7. La fonction Cloud Run traite les messages et publie des événements à l'aide du déclencheur Eventarc.
  8. La fonction Cloud Run appelle le nœud SICF via un connecteur VPC sans serveur.
  9. Le système SAP traite l'événement et déclenche des actions en aval en fonction de la logique métier définie.

Cette architecture de référence nécessite l'implémentation de la logique en trois couches:

  • Couche ABAP permettant de créer un message de chat, de gérer l'événement et les processus métier ultérieurs.
  • Couche Apps Script pour gérer l'événement dans l'espace Chat et publier des messages dans un sujet Pub/Sub.
  • Les fonctions Cloud Run reçoivent des messages de l'abonnement Pub/Sub. Vous pouvez également mettre en forme les messages et appeler le service SICF hébergé sur votre système SAP via le connecteur VPC.

Étape suivante

Contributeurs

Auteur : Satish Inamdar | Ingénieur d'applications SAP

Autre contributeur : Vikash Kumar | Rédacteur technique