Créer des transactions numériques consommables (Dialogflow)

Ce guide explique comment ajouter des transactions numériques à votre conversation Action pour que les utilisateurs puissent acheter vos produits numériques consommables.

Termes clés: un produit numérique consommable est un SKU qui gère les stocks qu'un utilisateur peut utiliser et acheter plusieurs fois (par exemple, pour une quantité de monnaie en jeu) pour un jeu Android. Ce produit numérique est différent d'un non consommable. qu'un utilisateur ne peut acheter qu'une seule fois.

Pour en savoir plus sur les produits consommables à usage unique, reportez-vous au documentation sur fonctionnalités ponctuelles spécifiques au produit.

Restrictions et consignes relatives aux avis

Des règles supplémentaires s'appliquent aux actions comportant des transactions. Cela peut nous prendre quelques afin d'examiner les actions incluant des transactions. planifier votre calendrier de publication. Pour faciliter le processus d'examen, assurez-vous de respecter avec le Règles et consignes concernant les transactions avant de soumettre votre action pour examen.

Les actions qui vendent des produits numériques ne peuvent être déployées que dans les pays suivants:

  • Australie
  • Brésil
  • Canada
  • Indonésie
  • Japon
  • Mexique
  • Russie
  • Singapour
  • Thaïlande
  • Turquie
  • Royaume-Uni
  • États-Unis

Flux de transactions

Ce guide décrit chaque étape de développement au fur et à mesure qu'elles se produisent dans le cas d'un produit numérique. le flux des transactions. Lorsque votre action gère des transactions pour des produits numériques, elle utilise le flux suivant:

  1. Configurez un client API d'achats numériques: votre action utilise le code Achats pour communiquer avec votre inventaire Google Play et effectuer des transactions. Avant d'effectuer toute autre action, votre action crée un client JWT avec une clé pour communiquer avec l'API des achats numériques.
  2. Recueillir des informations: votre action collecte des informations de base sur le et votre inventaire Google Play pour préparer une transaction.
    1. Valider les exigences concernant les transactions: votre action utilise l'ID les exigences relatives aux transactions au début du parcours d'achat pour pour s'assurer que l'utilisateur peut effectuer une transaction.
    2. Rassembler l'inventaire disponible: votre action vérifie votre inventaire et identifie les articles actuellement disponibles à l’achat.
  3. Créez l'ordre: votre action présente les produits numériques disponibles aux l'utilisateur afin qu'il puisse en choisir un à acheter.
  4. Finaliser l'achat : votre action utilise l'API des achats numériques pour : effectuer un achat à partir de la sélection de l'utilisateur sur le Google Play Store.
  5. Gérez le résultat: votre action reçoit un code d'état pour le paramètre transaction et notifie l'utilisateur que l'achat a réussi (ou qu'il prend étapes supplémentaires).
  6. Rendre l'achat reproductible: votre action utilise les achats numériques. API pour "consume" L'article acheté, ce qui le rend disponible à l'achat à nouveau par cet utilisateur.

Prérequis

Avant d'intégrer des transactions numériques dans votre action, vous devez conditions préalables suivantes:

Associer une application Android

Si vous ne possédez pas d'application Android disposant de l'autorisation de facturation dans le dans la Google Play Console, procédez comme suit:

  1. Dans Android Studio ou l'IDE Android de votre choix, créez un projet. Choisir des options dans les invites de configuration du projet pour créer une application très basique.
  2. Attribuez au projet un nom de package, tel que com.mycompany.myapp. Ne laissez pas ce nom par défaut, car vous ne pouvez pas importer de packages qui inclure com.example à la Play Console.
  3. Ouvrez le fichier AndroidManifest.xml de votre application.
  4. Ajoutez la ligne de code suivante dans l'élément manifest:

    <uses-permission android:name="com.android.vending.BILLING" />

    Votre fichier AndroidManifest.xml doit se présenter comme suit:

    <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. Créez votre application en tant qu'APK signé. Dans Android Studio, procédez comme suit:

    1. Accédez à Build (Compilation), puis à Generate Signed Bundle / APK (Générer un app bundle/APK signé).
    2. Cliquez sur Suivant.
    3. Sous Key Store Path (Chemin du keystore), cliquez sur Create new (Créer).
    4. Renseignez chaque champ, puis cliquez sur OK. Notez votre Key Store mot de passe et Mot de passe de la clé, et conservez-les en lieu sûr, vous les utiliserez plus tard.
    5. Cliquez sur Suivant.
    6. Sélectionnez Release (Version).
    7. Sélectionnez V1 (Signature JAR).
    8. Cliquez sur Terminer.
    9. Après quelques secondes, Android Studio génère un fichier app-release.apk. Localisez ce fichier pour une utilisation ultérieure.
  6. Dans Google Play Console créer une application.

  7. Accédez à Versions de l'application.

  8. Sous Versions fermées, sélectionnez Gérer, puis Alpha.

  9. Cliquez sur le bouton Créer une version.

  10. Sous Laisser Google gérer et protéger votre clé de signature, saisissez votre identifiant les informations clés.

  11. Importez votre fichier APK.

  12. Cliquez sur Enregistrer.

