Aggiungi carta d'imbarco a Google Wallet

Puoi utilizzare Messaggi di Google con RCS e Google Wallet per progettare un flusso di check-in senza interruzioni: l'utente completa il check-in, riceve la carta d'imbarco e la aggiunge direttamente a Google Wallet dall'app Messaggi. Una volta nel portafoglio, la tessera viene aggiornata automaticamente se i dettagli del volo cambiano. Gli utenti possono accedere rapidamente a una carta d'imbarco aggiornata direttamente sul proprio telefono.

Questo documento descrive i passaggi tecnici per implementare una carta d'imbarco al flusso di Google Wallet. Inoltre, include una conversazione di esempio con suggerimenti di progettazione per un'esperienza di check-in fluida ed efficiente con RBM.

Implementazione tecnica

Per implementare una carta d'imbarco nel flusso di Google Wallet, lavorerai con l'API Google Wallet e l'API RBM.

Prerequisiti

Per iniziare a utilizzare l'API Google Wallet, segui questi passaggi obbligatori:

  1. Registrati per creare un account emittente di Wallet per poter creare e distribuire le tessere per Google Wallet.
  2. Se non ne hai già uno, crea un progetto Google Cloud Platform (GCP).
  3. Abilita l'API Google Wallet.
  4. Crea un account di servizio e una chiave per chiamare l'API Google Wallet.
  5. Autorizzare l'account di servizio in Google Pay e nella console di Wallet.
  6. Utilizza il modello di carta d'imbarco per creare una nuova classe d'imbarco.

API Google Wallet

Per creare una carta d'imbarco e generare un URL Aggiungi a Google Wallet per RBM, segui questi passaggi:

  1. Esegui le autenticazioni e le autorizzazioni necessarie.
  2. Crea un oggetto Pass.
  3. Ottenere un token JWT (JSON Web Token) firmato. La lunghezza massima di un JWT codificato è di 2048 caratteri.
  4. Utilizza il JWT per generare un URL Aggiungi a Google Wallet.

API RBM

Per inviare un suggerimento Aggiungi a Google Wallet da RBM, invia un'azione Apri URL. Nel payload dei messaggi, segui questi passaggi:

  1. Per text, inserisci "Aggiungi a Google Wallet".
  2. Per url, inserisci l'URL Aggiungi a Google Wallet.

L'icona di Google Wallet verrà mostrata automaticamente sull'etichetta del suggerimento.

Icona di Google Wallet nel suggerimento Aggiungi a Google Wallet

Progettazione di conversazioni

Questo esempio sfrutta le potenzialità uniche della conversazione per guidare gli utenti attraverso un flusso di check-in completo. Dimostra come utilizzare dialoghi naturali e funzionalità avanzate, come suggerimenti con un tocco e schede interattive, per aiutare gli utenti a raggiungere i loro obiettivi. In questo caso, i loro obiettivi sono: (1) personalizzare la mia esperienza di volo, (2) ricevere la carta d'imbarco e (3) aggiungerla a Google Wallet per accedervi facilmente in aeroporto.

Di seguito una panoramica della conversazione. Sono seguiti da suggerimenti per la progettazione e una descrizione dettagliata del flusso. Per implementare una struttura simile per l'agente, consulta gli esempi di codice riportati di seguito per i passaggi.

Diagramma di conversazione

Consigli di progettazione

Tieni a mente questi principi quando progetti il flusso di check-in:

  • Il tuo primo messaggio è il più importante. Indica brevemente lo scopo della conversazione, in modo che l'utente abbia un motivo per interagire.
  • Ogni messaggio deve fornire una piccola parte di informazioni e chiedere all'utente di rispondere. Le risposte suggerite e le azioni suggerite semplificano il passaggio successivo.
  • Il tuo agente deve essere reattivo, non robotizzato. Utilizza un linguaggio che rifletta il tono di voce del tuo brand. In che modo il tuo rappresentante ideale del brand chiacchiera con un cliente?
  • Alle persone piace sentirsi speciali. Puoi personalizzare l'esperienza di check-in suggerindo posti o pasti in base alla cronologia dei voli dell'utente.
  • Le schede interattive e i caroselli rendono la conversazione più dinamica. Utilizzale per condividere immagini e dettagli che aiuteranno l'utente a scegliere tra le opzioni disponibili.
  • Una bella conversazione finisce bene. Conferma i dettagli del check-in dell'utente prima di inviare la carta d'imbarco. Aggiungi un tocco umano con una spedizione amichevole.

