คู่มือนี้อธิบายวิธีเพิ่มธุรกรรมดิจิทัลในการสนทนาของคุณ การดำเนินการเพื่อให้ผู้ใช้ซื้อสินค้าดิจิทัลที่ใช้แล้วหมดไปได้
คำสำคัญ: สินค้าดิจิทัลที่ใช้แล้วหมดไปคือหน่วยเก็บสต็อก (SKU) ที่ ผู้ใช้สามารถใช้และซื้อมากกว่า 1 ครั้ง เช่น จำนวนสกุลเงินในเกม สำหรับเกม Android สินค้าดิจิทัลนี้แตกต่างจากสินค้าบริโภคไม่ได้ สินค้าดิจิทัลที่ผู้ใช้สามารถซื้อได้เพียงครั้งเดียว
ดูข้อมูลเพิ่มเติมเกี่ยวกับผลิตภัณฑ์แบบใช้ครั้งเดียวเพื่อการบริโภคได้ที่ Android เอกสารประกอบใน ฟีเจอร์เฉพาะผลิตภัณฑ์แบบใช้ครั้งเดียว
ข้อจำกัดและหลักเกณฑ์การตรวจสอบ
นโยบายเพิ่มเติมจะมีผลกับการดำเนินการที่มีธุรกรรม ซึ่งอาจใช้เวลา 2-3 ปี สัปดาห์ในการตรวจสอบการดำเนินการที่มีธุรกรรม ดังนั้นให้คำนึงถึงช่วงเวลา การวางแผนกำหนดการเผยแพร่ โปรดตรวจสอบว่าคุณได้ปฏิบัติตามข้อกำหนดเพื่อให้ขั้นตอนการตรวจสอบง่ายขึ้น พร้อมด้วย นโยบายและหลักเกณฑ์สำหรับธุรกรรม ก่อนส่งการดำเนินการของคุณเข้ารับการตรวจสอบ
การดำเนินการที่ขายสินค้าดิจิทัลสามารถใช้งานได้ในประเทศต่อไปนี้เท่านั้น
- ออสเตรเลีย
- บราซิล
- แคนาดา
- อินโดนีเซีย
- ญี่ปุ่น
- เม็กซิโก
- รัสเซีย
- สิงคโปร์
- ไทย
- ตุรกี
- สหราชอาณาจักร
- สหรัฐอเมริกา
ขั้นตอนการทำธุรกรรม
คู่มือนี้จะสรุปขั้นตอนการพัฒนาแต่ละขั้นเมื่อเกิดสินค้าดิจิทัล ขั้นตอนการทำธุรกรรม เมื่อการดำเนินการของคุณจัดการธุรกรรมสำหรับสินค้าดิจิทัล ใช้ขั้นตอนต่อไปนี้
- ตั้งค่าไคลเอ็นต์ API การซื้อแบบดิจิทัล: การดำเนินการของคุณใช้ไคลเอ็นต์ดิจิทัล API การซื้อเพื่อสื่อสารกับพื้นที่โฆษณา Google Play และทำธุรกรรม ก่อนที่การดำเนินการของคุณจะทำอย่างอื่น เครื่องมือจะสร้างไคลเอ็นต์ JWT ที่มี คีย์บริการเพื่อสื่อสารกับ API การซื้อแบบดิจิทัล
- รวบรวมข้อมูล: การดำเนินการของคุณจะรวบรวมข้อมูลพื้นฐานเกี่ยวกับ
ผู้ใช้และพื้นที่โฆษณา Google Play ของคุณเพื่อเตรียมทำธุรกรรม
- ตรวจสอบข้อกำหนดธุรกรรม: การดำเนินการของคุณใช้ช่องทางดิจิทัล ตัวช่วยข้อกำหนดธุรกรรมตั้งแต่เริ่มต้นขั้นตอนการซื้อเพื่อ ในการตรวจสอบว่าผู้ใช้ทำธุรกรรมได้
- รวบรวมพื้นที่โฆษณาที่พร้อมใช้งาน: การดำเนินการของคุณจะตรวจสอบ Google Play สินค้าคงคลังและระบุสินค้าที่สามารถซื้อได้ในปัจจุบัน
- สร้างคำสั่งซื้อ: การดำเนินการของคุณนำเสนอสินค้าดิจิทัลที่พร้อมใช้งานแก่ เพื่อที่ผู้ใช้จะเลือกซื้อได้
- ทำการซื้อให้เสร็จสมบูรณ์: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อ เริ่มการซื้อด้วยสิ่งที่ผู้ใช้เลือกจาก Google Play Store
- จัดการผลลัพธ์: การดำเนินการจะได้รับรหัสสถานะสำหรับ และแจ้งให้ผู้ใช้ทราบว่าการซื้อเสร็จสมบูรณ์ (หรือใช้เวลา ขั้นตอนเพิ่มเติม)
- ทำให้การซื้อซ้ำได้: การดำเนินการของคุณใช้การซื้อแบบดิจิทัล API เพื่อ "ใช้" สินค้าที่ซื้อ ทำให้สินค้านั้นพร้อมจำหน่าย อีกครั้ง
ข้อกำหนดเบื้องต้น
ก่อนที่จะรวมธุรกรรมดิจิทัลไว้ในการดำเนินการ คุณต้องมี ข้อกำหนดเบื้องต้นดังต่อไปนี้
ต บัญชีนักพัฒนาแอป และ บัญชีผู้ขาย บน 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 ซึ่งเป็นสินค้าดิจิทัลที่คุณขาย พร้อมกับการดำเนินการของคุณ โปรดทราบว่า สร้างผลิตภัณฑ์ที่มีการจัดการใน 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 ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่สร้าง สร้าง Bundle / APK ที่ลงชื่อ
- คลิกถัดไป
- คลิกสร้างใหม่ในส่วนเส้นทางแหล่งคีย์
- กรอกข้อมูลในแต่ละช่องแล้วคลิกตกลง จดบันทึกแหล่งเก็บคีย์ รหัสผ่านและรหัสผ่านหลัก และเก็บข้อมูลเหล่านี้ไว้ในที่ปลอดภัยเนื่องจาก คุณจะต้องใช้ตัวเลือกเหล่านี้ภายหลัง
- คลิกถัดไป
- เลือกรุ่น
- เลือก V1 (JAR Signature)
- คลิกเสร็จสิ้น
- หลังจากผ่านไป 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
- คลิกสร้างคีย์และดาวน์โหลดคีย์บัญชีบริการ JSON
บันทึกคีย์บัญชีบริการนี้ไว้ในที่ปลอดภัย คุณจะใช้คีย์นี้ใน การดำเนินการตามคำสั่งซื้อเพื่อสร้างไคลเอ็นต์สำหรับ API การซื้อแบบดิจิทัล
เชื่อมต่อกับพื้นที่โฆษณา Play ของคุณ
ในการเข้าถึงสินค้าดิจิทัลจากโปรเจ็กต์ Actions ให้เชื่อมโยง โดเมนเว็บและแอปที่ใช้โปรเจ็กต์เป็น พร็อพเพอร์ตี้ที่เชื่อมต่อ
หมายเหตุ: ขณะที่เรายืนยัน อาจใช้เวลานานถึง 1 สัปดาห์ในการเชื่อมต่อ พร็อพเพอร์ตี้ของคุณ หากเว็บไซต์หรือแอปไม่ได้ลิงก์หลังจากช่วงเวลาดังกล่าว ติดต่อทีมสนับสนุน
หากต้องการเชื่อมต่อโดเมนเว็บและแอป Play Console กับโปรเจ็กต์ Actions ให้ทำดังนี้ ขั้นตอนเหล่านี้:
- ในคอนโซลการดำเนินการ ให้ไปที่ทำให้ใช้งานได้ จากนั้นไปที่การยืนยันแบรนด์
หากยังไม่ได้เชื่อมต่อพร็อพเพอร์ตี้ใดๆ ให้เชื่อมต่อเว็บไซต์ก่อน โดยทำดังนี้
- คลิกปุ่มผลิตภัณฑ์และบริการบนอินเทอร์เน็ต (</>)
- ป้อน URL สำหรับโดเมนเว็บของคุณ แล้วคลิกเชื่อมต่อ
Google จะส่งอีเมลพร้อมด้วยคำแนะนำเพิ่มเติมให้กับบุคคลที่ ได้รับการยืนยันสำหรับโดเมนเว็บนั้นใน Google Search Console เมื่อผู้รับอีเมลนี้ทำตามขั้นตอนเหล่านั้นแล้ว เว็บไซต์ควร จะปรากฏในส่วนการยืนยันแบรนด์
เมื่อคุณมีเว็บไซต์ที่เชื่อมต่อแล้วอย่างน้อย 1 เว็บไซต์ ให้ทำตามขั้นตอนต่อไปนี้เพื่อ เชื่อมต่อแอป Android ของคุณ
- ในคอนโซลการดำเนินการ ให้ไปที่ทำให้ใช้งานได้ จากนั้นไปที่การยืนยันแบรนด์
- คลิกเชื่อมต่อแอป
บนหน้าที่ปรากฏขึ้น ให้ทำตามคำแนะนำเพื่อยืนยันเว็บของคุณ ใน Play Console เลือกแอป Play ที่มี สินค้าดิจิทัล แล้วป้อน URL โดเมนเว็บให้ตรงกับที่แสดงใน การยืนยันแบรนด์
Google จะส่งอีเมลยืนยันไปยังเจ้าของที่ได้รับการยืนยันของ โดเมน เมื่อได้รับการอนุมัติการยืนยันแล้ว แอป Play ของคุณควร จะปรากฏในส่วนการยืนยันแบรนด์
เปิดใช้เข้าถึงการซื้อใน Play
สร้างขั้นตอนการซื้อ
เมื่อคุณเตรียมโปรเจ็กต์ Actions และสินค้าคงคลังสินค้าดิจิทัลแล้ว ให้สร้างดิจิทัล ขั้นตอนการซื้อสินค้าในเว็บฮุคของการดำเนินการตามคำสั่งซื้อการสนทนา
1. ตั้งค่าไคลเอ็นต์ API การซื้อแบบดิจิทัล
ในเว็บฮุคสำหรับการดำเนินการตามคำสั่งซื้อการสนทนา ให้สร้างไคลเอ็นต์ 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
จากผลลัพธ์ที่ได้นี้ ให้ดำเนินการต่อไป
ขั้นตอนการทำธุรกรรมหรือสลับไปและแจ้งให้ตรวจสอบใน 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 สำหรับผลิตภัณฑ์แต่ละรายการ คุณอ้างอิงอาร์เรย์นี้ในภายหลังเพื่อแสดงตัวเลือกที่พร้อมใช้งานต่อผู้ใช้ ให้เลือกซื้อ
สินค้าดิจิทัลแต่ละรายการจะแสดงเป็น 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
คอนโซล (เช่น com.myapp.digitalgoods
) และจัดรูปแบบผลลัพธ์เป็น
อาร์เรย์ของออบเจ็กต์ SKU
หากต้องการดึงเฉพาะสินค้าดิจิทัลที่เฉพาะเจาะจงในอาร์เรย์ผลลัพธ์ ให้ระบุผลิตภัณฑ์
รหัสสำหรับสินค้าดิจิทัล (ดังที่แสดงใต้ไอเทมที่ซื้อในแอปแต่ละรายการใน Google Play
คอนโซล) ที่คุณต้องการพร้อมจำหน่ายใน body.ids
โค้ด Node.js ต่อไปนี้ต้องการรายการสินค้าที่มีอยู่จากสื่อดิจิทัล การซื้อ 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': ['consumable.1']
},
}, (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. ทำการซื้อให้เสร็จสมบูรณ์
หากต้องการทำการซื้อให้เสร็จสมบูรณ์ ให้ใช้ Intent ที่เป็นตัวช่วยของ 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 SDK actions.intent.COMPLETE_PURCHASE
รายการ) ที่มี
อาร์กิวเมนต์ COMPLETE_PURCHASE_VALUE
ที่อธิบายผลลัพธ์ สร้างความตั้งใจ
ทริกเกอร์โดยเหตุการณ์นี้ ซึ่งจะแจ้งผลลัพธ์ให้ผู้ใช้ทราบ
จัดการผลลัพธ์การซื้อที่เป็นไปได้ต่อไปนี้
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);
}
});
6. ทำให้การซื้อซ้ำได้
ใช้ API การซื้อแบบดิจิทัลเพื่อส่งคำขอ Play Store ที่พร้อมใช้งานในปัจจุบัน พื้นที่โฆษณา แล้วเพิ่มลงในอาร์เรย์ของออบเจ็กต์ 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
คอนโซล (เช่น com.myapp.digitalgoods
) และจัดรูปแบบผลลัพธ์เป็น
อาร์เรย์ของออบเจ็กต์ SKU
หากต้องการดึงเฉพาะสินค้าดิจิทัลที่เฉพาะเจาะจงในอาร์เรย์ผลลัพธ์ ให้ระบุผลิตภัณฑ์
รหัสสำหรับสินค้าดิจิทัล (ดังที่แสดงใต้ไอเทมที่ซื้อในแอปแต่ละรายการใน Google Play
คอนโซล) ที่คุณต้องการพร้อมจำหน่ายใน body.ids
โค้ด Node.js ต่อไปนี้ต้องการรายการสินค้าที่มีอยู่จากสื่อดิจิทัล การซื้อ 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': ['consumable.1']
},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
});
แสดงการซื้อของผู้ใช้
เมื่อผู้ใช้ค้นหาการดำเนินการของคุณ ออบเจ็กต์ 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"
}
]
}
],
...
}