您可以通过以下应用使用 Google 信息: RCS 和 Google 钱包 设计顺畅的签到流程:用户完整填写了 办理登机手续,接收登机牌并将其直接添加到 Google “信息”应用中的钱包。进入钱包后,卡券会随之更新 。用户可以快速访问 直接在手机上查看最新的登机牌信息
本文档介绍了实现登机牌的技术步骤, Google 钱包流程。本手册还提供了一个示例对话,其中包含 顺畅高效的签到体验。
技术实现
要实现将登机牌发送到 Google 钱包的流程,您需要与 Google Wallet API 和 RBM API。
前提条件
要开始使用 Google Wallet API,请按照以下必要步骤操作:
- 注册 钱包发卡机构账号,以便您为 Google 创建和分发卡券 钱包。
- 如果您还没有 Google Cloud (GCP) 项目,请创建一个。
- 启用 Google Wallet API。
- 创建服务账号和密钥,以便调用 Google Wallet API。
- 在 Google Pay 和钱包控制台中向服务账号授权。
- 使用登机牌模板创建新的登机类。
Google Wallet API
要为 RBM 创建登机牌并生成“添加到 Google 钱包”网址,请按照以下步骤操作:
- 执行必要的身份验证和授权。
- 创建卡券对象。
- 获取已签名的 JSON Web 令牌 (JWT)。已编码的 JWT 的最大长度 为 2048 个字符。
- 使用 JWT 生成“添加到 Google 钱包”网址。
RBM API
要从 RBM 发送“添加到 Google 钱包”建议,请发送打开网址的操作。 在消息载荷中,执行以下操作:
- 对于
text
,请输入“添加到 Google 钱包”。 - 对于
url
,请输入“添加到 Google 钱包”网址。
Google 钱包图标会自动显示在建议标签上。
对话设计
此示例利用独特的对话功能来引导用户 完整的签到流程。它展示了如何使用自然的对话和丰富的功能, 提供一键式建议和复合搜索卡等实用功能 目标。在本例中,他们的目标是:(1) 定制我的飞行体验;(2) (3) 将登机牌添加到 Google 钱包,以便在 机场
以下是本次对话的概览。接下来是设计提示和 即流程的分步详解。要为 请参阅以下步骤下方的代码示例。
<ph type="x-smartling-placeholder">
设计建议
设计签到流程时,请牢记以下原则:
- 第一条消息最为重要。简要说明 以便用户有理由进行互动
- 每条消息都应提供一小段信息并提示用户 响应。建议的回复 和建议的操作 让用户能够轻松执行下一步操作。
- 您的代理应该具备响应式响应能力,而不是机器人技术。使用的语言应反映您的 品牌语气理想的品牌代表会如何与 客户?
- 人们喜欢感觉自己获得了特别礼遇。您可通过以下方式设置个性化的签到体验: 根据用户的航班记录推荐座位或餐点。
- 复合搜索卡和轮播界面 让对话更有活力您可以使用图片库来分享图片和详细信息, 将有助于用户选择选项
- 良好的对话会收尾。请先确认用户的所在位置详细信息 发送登机牌通过友好送去添加一些人性元素。
签到流程
代理会通知用户其航班办理登机手续。
代码示例
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);
用户点按建议的回复来签到。
客服人员就签到流程设定了预期。
代码示例
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); });
代理会要求用户同意安全政策。
代码示例
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);
用户点按建议的回复以表示同意。
代理感谢用户并介绍后续步骤。
代码示例
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); });
代理提示用户选择一个座位。
代码示例
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);
用户点按所选座位的建议回复。
代理会确认用户的选择。
代码示例
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); });
代理让用户选择机上用餐。
代码示例
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); });
代理会显示用餐选项。
代码示例
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);
用户点按他们所选膳食的建议回复。
代理会确认用户的选择。
代码示例
const params = { messageText: `Vegetarian it is 💚`, msisdn: msisdn, }; let self = this; rbmApiHelper.sendMessage(params, function (response, err) { self.sendAskConfirmation(msisdn); });
代理汇总签到详细信息。
代码示例
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);
用户点按建议的回复以确认签到详情。
客服人员宣布签到已完成。
代码示例
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); });
代理会发送用户的登机牌。
代码示例
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); });
在这张横向复合信息卡中 图片是航空公司提供的功能齐全的登机牌。通过 图片应展示所有需要的登机信息,包括 可扫描的条形码。用户可以点按图片来查看和扫描其登机信息 卡券。
添加到 Google 钱包 复合搜索卡上显示的建议此建议会触发 打开网址操作 该应用会打开 Google 钱包应用,用户可以在其中添加登机牌 。(如果应用不在用户的设备上, 提示安装。)将卡券添加到 Google 钱包后,用户 会自动收到航班提醒 和状态更新 更改航班详情。
未将卡券添加到 Google 钱包的用户也应及时获取 日期。将登机信息的任何更改告知用户 复合信息卡上显示的信息
用户点按建议操作,将卡券添加到 Google 钱包。
系统会打开 Google 钱包应用。用户点按按钮将卡券添加到 钱包。
用户点按按钮即可查看其卡券。
屏幕上会显示带有二维码的登机牌。