สร้างธุรกรรมดิจิทัลที่บริโภคได้

คำแนะนำนี้จะอธิบายวิธีเพิ่มธุรกรรมดิจิทัลไปยังการสนทนา การดำเนินการเพื่อให้ผู้ใช้ซื้อสินค้าดิจิทัลที่ใช้แล้วหมดไปได้

คำสำคัญ: สินค้าดิจิทัลที่ใช้แล้วหมดไปคือหน่วยเก็บสต็อก (SKU) ที่ ผู้ใช้สามารถใช้และซื้อมากกว่า 1 ครั้ง เช่น จำนวนสกุลเงินในเกม สำหรับเกม Android สินค้าดิจิทัลนี้แตกต่างจากสินค้าบริโภคไม่ได้ สินค้าดิจิทัลที่ผู้ใช้สามารถซื้อได้เพียงครั้งเดียว

ดูข้อมูลเพิ่มเติมเกี่ยวกับผลิตภัณฑ์แบบใช้ครั้งเดียวเพื่อการบริโภคได้ที่ Android เอกสารประกอบใน ฟีเจอร์เฉพาะผลิตภัณฑ์แบบใช้ครั้งเดียว

ขั้นตอนการทำธุรกรรม

คู่มือนี้จะสรุปขั้นตอนการพัฒนาแต่ละขั้นเมื่อเกิดสินค้าดิจิทัล ขั้นตอนการทำธุรกรรม เมื่อการดำเนินการของคุณจัดการธุรกรรมสำหรับสินค้าดิจิทัล ใช้ขั้นตอนต่อไปนี้

  1. ตั้งค่าไคลเอ็นต์ API การซื้อแบบดิจิทัล: การดำเนินการของคุณใช้ไคลเอ็นต์ดิจิทัล API การซื้อเพื่อสื่อสารกับพื้นที่โฆษณา Google Play และทำธุรกรรม ก่อนที่การดำเนินการของคุณจะทำอย่างอื่น เครื่องมือจะสร้างไคลเอ็นต์ JWT ที่มี คีย์บริการเพื่อสื่อสารกับ API การซื้อแบบดิจิทัล
  2. รวบรวมข้อมูล: การดำเนินการของคุณจะรวบรวมข้อมูลพื้นฐานเกี่ยวกับ ผู้ใช้และพื้นที่โฆษณา Google Play ของคุณเพื่อเตรียมทำธุรกรรม
    1. ตรวจสอบข้อกำหนดธุรกรรม: การดำเนินการของคุณใช้ช่องทางดิจิทัล ตัวช่วยข้อกำหนดธุรกรรมตั้งแต่เริ่มต้นขั้นตอนการซื้อเพื่อ ในการตรวจสอบว่าผู้ใช้ทำธุรกรรมได้
    2. รวบรวมพื้นที่โฆษณาที่พร้อมใช้งาน: การดำเนินการของคุณจะตรวจสอบ Google Play สินค้าคงคลังและระบุสินค้าที่สามารถซื้อได้ในปัจจุบัน
  3. สร้างคำสั่งซื้อ: การดำเนินการของคุณนำเสนอสินค้าดิจิทัลที่พร้อมใช้งานแก่ เพื่อที่ผู้ใช้จะเลือกซื้อได้
  4. ทำการซื้อให้เสร็จสมบูรณ์: การดำเนินการของคุณใช้ API การซื้อแบบดิจิทัลเพื่อ เริ่มการซื้อด้วยสิ่งที่ผู้ใช้เลือกจาก Google Play Store
  5. จัดการผลลัพธ์: การดำเนินการจะได้รับรหัสสถานะสำหรับ และแจ้งให้ผู้ใช้ทราบว่าการซื้อเสร็จสมบูรณ์ (หรือใช้เวลา ขั้นตอนเพิ่มเติม)
  6. ทำให้การซื้อซ้ำได้: การดำเนินการของคุณใช้การซื้อแบบดิจิทัล 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 ซึ่งเป็นสินค้าดิจิทัลที่คุณขาย พร้อมกับการดำเนินการของคุณ โปรดทราบว่า สร้างผลิตภัณฑ์ที่มีการจัดการใน Play Console ไม่ได้จนกว่าจะตั้งค่า สิ่งที่ต้องมีก่อนสำหรับแอป Android

    หากยังไม่มีผลิตภัณฑ์ที่มีการจัดการ ให้ทำตาม วิธีการสร้างสินค้าดิจิทัล

