کارت پرواز را به Google Wallet اضافه کنید

شما می‌توانید از Google Messages به همراه RCS و Google Wallet برای طراحی یک جریان ورود یکپارچه استفاده کنید: کاربر ورود خود را تکمیل می‌کند، کارت پرواز خود را دریافت می‌کند و آن را مستقیماً از طریق برنامه Messages به Google Wallet اضافه می‌کند. پس از قرار دادن کارت در کیف پول، در صورت تغییر جزئیات پرواز، کارت به طور خودکار به‌روزرسانی می‌شود. کاربران به سرعت به کارت پرواز به‌روز شده روی تلفن خود دسترسی دارند.

این سند مراحل فنی پیاده‌سازی کارت ورود به سیستم در جریان Google Wallet را شرح می‌دهد. همچنین شامل یک نمونه مکالمه به همراه نکات طراحی برای یک تجربه ورود روان و کارآمد با RBM است.

پیاده‌سازی فنی

برای پیاده‌سازی کارت ورود به جلسه در جریان Google Wallet، با API Google Wallet و API RBM کار خواهید کرد.

پیش‌نیازها

برای شروع کار با API کیف پول گوگل، مراحل زیر را دنبال کنید:

  1. برای ایجاد و توزیع مجوز برای Google Wallet، یک حساب کاربری صادرکننده کیف پول ثبت کنید .
  2. اگر از قبل پروژه‌ای در گوگل کلود (GCP) ندارید، آن را ایجاد کنید.
  3. فعال کردن API کیف پول گوگل
  4. یک حساب کاربری و کلید سرویس ایجاد کنید تا بتوانید API کیف پول گوگل را فراخوانی کنید.
  5. حساب سرویس را در کنسول Google Pay و Wallet تأیید کنید.
  6. برای ایجاد یک کلاس جدید شبانه‌روزی از الگوی کارت ورود به جلسه استفاده کنید.

رابط برنامه‌نویسی کاربردی (API) کیف پول گوگل

برای ایجاد کارت پرواز و ایجاد آدرس اینترنتی «افزودن به کیف پول گوگل» برای RBM، این مراحل را دنبال کنید:

  1. احراز هویت و مجوزهای لازم را انجام دهید.
  2. یک شیء Passes ایجاد کنید.
  3. یک JSON Web Token (JWT) امضا شده دریافت کنید. حداکثر طول یک JWT کدگذاری شده 2048 کاراکتر است.
  4. از JWT برای ایجاد یک URL برای افزودن به Google Wallet استفاده کنید.

رابط برنامه‌نویسی کاربردی RBM

برای ارسال پیشنهاد افزودن به کیف پول گوگل از RBM، یک اکشن Open URL ارسال کنید. در قسمت پیام، موارد زیر را انجام دهید:

  1. برای text ، «افزودن به کیف پول گوگل» را وارد کنید.
  2. برای url ، آدرس اینترنتی افزودن به کیف پول گوگل (Add to Google Wallet) را وارد کنید.

نماد کیف پول گوگل به طور خودکار روی برچسب پیشنهاد نمایش داده می‌شود.

آیکون کیف پول گوگل در پیشنهاد افزودن به کیف پول گوگل

طراحی مکالمه

این نمونه از قدرت منحصر به فرد مکالمه برای هدایت کاربران در طول یک فرآیند کامل ثبت نام استفاده می‌کند. این نشان می‌دهد که چگونه می‌توانید از گفتگوی طبیعی و ویژگی‌های غنی، مانند پیشنهادات تک‌لمسی و کارت‌های غنی، برای کمک به کاربران در رسیدن به اهدافشان استفاده کنید. در این مورد، اهداف آنها عبارتند از: (1) سفارشی‌سازی تجربه پرواز من، (2) دریافت کارت پرواز من، و (3) اضافه کردن آن به کیف پول گوگل برای دسترسی سریع در فرودگاه.

در ادامه، مروری بر این مکالمه ارائه شده است. در ادامه، نکات طراحی و شرح گام به گام جریان کار آمده است. برای پیاده‌سازی طرحی مشابه برای عامل خود، به نمونه‌های کدی که در ادامه‌ی مراحل آمده است، مراجعه کنید.

نمودار مکالمه

مشاوره طراحی

