הוספה של כרטיס עלייה למטוס ל-Google Wallet

אתם יכולים להשתמש ב-Google Messages עם RCS ועם Google Wallet כדי לתכנת את תהליך הצ'ק-אין בצורה חלקה: המשתמשים משלימים את הצ'ק-אין, מקבלים את כרטיס העלייה למטוס ומוסיפים אותו ישירות ל-Google Wallet דרך אפליקציית Messages. כשהכרטיס עובר לארנק, הכרטיס מתעדכן באופן אוטומטי אם פרטי הטיסה משתנים. למשתמשים יש גישה מהירה לכרטיס עלייה למטוס עדכני ישירות מהטלפון.

במסמך הזה מתוארים השלבים הטכניים כדי להטמיע כרטיס עלייה למטוס בתהליך העבודה ב-Google Wallet. בנוסף, יש שיחה לדוגמה עם טיפים לעיצוב של חוויית צ'ק-אין חלקה ויעילה באמצעות RBM.

הטמעה טכנית

כדי להטמיע כרטיס עלייה למטוס בתהליך העבודה ב-Google Wallet, תצטרכו להשתמש ב-Google Wallet API וב-RBM API.

דרישות מוקדמות

כדי להתחיל להשתמש ב-Google Wallet API, צריך לבצע את השלבים הנדרשים הבאים:

  1. להירשם לחשבון מנפיק ב-Wallet כדי ליצור ולחלק כרטיסים ל-Google Wallet.
  2. יוצרים פרויקט חדש ב-Google Cloud (GCP), אם אין לכם פרויקט קיים.
  3. מפעילים את Google Wallet API.
  4. יוצרים חשבון שירות ומפתח כדי שתוכלו לבצע קריאה ל-Google Wallet API.
  5. נותנים הרשאה לחשבון השירות במסוף Google Pay ו-Wallet.
  6. משתמשים בתבנית של כרטיס העלייה למטוס כדי ליצור מחלקה חדשה של עלייה למטוס.

ממשק API של Google Wallet

כדי ליצור כרטיס עלייה למטוס וליצור כתובת URL להוספה ל-Google Wallet עבור RBM, פועלים לפי השלבים האלה:

  1. מבצעים את האימותים וההרשאות הנדרשים.
  2. יצירת אובייקט של כרטיסים.
  3. מקבלים אסימון JWT (JSON Web Token) חתום. האורך המקסימלי של JWT מקודד הוא 2048 תווים.
  4. משתמשים ב-JWT כדי ליצור כתובת URL להוספה ל-Google Wallet.

RBM API

כדי לשלוח הצעה להוספה ל-Google Wallet מ-RBM, שולחים פעולה של פתיחת כתובת URL. בתוכן של ההודעה, מבצעים את הפעולות הבאות:

  1. בשדה text, מזינים 'הוספה ל-Google Wallet'.
  2. בשדה url, מזינים את כתובת ה-URL להוספה ל-Google Wallet.

סמל Google Wallet יופיע באופן אוטומטי בתווית ההצעה.

סמל של Google Wallet בהצעה 'הוספה ל-Google Wallet'

עיצוב שיחות

בדוגמה הזו נעשה שימוש ביכולת הייחודית של שיחה כדי להנחות את המשתמשים בתהליך הבדיקה המלא. הדוגמה הזו ממחישה איך אפשר להשתמש בדיאלוג טבעי ובתכונות מתקדמות, כמו הצעות בלחיצה אחת וכרטיסים מתקדמים, כדי לעזור למשתמשים להשיג את המטרות שלהם. במקרה הזה, המטרות שלהם הן: (1) להתאים אישית את חוויית הטיסה, (2) לקבל את כרטיס העלייה למטוס ו-(3) להוסיף אותו ל-Google Wallet כדי לגשת אליו במהירות בשדה התעופה.

בהמשך מופיעה סקירה כללית של השיחה. לאחר מכן מופיעים טיפים לעיצוב ופירוט של התהליך. כדי ליישם עיצוב דומה לסוכן, תוכלו להיעזר בדוגמאות הקוד לפי השלבים הבאים.

