เพิ่มบอร์ดดิ้งพาสไปยัง Google Wallet

คุณสามารถใช้ Google Messages ร่วมกับ RCS และ Google Wallet เพื่อออกแบบขั้นตอนการเช็คอินที่ราบรื่น กล่าวคือ ผู้ใช้เช็คอินเสร็จ รับบอร์ดดิ้งพาส และเพิ่มบัตรลงใน Google Wallet โดยตรงจากแอป Messages โดยเมื่ออยู่ในกระเป๋าสตางค์ บัตรจะอัปเดตโดยอัตโนมัติ หากรายละเอียดเที่ยวบินมีการเปลี่ยนแปลง ผู้ใช้สามารถเข้าถึงบัตรขึ้นเครื่องที่อัปเดตล่าสุดได้อย่างรวดเร็วในโทรศัพท์

เอกสารนี้อธิบายขั้นตอนทางเทคนิคในการใช้บัตร boarding pass กับขั้นตอนใน Google Wallet นอกจากนี้ยังมีตัวอย่างการสนทนาพร้อมเคล็ดลับการออกแบบเพื่อประสบการณ์การเช็คอินที่ราบรื่นและมีประสิทธิภาพด้วย RBM

การติดตั้งใช้งานทางเทคนิค

หากต้องการใช้ขั้นตอน boarding pass กับ 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 Console
  6. ใช้เทมเพลตบอร์ดดิ้งพาสเพื่อสร้างชั้นโดยสารใหม่

Google Wallet API

หากต้องการสร้างบอร์ดดิ้งพาสและสร้าง URL เพิ่มลงใน Google Wallet สำหรับ RBM ให้ทำตามขั้นตอนเหล่านี้

  1. ดำเนินการตรวจสอบสิทธิ์และการให้สิทธิ์ที่จำเป็น
  2. สร้างออบเจ็กต์ Passes
  3. รับ JSON Web Token (JWT) ที่ลงนามแล้ว ความยาวสูงสุดของ JWT ที่เข้ารหัสคือ 2,048 อักขระ
  4. ใช้ JWT เพื่อสร้าง URL เพิ่มลงใน Google Wallet

API ของ RBM

หากต้องการส่งการแนะนำให้เพิ่มลงใน Google Wallet จาก RBM ให้ส่งการดำเนินการเปิด URL ในเพย์โหลดข้อความ ให้ทำดังนี้

  1. สำหรับ text ให้ป้อน "เพิ่มลงใน Google Wallet"
  2. ป้อน URL เพิ่มลงใน Google Wallet ในส่วน url

ไอคอน Google Wallet จะแสดงในป้ายกำกับคำแนะนำโดยอัตโนมัติ

ไอคอน Google Wallet ในคำแนะนำ "เพิ่มลงใน Google Wallet"

การออกแบบการสนทนา

ตัวอย่างนี้ใช้พลังการสนทนาที่ไม่เหมือนใครเพื่อแนะนําผู้ใช้ผ่านขั้นตอนการเช็คอินที่สมบูรณ์ เครื่องมือนี้แสดงวิธีที่คุณสามารถใช้กล่องโต้ตอบที่เป็นธรรมชาติและคุณสมบัติที่หลากหลาย เช่น คำแนะนำด้วยการแตะเพียงครั้งเดียวและการ์ดริชมีเดีย เพื่อช่วยให้ผู้ใช้บรรลุเป้าหมาย ในกรณีนี้เป้าหมายของพวกเขาคือ (1) ปรับแต่งประสบการณ์ของเที่ยวบิน (2) รับบอร์ดดิ้งพาสและ (3) เพิ่มบัตรลงใน Google Wallet เพื่อการเข้าถึงที่สนามบินอย่างรวดเร็ว

ต่อไปนี้เป็นภาพรวมของการสนทนา ตามด้วยเคล็ดลับการออกแบบและ รายละเอียดทีละขั้นตอนของโฟลว์ หากต้องการใช้การออกแบบที่คล้ายกันสำหรับตัวแทน ให้ดูตัวอย่างโค้ดโดยทำตามขั้นตอน

แผนภาพการสนทนา

คำแนะนำเกี่ยวกับการออกแบบ

โปรดคำนึงถึงหลักการต่อไปนี้เมื่อออกแบบขั้นตอนการเช็คอิน

  • ข้อความแรกเป็นข้อความที่สำคัญที่สุด ระบุวัตถุประสงค์ของการสนทนาโดยย่อเพื่อให้ผู้ใช้มีเหตุผลในการมีส่วนร่วม
  • แต่ละข้อความควรให้ข้อมูลเพียงเล็กน้อยและแจ้งให้ผู้ใช้ตอบกลับ การตอบกลับที่แนะนำและการดำเนินการที่แนะนำจะช่วยผู้ใช้ดำเนินการขั้นตอนถัดไป
  • Agent ของคุณควรตอบสนองได้อย่างรวดเร็ว ไม่ใช่หุ่นยนต์ ใช้ภาษาที่สะท้อนถึงโทนเสียงของแบรนด์ ตัวแทนแบรนด์ในอุดมคติจะแชทกับลูกค้าอย่างไร
  • ผู้คนชอบที่จะรู้สึกพิเศษ คุณสามารถปรับเปลี่ยนประสบการณ์การเช็คอินในแบบของคุณโดยแนะนำที่นั่งหรืออาหารตามประวัติเที่ยวบินของผู้ใช้
  • Rich Card และภาพสไลด์ทำให้การสนทนามีความหลากหลายมากขึ้น ใช้เพื่อแชร์รูปภาพและรายละเอียดที่จะช่วยให้ผู้ใช้เลือกตัวเลือกต่างๆ ได้
  • การสนทนาที่ดีจะจบลงด้วยดี โปรดยืนยันรายละเอียดการเช็คอินของผู้ใช้ก่อนส่งบัตรขึ้นเครื่อง แสดงความเป็นมนุษย์ด้วยการกล่าวคำอำลาอย่างเป็นกันเอง

