יצירת עסקאות מינויים דיגיטליות

במדריך הזה מוסבר איך להוסיף עסקאות של מינויים דיגיטליים לפעולות השיחה כדי שהמשתמשים יוכלו לרכוש את המינויים.

מונחי מפתח: מוצר דיגיטלי של מינוי הוא יחידה לאחסון במלאי (מק"ט) שבה נדרש חיוב קבוע מהמשתמש, כמו למשל כתב עת מקוון. הוא שונה ממוצר דיגיטלי שמתבסס על רכישה מחדש באופן ידני, או ממוצר דיגיטלי שלא ניתן לצריכה, שנרכש באופן אוטומטי פעם אחת בלבד.

למידע נוסף על מינויים דיגיטליים, עיינו במסמכי התיעוד של Android בנושא תכונות ספציפיות למינוי.

תהליך העסקה

במדריך הזה מפורט כל שלב בפיתוח בתהליך של טרנזקציית מוצרים דיגיטליים. כשהפעולה מטפלת בעסקאות של מוצרים דיגיטליים, מדובר בתהליך הבא:

  1. הגדרת לקוח API לרכישות דיגיטליות: במסגרת הפעולה נעשה שימוש ב-API לרכישות דיגיטליות כדי לתקשר עם מלאי שטחי הפרסום ב-Google Play ולבצע עסקאות. לפני שהפעולה מתבצעת, היא יוצרת לקוח JWT עם מפתח שירות כדי לתקשר עם ה-API לרכישות דיגיטליות.
  2. איסוף מידע: הפעולה אוספת מידע בסיסי על המשתמש ועל המלאי שלכם ב-Google Play כדי להתכונן לעסקה.
    1. אימות הדרישות לגבי טרנזקציות: בפעולה נעשה שימוש בכלי העזר בנושא דרישות לגבי עסקאות דיגיטליות בתחילת תהליך הרכישה, כדי לוודא שהמשתמשים יכולים לבצע עסקה.
    2. לאסוף מלאי זמין: הפעולה בודקת את המלאי שלכם ב-Google Play ומזהה אילו פריטים זמינים כרגע לרכישה.
  3. יוצרים את ההזמנה: הפעולה מציגה את המוצרים הדיגיטליים הזמינים למשתמשים כדי שהם יוכלו לבחור לקנות את המוצרים.
  4. השלמת הרכישה: בפעולה נעשה שימוש ב-API לרכישות דיגיטליות כדי לבצע רכישה בחנות Google Play לאחר שהמשתמש בחר.
  5. טיפול בתוצאה: הפעולה מקבלת קוד סטטוס עבור העסקה ומיידעת את המשתמש שהרכישה הושלמה בהצלחה (או שהיא מבצעת פעולות נוספות).

הגבלות והנחיות לבדיקה

סעיפי מדיניות נוספים חלים על פעולות עם עסקאות. יכול להיות שיעברו כמה שבועות עד שנוכל לבדוק את הפעולות שכוללות טרנזקציות, ולכן מביאים בחשבון את הזמן הזה כשמתכננים את לוח הזמנים להפצה. כדי להקל על תהליך הבדיקה, חשוב להקפיד לפעול בהתאם למדיניות ולהנחיות בנושא עסקאות לפני ששולחים את הפעולה לבדיקה.

ניתן לפרוס פעולות שמוכרות מוצרים דיגיטליים רק במדינות הבאות:

  • אוסטרליה
  • ברזיל
  • קנדה
  • אינדונזיה
  • יפן
  • מקסיקו
  • רוסיה
  • סינגפור
  • תאילנד
  • טורקיה
  • בריטניה
  • ארצות הברית

דרישות מוקדמות

כדי לשלב עסקאות דיגיטליות בפעולה, צריך לעמוד בדרישות המוקדמות הבאות:

  • חשבון פיתוח וחשבון מוכר ב-Google Play לצורך ניהול המוצרים הדיגיטליים שלכם ב-Google Play Console.

  • דומיין אינטרנט שמאומת ב-Google Search Console. אין צורך לשייך את הדומיין לאתר אינטרנט שהושק באופן ציבורי, אנחנו רק צריכים להפנות לדומיין האינטרנט שלכם.

  • אפליקציה ל-Android עם ההרשאה com.android.vending.BILLING ב-Google Play Console. המוצרים הדיגיטליים שלכם יהיו "רכישות מתוך האפליקציה" שמשוייכו לאפליקציה הזו ב-Google Play Console.

    צריך ליצור גרסה ב-Play Console גם באמצעות האפליקציה הזו, אבל אם לא רוצים שהגרסה תהיה גלויה לכולם, אפשר ליצור גרסת אלפא סגורה.

    אם עדיין אין לכם אפליקציה ל-Android, פעלו לפי ההוראות לשיוך אפליקציה ל-Android.

  • מינוי אחד או יותר במסוף Google Play, שהם המוצרים הדיגיטליים שאתם מוכרים עם הפעולה. שימו לב: אי אפשר ליצור מינויים ב-Play Console לפני שמגדירים את הדרישה המוקדמת מ-Android.

    אם עדיין אין לכם מינויים, פעלו לפי ההוראות ליצירת מוצרים דיגיטליים.

שיוך אפליקציית Android

אם אין לכם כרגע ב-Google Play Console אפליקציה ל-Android עם הרשאת חיוב, תוכלו לבצע את הפעולות הבאות:

  1. יוצרים פרויקט חדש ב-Android Studio או בסביבת פיתוח משולבת (IDE) של Android. בוחרים אפשרויות בהנחיות להגדרת הפרויקט כדי ליצור אפליקציה בסיסית מאוד.
  2. נותנים לפרויקט שם חבילה, כמו com.mycompany.myapp. אל תשאירו את השם הזה כברירת מחדל, כי לא ניתן להעלות ל-Play Console חבילות שכוללות את com.example.
  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, יצירת חבילה / APK חתומה.
    2. לוחצים על הבא.
    3. בקטע Key store path (נתיב מאגר המפתח), לוחצים על יצירת חדש.
    4. ממלאים את כל השדות ולוחצים על אישור. רשמו את הסיסמה של מאגר המפתחות ואת הסיסמה של מפתח ושמרו אותן במקום בטוח, כי תשתמשו בהן בהמשך.
    5. לוחצים על הבא.
    6. בוחרים באפשרות פרסום.
    7. בוחרים באפשרות V1 (חתימת JAR).
    8. לוחצים על סיום.
    9. לאחר מספר שניות, מערכת Android Studio תיצור קובץ app-release.apk. אתר הקובץ הזה לשימוש במועד מאוחר יותר.
  6. במסוף Google Play, יוצרים אפליקציה חדשה.

  7. עוברים אל גרסאות של אפליקציות.

  8. בקטע מסלולים סגורים, עוברים אל ניהול ואז אל אלפא.

  9. לוחצים על הלחצן יצירת פריט תוכן.

  10. בקטע Google תנהל את מפתח החתימה שלך ותגן עליו, מזינים את הפרטים של מפתח החתימה.

  11. מעלים את קובץ ה-APK.

  12. לוחצים על שמירה.

יצירת המוצרים הדיגיטליים שלכם

אם אין לכם כרגע מוצרים דיגיטליים ב-Play Console, עליכם לפעול לפי השלבים הבאים:

  1. ב-Google Play Console, נכנסים אל מוצרים מתוך האפליקציה ואז אל מינויים. אם קיבלתם אזהרה, בצעו את ההוראות הקודמות כדי ליצור אפליקציה ל-Android, או לחצו על הקישור כדי ליצור פרופיל מוכר.
  2. לוחצים על יצירת מינוי.
  3. ממלאים את השדות של המוצר הדיגיטלי. ציינו את מזהה המוצר, וכך תציינו את המוצר בפעולה.
  4. לוחצים על שמירה.
  5. חוזרים על שלבים 2-4 לכל מוצר שרוצים למכור.

מינויים לדוגמה ב-Google Play Console.

מכינים את פרויקט הפעולות

אחרי שמגדירים מוצרים דיגיטליים ב-Google Play Console, צריך להפעיל עסקאות דיגיטליות ולשייך את פרויקט הפעולות לאפליקציית Play.

Setup (הגדרה)

כדי להפעיל עסקאות במוצרים דיגיטליים בפרויקט Actions, צריך לבצע את השלבים הבאים:

  1. במסוף הפעולות, פותחים את הפרויקט או יוצרים פרויקט חדש.
  2. עבור אל פריסה ולאחר מכן אל פרטי ספרייה.
  3. בקטעים מידע נוסף ועסקאות, מסמנים את התיבה כן בקטע Do your Actions use the Digital purchase API לביצוע טרנזקציות במוצרים דיגיטליים.
  4. לוחצים על שמירה.

יצירת מפתח API למוצרים דיגיטליים

כדי לשלוח בקשות ל-API למוצרים דיגיטליים, עליכם להוריד מפתח חשבון לשירות JSON שמשויך לפרויקט במסוף Actions.

כדי לאחזר את המפתח של חשבון השירות:

  1. בקונסולה ל-Actions, לוחצים על סמל שלוש הנקודות בפינה השמאלית העליונה ואז על Project settings.
  2. מאתרים את מזהה הפרויקט של הפעולה.
  3. לוחצים על הקישור הבא ומחליפים את "<project_id>" במזהה הפרויקט: https://console.developers.google.com/apis/credentials?project=project_id
  4. בתפריט הניווט הראשי, עוברים אל Credentials (פרטי כניסה).
  5. בדף שמופיע, לוחצים על Create credentials ואז על Service account key.
  6. עוברים אל Service Account (חשבון שירות) ולוחצים על New Service Account (חשבון שירות חדש).
  7. נותנים לחשבון השירות שם כמו digitaltransactions.
  8. לוחצים על יצירה.
  9. מגדירים את התפקיד בתור Project > Owner (פרויקט > בעלים).
  10. לוחצים על המשך.
  11. לוחצים על יצירת מפתח.
  12. בוחרים את סוג המפתח JSON.
  13. לוחצים על Create key ומורידים את המפתח של חשבון השירות בפורמט JSON.

יש לשמור את המפתח של חשבון השירות הזה במקום בטוח. המפתח הזה ישמש אתכם במילוי הבקשה כדי ליצור לקוח ל-API לרכישות דיגיטליות.

קישור למלאי Play

כדי לגשת למוצרים דיגיטליים מפרויקט Actions, צריך לשייך את דומיין האינטרנט והאפליקציה לפרויקט בתור נכסים מקושרים.

כדי לקשר את הדומיין באינטרנט והאפליקציה ב-Play Console לפרויקט Actions, צריך לבצע את השלבים הבאים:

  1. במסוף הפעולות, לוחצים על פריסה ואז על אימות המותג.
  2. אם עדיין לא קישרתם נכסים, קודם צריך לקשר אתר:

    1. לחץ על הלחצן של נכס אינטרנט (</>).
    2. מזינים את כתובת ה-URL של דומיין האינטרנט ולוחצים על Connect (קישור).

    Google שולחת אימייל עם הוראות נוספות לאדם הפרטי שאימת את דומיין האינטרנט ב-Google Search Console. אחרי שהנמען של האימייל הזה יבצע את ההוראות האלה, האתר יופיע בקטע Brand verification (אימות המותג).

  3. לאחר שיש לפחות אתר מחובר אחד, מבצעים את השלבים הבאים כדי לחבר את האפליקציה ל-Android:

    1. במסוף הפעולות, לוחצים על פריסה ואז על אימות המותג.
    2. לחץ על חבר אפליקציה.
    3. בדף שמופיע, פועלים לפי ההוראות לאימות דומיין האינטרנט ב-Play Console. בחרו באפליקציית Play שמכילה את המוצרים הדיגיטליים שלכם, והזינו את כתובת האתר של דומיין האינטרנט בדיוק כפי שהיא מופיעה בדף אימות המותג.

      שוב, Google שולחת הודעת אימות באימייל לבעלים המאומתים של הדומיין. לאחר שאיש הקשר יאשר את האימות, אפליקציית Play שלכם אמורה להופיע בקטע אימות מותג.

    4. מפעילים את האפשרות גישה לרכישות ב-Play.

תמונה שמוצגים בה אתר ואפליקציות שמקושרים לפרויקט Actions.

בניית תהליך הרכישה

אחרי שמכינים את הפרויקט של הפעולות ואת מלאי המוצרים הדיגיטליים, אפשר לבנות תהליך לרכישת מוצרים דיגיטליים ב-webhook למילוי הזמנות.

1. הגדרת לקוח API לרכישות דיגיטליות

ב-webhook למילוי הזמנות של השיחה, יוצרים לקוח 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. בקטע מילוי משבצת, לוחצים על + כדי להוסיף יחידת קיבולת (Slot) חדשה.
  3. בקטע Select type בוחרים את הסוג actions.type.DigitalPurchaseCheckResult.
  4. בשדה השם של יחידת הקיבולת (Slot), מזינים את השם DigitalPurchaseCheck.
  5. מפעילים את תיבת הסימון התאמה אישית של ערך המשבצת (מופעלת כברירת מחדל).
  6. לוחצים על שמירה.

בדיקת רכישה דיגיטלית תוביל לאחת מהתוצאות הבאות:

  • אם הדרישות מתמלאות, פרמטר הסשן מוגדר עם תנאי הצלחה ואפשר להמשיך ומאפשר למשתמש לרכוש מוצרים דיגיטליים.
  • אם אי אפשר לעמוד באחת או יותר מהדרישות, פרמטר ההפעלה מוגדר עם תנאי כשל. במקרה כזה, עליכם להחליף את השיחה בחוויית העסקאות או לסיים את השיחה.

כדי לטפל בתוצאה של בדיקת רכישה דיגיטלית, יש לפעול לפי השלבים הבאים:

  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, ולאחר מכן לבנות אותו למגוון אובייקטים של JSON לכל מוצר. תוכלו להפנות למערך הזה מאוחר יותר כדי להראות למשתמש אילו אפשרויות זמינות לרכישה.

כל אחד מהמוצרים הדיגיטליים שלך מיוצג כמק"ט בפורמט JSON. הקוד הבא של Node.js מתאר את הפורמט הצפוי של כל מק"ט:

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), ולעצב את התוצאה כמערך של אובייקטים של מק"ט.