תרשים של השיחה

עצות לעיצוב

חשוב לזכור את העקרונות הבאים כשמתכננים את תהליך הצ'ק-אין:

  • ההודעה הראשונה היא החשובה ביותר. ציינו בקצרה את מטרת השיחה כדי שלמשתמש תהיה סיבה להשתתף בשיחה.
  • כל הודעה צריכה לספק קטע קטן של מידע ולעודד את המשתמש להשיב. הצעות לתשובות והצעות לפעולות עוזרות למשתמשים לבצע את השלב הבא.
  • הנציג צריך להגיב במהירות, ולא לפעול באופן רובוטי. השתמשו בשפה שמשקפת את סגנון הכתיבה של המותג. איך נציג המותג האידיאלי שלכם יתכתב בצ'אט עם לקוח?
  • אנשים אוהבים להרגיש מיוחדים. תוכלו להתאים אישית את חוויית הצ'ק-אין על ידי הצעת מושבים או ארוחות על סמך היסטוריית הטיסות של המשתמש.
  • כרטיסים עשירים וקרוסלות עוזרים לכם לנהל שיחה דינמית יותר. אפשר להשתמש בהם כדי לשתף תמונות ופרטים שיעזרו למשתמש לבחור מבין האפשרויות.
  • שיחה טובה מסתיימת בצורה טובה. לפני שליחת כרטיס העלייה למטוס, צריך לוודא את פרטי הצ'ק-אין של המשתמש. הוספת מגע אנושי עם שליחה ידידותית.