Créer vos produits numériques

Si vous n'avez actuellement aucun produit numérique dans la Play Console, suivez ces étapes:

  1. Dans Google Play Console accédez à Produits intégrés, puis à Produits gérés. Si un avertissement s'affiche, Suivez les instructions précédentes pour créer une application Android ou cliquez sur le lien. pour créer un profil de marchand.
  2. Cliquez sur Créer un produit géré.
  3. Remplissez les champs pour votre produit numérique. Notez l'identifiant produit, C'est ainsi que vous utiliserez ce produit à partir de votre action.
  4. Cliquez sur Enregistrer.
  5. Répétez les étapes 2 à 4 pour chaque produit que vous souhaitez vendre.

Exemples de produits consommables dans la Google Play Console

Préparer votre projet Actions

Une fois votre contenu numérique configuré dans la Google Play Console, vous devez activer transactions numériques et associer votre projet Actions à votre application Play.

Pour activer les transactions de produits numériques dans votre projet Actions, procédez comme suit : étapes:

  1. Dans la console Actions, ouvrez votre projet ou créez-en un.
  2. Accédez à Déployer, puis à Informations sur l'annuaire.
  3. Sous Informations supplémentaires et Transactions, cochez la case Oui. sous Vos actions utilisent-elles l'API d'achat numérique pour effectuer des transactions ? de produits numériques.
  4. Cliquez sur Enregistrer.

Créer une clé API pour le contenu numérique

Pour envoyer des requêtes à l'API Digital Goods, vous devez télécharger un service JSON associée à votre projet dans la console Actions.

Pour récupérer votre clé de compte de service, procédez comme suit:

  1. Dans la console Actions, cliquez sur l'icône à trois points en haut à droite. puis sur Paramètres du projet.
  2. Recherchez l'ID de projet de votre action.
  3. Suivez ce lien, qui remplace "<project_id>" par l'ID de votre projet: https://console.developers.google.com/apis/credentials?project=project_id
  4. Dans le menu de navigation principal, accédez à Identifiants.
  5. Sur la page qui s'affiche, cliquez sur Créer des identifiants, puis sur Service clé de compte Google Ads.
  6. Accédez à Compte de service, puis cliquez sur Nouveau compte de service.
  7. Nommez le compte de service, par exemple "digitaltransactions".
  8. Cliquez sur Créer.
  9. Définissez le rôle sur Projet > Propriétaire.
  10. Cliquez sur Continuer.
  11. Cliquez sur Create Key (Créer une clé).
  12. Sélectionnez le type de clé JSON.
  13. Cliquez sur Créer une clé et téléchargez la clé de compte de service JSON.

Enregistrez cette clé de compte de service en lieu sûr. Vous utiliserez cette clé dans votre fulfillment pour créer un client pour l'API des achats numériques.

Se connecter à votre inventaire Play

Pour accéder à vos produits numériques à partir d'un projet Actions, associez votre domaine Web et application avec votre projet en tant que propriétés connectées.

Remarque:Le processus de validation de la connexion peut prendre jusqu'à une semaine. vos propriétés. Si votre site Web ou votre application ne sont pas associés une fois ce délai écoulé, contactez l'assistance.

