คู่มือนี้จะอธิบายวิธีเพิ่มธุรกรรมดิจิทัลลงในการดำเนินการแบบการสนทนา เพื่อให้ผู้ใช้ซื้อสินค้าดิจิทัลที่ใช้แล้วหมดไปได้
คำสำคัญ: สินค้าดิจิทัลสินค้าอุปโภคบริโภคคือหน่วยเก็บหุ้น (SKU) ที่ผู้ใช้จะใช้และซื้อได้มากกว่า 1 ครั้ง เช่น จำนวนสกุลเงินในเกมสำหรับเกม Android สินค้าดิจิทัลนี้แตกต่างจากสินค้าดิจิทัลที่กินไม่ได้ซึ่งผู้ใช้ซื้อได้เพียงครั้งเดียว
ดูข้อมูลเพิ่มเติมเกี่ยวกับผลิตภัณฑ์แบบใช้ครั้งเดียวในเอกสารประกอบของ Android เกี่ยวกับฟีเจอร์เฉพาะผลิตภัณฑ์แบบใช้ครั้งเดียว
ขั้นตอนการทำธุรกรรม
คู่มือนี้จะสรุปแต่ละขั้นตอนการพัฒนาที่เกิดขึ้นในธุรกรรมสินค้าดิจิทัล เมื่อการดำเนินการของคุณจัดการธุรกรรมสำหรับสินค้าดิจิทัล การดำเนินการของคุณจะใช้ขั้นตอนดังต่อไปนี้
- ตั้งค่าไคลเอ็นต์ API การซื้อแบบดิจิทัล: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อสื่อสารกับพื้นที่โฆษณาใน Google Play และทำธุรกรรม โดยก่อนที่การดำเนินการของคุณจะทำอย่างอื่น ระบบจะสร้างไคลเอ็นต์ JWT ที่มีคีย์บริการเพื่อสื่อสารกับ API การซื้อแบบดิจิทัล
- รวบรวมข้อมูล: การดำเนินการของคุณรวบรวมข้อมูลพื้นฐานเกี่ยวกับผู้ใช้และพื้นที่โฆษณา Google Play ของคุณเพื่อเตรียมทำธุรกรรม
- ตรวจสอบข้อกำหนดเกี่ยวกับธุรกรรม: การดำเนินการของคุณใช้เครื่องมือช่วยเหลือเกี่ยวกับข้อกำหนดด้านธุรกรรมดิจิทัลเมื่อเริ่มต้นขั้นตอนการซื้อเพื่อให้ผู้ใช้ทำธุรกรรมได้
- รวบรวมสินค้าคงคลังที่พร้อมจำหน่าย: การดำเนินการของคุณจะตรวจสอบสินค้าคงคลังใน Google Play และระบุสินค้าที่พร้อมจำหน่ายในขณะนี้
- สร้างคำสั่งซื้อ: การดำเนินการของคุณนำเสนอสินค้าดิจิทัลที่มีแก่ผู้ใช้เพื่อให้ผู้ใช้สามารถเลือกสินค้าที่จะซื้อ 1 รายการ
- ทำการซื้อให้เสร็จสมบูรณ์: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อเริ่มต้นการซื้อด้วยตัวเลือกของผู้ใช้จาก Google Play Store
- จัดการผลลัพธ์: การดำเนินการของคุณจะได้รับรหัสสถานะสำหรับธุรกรรมและแจ้งผู้ใช้ว่าการซื้อเสร็จสมบูรณ์แล้ว (หรือดำเนินการตามขั้นตอนเพิ่มเติม)
- ทำการซื้อซ้ำได้: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อ "ใช้" สินค้าที่ซื้อ ซึ่งทำให้ผู้ใช้รายนั้นซื้อรายการดังกล่าวได้อีกครั้ง
ข้อจำกัดและหลักเกณฑ์การตรวจสอบ
นโยบายเพิ่มเติมใช้กับการดำเนินการที่มีธุรกรรม เราอาจใช้เวลา 2-3 สัปดาห์ในการตรวจสอบการดำเนินการที่มีธุรกรรม ดังนั้นโปรดคำนึงถึงเวลาดังกล่าวเมื่อวางแผนกำหนดการเผยแพร่ เพื่อช่วยให้กระบวนการตรวจสอบง่ายขึ้น โปรดตรวจสอบว่าคุณปฏิบัติตามนโยบายและหลักเกณฑ์สำหรับธุรกรรมก่อนส่งการดำเนินการเข้ารับการตรวจสอบ
การกระทำที่ขายสินค้าดิจิทัลใช้ได้ในประเทศต่อไปนี้เท่านั้น
- ออสเตรเลีย
- บราซิล
- แคนาดา
- อินโดนีเซีย
- ญี่ปุ่น
- เม็กซิโก
- รัสเซีย
- สิงคโปร์
- ไทย
- ตุรกี
- สหราชอาณาจักร
- สหรัฐอเมริกา
ข้อกำหนดเบื้องต้น
ก่อนที่จะรวมธุรกรรมดิจิทัลเข้ากับการดำเนินการของคุณ คุณต้องมีสิ่งต่อไปนี้
บัญชีนักพัฒนาแอปและบัญชีผู้ขายใน 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 ให้เชื่อมโยงโดเมนเว็บและแอปกับโปรเจ็กต์เป็นพร็อพเพอร์ตี้ที่เชื่อมต่อ
หากต้องการเชื่อมต่อโดเมนเว็บและแอป 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. ก. ตรวจสอบข้อกำหนดการซื้อแบบดิจิทัล
แนวทางปฏิบัติที่ดีคือการตรวจสอบให้แน่ใจว่าบัญชีของผู้ใช้ได้รับการตั้งค่าให้ทำธุรกรรมก่อนที่จะมีตัวเลือกให้ผู้ใช้ทำการซื้อ คุณควรเปลี่ยนไปใช้โหมด DigitalPurchaseCheck
ซึ่งจะตรวจสอบว่าผู้ใช้ได้รับการยืนยันแล้ว ผู้ใช้ทำธุรกรรมบนแพลตฟอร์มที่อนุญาต (จออัจฉริยะ ลำโพงอัจฉริยะ หรือ Android) และอยู่ในสถานที่ที่รองรับธุรกรรมดิจิทัล
หากต้องการสร้างฉากการตรวจสอบการซื้อแบบดิจิทัล ให้ทำตามขั้นตอนต่อไปนี้
- จากแท็บฉาก ให้เพิ่มฉากใหม่ชื่อ
DigitalPurchaseCheck
- ในส่วนการเติมช่องโฆษณา ให้คลิก + เพื่อเพิ่มช่องใหม่
- ภายใต้เลือกประเภท ให้เลือก
actions.type.DigitalPurchaseCheckResult
เป็นประเภทช่องโฆษณา - ในช่องชื่อช่อง ให้ตั้งชื่อช่องโฆษณาเป็น
DigitalPurchaseCheck
- เปิดใช้ช่องทําเครื่องหมายปรับแต่งการเขียนกลับค่าช่องโฆษณา (เปิดใช้โดยค่าเริ่มต้น)
- คลิกบันทึก
การตรวจสอบการซื้อแบบดิจิทัลจะส่งผลให้เกิดผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้
- หากมีคุณสมบัติตรงตามข้อกำหนด ระบบจะกำหนดพารามิเตอร์เซสชันโดยมีเงื่อนไขว่าสำเร็จ และคุณจะอนุญาตให้ผู้ใช้ซื้อสินค้าดิจิทัลได้
- หากไม่สามารถปฏิบัติตามข้อกำหนดอย่างน้อย 1 ข้อ ระบบจะตั้งค่าพารามิเตอร์เซสชันโดยมีเงื่อนไขล้มเหลว ในกรณีนี้ คุณควรเปลี่ยนการสนทนาออกจาก ประสบการณ์การทำธุรกรรม หรือควรสิ้นสุดการสนทนา
ในการจัดการผลการตรวจสอบการซื้อดิจิทัล ให้ทำตามขั้นตอนต่อไปนี้
- จากแท็บฉาก ให้เลือกฉาก
DigitalPurchaseCheck
ที่สร้างขึ้นใหม่ - ในส่วนเงื่อนไข ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
ในช่องข้อความ ให้ป้อนไวยากรณ์เงื่อนไขต่อไปนี้เพื่อตรวจสอบเงื่อนไขความสำเร็จ
scene.slots.status == "FINAL" && session.params.DigitalPurchaseCheck.resultType == "CAN_PURCHASE"
วางเคอร์เซอร์เหนือเงื่อนไขที่เพิ่งเพิ่ม แล้วคลิกลูกศรขึ้นเพื่อวางไว้หน้า
if scene.slots.status == "FINAL"
เปิดใช้ส่งพรอมต์และใช้ข้อความแจ้งง่ายๆ เพื่อแจ้งให้ผู้ใช้ทราบว่าพร้อมทำธุรกรรมแล้ว ดังนี้
candidates: - first_simple: variants: - speech: >- You are ready to purchase digital goods.
ในส่วนการเปลี่ยน ให้เลือกฉากอื่น ซึ่งจะอนุญาตให้ผู้ใช้สนทนาต่อและทำธุรกรรมต่อ
เลือกเงื่อนไข
else if scene.slots.status == "FINAL"
เปิดใช้ส่งพรอมต์และใช้ข้อความแจ้งง่ายๆ เพื่อแจ้งให้ผู้ใช้ทราบว่าทำธุรกรรมไม่ได้
candidates: - first_simple: variants: - speech: Sorry you cannot perform a digital purchase.
ในส่วนการเปลี่ยน ให้เลือกสิ้นสุดการสนทนาเพื่อสิ้นสุดการสนทนา
2. ข. รวบรวมพื้นที่โฆษณาที่ใช้ได้
ใช้ API การซื้อแบบดิจิทัลเพื่อขอพื้นที่โฆษณาใน Play Store ที่มีอยู่ในปัจจุบัน จากนั้นสร้างออบเจ็กต์ JSON ลงในอาร์เรย์ของออบเจ็กต์ JSON สำหรับผลิตภัณฑ์แต่ละรายการ คุณจะอ้างอิงอาร์เรย์นี้ในภายหลังเพื่อแสดงให้ผู้ใช้เห็นตัวเลือกที่มีให้ซื้อ
สินค้าดิจิทัลแต่ละรายการจะแสดงเป็น SKU ในรูปแบบ JSON โค้ด Node.js ต่อไปนี้สรุปการจัดรูปแบบที่คาดไว้ของ SKU แต่ละรายการ
body = {
skus: [
skuId: {
skuType: one of "SKU_TYPE_IN_APP" or "SKU_TYPE_SUBSCRIPTION"
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': conv.session.id,
'skuType': 'SKU_TYPE_IN_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 รายการสำหรับแต่ละรายการ
const items = [];
const entries = [];
skus.forEach((sku) => {
const key = `${sku.skuId.skuType},${sku.skuId.id}`
items.push({
key: key
});
entries.push({
name: key,
synonyms: [],
display: {
title: sku.title,
description: `${sku.description} | ${sku.formattedPrice}`,
}
});
});
conv.session.typeOverrides = [{
name: 'type_name',
mode: 'TYPE_REPLACE',
synonym: {
entries: entries
}
}];
conv.add(new List({
title: 'List title',
subtitle: 'List subtitle',
items: items,
}));
สร้างการซื้อจากการเลือกของผู้ใช้
เมื่อผู้ใช้เลือกสินค้าแล้ว คุณจะสร้างคำสั่งซื้อได้ ในการดำเนินการ คุณสามารถเรียกไปยังเว็บฮุคเพื่อสร้างคำสั่งซื้อบนช่องที่เชื่อมโยงกับรายการที่เลือกได้ บันทึกข้อมูลคำสั่งซื้อลงในพารามิเตอร์เซสชันจาก Fulfillment มีการใช้ออบเจ็กต์ลำดับข้ามฉากในเซสชันเดียวกัน
conv.session.params.purchase = {
"@type": "type.googleapis.com/google.actions.transactions.v3.CompletePurchaseValueSpec",
"skuId": {
"skuType": "<SKU_TYPE_IN_APP>",
"id": "<SKU_ID>",
"packageName": "<PACKAGE_NAME>"
},
"developerPayload": ""
};
ใน Actions Builder คุณสามารถใช้ตัวแก้ไข JSON เพื่อกำหนดค่าสล็อตด้วยออบเจ็กต์ลำดับข้างต้นแทนได้ การใช้งานทั้ง 2 แบบใช้รูปแบบเดียวกันสำหรับ CompletePurchaseValueSpec
ซึ่งดูได้ในข้อมูลอ้างอิงเพย์โหลดของเว็บฮุค JSON
4. ทำการซื้อให้เสร็จสมบูรณ์
เมื่อผู้ใช้เลือกสินค้าแล้ว คุณจะทำการซื้อให้เสร็จสมบูรณ์ได้ เมื่อกรอกข้อมูลในช่องที่เชื่อมโยงกับรายการที่เลือกแล้ว คุณควรเปลี่ยนไปยังฉากที่ทำการซื้อเสร็จสมบูรณ์
สร้างโหมดการซื้อที่สมบูรณ์
- จากแท็บฉาก ให้เพิ่มฉากใหม่ชื่อ
CompletePurchase
- ในส่วนการเติมช่องโฆษณา ให้คลิก + เพื่อเพิ่มช่องใหม่
- ในส่วนเลือกประเภท ให้เลือก
actions.type.CompletePurchaseValue
เป็นประเภทช่อง - ในช่องชื่อช่อง ให้ตั้งชื่อช่องโฆษณาเป็น
CompletePurchase
- เปิดใช้ช่องทำเครื่องหมายปรับแต่งการเขียนค่าช่องเอง (เปิดใช้อยู่โดยค่าเริ่มต้น)
- ในส่วนกำหนดค่าสล็อต ให้เลือก
Use session parameter
จากเมนูแบบเลื่อนลง - ในส่วนกำหนดค่าสล็อต ให้ป้อนชื่อพารามิเตอร์เซสชันที่ใช้จัดเก็บลำดับลงในช่องข้อความ (เช่น
$session.params.purchase
) - คลิกบันทึก
5. จัดการผลลัพธ์
ช่องโฆษณาที่มีประเภท actions.type.CompletePurchaseValue
อาจมีผลลัพธ์ต่อไปนี้
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
: ธุรกรรมล้มเหลวโดยไม่ทราบสาเหตุ ทำให้ระบบไม่ทราบสถานะ จัดการสถานะข้อผิดพลาดนี้โดยแจ้งให้ผู้ใช้ทราบว่าธุรกรรมล้มเหลว และถามว่าต้องการลองอีกครั้งหรือไม่
คุณควรจัดการผลลัพธ์เหล่านี้แต่ละรายการจากฉาก CompletePurchase
ของคุณ
- จากแท็บฉาก ให้เลือกฉาก
CompletePurchase
ที่สร้างขึ้นใหม่ - ในส่วนเงื่อนไข ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
ในช่องข้อความ ให้ป้อนไวยากรณ์เงื่อนไขต่อไปนี้เพื่อตรวจสอบเงื่อนไขความสำเร็จ
scene.slots.status == "FINAL" && session.params.CompletePurchase.purchaseStatus == "PURCHASE_STATUS_OK"
วางเคอร์เซอร์เหนือเงื่อนไขที่เพิ่งเพิ่ม แล้วคลิกลูกศรขึ้นเพื่อวางไว้หน้า
if scene.slots.status == "FINAL"
เปิดใช้ส่งพรอมต์และใช้ข้อความแจ้งง่ายๆ เพื่อแจ้งให้ผู้ใช้ทราบว่าพร้อมทำธุรกรรมแล้ว ดังนี้
candidates: - first_simple: variants: - speech: >- Your purchase was successful.
ในส่วนการเปลี่ยน ให้เลือกสิ้นสุดการสนทนาเพื่อสิ้นสุดการสนทนา
ทำขั้นตอนข้างต้นซ้ำกับผลการค้นหาการซื้อแต่ละประเภทที่คุณต้องการสนับสนุน
6. ซื้อซ้ำ
หลังจากทำธุรกรรมสำเร็จแล้ว ให้ส่งคำขอ POST ไปยัง API การซื้อแบบดิจิทัลเพื่อใช้ไอเทม ซึ่งทำให้ผู้ใช้ซื้อไอเทมนั้นได้อีกครั้ง ส่งคำขอไปยังปลายทาง https://actions.googleapis.com/v3/conversations/{sessionId}/entitlement:consume
พร้อมรหัสของเซสชันที่พบใน session.id
คำขอ POST ของคุณต้องมีออบเจ็กต์โทเค็นการซื้อที่เชื่อมโยงกับการซื้อของผู้ใช้ ซึ่งพบใน JSON คำขอของผู้ใช้ในส่วน packageEntitlements.entitlements.inAppDetails.inAppPurchaseData.purchaseToken
โค้ดต่อไปนี้จะส่งคำขอ consume
ไปยัง API การซื้อแบบดิจิทัลและรายงานว่าคำขอดังกล่าวสำเร็จหรือไม่
request.post(`https://actions.googleapis.com/v3/conversations/${conv.session.id}/entitlement:consume`, {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {
// This purchase token is in both the purchase event and the user's entitlements
// in their request JSON
"purchaseToken": entitlement.purchaseToken
},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
console.log(JSON.stringify(httpResponse));
console.log(JSON.stringify(body));
resolve(body);
});
// Make sure the consume request was successful. In production, don't notify the user; handle failures on the back end
return consumePromise.then(body => {
const consumed = Object.keys(body).length === 0;
if (consumed) {
conv.add(`You successfully consumed ${id}`);
} else {
conv.add(`Failed to consume: ${id}`);
}
});
สะท้อนการซื้อของผู้ใช้
เมื่อผู้ใช้ค้นหาการดำเนินการ ออบเจ็กต์ user
ของ JSON ของคำขอจะรวมรายการการซื้อของผู้ใช้ ตรวจสอบข้อมูลนี้และเปลี่ยนการตอบสนองของการดำเนินการของคุณตามเนื้อหาที่ผู้ใช้ชำระเงิน
โค้ดตัวอย่างต่อไปนี้แสดงออบเจ็กต์ user
ของคําขอที่มี packageEntitlements
ของการซื้อในแอปก่อนหน้านี้สําหรับแพ็กเกจ com.digitalgoods.application
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "actions.intent.MAIN",
"params": {},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "UNSPECIFIED",
"slots": {}
},
"session": {
"id": "example_session_id",
"params": {},
"typeOverrides": []
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED"
"packageEntitlements": [
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "non-consumable.1",
"skuType": "SKU_TYPE_IN_APP"
}
{
"sku": "consumable.2",
"skuType": "SKU_TYPE_IN_APP"
}
]
},
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "annual.subscription",
"skuType": "SKU_TYPE_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=="
}
}
]
}
]
}
},
"homeStructure": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
ทดสอบโปรเจ็กต์
เมื่อทดสอบโปรเจ็กต์ คุณเปิดใช้โหมดแซนด์บ็อกซ์ในคอนโซลการดำเนินการเพื่อทดสอบการดำเนินการของคุณได้โดยไม่ต้องเรียกเก็บเงินจากวิธีการชำระเงิน หากต้องการเปิดใช้โหมดแซนด์บ็อกซ์ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Actions ให้คลิกทดสอบในการนําทาง
- คลิกการตั้งค่า
- เปิดใช้ตัวเลือกแซนด์บ็อกซ์สำหรับการพัฒนา