คู่มือนี้อธิบายวิธีเพิ่มธุรกรรมการสมัครใช้บริการแบบดิจิทัลลงในการสนทนา เพื่อให้ผู้ใช้ซื้อการสมัครใช้บริการของคุณได้
คำสำคัญ: สินค้าดิจิทัลแบบสมัครใช้บริการคือหน่วยเก็บข้อมูล (SKU) ที่ต้องเรียกเก็บตามรอบเวลาจากผู้ใช้ เช่น นิตยสารออนไลน์ ซึ่งแตกต่างจากสินค้าดิจิทัลสินค้าอุปโภคบริโภคที่ผู้ใช้ต้องซื้อด้วยตนเอง หรือสินค้าดิจิทัลที่ใช้ไม่ได้ซึ่งจะซื้อโดยอัตโนมัติเพียงครั้งเดียว
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสมัครใช้บริการแบบดิจิทัลได้ที่เอกสารของ Android เกี่ยวกับฟีเจอร์เฉพาะการสมัครใช้บริการ
ข้อจำกัดและหลักเกณฑ์การตรวจสอบ
นโยบายเพิ่มเติมใช้กับการดำเนินการที่มีธุรกรรม เราอาจใช้เวลา 2-3 สัปดาห์ในการตรวจสอบการดำเนินการที่มีธุรกรรม ดังนั้นโปรดคำนึงถึงเวลาดังกล่าวเมื่อวางแผนกำหนดการเผยแพร่ เพื่อช่วยให้กระบวนการตรวจสอบง่ายขึ้น โปรดตรวจสอบว่าคุณปฏิบัติตามนโยบายและหลักเกณฑ์สำหรับธุรกรรมก่อนส่งการดำเนินการเข้ารับการตรวจสอบ
การกระทำที่ขายสินค้าดิจิทัลใช้ได้ในประเทศต่อไปนี้เท่านั้น
- ออสเตรเลีย
- บราซิล
- แคนาดา
- อินโดนีเซีย
- ญี่ปุ่น
- เม็กซิโก
- รัสเซีย
- สิงคโปร์
- ไทย
- ตุรกี
- สหราชอาณาจักร
- สหรัฐอเมริกา
ขั้นตอนการทำธุรกรรม
คู่มือนี้จะสรุปแต่ละขั้นตอนการพัฒนาที่เกิดขึ้นในธุรกรรมสินค้าดิจิทัล เมื่อการดำเนินการของคุณจัดการธุรกรรมสำหรับสินค้าดิจิทัล การดำเนินการของคุณจะใช้ขั้นตอนดังต่อไปนี้
- ตั้งค่าไคลเอ็นต์ API การซื้อแบบดิจิทัล: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อสื่อสารกับพื้นที่โฆษณาใน Google Play และทำธุรกรรม โดยก่อนที่การดำเนินการของคุณจะทำอย่างอื่น ระบบจะสร้างไคลเอ็นต์ JWT ที่มีคีย์บริการเพื่อสื่อสารกับ API การซื้อแบบดิจิทัล
- รวบรวมข้อมูล: การดำเนินการของคุณรวบรวมข้อมูลพื้นฐานเกี่ยวกับผู้ใช้และพื้นที่โฆษณา Google Play ของคุณเพื่อเตรียมทำธุรกรรม
- ตรวจสอบข้อกำหนดเกี่ยวกับธุรกรรม: การดำเนินการของคุณใช้เครื่องมือช่วยเหลือเกี่ยวกับข้อกำหนดด้านธุรกรรมดิจิทัลเมื่อเริ่มต้นขั้นตอนการซื้อเพื่อให้ผู้ใช้ทำธุรกรรมได้
- รวบรวมสินค้าคงคลังที่พร้อมจำหน่าย: การดำเนินการของคุณจะตรวจสอบสินค้าคงคลังใน Google Play และระบุสินค้าที่พร้อมจำหน่ายในขณะนี้
- สร้างคำสั่งซื้อ: การดำเนินการของคุณนำเสนอสินค้าดิจิทัลที่มีแก่ผู้ใช้เพื่อให้ผู้ใช้สามารถเลือกสินค้าที่จะซื้อ 1 รายการ
- ทำการซื้อให้เสร็จสมบูรณ์: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อเริ่มการซื้อสินค้าของผู้ใช้ไปยัง Google Play Store
- จัดการผลลัพธ์: การดำเนินการของคุณจะได้รับรหัสสถานะสำหรับธุรกรรมและแจ้งผู้ใช้ว่าการซื้อเสร็จสมบูรณ์แล้ว (หรือดำเนินการตามขั้นตอนเพิ่มเติม)
ข้อกำหนดเบื้องต้น
ก่อนที่จะรวมธุรกรรมดิจิทัลเข้ากับการดำเนินการของคุณ คุณต้องมีสิ่งต่อไปนี้
บัญชีนักพัฒนาแอปและบัญชีผู้ขายใน Google Play สำหรับจัดการสินค้าดิจิทัลใน Google Play Console
โดเมนของเว็บที่ได้รับการยืนยันใน Google Search Console โดเมนนี้ไม่จำเป็นต้องเชื่อมโยงกับเว็บไซต์ที่เปิดตัวต่อสาธารณะ เราเพียงต้องอ้างอิงโดเมนเว็บของคุณ
แอป Android ที่มี
com.android.vending.BILLING
สิทธิ์ ใน Google Play Console สินค้าดิจิทัลของคุณจะเป็น “การซื้อในแอป” ที่เชื่อมโยงกับแอปนี้ใน Google Play Consoleนอกจากนี้ คุณยังต้องสร้างรุ่นใน Play Console ด้วยแอปนี้ แต่หากไม่ต้องการให้รุ่นเป็นสาธารณะ คุณสร้างรุ่นอัลฟ่าแบบปิดได้
หากยังไม่มีแอป Android ให้ทำตาม วิธีการเชื่อมโยงแอป Android
การสมัครใช้บริการอย่างน้อย 1 รายการใน Google Play Console ซึ่งเป็นสินค้าดิจิทัลที่คุณขายด้วย Action โปรดทราบว่าคุณไม่สามารถสร้างการสมัครใช้บริการใน Play Console จนกว่าคุณจะตั้งค่า ข้อกำหนดเบื้องต้นของแอป Android ก่อน
หากยังไม่มีการสมัครใช้บริการ ให้ทำตามวิธีการสร้างสินค้าดิจิทัล
เชื่อมโยงแอป Android
หากคุณยังไม่มีแอป Android ที่มีสิทธิ์การเรียกเก็บเงินใน Google Play Console ให้ทำตามขั้นตอนต่อไปนี้
- สร้างโปรเจ็กต์ใหม่ใน Android Studio หรือ Android IDE ที่ต้องการ เลือกตัวเลือกในข้อความแจ้งการตั้งค่าโปรเจ็กต์เพื่อสร้างแอปพื้นฐาน
- ตั้งชื่อแพ็กเกจให้กับโปรเจ็กต์ เช่น
com.mycompany.myapp
อย่าใช้ชื่อนี้เป็นค่าเริ่มต้น เนื่องจากคุณอัปโหลดแพ็กเกจที่มีcom.example
ไปยัง Play Console ไม่ได้ - เปิดไฟล์
AndroidManifest.xml
ของแอป เพิ่มบรรทัดโค้ดต่อไปนี้ในองค์ประกอบ
manifest
<uses-permission android:name="com.android.vending.BILLING" />
ไฟล์
AndroidManifest.xml
ควรมีลักษณะเหมือนโค้ดบล็อกต่อไปนี้<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.mycompany.myapp"> <uses-permission android:name="com.android.vending.BILLING" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> </manifest>
สร้างแอปเป็น APK ที่มีการรับรอง ใน Android Studio ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่ Build สร้าง Signed Bundle / APK
- คลิกถัดไป
- ในส่วนเส้นทางของร้านค้าหลัก ให้คลิกสร้างใหม่
- กรอกข้อมูลในแต่ละช่องแล้วคลิกตกลง จดบันทึกรหัสผ่านของแหล่งเก็บคีย์และรหัสผ่านหลักของคุณ และเก็บไว้ในที่ปลอดภัยเพราะคุณจะต้องใช้ข้อมูลนี้ในภายหลัง
- คลิกถัดไป
- เลือกรุ่น
- เลือก V1 (ลายเซ็น JAR)
- คลิกเสร็จ
- หลังจากนั้น 2-3 วินาที Android Studio จะสร้างไฟล์
app-release.apk
ค้นหาไฟล์นี้เพื่อใช้ในภายหลัง
ใน Google Play Console ให้สร้างแอปพลิเคชันใหม่
ไปที่รุ่นต่างๆ ของแอป
ในส่วนแทร็กปิด ให้ไปที่จัดการ แล้วไปที่อัลฟ่า
คลิกปุ่มสร้างรุ่น
ในส่วนให้ Google จัดการและปกป้องคีย์ Signing ให้ป้อนข้อมูลคีย์การลงนาม
อัปโหลดไฟล์ APK ของคุณ
คลิกบันทึก
สร้างสินค้าดิจิทัลของคุณ
หากตอนนี้คุณยังไม่มีสินค้าดิจิทัลใน Play Console ให้ทำตามขั้นตอนต่อไปนี้
- ใน Google Play Console ให้ไปที่ไอเทมที่ซื้อในแอป แล้วไปที่การสมัครใช้บริการ หากเห็นคำเตือน ให้ทำตามวิธีการก่อนหน้าในการสร้างแอป Android หรือคลิกลิงก์เพื่อสร้างโปรไฟล์ผู้ขาย
- คลิกสร้างการสมัครใช้บริการ
- กรอกข้อมูลในช่องสำหรับผลิตภัณฑ์ดิจิทัล จดรหัสผลิตภัณฑ์ซึ่งเป็นวิธีที่คุณจะใช้อ้างอิงผลิตภัณฑ์นี้จากการดำเนินการของคุณ
- คลิกบันทึก
- ทำซ้ำขั้นตอนที่ 2-4 สำหรับผลิตภัณฑ์แต่ละรายการที่ต้องการขาย
เตรียมโปรเจ็กต์ Actions
เมื่อตั้งค่าสินค้าดิจิทัลใน Google Play Console คุณต้องเปิดใช้ธุรกรรมดิจิทัลและเชื่อมโยงโปรเจ็กต์ Actions กับแอป Play
หากต้องการเปิดธุรกรรมสินค้าดิจิทัลในโปรเจ็กต์ Actions ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Actions ให้เปิดโปรเจ็กต์หรือสร้างโปรเจ็กต์ใหม่
- ไปที่ทำให้ใช้งานได้แล้วไปที่ข้อมูลไดเรกทอรี
- ในส่วนข้อมูลเพิ่มเติมและธุรกรรม ให้เลือกช่องใช่ใต้การดำเนินการของคุณใช้ Digital Purchase API เพื่อทำธุรกรรม ของสินค้าดิจิทัลหรือไม่
- คลิกบันทึก
สร้างคีย์ API สินค้าดิจิทัล
หากต้องการส่งคำขอไปยัง API สินค้าดิจิทัล คุณต้องดาวน์โหลดคีย์บัญชีบริการ JSON ที่เชื่อมโยงกับโปรเจ็กต์คอนโซล Actions ของคุณ
หากต้องการเรียกข้อมูลคีย์บัญชีบริการ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซลการดําเนินการ ให้คลิกไอคอน 3 จุดที่มุมขวาบน แล้วคลิกการตั้งค่าโปรเจ็กต์
- ค้นหารหัสโปรเจ็กต์ของการดำเนินการ
- ไปที่ลิงก์นี้ โดยแทนที่ "
<project_id>
" ด้วยรหัสโปรเจ็กต์:https://console.developers.google.com/apis/credentials?project=project_id
- ในการนําทางหลัก ให้ไปที่ข้อมูลเข้าสู่ระบบ
- ในหน้าที่ปรากฏขึ้น ให้คลิกสร้างข้อมูลเข้าสู่ระบบ แล้วคลิกคีย์บัญชีบริการ
- ไปที่บัญชีบริการ แล้วคลิกบัญชีบริการใหม่
- ตั้งชื่อบัญชีบริการ เช่น digitaltransactions
- คลิกสร้าง
- ตั้งค่าบทบาทเป็นโปรเจ็กต์ > เจ้าของ
- คลิกต่อไป
- คลิกสร้างคีย์
- เลือกประเภทคีย์ JSON
- คลิก Create key และดาวน์โหลดคีย์บัญชีบริการ JSON
บันทึกคีย์บัญชีบริการนี้ไว้ในที่ปลอดภัย คุณจะใช้คีย์นี้ใน Fulfillment เพื่อสร้างไคลเอ็นต์สำหรับ Digital Purchases API
เชื่อมต่อกับพื้นที่โฆษณาใน Play
หากต้องการเข้าถึงสินค้าดิจิทัลจากโปรเจ็กต์ Actions ให้เชื่อมโยงโดเมนเว็บและแอปกับโปรเจ็กต์เป็นพร็อพเพอร์ตี้ที่เชื่อมต่อ
หมายเหตุ: ขั้นตอนการเชื่อมต่ออาจใช้เวลาถึง 1 สัปดาห์จึงจะเสร็จสมบูรณ์ในขณะที่เรายืนยันพร็อพเพอร์ตี้ของคุณ หากเว็บไซต์หรือแอปไม่ได้ลิงก์หลังจากระยะเวลาดังกล่าว โปรดติดต่อฝ่ายสนับสนุน
หากต้องการเชื่อมต่อโดเมนเว็บและแอป Play Console กับโปรเจ็กต์ Actions ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซลการดำเนินการ ให้ไปที่ใช้งาน แล้วไปที่การยืนยันแบรนด์
หากยังไม่ได้เชื่อมต่อพร็อพเพอร์ตี้ใดเลย ก่อนอื่นให้เชื่อมต่อเว็บไซต์ โดยทำดังนี้
- คลิกปุ่มผลิตภัณฑ์และบริการบนอินเทอร์เน็ต (</>)
- ป้อน URL สำหรับโดเมนของเว็บ แล้วคลิกเชื่อมต่อ
Google จะส่งอีเมลพร้อมวิธีการเพิ่มเติมไปยังบุคคลที่ได้รับการยืนยันสำหรับโดเมนเว็บนั้นใน Google Search Console เมื่อผู้รับอีเมลนี้ทำตามขั้นตอนเหล่านั้นแล้ว เว็บไซต์ควรจะปรากฏในส่วนการยืนยันแบรนด์
เมื่อคุณมีเว็บไซต์ที่เชื่อมต่ออย่างน้อย 1 เว็บไซต์ ให้ทำตามขั้นตอนต่อไปนี้เพื่อเชื่อมต่อแอป Android
- ในคอนโซลการดำเนินการ ให้ไปที่ใช้งาน แล้วไปที่การยืนยันแบรนด์
- คลิกเชื่อมต่อแอป
บนหน้าที่ปรากฏขึ้นมา ทำตามวิธีการเพื่อยืนยันโดเมนเว็บบน Play Console เลือกแอป Play ที่มีสินค้าดิจิทัลของคุณ แล้วป้อน URL โดเมนของเว็บตามที่ปรากฏในหน้าการยืนยันแบรนด์ทุกประการ
Google จะส่งอีเมลยืนยันไปยังเจ้าของโดเมนที่ยืนยันแล้วอีกครั้ง เมื่อพวกเขาอนุมัติการยืนยันแล้ว แอป Play ของคุณ ควรจะปรากฏในส่วนการยืนยันแบรนด์
เปิดใช้เข้าถึงการซื้อใน Play
สร้างขั้นตอนการซื้อ
เมื่อเตรียมโปรเจ็กต์ Actions และสินค้าคงคลังสินค้าดิจิทัลไว้แล้ว ให้สร้างกระบวนการซื้อสินค้าดิจิทัลในเว็บฮุค Fulfillment การสนทนา
1. ตั้งค่าไคลเอ็นต์ API การซื้อแบบดิจิทัล
ในเว็บฮุค Fulfillment การสนทนา ให้สร้างไคลเอ็นต์ JWT ด้วยคีย์ JSON ของบัญชีบริการและขอบเขต https://www.googleapis.com/auth/actions.purchases.digital
โค้ด Node.js ต่อไปนี้จะสร้างไคลเอ็นต์ JWT สำหรับ API การซื้อแบบดิจิทัล
const serviceAccount = {'my-file.json'};
const request = require('request');
const {google} = require('googleapis');
const jwtClient = new google.auth.JWT(
serviceAccount.client_email, null, serviceAccount.private_key,
['https://www.googleapis.com/auth/actions.purchases.digital'],
null
);
2. รวบรวมข้อมูล
ก่อนที่ผู้ใช้จะทำการซื้อได้ การดำเนินการของคุณจะรวบรวมข้อมูลเกี่ยวกับความสามารถของผู้ใช้ในการสั่งซื้อและสินค้าที่พร้อมให้บริการจากสินค้าคงคลังของคุณ
2. ก. ตรวจสอบข้อกำหนดของธุรกรรม
แนวทางปฏิบัติที่ดีคือการตรวจสอบให้แน่ใจว่าบัญชีของผู้ใช้ได้รับการตั้งค่าให้ทำธุรกรรมก่อนที่จะมีตัวเลือกให้ผู้ใช้ทำการซื้อ ขั้นตอนนี้รวมถึงการตรวจสอบว่าผู้ใช้ได้กำหนดค่าวิธีการชำระเงินไว้และอยู่ในประเทศที่รองรับการทำธุรกรรมดิจิทัลหรือไม่ ที่จุดเริ่มต้นของกระบวนการทำธุรกรรม ให้ใช้ตัวช่วย DIGITAL_PURCHASE_CHECK
เพื่อตรวจสอบการกำหนดค่าธุรกรรมของผู้ใช้กับ Assistant
โค้ด Node.js ต่อไปนี้ใช้ DIGITAL_PURCHASE_CHECK
ในตอนต้นของการสนทนา
app.intent('Default Welcome Intent', async (conv, { SKU }) => {
// Immediately invoke digital purchase check intent to confirm
// purchase eligibility.
conv.ask(new DigitalPurchaseCheck());
});
ค้นหาผลลัพธ์ของการตรวจสอบนี้ในอาร์กิวเมนต์การสนทนาในฐานะ DIGITAL_PURCHASE_CHECK_RESULT
ดังนั้น ให้ดำเนินขั้นตอนธุรกรรมต่อไปหรือ Pivot จากผลลัพธ์นี้ แล้วแจ้งให้ตรวจสอบการกำหนดค่า Google Pay
โค้ด Node.js ต่อไปนี้จะจัดการผลการตรวจสอบข้อกำหนด
app.intent('Digital Purchase Check', async (conv) => {
const arg = conv.arguments.get('DIGITAL_PURCHASE_CHECK_RESULT');
if (!arg || !arg.resultType) {
conv.close('Digital Purchase check failed. Please check logs.');
return;
}
// User does not meet necessary conditions for completing a digital purchase
if (arg.resultType === 'CANNOT_PURCHASE' || arg.resultType === 'RESULT_TYPE_UNSPECIFIED') {
conv.close(`It looks like you aren't able to make digital purchases. Please check your Google Pay configuration and try again.`);
return;
}
conv.ask('Welcome to the Digital Goods Sample. Would you like to see what I have for sale?');
});
2. ข. รวบรวมพื้นที่โฆษณาที่ใช้ได้
ใช้ API การซื้อแบบดิจิทัลเพื่อขอพื้นที่โฆษณาใน Play Store ที่มีอยู่ในปัจจุบัน จากนั้นสร้างออบเจ็กต์ JSON ลงในอาร์เรย์ของออบเจ็กต์ JSON สำหรับผลิตภัณฑ์แต่ละรายการ คุณจะอ้างอิงอาร์เรย์นี้ในภายหลังเพื่อแสดงให้ผู้ใช้เห็นตัวเลือกที่มีให้ซื้อ
สินค้าดิจิทัลแต่ละรายการจะแสดงเป็น SKU ในรูปแบบ JSON โค้ด Node.js ต่อไปนี้สรุปการจัดรูปแบบที่คาดไว้ของ SKU แต่ละรายการ
body = {
skus: [
skuId: {
skuType: one of "APP" or "UNSPECIFIED"
id: string,
packageName: string
}
formattedPrice: string,
title: string,
description: string
]
}
ส่งคำขอ POST ไปยังปลายทาง
https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet
โดยที่ {packageName}
คือชื่อแพ็กเกจของแอปใน Google Play Console (เช่น com.myapp.digitalgoods
) และจัดรูปแบบผลลัพธ์เป็นอาร์เรย์ของออบเจ็กต์ SKU
หากต้องการดึงเฉพาะสินค้าดิจิทัลที่เฉพาะเจาะจงในอาร์เรย์ผลลัพธ์ ให้ระบุรหัสผลิตภัณฑ์สำหรับสินค้าดิจิทัล (ตามที่แสดงใต้ไอเทมที่ซื้อในแอปแต่ละรายการใน Google Play Console) ที่คุณต้องการให้พร้อมจำหน่ายใน body.ids
โค้ด Node.js ต่อไปนี้จะขอรายการสินค้าที่พร้อมให้บริการจาก Digital purchases API และจัดรูปแบบผลลัพธ์เป็นอาร์เรย์ของ SKU
return jwtClient.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
const packageName = 'com.example.projectname';
request.post(`https://actions.googleapis.com/v3/packages/${packageName}/skus:batchGet`, {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {
'conversationId': conversationId,
'skuType': 'APP',
// This request is filtered to only retrieve SKUs for the following product IDs
'ids': ['annual.subscription']
},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
});
3. สร้างคำสั่งซื้อ
หากต้องการเริ่มต้นการซื้อแบบดิจิทัลของผู้ใช้ ให้แสดงรายการสินค้าดิจิทัลที่มีจำหน่าย คุณใช้ประเภทการตอบกลับที่สมบูรณ์ได้หลายประเภทเพื่อแสดงถึงหุ้นและแจ้งให้ผู้ใช้เลือก
โค้ด Node.js ต่อไปนี้จะอ่านอาร์เรย์สินค้าคงคลังของออบเจ็กต์ SKU และสร้างการตอบกลับตามรายการโดยมี 1 รายการสำหรับแต่ละรายการ
skus.forEach((sku) => {
const key = `${sku.skuId.skuType},${sku.skuId.id}`
list.items[key] = {
title: sku.title,
description: `${sku.description} | ${sku.formattedPrice}`,
};
});
4. ทำการซื้อให้เสร็จสมบูรณ์
หากต้องการทำการซื้อให้เสร็จสมบูรณ์ ให้ใช้ความตั้งใจของตัวช่วย COMPLETE_PURCHASE
กับรายการที่ผู้ใช้เลือก
โค้ด Node.js ต่อไปนี้จะจัดการการเลือก SKU ของผู้ใช้จากการตอบกลับในรายการและขอ Intent COMPLETE_PURCHASE
พร้อมข้อมูลดังกล่าว
app.intent('Send Purchase', (conv, params, option) => {
let [skuType, id] = option.split(',');
conv.ask(new CompletePurchase({
skuId: {
skuType: skuType,
id: id,
packageName: <PACKAGE_NAME>,
},
}));
});
5. จัดการผลลัพธ์
การซื้อเสร็จสมบูรณ์จะทริกเกอร์เหตุการณ์ actions_intent_COMPLETE_PURCHASE
Dialogflow (หรือ Intent actions.intent.COMPLETE_PURCHASE
Actions SDK) ที่มีอาร์กิวเมนต์ COMPLETE_PURCHASE_VALUE
ที่อธิบายผลลัพธ์ สร้าง Intent ซึ่งทริกเกอร์โดยเหตุการณ์นี้ ซึ่งจะสื่อสารผลลัพธ์ไปยังผู้ใช้
จัดการผลลัพธ์การซื้อที่เป็นไปได้ต่อไปนี้
PURCHASE_STATUS_OK
: การซื้อสำเร็จแล้ว ตอนนี้ธุรกรรมเสร็จสมบูรณ์แล้ว ดังนั้นให้ออกจากขั้นตอนการทำธุรกรรมแล้วเปลี่ยนกลับไปที่การสนทนาของคุณPURCHASE_STATUS_ALREADY_OWNED
: ธุรกรรมล้มเหลวเนื่องจากผู้ใช้เป็นเจ้าของรายการดังกล่าวอยู่แล้ว หลีกเลี่ยงข้อผิดพลาดนี้ได้โดยตรวจสอบการซื้อที่ผ่านมาของผู้ใช้ และปรับแต่งรายการที่แสดงเพื่อไม่ให้ผู้ใช้มีตัวเลือกในการซื้อสินค้าเดิมซ้ำอีกPURCHASE_STATUS_ITEM_UNAVAILABLE
: ธุรกรรมล้มเหลวเนื่องจากรายการที่ขอไม่พร้อมให้บริการ หลีกเลี่ยงข้อผิดพลาดนี้โดยการตรวจสอบ SKU ที่มีใกล้กับเวลาที่ซื้อPURCHASE_STATUS_ITEM_CHANGE_REQUESTED
: ธุรกรรมล้มเหลวเนื่องจากผู้ใช้ตัดสินใจซื้ออย่างอื่น แสดงซ้ำเกี่ยวกับการสร้างคำสั่งซื้อ เพื่อให้ผู้ใช้สามารถตัดสินใจได้ทันทีPURCHASE_STATUS_USER_CANCELLED
: ธุรกรรมล้มเหลวเนื่องจากผู้ใช้ยกเลิกขั้นตอนการซื้อ เนื่องจากผู้ใช้ออกจากขั้นตอนนี้ก่อนเวลาอันควร ให้ถามผู้ใช้ว่าต้องการทำธุรกรรมอีกครั้งหรือออกจากธุรกรรมทั้งหมดเลยหรือไม่PURCHASE_STATUS_ERROR
: ธุรกรรมล้มเหลวโดยไม่ทราบสาเหตุ แจ้งให้ผู้ใช้ทราบว่าธุรกรรมล้มเหลว และถามผู้ใช้ว่าต้องการลองอีกครั้งหรือไม่PURCHASE_STATUS_UNSPECIFIED
: ธุรกรรมล้มเหลวโดยไม่ทราบสาเหตุ ทำให้ระบบไม่ทราบสถานะ จัดการสถานะข้อผิดพลาดนี้โดยแจ้งให้ผู้ใช้ทราบว่า ธุรกรรมล้มเหลว และถามว่าต้องการลองอีกครั้งหรือไม่
โค้ด Node.js ต่อไปนี้จะอ่านอาร์กิวเมนต์ COMPLETE_PURCHASE_VALUE
และจัดการกับผลลัพธ์แต่ละรายการ
app.intent('Purchase Result', (conv) => {
const arg = conv.arguments.get('COMPLETE_PURCHASE_VALUE');
console.log('User Decision: ' + JSON.stringify(arg));
if (!arg || !arg.purchaseStatus) {
conv.close('Purchase failed. Please check logs.');
return;
}
if (arg.purchaseStatus === 'PURCHASE_STATUS_OK') {
conv.close(`Purchase completed! You're all set!`);
} else if (arg.purchaseStatus === 'PURCHASE_STATUS_ALREADY_OWNED') {
conv.close('Purchase failed. You already own this item.');
} else if (arg.purchaseStatus === 'PURCHASE_STATUS_ITEM_UNAVAILABLE') {
conv.close('Purchase failed. Item is not available.');
} else if (arg.purchaseStatus === 'PURCHASE_STATUS_ITEM_CHANGE_REQUESTED') {
// Reprompt with your item selection dialog
} else {
conv.close('Purchase Failed:' + arg.purchaseStatus);
}
});
สะท้อนการซื้อของผู้ใช้
เมื่อผู้ใช้ค้นหาการดำเนินการ ออบเจ็กต์ user
ของ JSON ของคำขอจะรวมรายการการซื้อของผู้ใช้ ตรวจสอบข้อมูลนี้และเปลี่ยนคำตอบ
ของการดำเนินการของคุณตามเนื้อหาที่ผู้ใช้ชำระเงิน
โค้ดตัวอย่างต่อไปนี้แสดงออบเจ็กต์ user
ของคําขอที่มี packageEntitlements
ของการซื้อในแอปก่อนหน้านี้สําหรับแพ็กเกจ com.digitalgoods.application
"user": {
"userId": "xxxx",
"locale": "en-US",
"lastSeen": "2018-02-09T01:49:23Z",
"packageEntitlements": [
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "non-consumable.1",
"skuType": "APP"
}
{
"sku": "consumable.2",
"skuType": "APP"
}
]
},
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "annual.subscription",
"skuType": "SUBSCRIPTION",
"inAppDetails": {
"inAppPurchaseData": {
"autoRenewing": true,
"purchaseState": 0,
"productId": "annual.subscription",
"purchaseToken": "12345",
"developerPayload": "HSUSER_IW82",
"packageName": "com.digitalgoods.application",
"orderId": "GPA.233.2.32.3300783",
"purchaseTime": 1517385876421
},
"inAppDataSignature": "V+Q=="
}
}
]
}
]
},
"conversation": {
"conversationId": "1518141160297",
"type": "NEW"
},
"inputs": [
{
"intent": "actions.intent.MAIN",
"rawInputs": [
{
"inputType": "VOICE",
"query": "Talk to My Test App"
}
]
}
],
...
}