Pour associer le domaine Web et l'application Play Console à votre projet Actions, procédez comme suit : procédez comme suit:

  1. Dans la console Actions, accédez à Déployer, puis à Validation de la marque.
  2. Si vous n'avez associé aucune propriété, commencez par associer un site Web:

    1. Cliquez sur le bouton du site Web (&lt;/&gt;).
    2. Saisissez l'URL de votre domaine Web, puis cliquez sur Se connecter.

    Google envoie un e-mail contenant des instructions supplémentaires à la personne validé pour ce domaine Web Google Search Console : Une fois que le destinataire de cet e-mail a suivi ces étapes, le site Web doit s'affichent sous Validation de la marque.

  3. Une fois que vous avez au moins un site Web connecté, procédez comme suit pour connectez votre application Android:

    1. Dans la console Actions, accédez à Déployer, puis à Validation de la marque.
    2. Cliquez sur Associer une application.
    3. Sur la page qui s'affiche, suivez les instructions pour valider votre site Web. domaine dans la Play Console. Sélectionnez l'application Play contenant votre produits numériques, puis saisissez l'URL du domaine Web exactement telle qu'elle apparaît sur le Page Validation de la marque.

      Une fois encore, Google envoie un e-mail de validation au propriétaire confirmé de le domaine. Une fois la validation approuvée, votre application Play s'affichent sous Validation de la marque.

    4. Activez l'option Accéder aux achats sur Play.

Image montrant le site Web et les applications associés au projet Actions.

Créer votre parcours d'achat

Une fois votre projet Actions et votre inventaire de produits numériques préparés, élaborez une stratégie dans le flux d'achat de produits dans votre webhook de traitement des conversations.

1. Configurer un client API d'achats numériques

Dans votre webhook de fulfillment de conversation, créez un client JWT avec votre service la clé JSON du compte https://www.googleapis.com/auth/actions.purchases.digital.

Le code Node.js suivant crée un client JWT pour l'API des achats numériques:

  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. Recueillir des informations

Avant que l'utilisateur puisse effectuer un achat, votre action collecte des informations sur l'élément la capacité de l'utilisateur à effectuer des achats et quels produits sont disponibles sur votre de l'inventaire.

2. a. Valider les exigences liées aux transactions

Il est recommandé de s'assurer que le compte de l'utilisateur est configuré pour des transactions, avant de leur donner la possibilité d'effectuer un achat. Cette étape nous vérifions que l'utilisateur a configuré un mode de paiement et qu'il a où les transactions numériques sont possibles. Au début de la transaction utilisez l'outil d'aide DIGITAL_PURCHASE_CHECK pour valider la transaction de l'utilisateur avec l'Assistant.

Le code Node.js suivant utilise DIGITAL_PURCHASE_CHECK au début du conversation:

app.intent('Default Welcome Intent', async (conv, { SKU }) => {
  // Immediately invoke digital purchase check intent to confirm
  // purchase eligibility.
  conv.ask(new DigitalPurchaseCheck());
});

Trouvez le résultat de cette vérification dans les arguments de la conversation sous la forme DIGITAL_PURCHASE_CHECK_RESULT Sur la base de ce résultat, vous pouvez poursuivre le flux de transactions, ou s'éloigner et inviter les utilisateurs à consulter leur configuration.

Le code Node.js suivant gère le résultat de la vérification des exigences :

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. b. Rassembler l'inventaire disponible

Utiliser l'API des achats numériques pour demander le Play Store actuellement disponible dans un inventaire, puis nous l'intégrons dans un tableau d'objets JSON pour chaque produit. Vous référencerez ce tableau plus tard pour montrer à l'utilisateur les options disponibles. à acheter.

Chacun de vos articles numériques est représenté par un SKU au format JSON. La Le code Node.js suivant décrit le formatage attendu pour chaque SKU:

body = {
  skus: [
    skuId: {
      skuType: one of "APP" or "UNSPECIFIED"
      id: string,
      packageName: string
    }
    formattedPrice: string,
    title: string,
    description: string
  ]
}

Envoyez une requête POST à https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet point de terminaison, où {packageName} correspond au nom du package de votre application dans console (par exemple, com.myapp.digitalgoods), puis mettez en forme le résultat dans un d'objets SKU.

