สร้างธุรกรรมดิจิทัลที่ใช้จ่ายไม่ได้ (Dialogflow)

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

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

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

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

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

การดำเนินการที่ขายสินค้าดิจิทัลสามารถใช้งานได้ในประเทศต่อไปนี้เท่านั้น

  • ออสเตรเลีย
  • บราซิล
  • แคนาดา
  • อินโดนีเซีย
  • ญี่ปุ่น
  • เม็กซิโก
  • รัสเซีย
  • สิงคโปร์
  • ไทย
  • ตุรกี
  • สหราชอาณาจักร
  • สหรัฐอเมริกา

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

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

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

ข้อกำหนดเบื้องต้น

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

  • บัญชีนักพัฒนาแอป และ บัญชีผู้ขาย บน 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 ให้เชื่อมโยง โดเมนเว็บและแอปที่ใช้โปรเจ็กต์เป็น พร็อพเพอร์ตี้ที่เชื่อมต่อ

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

หากต้องการเชื่อมต่อโดเมนเว็บและแอป 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. ก. ตรวจสอบข้อกำหนดของธุรกรรม

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

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);
  }
});

แสดงการซื้อของผู้ใช้

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