As ações de conversa serão descontinuadas em 13 de junho de 2023. Para mais informações, consulte Desativação do Ações de conversa.

Criar transações de assinatura digital

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Neste guia, explicamos como adicionar transações de assinatura digital à sua ação de conversa para que os usuários possam comprar suas assinaturas.

Termos-chave: um produto digital de assinatura é uma unidade de manutenção de estoque (SKU) que exige uma cobrança recorrente do usuário, como uma revista on-line. Isso é diferente de um bem digital consumível que um usuário precisa comprar novamente manualmente ou um produto digital não consumível que é comprado automaticamente apenas uma vez.

Para mais informações sobre assinaturas digitais, consulte a documentação do Android sobre recursos específicos de assinatura.

Fluxo de transação

Neste guia, descrevemos cada etapa de desenvolvimento conforme ocorrem em um fluxo de transações de produtos digitais. Quando a ação processa transações de produtos e softwares digitais, ela usa o seguinte fluxo:

  1. Configurar um cliente da API de compras digitais: sua ação usa essa API para se comunicar com seu inventário do Google Play e realizar transações. Antes de qualquer outra ação, a ação cria um cliente JWT com uma chave de serviço para se comunicar com a API de compras digitais.
  2. Coletar informações: sua ação coleta informações básicas sobre o usuário e seu inventário do Google Play para se preparar para uma transação.
    1. Valide os requisitos de transação: seu Action usa o assistente de requisitos de transações digitais no início do fluxo de compra para garantir que o usuário possa fazer transações.
    2. Coletar inventário disponível: a ação verifica o inventário do Google Play e identifica quais itens estão disponíveis para compra no momento.
  3. Criar o pedido: sua ação apresenta os produtos e softwares digitais disponíveis ao usuário para que ele possa selecionar.
  4. Conclua a compra: sua ação usa a API de compras digitais para iniciar uma compra com a seleção do usuário na Google Play Store.
  5. Processar o resultado: sua ação recebe um código de status para a transação e notifica o usuário de que a compra foi concluída ou realiza outras etapas.

Restrições e diretrizes de revisão

Políticas adicionais se aplicam a Ações com transações. A análise de ações que incluem transações pode levar algumas semanas. Portanto, leve esse tempo em consideração ao planejar seu cronograma de lançamento. Para facilitar o processo de revisão, verifique se você está em conformidade com as políticas e diretrizes de transações antes de enviar a ação para revisão.

As ações que vendem produtos e softwares digitais só podem ser implantadas nos seguintes países:

  • Austrália
  • Brasil
  • Canadá
  • Indonésia
  • Japão
  • México
  • Rússia
  • Singapura
  • Tailândia
  • Turquia
  • Reino Unido
  • Estados Unidos

Pré-requisitos

Antes de incorporar transações digitais à sua ação, você precisa dos seguintes pré-requisitos:

Associar um app Android

Se você não tiver um app Android com a permissão de faturamento no Google Play Console, siga estas etapas:

  1. No Android Studio ou no ambiente de desenvolvimento integrado do Android de sua escolha, crie um novo projeto. Escolha opções nas solicitações de configuração do projeto para criar um app muito básico.
  2. Dê um nome de pacote ao projeto, como com.mycompany.myapp. Não deixe esse nome como padrão, já que não é possível fazer upload de pacotes que incluem com.example no Play Console.
  3. Abra o arquivo AndroidManifest.xml do app.
  4. Adicione a seguinte linha de código no elemento manifest:

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

    O arquivo AndroidManifest.xml vai ficar parecido com este bloco de código:

    <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. Crie seu app como um APK assinado. No Android Studio, siga estas etapas:

    1. Acesse Build, Generate Signed Bundle / APK.
    2. Clique em Próxima.
    3. Em Caminho da chave da loja, clique em Criar novo.
    4. Preencha cada campo e clique em OK. Anote a senha do Armazenamento de chaves e a senha da Chave e armazene-as em um local seguro, porque elas serão usadas mais tarde.
    5. Clique em Próxima.
    6. Selecione liberar.
    7. Selecione V1 (Assinatura JAR).
    8. Clique em Finish.
    9. Depois de alguns segundos, o Android Studio gera um arquivo app-release.apk. Localize esse arquivo para uso posterior.
  6. No Google Play Console, crie um novo aplicativo.

  7. Acesse Versões de apps.

  8. Em Faixas fechadas, acesse Gerenciar e Alfa.

  9. Clique no botão Criar uma versão.

  10. Em Permitir que o Google gerencie e proteja sua chave de assinatura, insira as informações dela.

  11. Faça upload do arquivo APK.

  12. Clique em Salvar.

