คำแนะนำนี้จะอธิบายวิธีเพิ่มธุรกรรมดิจิทัลไปยังการสนทนา การกระทำ เพื่อให้ผู้ใช้สามารถซื้อสินค้าดิจิทัลที่ไม่สามารถบริโภคได้ของคุณ
คำสำคัญ: สินค้าดิจิทัลที่ใช้แล้วหมดไปคือหน่วยเก็บสต็อก (SKU) ที่ ซื้อได้เพียงครั้งเดียว เช่น การเข้าถึงเนื้อหาเพิ่มเติมแบบเสียค่าใช้จ่ายในการดำเนินการ หรือแอป Android ผลิตภัณฑ์ประเภทนี้ต่างจากผลิตภัณฑ์ดิจิทัลที่ใช้แล้วหมดไป ซึ่งสามารถซื้อ ใช้ และซื้อซ้ำได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับผลิตภัณฑ์แบบเรียกเก็บเงินครั้งเดียวที่ใช้จ่ายไม่ได้ได้ที่ Android เอกสารประกอบใน ฟีเจอร์เฉพาะผลิตภัณฑ์แบบใช้ครั้งเดียว
ขั้นตอนการทำธุรกรรม
คู่มือนี้จะสรุปขั้นตอนการพัฒนาแต่ละขั้นเมื่อเกิดสินค้าดิจิทัล ขั้นตอนการทำธุรกรรม เมื่อการดำเนินการของคุณจัดการธุรกรรมสำหรับสินค้าดิจิทัล ใช้ขั้นตอนต่อไปนี้
- ตั้งค่าไคลเอ็นต์ API การซื้อแบบดิจิทัล: การดำเนินการของคุณใช้ไคลเอ็นต์ดิจิทัล API การซื้อเพื่อสื่อสารกับพื้นที่โฆษณา Google Play และทำธุรกรรม ก่อนที่การดำเนินการของคุณจะทำอย่างอื่น เครื่องมือจะสร้างไคลเอ็นต์ JWT ที่มี คีย์บริการเพื่อสื่อสารกับ API การซื้อแบบดิจิทัล
- รวบรวมข้อมูล: การดำเนินการของคุณจะรวบรวมข้อมูลพื้นฐานเกี่ยวกับ
ผู้ใช้และพื้นที่โฆษณา Google Play ของคุณเพื่อเตรียมทำธุรกรรม
- ตรวจสอบข้อกำหนดธุรกรรม: การดำเนินการของคุณใช้ช่องทางดิจิทัล ตัวช่วยข้อกำหนดธุรกรรมตั้งแต่เริ่มต้นขั้นตอนการซื้อเพื่อ ในการตรวจสอบว่าผู้ใช้ทำธุรกรรมได้
- รวบรวมพื้นที่โฆษณาที่พร้อมใช้งาน: การดำเนินการของคุณจะตรวจสอบ Google Play สินค้าคงคลังและระบุสินค้าที่สามารถซื้อได้ในปัจจุบัน
 
- สร้างคำสั่งซื้อ: การดำเนินการของคุณนำเสนอสินค้าดิจิทัลที่พร้อมใช้งานแก่ เพื่อที่ผู้ใช้จะเลือกซื้อได้
- ทำการซื้อให้เสร็จสมบูรณ์: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อ เริ่มการซื้อด้วยรายการที่เลือกของผู้ใช้ไปยัง Google Play Store
- จัดการผลลัพธ์: การดำเนินการจะได้รับรหัสสถานะสำหรับ และแจ้งให้ผู้ใช้ทราบว่าการซื้อเสร็จสมบูรณ์แล้ว (หรือ ต้องมีขั้นตอนเพิ่มเติม)
ข้อจำกัดและหลักเกณฑ์การตรวจสอบ
นโยบายเพิ่มเติมจะมีผลกับการดำเนินการที่มีธุรกรรม ซึ่งอาจใช้เวลา 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 ซึ่งเป็นสินค้าดิจิทัลที่คุณขาย พร้อมกับการดำเนินการของคุณ โปรดทราบว่า สร้างผลิตภัณฑ์ที่มีการจัดการใน 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 ให้เชื่อมโยง โดเมนเว็บและแอปที่ใช้โปรเจ็กต์เป็น พร็อพเพอร์ตี้ที่เชื่อมต่อ
หากต้องการเชื่อมต่อโดเมนเว็บและแอป 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. ก. ตรวจสอบข้อกำหนดการซื้อแบบดิจิทัล
แนวทางปฏิบัติที่ดีคือต้องตรวจสอบว่าบัญชีของผู้ใช้ได้รับการตั้งค่าให้ทำงานได้
ก่อนให้ตัวเลือกในการทำการซื้อ คุณควร
เปลี่ยนเป็นโหมด DigitalPurchaseCheck ซึ่งตรวจสอบว่าผู้ใช้ได้รับการยืนยันแล้ว
พวกเขากำลังทำธุรกรรมในพื้นที่ที่ได้รับอนุญาต (Smart Display,
ลำโพงอัจฉริยะหรือ 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 สำหรับผลิตภัณฑ์แต่ละรายการ คุณอ้างอิงอาร์เรย์นี้ในภายหลังเพื่อแสดงตัวเลือกที่พร้อมใช้งานต่อผู้ใช้ ให้เลือกซื้อ
สินค้าดิจิทัลแต่ละรายการจะแสดงเป็น 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
คอนโซล (เช่น 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': conv.session.id,
        'skuType': 'SKU_TYPE_IN_APP',
        // This request is filtered to only retrieve SKUs for the following product IDs
        'ids': ['nonconsumable.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,
}));
สร้างการซื้อจากการเลือกของผู้ใช้
เมื่อผู้ใช้เลือกรายการแล้ว คุณจะสร้างคำสั่งซื้อได้ ในการดำเนินการดังกล่าว บน ที่เชื่อมโยงกับรายการที่เลือก คุณสามารถเรียกไปยังเว็บฮุคเพื่อ สร้างคำสั่งซื้อ บันทึกข้อมูลคำสั่งซื้อลงในเซสชันจากการดำเนินการตามคำสั่งซื้อ พารามิเตอร์ ระบบจะใช้ออบเจ็กต์ลำดับในฉากต่างๆ สำหรับเซสชันเดียวกัน
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.
- ในส่วนการเปลี่ยน ให้เลือกสิ้นสุดการสนทนาเพื่อสิ้นสุดการสนทนา  
ทำขั้นตอนข้างต้นซ้ำกับผลการค้นหาแต่ละประเภทที่ต้องการรองรับ
แสดงการซื้อของผู้ใช้
เมื่อผู้ใช้ค้นหาการดำเนินการของคุณ ออบเจ็กต์ 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 ได้ เพื่อทดสอบการดำเนินการของคุณโดยไม่เรียกเก็บเงินจากวิธีการชำระเงิน หากต้องการเปิดใช้งานโหมดแซนด์บ็อกซ์ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Actions ให้คลิกทดสอบในการนำทาง
- คลิกการตั้งค่า
- เปิดใช้ตัวเลือกแซนด์บ็อกซ์การพัฒนา