เชื่อมโยงแอป Android

หากคุณยังไม่มีแอป Android ที่มีสิทธิ์การเรียกเก็บเงินใน Google Play Console โปรดทำตามขั้นตอนต่อไปนี้

  1. ใน Android Studio หรือ Android IDE ที่คุณต้องการ ให้สร้างโปรเจ็กต์ใหม่ เลือกตัวเลือกใน ข้อความแจ้งให้ตั้งค่าโปรเจ็กต์เพื่อสร้างแอปพื้นฐานมากๆ
  2. ตั้งชื่อแพ็กเกจให้กับโปรเจ็กต์ เช่น com.mycompany.myapp อย่าใช้ชื่อนี้เป็นค่าเริ่มต้น เนื่องจากคุณอัปโหลดแพ็กเกจที่ รวม com.example ไปยัง Play Console ด้วย
  3. เปิดไฟล์ AndroidManifest.xml ของแอป
  4. เพิ่มบรรทัดโค้ดต่อไปนี้ในองค์ประกอบ 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>
    
  5. สร้างแอปเป็น APK ที่รับรองแล้ว ใน Android Studio ให้ทำตามขั้นตอนต่อไปนี้

    1. ไปที่สร้าง สร้าง Bundle / APK ที่ลงชื่อ
    2. คลิกถัดไป
    3. คลิกสร้างใหม่ในส่วนเส้นทางแหล่งคีย์
    4. กรอกข้อมูลในแต่ละช่องแล้วคลิกตกลง จดบันทึกแหล่งเก็บคีย์ รหัสผ่านและรหัสผ่านหลัก และเก็บข้อมูลเหล่านี้ไว้ในที่ปลอดภัยเนื่องจาก คุณจะต้องใช้ตัวเลือกเหล่านี้ภายหลัง
    5. คลิกถัดไป
    6. เลือกรุ่น
    7. เลือก V1 (JAR Signature)
    8. คลิกเสร็จสิ้น
    9. หลังจากผ่านไป 2-3 วินาที Android Studio จะสร้างไฟล์ app-release.apk ค้นหาไฟล์นี้เพื่อใช้ในภายหลัง
  6. ใน Google Play Console สร้างแอปพลิเคชันใหม่

  7. ไปที่รุ่นต่างๆ ของแอป

  8. ในส่วนแทร็กปิด ให้ไปที่จัดการ แล้วไปที่อัลฟ่า

  9. คลิกปุ่มสร้างรุ่น

  10. ในส่วนให้ Google จัดการและปกป้องคีย์ Signing ของคุณ ให้ป้อนลายเซ็น ข้อมูลสำคัญ

  11. อัปโหลดไฟล์ APK

  12. คลิกบันทึก

สร้างสินค้าดิจิทัล

หากคุณยังไม่มีสินค้าดิจิทัลใน Play Console โปรดทำตามขั้นตอนต่อไปนี้ ขั้นตอน:

  1. ใน Google Play Console ไปที่ไอเทมที่ซื้อในแอป แล้วไปที่ผลิตภัณฑ์ที่มีการจัดการ หากเห็นคำเตือน ทำตามวิธีการก่อนหน้าเพื่อสร้างแอป Android หรือคลิกลิงก์ เพื่อสร้างโปรไฟล์ผู้ขาย
  2. คลิกสร้างผลิตภัณฑ์ที่มีการจัดการ
  3. กรอกข้อมูลในช่องสำหรับผลิตภัณฑ์ดิจิทัลของคุณ จดรหัสผลิตภัณฑ์ ซึ่งเป็นวิธีอ้างอิงผลิตภัณฑ์นี้จากการดำเนินการของคุณ
  4. คลิกบันทึก
  5. ทำขั้นตอนที่ 2-4 ซ้ำสำหรับผลิตภัณฑ์แต่ละรายการที่ต้องการขาย

ตัวอย่างสินค้าอุปโภคบริโภคใน Google Play Console

เตรียมโปรเจ็กต์ Actions

เมื่อมีการตั้งค่าสินค้าดิจิทัลใน Google Play Console คุณต้องเปิดใช้ ธุรกรรมดิจิทัลและเชื่อมโยงโปรเจ็กต์ Actions กับแอป Play

ตั้งค่า