Pour ne récupérer que des produits numériques spécifiques dans le tableau obtenu, listez le produit Les identifiants de produits numériques (tels qu'ils apparaissent sous chaque produit intégré dans Console) que vous souhaitez rendre disponible à l'achat dans body.ids.

Le code Node.js suivant demande la liste des produits disponibles API Achats et met en forme le résultat sous la forme d'un tableau de 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': ['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. Créer la commande

Pour commencer l'achat numérique de l'utilisateur, présentez une liste de vos produits numériques. disponibles à l'achat. Vous pouvez utiliser différents types de réponses enrichies pour représenter et inviter l'utilisateur à faire une sélection.

Le code Node.js suivant lit un tableau d'inventaire d'objets SKU et crée un Réponse "list" avec un élément de liste pour chacun:

skus.forEach((sku) => {
  const key = `${sku.skuId.skuType},${sku.skuId.id}`
  list.items[key] = {
    title: sku.title,
    description: `${sku.description} | ${sku.formattedPrice}`,
  };
});

4. Finaliser l'achat

Pour finaliser l'achat, utilisez l'intent d'assistance COMPLETE_PURCHASE avec l'objet sélectionné par l'utilisateur.

Le code Node.js suivant gère la sélection de SKU de l'utilisateur à partir d'une réponse de liste et demande l'intent COMPLETE_PURCHASE avec ces informations:

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. Gérer le résultat

Une fois l'achat effectué, l'événement actions_intent_COMPLETE_PURCHASE est déclenché. Événement Dialogflow (ou intent SDK Actions actions.intent.COMPLETE_PURCHASE) avec Un argument COMPLETE_PURCHASE_VALUE décrivant le résultat créer un intent ; déclenché par cet événement, qui communique le résultat à l'utilisateur.

Gérer les résultats d'achat possibles suivants:

  • PURCHASE_STATUS_OK: l'achat a bien été effectué. La transaction est terminé à ce stade. Vous devez donc quitter le flux transactionnel et revenir à votre conversation.
  • PURCHASE_STATUS_ALREADY_OWNED: la transaction a échoué, car l'utilisateur possède déjà cet article. Pour éviter cette erreur, vérifiez l'historique et d'adapter les articles présentés afin qu'ils n'aient pas la possibilité racheter des articles qu'ils possèdent déjà.
  • PURCHASE_STATUS_ITEM_UNAVAILABLE: la transaction a échoué, car le l'élément demandé n'est pas disponible. Pour éviter cette erreur, vérifiez les SKU plus proches du moment de l'achat.
  • PURCHASE_STATUS_ITEM_CHANGE_REQUESTED: la transaction a échoué, car le l'utilisateur a décidé d'acheter autre chose. Relancer la création de votre commande afin que l'utilisateur puisse prendre une autre décision immédiatement.
  • PURCHASE_STATUS_USER_CANCELLED: la transaction a échoué, car l'utilisateur a annulé le parcours d'achat. Puisque l'utilisateur a quitté prématurément le flux, demandez l'utilisateur s'il souhaite réessayer ou quitter la transaction. dans son ensemble.
  • PURCHASE_STATUS_ERROR: la transaction a échoué pour une raison inconnue. Laissez l'utilisateur sait que la transaction a échoué et lui demande s'il veut réessayer.
  • PURCHASE_STATUS_UNSPECIFIED: la transaction a échoué pour une raison inconnue. entraînant un état inconnu. Gérez cet état d'erreur en autorisant l'utilisateur qu'elle a échoué et lui demander s'il veut réessayer.

Le code Node.js suivant lit l'argument COMPLETE_PURCHASE_VALUE et gère chaque résultat:

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

6. Rendre l'achat reproductible

Utiliser l'API des achats numériques pour demander le Play Store actuellement disponible dans un inventaire, puis nous l'intégrons dans un tableau d'objets JSON pour chaque produit. Vous référencerez ce tableau plus tard pour montrer à l'utilisateur les options disponibles. à acheter.

Chacun de vos articles numériques est représenté par un SKU au format JSON. La Le code Node.js suivant décrit le formatage attendu pour chaque SKU:

body = {
  skus: [
    skuId: {
      skuType: one of "APP" or "UNSPECIFIED"
      id: string,
      packageName: string
    }
    formattedPrice: string,
    title: string,
    description: string
  ]
}

Envoyez une requête POST à https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet point de terminaison, où {packageName} correspond au nom du package de votre application dans console (par exemple, com.myapp.digitalgoods), puis mettez en forme le résultat dans un d'objets SKU.

Pour ne récupérer que des produits numériques spécifiques dans le tableau obtenu, listez le produit Les identifiants de produits numériques (tels qu'ils apparaissent sous chaque produit intégré dans Console) que vous souhaitez rendre disponible à l'achat dans body.ids.

Le code Node.js suivant demande la liste des produits disponibles API Achats et met en forme le résultat sous la forme d'un tableau de 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': ['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));
    });
  });
});

reflètent les achats de l'utilisateur ;

Lorsqu'un utilisateur interroge votre action, l'objet user de la requête JSON inclut une liste de leurs achats. Vérifiez ces informations et modifiez la réponse de votre action en fonction du contenu payé par l'utilisateur.

L'exemple de code suivant montre l'objet user d'une requête qui inclut packageEntitlements des précédents achats via une application qu'ils ont effectués pour Package 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"
        }
      ]
    }
  ],
  ...
}