Ajouter une carte d'embarquement à Google Wallet

Vous pouvez utiliser Google Messages avec le RCS et Google Wallet pour créer un processus d'enregistrement fluide : l'utilisateur effectue son enregistrement, reçoit sa carte d'embarquement et l'ajoute directement à Google Wallet depuis l'application Messages. Une fois dans son portefeuille, la carte est mise à jour automatiquement si les informations du vol changent. Les utilisateurs ont un accès rapide à une carte d'embarquement à jour directement sur leur téléphone.

Ce document décrit les étapes techniques nécessaires pour ajouter une carte d'embarquement au flux Google Wallet. Il présente également un exemple de conversation avec des conseils de conception pour une expérience d'enregistrement fluide et efficace avec RBM.

Implémentation technique

Pour implémenter une carte d'embarquement dans Google Wallet, vous devez utiliser les API Google Wallet et RBM.

Prérequis

Pour commencer à utiliser l'API Google Wallet, suivez ces étapes obligatoires:

  1. Inscrivez-vous pour obtenir un compte d'émetteur Wallet afin de pouvoir créer et distribuer des cartes pour Google Wallet.
  2. Créez un projet Google Cloud (GCP) si vous n'en avez pas déjà un.
  3. Activez l'API Google Wallet.
  4. Créez un compte de service et une clé afin de pouvoir appeler l'API Google Wallet.
  5. Autorisez le compte de service dans la Google Pay & Wallet Console.
  6. Utilisez le modèle de carte d'embarquement pour créer une classe d'embarquement.

API Google Wallet

Pour créer une carte d'embarquement et générer une URL Ajouter à Google Wallet pour RBM, procédez comme suit :

  1. effectuer les authentifications et les autorisations nécessaires ;
  2. Créez un objet Cartes.
  3. Obtenez un jeton Web JSON (JWT) signé. La longueur maximale d'un jeton JWT encodé est de 2 048 caractères.
  4. Utilisez le jeton JWT pour générer une URL d'ajout à Google Wallet.

API RBM

Pour envoyer une suggestion "Ajouter à Google Wallet" à partir de RBM, envoyez une action "Ouvrir l'URL". Dans la charge utile du message, procédez comme suit :

  1. Pour text, saisissez "Ajouter à Google Wallet".
  2. Pour url, saisissez l'URL d'ajout à Google Wallet.

L'icône Google Wallet s'affiche automatiquement sur le libellé de la suggestion.

Icône Google Wallet sur la suggestion "Ajouter à Google Wallet"

Conception de conversations

Cet exemple utilise la puissance unique de la conversation pour guider les utilisateurs tout au long d'un flux d'enregistrement complet. Il montre comment utiliser une boîte de dialogue naturelle et des fonctionnalités avancées, comme les suggestions en un seul geste et les cartes avancées, pour aider les utilisateurs à atteindre leurs objectifs. Dans ce cas, leurs objectifs sont les suivants : (1) personnaliser mon expérience de vol, (2) recevoir ma carte d'embarquement et (3) l'ajouter à Google Wallet pour y accéder rapidement à l'aéroport.

Voici un aperçu de la conversation. Il est suivi de conseils de conception et d'une analyse détaillée du parcours. Pour implémenter une conception similaire pour votre agent, consultez les exemples de code en suivant les étapes.

Diagramme de conversation

Conseils de conception

Tenez compte de ces principes lorsque vous concevez votre flux d'enregistrement :

  • Votre premier message est le plus important. Indiquez brièvement le but de la conversation afin que l'utilisateur ait une raison de s'engager.
  • Chaque message doit fournir un petit bloc d'informations et inviter l'utilisateur à répondre. Les suggestions de réponses et les suggestions d'actions aident les utilisateurs à passer à l'étape suivante.
  • Votre agent doit être réactif, et non robotique. Utilisez un langage qui reflète le ton de votre marque. Comment votre représentant idéal de la marque discuterait-il avec un client ?
  • Les gens aiment se sentir spéciaux. Vous pouvez personnaliser l'expérience d'enregistrement en suggérant des sièges ou des repas en fonction de l'historique des vols de l'utilisateur.
  • Les cartes enrichies et les carrousels rendent la conversation plus dynamique. Utilisez-les pour partager des images et des informations qui aideront l'utilisateur à choisir parmi les options.
  • Une bonne conversation se termine bien. Vérifiez les informations de l'enregistrement de l'utilisateur avant d'envoyer sa carte d'embarquement. Ajoutez une touche humaine avec un message amical.