هنگام طراحی جریان ورود به سیستم، این اصول را در نظر داشته باشید:

  • اولین پیام شما مهمترین است. هدف مکالمه را به طور خلاصه بیان کنید تا کاربر دلیلی برای تعامل داشته باشد.
  • هر پیام باید اطلاعات مختصری را ارائه دهد و کاربر را به پاسخ دادن ترغیب کند. پاسخ‌های پیشنهادی و اقدامات پیشنهادی به کاربران کمک می‌کند تا گام بعدی را بردارند.
  • نماینده شما باید پاسخگو باشد، نه ربات. از زبانی استفاده کنید که منعکس کننده لحن صدای برند شما باشد. نماینده ایده آل برند شما چگونه با مشتری صحبت می کند؟
  • مردم دوست دارند احساس خاص بودن کنند. شما می‌توانید با پیشنهاد صندلی یا غذا بر اساس سابقه پرواز کاربر، تجربه ثبت نام را شخصی‌سازی کنید.
  • کارت‌های غنی و چرخ و فلک‌ها، گفتگو را پویاتر می‌کنند. از آنها برای به اشتراک گذاشتن تصاویر و جزئیاتی استفاده کنید که به کاربر در انتخاب از بین گزینه‌ها کمک می‌کند.
  • یک مکالمه خوب به خوبی به پایان می‌رسد. قبل از ارسال کارت پرواز، جزئیات ورود کاربر را تأیید کنید. با یک خداحافظی دوستانه، حس انسانی را به مکالمه اضافه کنید.

جریان ورود

  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. نماینده انتظارات مربوط به فرآیند ورود را تعیین می‌کند.

    پیام می‌گوید: باشه، عالیه. فقط ۳ مرحله برای ثبت نام هست. این اولین قدم برای شروع همکاری شماست.

    نمونه کد

    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. کاربر روی پاسخ پیشنهادی برای صندلی انتخابی خود ضربه می‌زند.

    پیشنهاد صندلی ۱۸A بررسی شد

  9. عامل، انتخاب کاربر را تأیید می‌کند.

    پیام می‌گوید: صندلی ۱۸A، سوار شدید.

    نمونه کد

    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. نماینده جزئیات ورود را خلاصه می‌کند.

    در پیام آمده است: آنچه یادداشت کرده‌ایم این است: شما صندلی ۱۸A و یک وعده غذایی گیاهی را انتخاب کرده‌اید. لطفاً انتخاب‌های خود را تأیید کنید. پیشنهادهایی برای تأیید جزئیات، تغییر وعده غذایی یا تغییر صندلی در زیر پیام ظاهر می‌شود.

    نمونه کد

    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 و جزئیات پرواز نشان می‌دهد. متن روی کارت می‌گوید: ما شما را در جریان خواهیم گذاشت! در صورت تغییر جزئیات پروازتان، اعلانی دریافت خواهید کرد. پیشنهادی روی کارت می‌گوید: «به کیف پول گوگل اضافه کنید».

    نمونه کد

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

    در این کارت افقیِ غنی ، تصویر، یک کارت پرواز کاملاً کاربردی است که توسط شرکت هواپیمایی ارائه می‌شود. تصویر باید تمام اطلاعات مورد نیاز برای سوار شدن به هواپیما، از جمله یک بارکد قابل اسکن را نمایش دهد. کاربران می‌توانند برای مشاهده و اسکن کارت پرواز خود از طریق برنامه پیام‌رسان گوگل، روی تصویر ضربه بزنند.

    یک پیشنهاد «افزودن به کیف پول گوگل» روی کارت غنی ظاهر می‌شود. این پیشنهاد باعث فعال شدن یک عمل باز کردن URL می‌شود که برنامه کیف پول گوگل را باز می‌کند، جایی که کاربر می‌تواند کارت پرواز را به کیف پول خود اضافه کند. (اگر برنامه روی دستگاه کاربر نباشد، از او خواسته می‌شود که آن را نصب کند.) پس از افزودن کارت به کیف پول گوگل، کاربر به طور خودکار یادآوری پرواز و به‌روزرسانی‌های وضعیت را در صورت تغییر جزئیات پرواز خود دریافت می‌کند.

    کاربرانی که کارت خود را به Google Wallet اضافه نمی‌کنند نیز باید به‌روز نگه داشته شوند. در مورد هرگونه تغییر در اطلاعات سوار شدن نشان داده شده روی کارت غنی، به کاربر پیام دهید.

  18. کاربر برای افزودن کارت به کیف پول گوگل، روی یک اقدام پیشنهادی ضربه می‌زند.

    آیکون کیف پول گوگل و پیشنهاد اضافه کردن به کیف پول گوگل

  19. برنامه کیف پول گوگل باز می‌شود. کاربر دکمه‌ای را لمس می‌کند تا کارت را به کیف پول خود اضافه کند.

    برنامه کیف پول یک کارت پرواز ساده و دکمه‌ای با عنوان «افزودن» را نشان می‌دهد.

  20. کاربر برای مشاهده‌ی کارت عبور خود، دکمه‌ای را لمس می‌کند.

    علامت تیک بالای کارت نمایش داده می‌شود. دکمه مشاهده در گوگل والت (Google Wallet) ظاهر می‌شود.

  21. کارت پرواز با کد QR نمایش داده می‌شود.

    کارت پرواز شامل تمام جزئیات پرواز و کد QR