Flusso di check-in

  1. L'agente notifica all'utente che il check-in del volo è aperto.

    Messaggio di saluto con dettagli del check-in e risposte suggerite

    Esempio di codice

    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'utente tocca una risposta suggerita per il check-in.

    Suggerimento: check-in toccato

  3. L'agente definisce le aspettative per la procedura di check-in.

    Stati dei messaggi: OK, perfetto. Ti mancano solo 3 semplici passaggi per effettuare il check-in. Ecco il primo passaggio per iniziare

    Esempio di codice

    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'agente chiede all'utente di accettare le norme sulla sicurezza.

    Scheda interattiva con un'infografica delle norme sulla sicurezza e suggerimenti da concordare o meno. Il testo sulla scheda dice: Per aiutarci a garantire un volo sicuro, leggi le nostre norme sulla sicurezza e comunicaci il tuo consenso.

    Esempio di codice

    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'utente tocca una risposta suggerita per accettare.

    Suggerimento per il suggerimento che accetta

  6. L'agente ringrazia l'utente e introduce il passaggio successivo.

    Stati del messaggio: Grazie, un passeggero sicuro è un passeggero felice! Ecco il passaggio successivo

    Esempio di codice

    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'agente richiede all'utente di scegliere un posto.

    Scheda interattiva con infografica sulla mappa. Il testo sulla carta dice: è ora di sedersi e mettersi a proprio agio! Abbiamo consigliato alcuni posti in base al tuo ultimo volo. Scegli quello che preferisci o comunicaci il tuo posto preferito digitando il numero. I suggerimenti sotto la scheda mostrano alcune opzioni di tavoli

    Esempio di codice

    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'utente tocca una risposta suggerita per il posto selezionato.

    Suggerimento per la postazione 18A che viene toccata

  9. L'agente conferma la scelta dell'utente.

    Stati dei messaggi: Posto 18A, ricevuto.

    Esempio di codice

    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'agente chiede all'utente di scegliere il pasto durante il volo.

    Stati dei messaggi: ora parliamo di cibo. Puoi prenotare il pasto durante il volo. Ti andrebbe bene un antipasti vegetariani o un pollo?

    Esempio di codice

    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'agente mostra le opzioni per i pasti.

    Un carosello di schede dettagliate mostra due schede: una con l'immagine di un'insalata e un'altra con l'immagine di un pollo arrosto. Entrambe le schede contengono un elenco di ingredienti e un suggerimento per scegliere il pasto

    Esempio di codice

    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'utente tocca una risposta suggerita per il pasto che ha scelto.

    Toccando il suggerimento per scegliere l'opzione vegetariana

  13. L'agente conferma la scelta dell'utente.

    Lo stato del messaggio è: vegetariano.

    Esempio di codice

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

  14. L'agente riassume i dettagli del check-in.

    Stati del messaggio: Ecco cosa abbiamo notato: hai scelto il posto 18A e un pasto vegetariano. Conferma le tue scelte. Sotto il messaggio vengono visualizzati dei suggerimenti per confermare i dettagli, modificare il pasto o cambiare il posto.

    Esempio di codice

    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'utente tocca una risposta suggerita per confermare i dettagli del check-in.

    Suggerimento per confermare che i dettagli vengono toccati

  16. L'agente annuncia che il check-in è stato completato.

    Stati dei messaggi: Evviva! Ora hai fatto il check-in per il tuo volo. Ecco la tua carta d'imbarco. Siamo felici di ospitarti a breve.

    Esempio di codice

    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'agente invia la carta d'imbarco dell'utente.

    La scheda interattiva mostra un'immagine della carta d'imbarco con un codice QR e i dettagli del volo. Il testo sulla scheda dice: Ti terremo aggiornato! Se i dettagli del volo cambiano, riceverai una notifica. Un suggerimento sulla scheda dice Aggiungi a Google Wallet

    Esempio di codice

    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);
    }); 
    

    In questa scheda interattiva orizzontale, l'immagine è una carta d'imbarco completamente funzionante fornita dalla compagnia aerea. L'immagine dovrebbe mostrare tutte le informazioni di imbarco necessarie, incluso un codice a barre scansionabile. Gli utenti possono semplicemente toccare l'immagine per visualizzare e scansionare la carta d'imbarco dall'app Messaggi di Google.

    Nella scheda interattiva viene visualizzato un suggerimento Aggiungi a Google Wallet. Questo suggerimento attiva un'azione URL aperto che apre l'app Google Wallet, in cui l'utente può aggiungere facilmente la carta d'imbarco al proprio portafoglio. Se l'app non è installata sul dispositivo dell'utente, verrà chiesto di installarla. Una volta aggiunto il pass a Google Wallet, l'utente riceve automaticamente un promemoria di volo e un aggiornamento dello stato se i dettagli del volo cambiano.

    Gli utenti che non aggiungono il pass a Google Wallet devono essere sempre aggiornati. Invia un messaggio all'utente per eventuali modifiche alle informazioni di imbarco mostrate nella scheda interattiva.

  18. L'utente tocca un'azione suggerita per aggiungere il pass a Google Wallet.

    Icona di Google Wallet e suggerimento di aggiunta a Google Wallet

  19. Si apre l'app Google Wallet. L'utente tocca un pulsante per aggiungere il pass al portafoglio.

    L'app Wallet mostra una carta d'imbarco semplificata e un pulsante con la dicitura Aggiungi.

  20. L'utente tocca un pulsante per visualizzare il proprio pass.

    Il segno di spunta viene visualizzato sopra il pass. Viene visualizzato il pulsante Visualizza in Google Wallet.

  21. Viene mostrata la carta d'imbarco con codice QR.

    Carta d'imbarco con tutti i dettagli del volo e il codice QR