כדי לאחזר רק מוצרים דיגיטליים ספציפיים מהמערך שמתקבל, צריך לרשום את מזהי המוצרים של מוצרים דיגיטליים (כפי שהם מופיעים מתחת לכל מוצר מתוך האפליקציה ב-Google Play Console) שרוצים להציע לרכישה ב-body.ids.

הקוד הבא של Node.js מבקש רשימה של מוצרים זמינים מה-API של הרכישות הדיגיטליות, ויוצר את התוצאה כמערך של מק"טים:

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': ['annual.subscription']
      },
    }, (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 הבא קורא מערך מלאי של אובייקטים של מק"ט ויוצר תגובה של רשימה עם פריט אחד ברשימה לכל אחד:

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

יצירת רכישה לפי בחירת המשתמש

אחרי שהמשתמש בוחר פריט, אפשר ליצור את ההזמנה. כדי לעשות זאת, במשבצת שמשויכת לפריט שנבחר, אפשר לשלוח קריאה ל-webhook כדי ליצור את ההזמנה. ממילוי ההזמנה, שומרים את נתוני ההזמנה בפרמטר של סשן. אובייקט ההזמנה משמש בסצנות שונות באותו סשן.

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 כדי להגדיר את יחידת הקיבולת (Slot) עם אובייקט ההזמנה שלמעלה. שתי ההטמעות משתמשות באותו פורמט עבור CompletePurchaseValueSpec, שניתן למצוא בחומר העזר למטען ייעודי (payload) של JSON webhook.

4. השלמת הרכישה

אחרי שהמשתמש בוחר פריט, אפשר להשלים את הרכישה. אחרי שתמלאו את יחידת הקיבולת (Slot) שמשויכת לפריט שנבחר, תצטרכו לעבור לסצנה שמשלימים את הרכישה.

יצירת סצנת רכישה מלאה

  1. בכרטיסייה סצנות, מוסיפים סצנה חדשה בשם CompletePurchase.
  2. בקטע מילוי משבצת, לוחצים על + כדי להוסיף יחידת קיבולת (Slot) חדשה.
  3. בקטע Select type בוחרים את הסוג actions.type.CompletePurchaseValue.
  4. בשדה השם של יחידת הקיבולת (Slot), מזינים את השם CompletePurchase.
  5. מפעילים את תיבת הסימון התאמה אישית של ערך המשבצת (מופעלת כברירת מחדל).
  6. בקטע הגדרת יחידת קיבולת (Slot), בוחרים באפשרות Use session parameter מהתפריט הנפתח.
  7. בקטע Configure o [הגדרת משבצת] מזינים בשדה הטקסט את השם של פרמטר הסשן שמשמש לשמירת ההזמנה (כלומר $session.params.purchase).
  8. לוחצים על שמירה.

5. טיפול בתוצאה

יכולות להיות התוצאות הבאות ביחידת קיבולת (Slot) מסוג actions.type.CompletePurchaseValue:

  • PURCHASE_STATUS_OK: הרכישה בוצעה בהצלחה. העסקה הושלמה בשלב הזה, לכן צריך לצאת מתהליך העסקה ולחזור לשיחה.
  • PURCHASE_STATUS_ALREADY_OWNED: העסקה נכשלה כי הפריט הזה כבר בבעלות המשתמש. כדי למנוע את השגיאה הזו, אפשר לבדוק את הרכישות הקודמות של המשתמש ולהתאים את הפריטים המוצגים כך שלא תהיה לו אפשרות לרכוש מחדש פריטים שכבר נמצאים בבעלותו.
  • PURCHASE_STATUS_ITEM_UNAVAILABLE: העסקה נכשלה כי הפריט המבוקש אינו זמין. כדי להימנע מהשגיאה הזו, כדאי לבדוק את המק"טים הזמינים במועד קרוב יותר למועד הרכישה.
  • 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"
    ]
  }
}

בדיקת הפרויקט

כשבודקים את הפרויקט, אפשר להפעיל את מצב Sandbox במסוף Actions כדי לבדוק את הפעולה בלי לחייב אמצעי תשלום. כדי להפעיל את מצב ארגז החול, בצעו את השלבים הבאים:

  1. במסוף הפעולות, לוחצים על בדיקה בתפריט הניווט.
  2. לוחצים על הגדרות.
  3. מפעילים את האפשרות devment Sandbox (ארגז חול לפיתוח).