תהליך הצ'ק-אין

  1. הנציג מודיע למשתמש שהצ'ק-אין לטיסה שלו פתוח.

    הודעת פתיחה עם פרטי הצ'ק-אין והצעות לתשובות

    דוגמת קוד

    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. המשתמש מקייש על הצעת תשובה כדי לדווח על הגעה.

    הקשה על ההצעה להצטרפות לחדר

  3. הנציג מגדיר את הציפיות לתהליך הצ'ק-אין.

    ההודעה: בסדר, מצוין. רק 3 שלבים כדי לעשות צ'ק-אין. זה השלב הראשון בתהליך ההצטרפות

    דוגמת קוד

    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. הנציג מבקש מהמשתמש להביע הסכמה למדיניות הבטיחות.

    כרטיס עשיר עם אינפוגרפיקה של מדיניות הבטיחות והצעות לאישור או לדחייה. הכיתוב בכרטיס: כדי לעזור לנו להבטיח טיסה בטוחה, עליך לקרוא את מדיניות הבטיחות שלנו ולאשר את הסכמתך.

    דוגמת קוד

    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. המשתמש מקשיב על אחת מההצעות לתשובה כדי לאשר.

    מקישים על ההצעה להסכמה

  6. הנציג מודה למשתמש ומציג את השלב הבא.

    ההודעה: תודה, נוסע בטוח הוא נוסע שמח! זה השלב הבא

    דוגמת קוד

    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. הנציג מבקש מהמשתמש לבחור מושב.

    כרטיס עשיר עם אינפוגרפיקה של מפת המושבים. בטקסט בכרטיס כתוב: הגיע הזמן לנוח! המלצנו כמה מושבים על סמך הטיסה האחרונה שלך. בוחרים את המושב הרצוי או מקלידים את המספר של המושב המועדף. אחרי הכרטיס יוצגו כמה אפשרויות ישיבה

    דוגמת קוד

    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. המשתמש מקייש על אחת מהתשובות המוצעות עבור המושב שבחר.

    מקישים על ההצעה למושב 18A

  9. הנציג מאשר את הבחירה של המשתמש.

    בהודעה כתוב: "מושב 18A, קיבלת אותו."

    דוגמת קוד

    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. הנציג מבקש מהמשתמש לבחור את הארוחה במטוס.

    ההודעה: עכשיו נדבר על אוכל. אפשר להזמין מראש את הארוחה בתוך הטיסה. אבקש ממך לבחור: מנה ראשונה צמחונית או מנה ראשונה עם עוף?

    דוגמת קוד

    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. הנציג מציג את האפשרויות לארוחות.

    בקרוסלה עם כרטיסים עשירים מוצגים שני כרטיסים: אחד עם תמונה של סלט והשני עם תמונה של עוף צלוי. בשני הכרטיסים מופיעה רשימת מרכיבים והצעה לבחור את הארוחה הזו

    דוגמת קוד

    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. המשתמש מקייש על אחת מהתשובות המוצעות לארוחה שבחר.

    מקישים על ההצעה לבחירת תפריט צמחוני.

  13. הנציג מאשר את הבחירה של המשתמש.

    בהודעה כתוב: "זה צמחוני".

    דוגמת קוד

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

  14. הסוכן מסכם את פרטי הצ'ק-אין.

    תוכן ההודעה: אלה הפרטים שציינתי: ביקשת מקום במושב 18A וארוחה צמחונית. עליך לאשר את הבחירות שלך. מתחת להודעה מופיעות הצעות לאישור הפרטים, לשינוי הארוחה או לשינוי המושב.

    דוגמת קוד

    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. המשתמש מקייש על הצעה לתשובה כדי לאשר את פרטי הצ'ק-אין.

    מקישים על ההצעה לאישור הפרטים.

  16. הנציג מודיע שהצ'ק-אין הסתיים.

    ההודעה: מעולה! עכשיו השלמת את תהליך הצ'ק-אין לטיסה. הנה כרטיס העלייה שלך למטוס. נשמח לארח אותך בקרוב!

    דוגמת קוד

    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. הנציג שולח את כרטיס העלייה למטוס של המשתמש.

    בכרטיס מתקדם מוצגת תמונה של כרטיס העלייה למטוס עם קוד QR ופרטי טיסה. הטקסט בכרטיס הוא: אנחנו נעדכן אותך! תישלח אליך התראה אם פרטי הטיסה שלך ישתנו. תופיע הצעה בכרטיס עם הכיתוב 'הוספה ל-Google Wallet'.

    דוגמת קוד

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

    בכרטיס עשיר אופקי, התמונה היא כרטיס עלייה למטוס פונקציונלי לחלוטין שסופק על ידי חברת התעופה. בתמונה צריכים להופיע כל פרטי העלייה למטוס הנדרשים, כולל ברקוד שניתן לסריקה. המשתמשים יכולים להקיש על התמונה כדי להציג ולסרוק את כרטיס העלייה למטוס באפליקציית Messages של Google.

    ההצעה הוספה ל-Google Wallet תופיע בכרטיס המורחב. ההצעה הזו מפעילה פעולה של פתיחת כתובת URL שפותחת את אפליקציית Google Wallet, שבה המשתמש יכול להוסיף את כרטיס העלייה למטוס לארנק. (אם האפליקציה לא מותקנת במכשיר של המשתמש, הוא יתבקש להתקין אותה). אחרי שמוסיפים את הכרטיס ל-Google Wallet, המשתמש מקבל באופן אוטומטי תזכורת לטיסה ועדכוני סטטוס במקרה שפרטי הטיסה משתנים.

    חשוב גם לעדכן את המשתמשים שלא מוסיפים את הכרטיס ל-Google Wallet. לשלוח הודעה למשתמש על כל שינוי בפרטי העלייה למטוס שמוצגים בכרטיס המפורט.

  18. המשתמש מקיש על הצעה לפעולה כדי להוסיף את הכרטיס ל-Google Wallet.

    סמל Google Wallet והצעה להוספה ל-Google Wallet

  19. אפליקציית Google Wallet תיפתח. המשתמש מקייש על לחצן כדי להוסיף את הכרטיס לארנק.

    באפליקציית Wallet מוצג כרטיס עלייה למטוס פשוט וכן לחצן 'הוספה'.

  20. המשתמש מקייש על לחצן כדי להציג את הכרטיס.

    סימן הווי יופיע מעל הכרטיס. יופיע לחצן להצגה ב-Google Wallet.

  21. כרטיס העלייה למטוס עם קוד ה-QR יוצג.

    כרטיס עלייה למטוס עם כל פרטי הטיסה וקוד QR