หากต้องการเปิดธุรกรรมสินค้าดิจิทัลในโปรเจ็กต์ Actions ให้ทำดังนี้ ขั้นตอน:

  1. ในคอนโซล Actions ให้เปิดโปรเจ็กต์หรือสร้างโปรเจ็กต์ใหม่
  2. ไปที่ทำให้ใช้งานได้ จากนั้นไปที่ข้อมูลไดเรกทอรี
  3. ในส่วนข้อมูลเพิ่มเติมและธุรกรรม ให้เลือกช่องใช่ ในส่วน การดำเนินการของคุณใช้ Digital Purchase API เพื่อทำธุรกรรมหรือไม่ ของสินค้าดิจิทัล
  4. คลิกบันทึก

สร้างคีย์ API สินค้าดิจิทัล

หากต้องการส่งคำขอไปยัง API สินค้าดิจิทัล คุณต้องดาวน์โหลดบริการ JSON คีย์บัญชีที่เชื่อมโยงกับโปรเจ็กต์คอนโซล Actions

หากต้องการเรียกข้อมูลคีย์บัญชีบริการ ให้ทำตามขั้นตอนต่อไปนี้

  1. ในคอนโซลการดำเนินการ ให้คลิกไอคอนจุด 3 จุดที่มุมขวาบน ให้ไปที่การตั้งค่าโปรเจ็กต์
  2. ค้นหารหัสโปรเจ็กต์ของการดำเนินการ
  3. ไปที่ลิงก์นี้ แทนที่ "<project_id>" ด้วยรหัสโปรเจ็กต์ของคุณ: วันที่ https://console.developers.google.com/apis/credentials?project=project_id
  4. ในการนําทางหลัก ให้ไปที่ข้อมูลเข้าสู่ระบบ
  5. ในหน้าที่ปรากฏขึ้น ให้คลิกสร้างข้อมูลเข้าสู่ระบบ แล้วคลิกบริการ คีย์บัญชี
  6. ไปที่บัญชีบริการ แล้วคลิกบัญชีบริการใหม่
  7. ตั้งชื่อบัญชีบริการให้อย่างเช่น digitaltransactions
  8. คลิกสร้าง
  9. กำหนดบทบาทเป็นโปรเจ็กต์ > เจ้าของ
  10. คลิกต่อไป
  11. คลิกสร้างคีย์
  12. เลือกประเภทคีย์ JSON
  13. คลิกสร้างคีย์และดาวน์โหลดคีย์บัญชีบริการ JSON

บันทึกคีย์บัญชีบริการนี้ไว้ในที่ปลอดภัย คุณจะใช้คีย์นี้ใน การดำเนินการตามคำสั่งซื้อเพื่อสร้างไคลเอ็นต์สำหรับ API การซื้อแบบดิจิทัล

เชื่อมต่อกับพื้นที่โฆษณา Play ของคุณ

ในการเข้าถึงสินค้าดิจิทัลจากโปรเจ็กต์ Actions ให้เชื่อมโยง โดเมนเว็บและแอปที่ใช้โปรเจ็กต์เป็น พร็อพเพอร์ตี้ที่เชื่อมต่อ

หากต้องการเชื่อมต่อโดเมนเว็บและแอป Play Console กับโปรเจ็กต์ Actions ให้ทำดังนี้ ขั้นตอนเหล่านี้:

  1. ในคอนโซลการดำเนินการ ให้ไปที่ทำให้ใช้งานได้ จากนั้นไปที่การยืนยันแบรนด์
  2. หากยังไม่ได้เชื่อมต่อพร็อพเพอร์ตี้ใดๆ ให้เชื่อมต่อเว็บไซต์ก่อน โดยทำดังนี้

    1. คลิกปุ่มผลิตภัณฑ์และบริการบนอินเทอร์เน็ต (&lt;/&gt;)
    2. ป้อน URL สำหรับโดเมนเว็บของคุณ แล้วคลิกเชื่อมต่อ

    Google จะส่งอีเมลพร้อมด้วยคำแนะนำเพิ่มเติมให้กับบุคคลที่ ได้รับการยืนยันสำหรับโดเมนเว็บนั้นใน Google Search Console เมื่อผู้รับอีเมลนี้ทำตามขั้นตอนเหล่านั้นแล้ว เว็บไซต์ควร จะปรากฏในส่วนการยืนยันแบรนด์

  3. เมื่อคุณมีเว็บไซต์ที่เชื่อมต่อแล้วอย่างน้อย 1 เว็บไซต์ ให้ทำตามขั้นตอนต่อไปนี้เพื่อ เชื่อมต่อแอป Android ของคุณ

    1. ในคอนโซลการดำเนินการ ให้ไปที่ทำให้ใช้งานได้ จากนั้นไปที่การยืนยันแบรนด์
    2. คลิกเชื่อมต่อแอป
    3. ในหน้าที่ปรากฏขึ้น ให้ทำตามวิธีการเพื่อยืนยันเว็บ ใน Play Console เลือกแอป Play ที่มี สินค้าดิจิทัล แล้วป้อน URL โดเมนเว็บให้ตรงกับที่แสดงใน การยืนยันแบรนด์

      Google จะส่งอีเมลยืนยันไปยังเจ้าของที่ได้รับการยืนยันของ โดเมน เมื่อได้รับการอนุมัติการยืนยันแล้ว แอป Play ของคุณควร จะปรากฏในส่วนการยืนยันแบรนด์

    4. เปิดใช้เข้าถึงการซื้อใน Play