Criar produtos digitais

Se você ainda não tem produtos digitais no Play Console, siga estas etapas:

  1. No Google Play Console, acesse Produtos no app e depois Assinaturas. Se você receber um aviso, siga as instruções anteriores para criar um app Android ou clique no link para criar um perfil de comerciante.
  2. Clique em Criar assinatura.
  3. Preencha os campos relacionados ao seu produto digital. Anote o ID do produto, que é como você vai fazer referência ao produto na sua ação.
  4. Clique em Salvar.
  5. Repita as etapas de 2 a 4 para cada produto que você quer vender.

Exemplos de assinaturas no Google Play Console.

Preparar seu projeto do Actions

Com seus produtos e softwares digitais configurados no Google Play Console, é necessário ativar transações digitais e associar seu projeto do Actions ao seu app do Google Play.

Configuração

Para ativar as transações de produtos e softwares digitais no seu projeto do Actions, siga estas etapas:

  1. No Console do Actions, abra seu projeto ou crie um novo.
  2. Acesse Implantar e Informações do diretório.
  3. Em Informações adicionais e Transações, marque a caixa Sim em Suas ações usam a API Digital Purchase para realizar transações de produtos e softwares digitais.
  4. Clique em Salvar.

Criar uma chave de API para produtos e softwares digitais

Para enviar solicitações à API de produtos e softwares digitais, faça o download de uma chave de conta de serviço JSON associada ao seu projeto do Console do Actions.

Para recuperar a chave da conta de serviço, siga estas etapas:

  1. No Console do Actions, clique no ícone de três pontos no canto superior direito e em Project settings.
  2. Encontre o ID do projeto da sua ação.
  3. Acesse este link, substituindo "<project_id>" pelo ID do projeto: https://console.developers.google.com/apis/credentials?project=project_id
  4. Na navegação principal, acesse Credenciais.
  5. Na página exibida, clique em Criar credenciais e em Chave da conta de serviço.
  6. Acesse Conta de serviço e clique em Nova conta de serviço.
  7. Dê um nome à conta de serviço, como transações digitais.
  8. Clique em Criar.
  9. Defina o Papel como Projeto > Proprietário.
  10. Clique em Continuar.
  11. Clique em Criar chave.
  12. Selecione o tipo de chave JSON.
  13. Clique em Criar chave e faça o download da chave JSON da conta de serviço.

Salve a chave da conta de serviço em um local seguro. Você usará essa chave no seu fulfillment para criar um cliente da API de compras digitais.

Conectar-se ao seu inventário do Google Play

Para acessar seus produtos e softwares digitais em um projeto do Actions, associe seu domínio da Web e seu app ao projeto como propriedades conectadas.

Para conectar o app e o domínio da Web do Play Console ao projeto do Actions, siga estas etapas:

  1. No Console do Actions, acesse Implantar e depois Verificação de marca.
  2. Se você não tiver conectado uma propriedade, primeiro conecte um site:

    1. Clique no botão da propriedade da Web (</>).
    2. Digite o URL do seu domínio da Web e clique em Conectar.

    O Google envia um e-mail com mais instruções para a pessoa que foi verificada por esse domínio da Web no Google Search Console. Depois que o destinatário deste e-mail seguir essas etapas, o site aparecerá em Verificação de marca.

  3. Depois de ter pelo menos um site conectado, siga estas etapas para conectar seu app Android:

    1. No Console do Actions, acesse Implantar e depois Verificação de marca.
    2. Clique em Conectar aplicativo.
    3. Na página exibida, siga as instruções para verificar o domínio da Web no Play Console. Selecione o app do Google Play que contém seus produtos e insira o URL do domínio da Web exatamente como mostrado na página Verificação da marca.

      Novamente, o Google envia um e-mail de verificação para o proprietário verificado do domínio. Depois de aprovar a verificação, seu app do Google Play vai aparecer em Verificação de marca.

    4. Ative a opção Acessar compras no Google Play.

Imagem mostrando o site e os apps conectados ao projeto do Actions.

Criar seu fluxo de compra

Com o projeto de ações e o inventário de produtos e softwares digitais preparados, crie um fluxo de compra de produtos digitais no webhook de fulfillment de conversas.

1. Configurar um cliente da API de compras digitais

No webhook de fulfillment de conversas, crie um cliente JWT com a chave JSON da conta de serviço e o escopo https://www.googleapis.com/auth/actions.purchases.digital.

