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

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

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

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

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

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

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

ข้อจำกัดและหลักเกณฑ์การตรวจสอบ

นโยบายเพิ่มเติมใช้กับการดำเนินการที่มีธุรกรรม เราอาจใช้เวลา 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 ให้ทำตามขั้นตอนต่อไปนี้

  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. ไปที่ Build สร้าง Signed Bundle / APK
    2. คลิกถัดไป
    3. ในส่วนเส้นทางของร้านค้าหลัก ให้คลิกสร้างใหม่
    4. กรอกข้อมูลในแต่ละช่องแล้วคลิกตกลง จดบันทึกรหัสผ่านของแหล่งเก็บคีย์และรหัสผ่านหลักของคุณ และเก็บไว้ในที่ปลอดภัยเพราะคุณจะต้องใช้ข้อมูลนี้ในภายหลัง
    5. คลิกถัดไป
    6. เลือกรุ่น
    7. เลือก V1 (ลายเซ็น JAR)
    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. คลิก Create key และดาวน์โหลดคีย์บัญชีบริการ JSON

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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 ลงในอาร์เรย์ของออบเจ็กต์ 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': ['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,
}));

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

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

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

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

  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. ในส่วนการเปลี่ยน ให้เลือกสิ้นสุดการสนทนาเพื่อสิ้นสุดการสนทนา

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

สะท้อนการซื้อของผู้ใช้

เมื่อผู้ใช้ค้นหาการดำเนินการ ออบเจ็กต์ 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"
    ]
  }
}

ทดสอบโปรเจ็กต์

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

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