Processus d'enregistrement

  1. L'agent informe l'utilisateur que l'enregistrement pour son vol est ouvert.

    Message d'accueil avec des informations sur l'enregistrement et des réponses suggérées

    Exemple de code

    const suggestions = [
      {
        reply: {
          text: '⚡ Check in',
          postbackData: 'checkIn',
        },
      },
      {
        reply: {
          text: '⏰ Remind me later',
          postbackData: 'remindMe',
        },
      },
      {
        reply: {
          text: '✈️ View my flight details',
          postbackData: 'flightDetails',
        },
      },
      {
        reply: {
          text: '🔀 Change my flight',
          postbackData: 'flightChange',
        },
      },
    ];  
    
    const params = {
      messageText: 'Check-in for your flight',
      messageDescription: '👏 Happy morning, Jo! Check-in is now open for your flight from London to Mumbai on ' + getFlightTime() + ' at 2:00PM. What would you like to do? ',
      msisdn: phoneNumber,
      suggestions: suggestions,
      imageUrl: getImageUrl('fly.png'),
      height: 'MEDIUM',
    };  
    
    rbmApiHelper.sendRichCard(params);      
    
  2. L'utilisateur appuie sur une réponse suggérée pour se connecter.

    Suggestion de signaler votre arrivée sélectionnée

  3. L'agent définit les attentes concernant la procédure d'enregistrement.

    Le message indique : OK, parfait. Il ne vous reste plus que trois étapes à suivre. Voici la première étape à suivre pour vous inscrire

    Exemple de code

    const params = {
      messageText: "OK, great. It's just 3 simple steps to check in. Here's the first step to get you onboard:",
      msisdn: msisdn,
    };  
    
    let self = this;
    
    rbmApiHelper.sendMessage(params, function (response, err) {
      self.sendPolicyImage(msisdn);
    });   
    

  4. L'agent demande à l'utilisateur d'accepter le règlement de sécurité.

    Fiche enrichie avec une infographie de la règle de sécurité et des suggestions pour accepter ou refuser Le texte de la fiche indique : Pour nous aider à assurer un vol sûr, consultez notre règlement sur la sécurité et indiquez-nous que vous l'acceptez.

    Exemple de code

    const suggestions = [
      {
        reply: {
          text: 'Yes, I agree',
          postbackData: 'policy_agree',
        },
      },
      {
        reply: {
          text: "No, I don't agree",
          postbackData: 'policy_nack',
        },
      },
    ];  
    
    const params = {
      messageText: 'Baggage safety policy',
      messageDescription: 'To help us ensure a safe flight, please review our safety policy and let us know you agree',
      msisdn: msisdn,
      suggestions: suggestions,
      imageUrl: getImageUrl('policyImage.png'),
      height: 'MEDIUM',
      orientation: 'HORIZONTAL',
      thumbnailImageAlignment: 'LEFT',
    };  
    
    rbmApiHelper.sendRichCard(params);
    

  5. L'utilisateur appuie sur une suggestion de réponse pour l'accepter.

    Suggestion d'acceptation sélectionnée

  6. L'agent remercie l'utilisateur et présente l'étape suivante.

    Le message indique : "Merci. Un passager en sécurité est un passager heureux !" Voici l'étape suivante

    Exemple de code

    const params = {
      messageText: "Thank you - A safe passenger is a happy passenger! Here's the next step:",
      msisdn: msisdn,
    };
    
    let self = this;
    
    rbmApiHelper.sendMessage(params, function (response, err) {
      self.sendPlan(msisdn);
    });     
    

  7. L'agent invite l'utilisateur à choisir un siège.

    Carte enrichie avec une infographie du plan des sièges. Le texte sur la carte indique : Il est temps de vous installer confortablement ! Nous vous avons recommandé des sièges en fonction de votre dernier vol. Sélectionnez le siège de votre choix ou indiquez-nous votre siège préféré en saisissant le numéro. Les suggestions qui suivent la carte affichent quelques places assises.

    Exemple de code

    const suggestions = [
      {
        reply: {
          text: 'View the seat map',
          postbackData: 'view_seat_map',
        },
      },
    ];
    
    const outerSuggestions = [
      {
        reply: {
          text: '17A',
          postbackData: 'seat_17A',
        },
      },
      {
        reply: {
          text: '17C',
          postbackData: 'seat_17C',
        },
      },
      {
        reply: {
          text: '18A',
          postbackData: 'seat_18A',
        },
      },
      {
        reply: {
          text: 'Show me more',
          postbackData: 'more',
        },
      },
    ];  
    
    const params = {
      messageText: 'Choose your seat',
      messageDescription: "It's time to sit back and get comfy! 💺 We've recommended some seats based on your last flight. Choose the one you want, or let us know your preferred seat by typing the number.",
      msisdn: msisdn,
      imageUrl: getImageUrl('seatMap.png'),
      height: 'TALL',
      orientation: 'VERTICAL',
      outerSuggestions: outerSuggestions
    };  
    
    rbmApiHelper.sendRichCard(params);
    

  8. L'utilisateur appuie sur une suggestion de réponse pour le siège choisi.

    Suggestion pour le siège 18A sélectionnée

  9. L'agent confirme le choix de l'utilisateur.

    Le message indique : "Siège 18A, c'est bon."

    Exemple de code

    this.seatmap[msisdn] = seat;  
    
    const params = {
      messageText: `Seat ${seat}, you got it`,
      msisdn: msisdn,
    };  
    
    let self = this;  
      rbmApiHelper.sendMessage(params, function(res) {
        self.sendFoodOptions(msisdn);
    }); 
    

  10. L'agent demande à l'utilisateur de choisir son repas en vol.

    Message indiquant : "Passons maintenant à la nourriture". Vous pouvez précommander votre repas à bord. Seriez-vous satisfait d'un plat végétarien ou d'un plat de poulet ?

    Exemple de code

    const params = {
      messageText: `Now let's talk food 😋 You can pre-order your in-flight meal. Would you be happy with a vegetarian entree or a chicken entree?`,
      msisdn: msisdn,
    };  
    
    let self = this;  
    
    rbmApiHelper.sendMessage(params, function(res) {
      self.sendFoodDetails(msisdn);
    });
    

  11. L'agent présente les options de repas.

    Le carrousel de cartes enrichies montre deux cartes: l'une avec l'image d'une salade et l'autre l'image d'un poulet rôti. Les deux fiches comportent une liste d'ingrédients et une suggestion de choisir ce repas

    Exemple de code

    const cardContents = [
      {
        title: 'Panzanella salad (v)',
        description: 'Ingredients: bread, lettuce, onions, tomatoes, olive oil',
        suggestions: [
          {
            reply: {
              text: 'Choose vegetarian',
              postbackData: 'veggie',
            },
          },
        ],
        media: {
          height: 'MEDIUM',
          contentInfo: {
            fileUrl: getImageUrl('salad.jpg'),
          },
        },
      },
      {
        title: 'Grilled chicken with greens',
        description: 'Ingredients: chicken, potatoes, peppers, olive oil',
        suggestions: [
          {
            reply: {
              text: 'Choose chicken',
              postbackData: 'chicken',
            },
          },
        ],
        media: {
          height: 'MEDIUM',
          contentInfo: {
            fileUrl: getImageUrl('chicken.png'),
          },
        },
      },
    ];  
    
    const params = {
      msisdn: msisdn,
      cardContents: cardContents,
    };  
    
    rbmApiHelper.sendCarouselCard(params);
    

  12. L'utilisateur appuie sur une suggestion de réponse pour le repas choisi.

    L'utilisateur appuie sur la suggestion de choisir un plat végétarien.

  13. L'agent confirme le choix de l'utilisateur.

    Message indiquant : "Végétarien, c'est le cas".

    Exemple de code

    const params = {
      messageText: `Vegetarian it is 💚`,
      msisdn: msisdn,
    };  
    
    let self = this;  
    
    rbmApiHelper.sendMessage(params, function (response, err) {
      self.sendAskConfirmation(msisdn);  
    });
    

  14. L'agent résume les détails de l'enregistrement.

    États du message: Voici ce que nous avons noté: vous avez choisi une place 18 A et un repas végétarien. Veuillez confirmer vos choix. Des suggestions apparaissent sous le message pour confirmer les détails du repas, ou pour changer de place ou de repas.

    Exemple de code

    let seat = this.seatmap[msisdn];  
    
    const suggestions = [
      {
        reply: {
          text: "Yes, I'm happy with that",
          postbackData: 'happy',
        },
      },
      {
        reply: {
          text: 'Change my seat',
          postbackData: 'change_seat',
        },
      },
      {
        reply: {
          text: 'Change my meal',
          postbackData: 'change_meal',
        },
      },
    ];
    
    const params = {
      messageText: "Here's what we've noted down: You've opted for seat " + seat + " and a vegetarian meal. Please confirm your choices.",
      msisdn: msisdn,
      suggestions: suggestions
    };  
    
    rbmApiHelper.sendMessage(params);  
    

  15. L'utilisateur appuie sur une réponse suggérée pour confirmer les détails de l'enregistrement.

    Suggestion de confirmation des informations appuyant sur l'écran.

  16. L'agent annonce que l'enregistrement est terminé.

    Le message indique : Bravo ! Vous êtes maintenant enregistré pour votre vol. Voici votre carte d'embarquement. Nous sommes ravis de vous accueillir bientôt.

    Exemple de code

    const params = {
      messageText: "Hooray! You're now checked in for your flight ☑️ Here's your boarding pass. We're so happy to host you soon!",
      msisdn: msisdn,
    };  
    
    let self = this;  
    
    rbmApiHelper.sendMessage(params, function (response, err) {
      self.sendWalletPass(msisdn);       
    }); 
    

  17. L'agent envoie la carte d'embarquement de l'utilisateur.

    La fiche enrichie affiche une image de la carte d'embarquement avec un code QR et les informations du vol. Le texte de la fiche indique : Nous vous tiendrons informé ! Vous recevrez une notification si les informations de votre vol changent. Une suggestion s'affiche sur la carte : "Ajouter à Google Wallet".

    Exemple de code

    this.walletHelper.createFlightPassUrl(this.seatmap[msisdn]).then((url) => {
      let suggestions = [
        {
          action: {
            text: 'Add to Google Wallet',
            postbackData: 'addToWallet',
            openUrlAction: {
              url: url
            },
          },
        },
      ];  
    
      const params = {
        messageText: 'HS123 LHR to BOM\nPassenger: Jo Flow',
        messageDescription: "We'll keep you up to date! You'll get a notification if your flight details change.",
        msisdn: msisdn,
        suggestions: suggestions,
        imageUrl: getImageUrl('boardingPass.png'),
        height: 'TALL',
        orientation: 'HORIZONTAL',
        thumbnailImageAlignment: 'LEFT',
      };  
    
      rbmApiHelper.sendRichCard(params);
    }); 
    

    Dans cette carte enrichie horizontale, l'image est une carte d'embarquement entièrement fonctionnelle fournie par la compagnie aérienne. L'image doit afficher toutes les informations d'embarquement nécessaires, y compris un code-barres à scanner. Les utilisateurs peuvent appuyer sur l'image pour afficher et scanner leur carte d'embarquement depuis l'application Messages de Google.

    Une suggestion Ajouter à Google Wallet s'affiche sur la fiche enrichie. Cette suggestion déclenche une action d'ouverture d'URL qui ouvre l'application Google Wallet, où l'utilisateur peut ajouter la carte d'embarquement à son portefeuille. (Si l'application n'est pas installée sur l'appareil de l'utilisateur, celui-ci est invité à l'installer.) Une fois la carte ajoutée à Google Wallet, l'utilisateur reçoit automatiquement un rappel concernant le vol et des mises à jour d'état si les informations sur son vol changent.

    Les utilisateurs qui n'ajoutent pas leur carte à Google Wallet doivent également être tenus à jour. Envoyez un message à l'utilisateur en cas de modification des informations d'embarquement affichées sur la carte enrichie.

  18. L'utilisateur appuie sur une action suggérée pour ajouter la carte à Google Wallet.

    Icône Google Wallet et suggestion d'ajout à Google Wallet

  19. L'application Google Wallet s'ouvre. L'utilisateur appuie sur un bouton pour ajouter la carte à son portefeuille.

    L'application Wallet affiche une carte d'embarquement simplifiée et un bouton "Ajouter".

  20. L'utilisateur appuie sur un bouton pour afficher sa carte.

    Une coche s'affiche au-dessus de la carte. Le bouton "Afficher dans Google Wallet" s'affiche.

  21. La carte d'embarquement avec le code QR s'affiche.

    Carte d'embarquement avec toutes les informations sur le vol et le code QR