O código Node.js a seguir cria um cliente JWT para a API de compras digitais:

  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. Coletar informações

Antes que o usuário possa fazer uma compra, sua ação coleta informações sobre a capacidade de fazer compras e quais produtos estão disponíveis no inventário.

2. a. Validar requisitos de transação

É recomendável verificar se a conta do usuário está configurada para realizar transações antes de oferecer a opção de fazer uma compra. É preciso fazer a transição para uma cena DigitalPurchaseCheck, que verifica se o usuário está verificado, se está realizando a transação em uma plataforma permitida (smart display, alto-falante inteligente ou Android) e se está em uma localidade onde há suporte às transações digitais.

Para criar uma cena de verificação de compra digital, siga estas etapas:

  1. Na guia Scenes, adicione uma nova cena com o nome DigitalPurchaseCheck.
  2. Em Preenchimento de slot, clique em + para adicionar um novo.
  3. Em Selecionar tipo, selecione actions.type.DigitalPurchaseCheckResult como o tipo de slot.
  4. No campo de nome do slot, dê a ele o nome DigitalPurchaseCheck.
  5. Marque a caixa de seleção Personalizar gravação de valor do slot (ativada por padrão).
  6. Clique em Salvar.

Uma verificação de compra digital resultará em um dos seguintes resultados:

  • Se os requisitos forem atendidos, o parâmetro de sessão será definido com uma condição de sucesso e você poderá continuar permitindo que o usuário compre produtos digitais.
  • Se um ou mais dos requisitos não puderem ser atendidos, o parâmetro de sessão será definido com uma condição de falha. Nesse caso, você precisa abandonar a conversa da experiência transacional ou encerrá-la.

Para processar um resultado de verificação de compra digital, siga estas etapas:

  1. Na guia Scenes, selecione a nova cena DigitalPurchaseCheck.
  2. Em Condição, clique em + para adicionar uma nova condição.
  3. No campo de texto, insira a seguinte sintaxe de condição para verificar a condição de sucesso:

    scene.slots.status == "FINAL" && session.params.DigitalPurchaseCheck.resultType == "CAN_PURCHASE"
    
  4. Passe o cursor sobre a condição que você acabou de adicionar e clique na seta para cima para colocá-la antes de if scene.slots.status == "FINAL".

  5. Ative Enviar solicitações e forneça uma solicitação simples informando ao usuário que ele está pronto para fazer uma transação:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                You are ready to purchase digital goods.
    
  6. Em Transition, selecione outra cena, permitindo que o usuário continue a conversa e continue uma transação.

  7. Selecione a condição else if scene.slots.status == "FINAL".

  8. Ative Enviar solicitações e forneça uma solicitação simples informando ao usuário que não é possível fazer uma transação:

    candidates:
      - first_simple:
          variants:
            - speech: Sorry you cannot perform a digital purchase.
    
  9. Em Transição, selecione Encerrar conversa para encerrar a conversa.

2. b. Coletar inventário disponível

Use a API de compras digitais para solicitar seu inventário da Play Store atualmente disponível e crie-o em uma matriz de objetos JSON para cada produto. Faça referência a essa matriz mais tarde para mostrar ao usuário as opções disponíveis para compra.

Cada um dos seus produtos digitais é representado como um SKU em formato JSON. O código Node.js a seguir descreve a formatação esperada de cada 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
  ]
}

Envie uma solicitação POST para o endpoint https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet, em que {packageName} é o nome do pacote do app no Google Play Console (por exemplo, com.myapp.digitalgoods) e formate o resultado em uma matriz de objetos de SKU.

Para recuperar apenas produtos digitais específicos na matriz resultante, liste os IDs dos produtos digitais (conforme mostrado em cada produto no app no Google Play Console) que você quer disponibilizar para compra em body.ids.

O código em Node.js a seguir solicita uma lista de produtos disponíveis da API de compras digitais e formata o resultado como uma matriz de SKUs:

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. Criar o pedido

Para iniciar a compra digital do usuário, apresente uma lista dos seus produtos digitais disponíveis para compra. É possível usar vários tipos de resposta avançada para representar seu inventário e solicitar que o usuário faça uma seleção.

O código Node.js a seguir lê uma matriz de inventário de objetos SKU e cria uma resposta de lista com um item de lista para cada um:

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

Criar compra com base na seleção de usuários

Depois que o usuário selecionar um item, você poderá criar o pedido. Para fazer isso, no slot associado ao item selecionado, chame o webhook para criar o pedido. No fulfillment, salve os dados do pedido em um parâmetro de sessão. O objeto de pedido é usado em todas as cenas para a mesma sessão.

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": ""
};