ขั้นตอนการเช็คอิน

  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. ตัวแทนขอให้ผู้ใช้ยอมรับนโยบายด้านความปลอดภัย

    Rich Card ที่มีอินโฟกราฟิกของนโยบายความปลอดภัยและคำแนะนำในการเห็นด้วยหรือไม่เห็นด้วย ข้อความบนการ์ดระบุว่า โปรดอ่านนโยบายด้านความปลอดภัยและแจ้งให้เราทราบว่าคุณยอมรับนโยบายดังกล่าวเพื่อช่วยเราดูแลให้เที่ยวบินปลอดภัย

    ตัวอย่างโค้ด

    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. ตัวแทนแจ้งให้ผู้ใช้เลือกที่นั่ง

    Rich Card ที่มีอินโฟกราฟิกแผนที่ที่นั่ง ข้อความบนการ์ดระบุว่า "ถึงเวลานั่งผ่อนคลายแล้ว เราได้แนะนำที่นั่งบางส่วนโดยอิงตามเที่ยวบินล่าสุดของคุณ เลือกที่นั่งที่ต้องการ หรือแจ้งให้เราทราบถึงที่นั่งที่ต้องการโดยพิมพ์หมายเลข คำแนะนำที่แสดงตามการ์ดจะแสดงตัวเลือกที่นั่ง 2-3 รายการ

    ตัวอย่างโค้ด

    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. ตัวแทนจะแสดงตัวเลือกอาหาร

    ภาพสไลด์ของการ์ดริชมีเดียแสดงการ์ด 2 ใบ โดยการ์ดใบหนึ่งมีรูปภาพสลัด ส่วนอีกใบมีรูปภาพไก่ย่าง ทั้ง 2 ใบมีรายการส่วนผสมและคำแนะนำในการเลือกอาหารนั้น

    ตัวอย่างโค้ด

    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. ตัวแทนจะส่งบอร์ดดิ้งพาสของผู้ใช้

    การ์ดริชมีเดียแสดงรูปภาพบอร์ดดิ้งพาสที่มีคิวอาร์โค้ดและรายละเอียดเที่ยวบิน ข้อความบนการ์ดบอกว่าเราจะคอยอัปเดตคุณให้เป็นปัจจุบันเสมอ คุณจะได้รับการแจ้งเตือนหากรายละเอียดเที่ยวบินมีการเปลี่ยนแปลง คําแนะนําบนการ์ดจะระบุว่า "เพิ่มลงใน 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);
    }); 
    

    ในริชการ์ดแนวนอนนี้ ภาพเป็นบัตรขึ้นเครื่องที่ใช้งานได้จริงซึ่งสายการบินเป็นผู้จัดหา ภาพควรแสดงข้อมูลที่จำเป็นทั้งหมดสำหรับการขึ้นเครื่อง รวมถึงบาร์โค้ดที่สแกนได้ ผู้ใช้สามารถแตะรูปภาพเพื่อดูและสแกนบัตร boarding pass จากแอปรับส่งข้อความของ Google

    คำแนะนำเพิ่มลงใน Google Wallet จะปรากฏบนการ์ดริชมีเดีย คําแนะนํานี้จะทริกเกอร์การดําเนินการเปิด URL ซึ่งจะเปิดแอป Google Wallet เพื่อให้ผู้ใช้เพิ่มบัตรขึ้นเครื่องลงใน Wallet ได้ (หากแอปไม่อยู่ในอุปกรณ์ของผู้ใช้ ระบบจะแจ้งให้ผู้ใช้ติดตั้งแอป) เมื่อเพิ่มบัตรลงใน Google Wallet แล้ว ผู้ใช้จะได้รับการช่วยเตือนเที่ยวบินและการอัปเดตสถานะโดยอัตโนมัติหากรายละเอียดเที่ยวบินมีการเปลี่ยนแปลง

    และผู้ใช้ที่ไม่ได้เพิ่มบัตรลงใน Google Wallet ก็ควรอัปเดตข้อมูลอยู่เสมอ ส่งข้อความถึงผู้ใช้เกี่ยวกับการเปลี่ยนแปลงข้อมูลการขึ้นเครื่องที่แสดงในการ์ดริชมีเดีย

  18. ผู้ใช้แตะการดำเนินการที่แนะนำเพื่อเพิ่มบัตรลงใน Google Wallet

    ไอคอน Google Wallet และคำแนะนำให้เพิ่มลงใน Google Wallet

  19. แอป Google Wallet จะเปิดขึ้น ผู้ใช้แตะปุ่มเพื่อเพิ่มบัตรลงใน Wallet

    แอป Wallet จะแสดงบอร์ดดิ้งพาสที่เรียบง่ายและปุ่ม "เพิ่ม"

  20. ผู้ใช้แตะปุ่มเพื่อดูบัตร

    เครื่องหมายถูกจะปรากฏเหนือบัตร ปุ่ม "ดู" ใน Google Wallet จะปรากฏขึ้น

  21. บอร์ดดิ้งพาสที่มีคิวอาร์โค้ดจะแสดงขึ้น

    บัตรขึ้นเครื่องพร้อมรายละเอียดเที่ยวบินทั้งหมดและคิวอาร์โค้ด