รูปภาพแสดงเว็บไซต์และแอปที่เชื่อมต่อกับโปรเจ็กต์ Actions

สร้างขั้นตอนการซื้อ

เมื่อคุณเตรียมโปรเจ็กต์ 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) และอุปกรณ์อยู่ในภาษาที่มีดิจิทัล รองรับธุรกรรม

หากต้องการสร้างฉากการตรวจสอบการซื้อแบบดิจิทัล ให้ทำตามขั้นตอนต่อไปนี้

  1. จากแท็บฉาก ให้เพิ่มฉากใหม่ด้วยชื่อ DigitalPurchaseCheck
  2. ภายใต้การเติมช่อง ให้คลิก + เพื่อเพิ่มช่องใหม่
  3. ในส่วนเลือกประเภท ให้เลือก actions.type.DigitalPurchaseCheckResult เป็น ประเภทช่องโฆษณา
  4. ในช่องชื่อช่อง ให้ตั้งชื่อช่องเป็น DigitalPurchaseCheck
  5. เปิดใช้ช่องทำเครื่องหมายปรับแต่งการเขียนกลับค่าช่องโฆษณา (เปิดใช้โดยค่าเริ่มต้น)
  6. คลิกบันทึก

การตรวจสอบการซื้อแบบดิจิทัลจะส่งผลอย่างใดอย่างหนึ่งต่อไปนี้

  • หากตรงตามข้อกำหนด ระบบจะตั้งค่าพารามิเตอร์เซสชันให้ประสบความสำเร็จ คุณจึงจะอนุญาตให้ผู้ใช้ซื้อสินค้าดิจิทัลต่อไปได้
  • หากไม่สามารถปฏิบัติตามข้อกำหนดอย่างน้อย 1 ข้อ พารามิเตอร์เซสชันจะเป็น ด้วยเงื่อนไขความล้มเหลว ในกรณีนี้ คุณควรเปลี่ยนแนวทางการสนทนา ออกจากประสบการณ์การทำธุรกรรม หรือจบการสนทนาได้

ในการจัดการผลการตรวจสอบการซื้อแบบดิจิทัล ให้ทำตามขั้นตอนต่อไปนี้

  1. จากแท็บฉาก ให้เลือกฉาก DigitalPurchaseCheck ที่สร้างขึ้นใหม่
  2. ภายใต้เงื่อนไข ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
  3. ในช่องข้อความ ให้ป้อนไวยากรณ์เงื่อนไขต่อไปนี้เพื่อตรวจสอบ เงื่อนไขความสำเร็จ:

    scene.slots.status == "FINAL" && session.params.DigitalPurchaseCheck.resultType == "CAN_PURCHASE"
    
  4. วางเคอร์เซอร์เหนือเงื่อนไขที่คุณเพิ่งเพิ่ม แล้วคลิกลูกศรขึ้น เพื่อวางไว้ก่อนวันที่ if scene.slots.status == "FINAL"

  5. เปิดใช้ส่งข้อความแจ้งและแสดงข้อความแจ้งง่ายๆ เพื่อแจ้งให้ผู้ใช้ทราบ พวกเขาพร้อมที่จะทำธุรกรรม:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                You are ready to purchase digital goods.
    
  6. ในส่วนการเปลี่ยน ให้เลือกฉากอื่นเพื่อให้ผู้ใช้ดำเนินการต่อ การสนทนาและทำธุรกรรมต่อ

  7. เลือกเงื่อนไข else if scene.slots.status == "FINAL"

  8. เปิดใช้ส่งข้อความแจ้งและแสดงข้อความแจ้งง่ายๆ เพื่อแจ้งให้ผู้ใช้ทราบ ทำธุรกรรมไม่ได้

    candidates:
      - first_simple:
          variants:
            - speech: Sorry you cannot perform a digital purchase.
    
  9. เลือกสิ้นสุดการสนทนาในส่วนการเปลี่ยนเพื่อสิ้นสุดการสนทนา

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': ['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,
}));