No Actions Builder, você pode usar o editor de JSON para configurar o slot com o objeto de pedido acima. As duas implementações usam o mesmo formato para CompletePurchaseValueSpec, que você pode encontrar na referência de payload do webhook JSON.

4. Finalize a compra

Depois que o usuário seleciona um item, você pode concluir a compra. Depois de preencher o slot associado ao item selecionado, faça a transição para uma cena que executa uma compra completa.

Criar cenário de compra completo

  1. Na guia Scenes, adicione uma nova cena com o nome CompletePurchase.
  2. Em Preenchimento de slot, clique em + para adicionar um novo.
  3. Em Selecionar tipo, selecione actions.type.CompletePurchaseValue como o tipo de slot.
  4. No campo de nome do slot, dê a ele o nome CompletePurchase.
  5. Ative a caixa de seleção Personalizar o valor do slot (ativada por padrão).
  6. Em Configurar slot, selecione Use session parameter no menu suspenso.
  7. Em Configurar slot, insira o nome do parâmetro de sessão usado para armazenar o pedido no campo de texto (ou seja, $session.params.purchase).
  8. Clique em Salvar.

5. Processar o resultado

Um slot com o tipo actions.type.CompletePurchaseValue pode ter os seguintes resultados:

  • PURCHASE_STATUS_OK: a compra foi concluída. Como a transação está completa agora, saia do fluxo transacional e mude para sua conversa.
  • PURCHASE_STATUS_ALREADY_OWNED: a transação falhou porque o usuário já tinha esse item. Para evitar esse erro, verifique as compras anteriores do usuário e personalize os itens exibidos para que ele não tenha a opção de comprar novamente os itens que ele já tem.
  • PURCHASE_STATUS_ITEM_UNAVAILABLE: a transação falhou porque o item solicitado não está disponível. Para evitar esse erro, verifique as SKUs disponíveis mais perto do momento da compra.
  • PURCHASE_STATUS_ITEM_CHANGE_REQUESTED: a transação falhou porque o usuário decidiu comprar outra coisa. Repita o processo para criar o pedido. Assim, o usuário poderá tomar outra decisão imediatamente.
  • PURCHASE_STATUS_USER_CANCELLED: a transação falhou porque o usuário cancelou o fluxo de compra. Como o usuário saiu prematuramente do fluxo, pergunte se ele quer repetir a transação ou sair da transação.
  • PURCHASE_STATUS_ERROR: a transação falhou por um motivo desconhecido. Informe ao usuário que a transação falhou e pergunte se ele quer tentar novamente.
  • PURCHASE_STATUS_UNSPECIFIED: a transação falhou por um motivo desconhecido, resultando em um status desconhecido. Para lidar com esse status de erro, informe ao usuário que a transação falhou e pergunte se ele quer tentar novamente.

Gerencie esses resultados na cena CompletePurchase.

  1. Na guia Scenes, selecione a nova cena CompletePurchase.
  2. Em Condição, clique em + para adicionar uma nova condição.
  3. No campo de texto, insira a seguinte sintaxe de condição para verificar a condição de sucesso:

    scene.slots.status == "FINAL" && session.params.CompletePurchase.purchaseStatus == "PURCHASE_STATUS_OK"
    
  4. Passe o cursor sobre a condição que você acabou de adicionar e clique na seta para cima para colocá-la antes de if scene.slots.status == "FINAL".

  5. Ative Enviar solicitações e forneça uma solicitação simples informando ao usuário que ele está pronto para fazer uma transação:

    candidates:
      - first_simple:
          variants:
            - speech: >-
                Your purchase was successful.
    
  6. Em Transição, selecione Encerrar conversa para encerrar a conversa.

Repita as etapas acima para cada tipo de resultado de compra que você quer oferecer.

Refletir as compras do usuário

Quando um usuário consulta sua ação, o objeto user da solicitação JSON inclui uma lista de compras. Verifique essas informações e mude a resposta da sua ação com base no conteúdo pago pelo usuário.

O exemplo de código a seguir mostra um objeto user de uma solicitação que inclui packageEntitlements das compras no app anteriores feitas para o pacote 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"
    ]
  }
}

Testar o projeto

Ao testar o projeto, ative o modo sandbox no Console do Actions para testar a ação sem cobrar uma forma de pagamento. Para ativar o modo de sandbox, siga estas etapas:

  1. No Console do Actions, clique em Testar na navegação.
  2. Clique em Configurações.
  3. Ative a opção Sandbox de desenvolvimento.