สร้างการซื้อจากการเลือกของผู้ใช้

เมื่อผู้ใช้เลือกรายการแล้ว คุณจะสร้างคำสั่งซื้อได้ ในการดำเนินการดังกล่าว บน ที่เชื่อมโยงกับรายการที่เลือก คุณสามารถเรียกไปยังเว็บฮุคเพื่อ สร้างคำสั่งซื้อ บันทึกข้อมูลคำสั่งซื้อลงในเซสชันจากการดำเนินการตามคำสั่งซื้อ พารามิเตอร์ ระบบจะใช้ออบเจ็กต์ลำดับในฉากต่างๆ สำหรับเซสชันเดียวกัน

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. ทำการซื้อให้เสร็จสมบูรณ์

เมื่อผู้ใช้เลือกสินค้าแล้ว คุณสามารถทำการซื้อให้เสร็จสมบูรณ์ได้ เมื่อคุณกรอกข้อมูลใน ที่เชื่อมโยงกับรายการที่เลือก คุณควรเปลี่ยนเป็นฉากที่ ทำการซื้อจนเสร็จสมบูรณ์

สร้างฉากการซื้อที่สมบูรณ์

  1. จากแท็บฉาก ให้เพิ่มฉากใหม่ในชื่อ CompletePurchase
  2. ภายใต้การเติมช่อง ให้คลิก + เพื่อเพิ่มช่องใหม่
  3. ในส่วนเลือกประเภท ให้เลือก actions.type.CompletePurchaseValue เป็น ประเภทช่องโฆษณา
  4. ในช่องชื่อช่อง ให้ตั้งชื่อช่องเป็น CompletePurchase
  5. เปิดใช้ช่องทำเครื่องหมายปรับแต่งการเขียนกลับค่าช่องโฆษณา (เปิดใช้โดยค่าเริ่มต้น)
  6. ในส่วนกำหนดค่าสล็อต ให้เลือก Use session parameter จากเมนูแบบเลื่อนลง
  7. ในส่วนกำหนดค่าช่องโฆษณา ให้ป้อนชื่อพารามิเตอร์เซสชันที่ใช้เพื่อ จัดเก็บคำสั่งซื้อลงในช่องข้อความ (เช่น $session.params.purchase)
  8. คลิกบันทึก

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

  1. จากแท็บฉาก ให้เลือกฉาก CompletePurchase ที่สร้างขึ้นใหม่
  2. ภายใต้เงื่อนไข ให้คลิก + เพื่อเพิ่มเงื่อนไขใหม่
  3. ในช่องข้อความ ให้ป้อนไวยากรณ์เงื่อนไขต่อไปนี้เพื่อตรวจสอบ เงื่อนไขความสำเร็จ:

    scene.slots.status == "FINAL" && session.params.CompletePurchase.purchaseStatus == "PURCHASE_STATUS_OK"
    
  4. วางเคอร์เซอร์เหนือเงื่อนไขที่คุณเพิ่งเพิ่ม แล้วคลิกลูกศรขึ้น เพื่อวางไว้ก่อนวันที่ if scene.slots.status == "FINAL"

  5. เปิดใช้ส่งข้อความแจ้งและแสดงข้อความแจ้งง่ายๆ เพื่อแจ้งให้ผู้ใช้ทราบ พวกเขาพร้อมที่จะทำธุรกรรม:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Your purchase was successful.
    
  6. ในส่วนการเปลี่ยน ให้เลือกสิ้นสุดการสนทนาเพื่อสิ้นสุดการสนทนา

ทำขั้นตอนข้างต้นซ้ำกับผลการค้นหาแต่ละประเภทที่ต้องการรองรับ

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 ได้ เพื่อทดสอบการดำเนินการของคุณโดยไม่เรียกเก็บเงินจากวิธีการชำระเงิน หากต้องการเปิดใช้งานโหมดแซนด์บ็อกซ์ ให้ทำตามขั้นตอนต่อไปนี้

  1. ในคอนโซล Actions ให้คลิกทดสอบในการนำทาง
  2. คลิกการตั้งค่า
  3. เปิดใช้ตัวเลือกแซนด์บ็อกซ์การพัฒนา