Como automatizar atualizações de catálogo

Você pode automatizar a criação e atualização do catálogo com as chamadas In-Game Store API. Com a automação, você pode manter seu catálogo atualizado sem gastar muito tempo com ele. A automação de catálogos permite criar e atualizar itens e promoções e importar dados de sistemas externos.

Isso reduz o tempo necessário para manter e atualizar:

  • catálogos que contêm muitos itens
  • promoções de qualquer tipo
  • preços baseados no país

Aviso

Para manter o engajamento do usuário, é importante manter o catálogo de itens atualizado no lado Xsolla depois da criação. Recomendamos atualizar o catálogo no lado Xsolla quando as atualizações ocorrerem do seu lado, tal como ao adicionar produtos ou alterar preços.

Você pode:

A autorização básica é usada para chamadas de API para criar e atualizar itens e promoções. Passe o Authorization:Basic <your_authorization_basic_key>, onde <your_authorization_basic_key> é o par merchant ID:API key codificado de acordo com o padrão Base64. Vá para a Conta de Distribuidor para encontrar estes parâmetros:

  • O Merchant ID é exibido:
    • Na seção Company settings > Company.
    • No URL na barra de endereços do navegador em qualquer página da Conta de Distribuidor. O URL tem o seguinte formato: https:​//publisher.xsolla.com/<merchant ID>/<Publisher Account section>.

  • A API key é mostrada na Conta de Distribuidor apenas uma vez, durante a criação, e deve ser armazenada por você. Você pode criar uma nova chave na seguinte seção:
    • Company settings > API keys
    • Project settings > API keys

Criar e atualizar itens

Se você precisar criar diversos itens, você pode criar um script que chama o método API do tipo de item necessário diversas vezes.

Aviso

A lista de parâmetros retornada em resposta às solicitações de itens difere da lista de parâmetros que você precisa passar ao atualizar o catálogo. Além dos parâmetros necessários e atualizados, passe os parâmetros no método de atualização de itens que são retornados em resposta à solicitação dos itens.

Exemplo:

No método Obter item virtual, um objeto limits com dados limitados pelo usuário é retornado. Se você quiser atualizar apenas o preço ou nome do item, passe os dados atuais do objeto limits no método Atualizar item virtual. Se você não passar o objeto limits, os dados do limite serão excluídos quando o item for atualizado pelo método Atualizar item virtual.

Itens virtuais

Para atualizar o catálogo:

  1. Obtenha dados do catálogo com os métodos de API Obter item virtual ou Obter toda a lista de itens virtuais.
  2. Passe novos valores de parâmetro com o método de API Atualizar item virtual.

Para criar itens virtuais, use o método de API Criar moeda virtual.

Moedas virtuais

Para atualizar o catálogo:

  1. Obtenha dados do catálogo com o de API Obter lista de moedas virtuais.
  2. Passe novos valores de parâmetro com o método de API Atualizar moeda virtual.

Para criar moedas virtuais, use o método de API Criar moeda virtual.

Pacotes de moedas virtuais

Para atualizar o catálogo:

  1. Obtenha dados do catálogo com o de API Obter lista de pacotes de moedas virtuais.
  2. Passe novos valores de parâmetro com o método de API Atualizar moeda virtual.

Para criar um pacote de moedas virtuais, use o método de API Criar pacote de moedas virtuais.

Conjuntos

Para atualizar o catálogo:

  1. Obtenha dados do catálogo com o método de API Obter lista de pacotes.
  2. Passe novos valores de parâmetro com o método de API Conjunto de atualização.

Para criar um pacote, use o método de API Criar conjunto.
Se você quiser adicionar chaves de jogo, restrições de país ou preços aos conjuntos, use as instruções.

Crie e atualize promoções

Aviso
A lista de parâmetros retornada dos métodos API de obtenção é diferente dos parâmetros que você passa nos métodos de atualização de promoções. Além dos parâmetros necessários e atualizados, passe parâmetros do método de atualização que são retornados na resposta à solicitação para o método que você usa para obter a lista de promoções.

Cupons

Observação
Para garantir que as promoções de Cupom funcionem corretamente, primeiro você precisa criar uma promoção e, em seguida, gerar códigos para essa promoção.

Para atualizar a promoção:

  1. Obtenha dados do catálogo com os métodos de API Get cupon promotion ou Get list of cupon promotions.
  2. Passe novos valores de parâmetro com o método de API Update cupon promotion.
  3. Ative a promoção com o método de API Activate cupon promotion.

Para criar uma promoção, use os métodos de API Criar promoção de cupom e, em seguida, Criar código de cupom para criar códigos de cupons personalizados ou Gerar códigos de cupom para gerar códigos de cupom aleatórios.
Para desativar uma promoção, use o método de API Desativar promoção de cupom.

Códigos promocionais

Observação
Para que as promoções de Promo code funcionem corretamente, primeiro você precisa criar uma promoção e, em seguida, gerar códigos para essa promoção.

Para atualizar a promoção:

  1. Obtenha dados do catálogo com os métodos de API Obter promoção de código promocional ou Obter lista de promoções de códigos promocionais.
  2. Passe novos valores de parâmetro com o método de API Atualizar promoção de código promocional.
  3. Ative a promoção com o método de API Ativar promoção de código promocional.

Para criar uma promoção, use os métodos de API Criar código para promoção de código promocional e, em seguida, Criar código para promoção de código promocional para criar códigos promocionais personalizados ou Gerar códigos para promoção de código promocional para gerar códigos promocionais aleatórios.
Para desativar uma promoção, use o método de API Desativar promoção.

Descontos

Para atualizar a promoção:

  1. Obtenha dados do catálogo com os métodos de API Obter promoção de itens ou Obter lista de promoções de bônus.
  2. Passe novos valores de parâmetro com o método de API Update item promotion.
  3. Ative a promoção com o método de API Ativar promoção.

Para criar uma promoção, use o método de API Criar promoção de desconto para item.
Para desativar uma promoção, use o método de API Desativar promoção.

Bônus

Para atualizar a promoção:

  1. Obtenha dados do catálogo com os métodos de API Obter promoção bônus ou Obter lista de promoções de bônus.
  2. Passe novos valores de parâmetro com o método de API Atualizar promoção bônus.
  3. Ative a promoção com o método de API Ativar promoção.

Para criar uma promoção, use o método de API Criar promoção de bônus.
Para desativar uma promoção, use o método de API Desativar promoção.

Criação automática de itens via API

Se você precisa criar diversos itens com base nos dados do seu sistema, você pode automatizar esse processo usando a API.

Você precisa:

Se você quiser usar grupos de itens, crie-os antecipadamente pela interface da Conta de Distribuidor.

Se quiser usar múltiplos tipos de itens, eles devem ser criados na seguinte ordem:

  1. grupos de itens na Conta de Distribuidor.
  2. Moedas virtuais.
  3. Itens virtuais.
  4. Pacotes de moedas virtuais.
  5. Conjuntos.

A seguir está um exemplo de um script que chama repetidamente o método Obter pedido para criar itens virtuais.

O script é desenvolvido usando JavaScript e o tempo de execução do JavaScript — Node.js.

  1. Importe a função fetch do módulo “node-fetch” para enviar solicitações ao servidor Xsolla.
Copy
Full screen
Small screen
import fetch from "node-fetch";
  1. Defina as constantes necessárias para solicitar a autorização. Em vez de <your project_id from PA> e <your api key from PA>, insira seus valores no ID de projeto e chave API, que será codificado usando Base64 para o uso subsequente nas solicitações API.
Copy
Full screen
Small screen
const projectId = <your project_id from PA>;

const apiKey = <your api key from PA>;

const buff = new Buffer(`${projectId}:${apiKey}`);

const basicAuth = buff.toString('base64')
  1. Implemente a função do ajudante sleep, que é usada para criar um atraso ao enviar solicitações. isso é necessário para não exceder os limites de taxa de solicitações API.
Copy
Full screen
Small screen
function sleep(ms) {

   return new Promise(resolve => setTimeout(resolve, ms));

}
  1. Implemente a função getItems, que é específica ao seu sistema, para receber dados de itens do seu sistema.
Copy
Full screen
Small screen
async function getItems() {

   // receive items from the original system or read from a pre-prepared file

   return items;

}
  1. Implemente a função prepareData, que é específica ao seu sistema, para formatar os dados do item de acordo com o formato de dados na chamada de API Obter pedido.
Copy
Full screen
Small screen
function prepareData(items) {

   // format items in accordance with API requirements

   return formattedItems;

}
  1. Adicione a função createItem, que envia uma solicitação POST à API Xsolla para criar um item virtual.
Copy
Full screen
Small screen
async function createItem(item) {

   const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items`;



   return await fetch(url, {

       method: "POST",

       headers: {

           Authorization: "Basic " + basicAuth,

           "Content-Type": "application/json"

       },

       body: JSON.stringify(item),

   });

}
  1. Adicione a função checkItemExist, que verifica se um item virtual com um SKU especificado existe. A função envia uma solicitação GET à API Xsolla:
    • Se uma resposta com um código HTTP 404 for recebida, o item com o SKU especificado não foi encontrado, e precisa ser criado.
    • Se uma resposta com um código HTTP 200 for recebido, o item com o SKU especificado foi encontrado e não precisa ser criado.
Copy
Full screen
Small screen
async function checkItemExist(sku) {

   const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items/sku/${sku}`;

   const response = await fetch(url, {

       method: "GET",

       headers: {

           Authorization: "Basic " + basicAuth

       }

   });

   return response.status !== 404;

}
  1. Adicione a função createItems, que passa pela lista de itens e verifica se há um item com um SKU do seu sistema no lado Xsolla. Se não houver um item com esse SKU, a função o cria. A informação de progresso é exibida no console.
Copy
Full screen
Small screen
async function createItems(items) {

   let success = 0;

   let alreadyCreated = 0;

   for (let i = 0; i < items.length; i++) {

       const item = items[i];

       if (item['sku'] === undefined) {

           console.log(`${i} Field "sku" not specified`);

           continue;

       }

       const sku = item['sku'];

       if (await checkItemExist(sku)) {

           console.log(`${i} Item with sku "${sku}" already created`);

           alreadyCreated++;

           continue;

       }

       const response = await createItem(item);

       if (response.status === 201) {

           console.log(`${i} Item with sku "${sku}" successfully created`)

           success++;

       } else {

           const jsonData = await response.json();

           console.log(`${i} An error occurred while creating the items with sku "${sku}"`);

           console.log(jsonData);

       }

       // add a delay so as not to run into rate limits

       await sleep(500);

   }

   console.log(`${success} items out of ${items.length} created. ${alreadyCreated} items already existed`);

}
  1. Adicione a função run que chama todas as funções na ordem correta.
Copy
Full screen
Small screen
async function run() {

 const items = await getItems();

 const formattedItems = prepareData(items);

 await createItems(formattedItems);

}

O código completo:

Copy
Full screen
Small screen
import fetch from "node-fetch";

const projectId = <your project_id from PA>;
const apiKey = <your api key from PA>;
const buff = new Buffer(`${projectId}:${apiKey}`);
const basicAuth = buff.toString('base64')

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function getItems() {
    // receive items from the original system or read from a pre-prepared file
    return items;
}

function prepareData(items) {
    // format items in accordance with API requirements
    return formatedItems;
}

async function createItem(item) {
    const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items`;

    return await fetch(url, {
        method: "POST",
        headers: {
            Authorization: "Basic " + basicAuth,
            "Content-Type": "application/json"
        },
        body: JSON.stringify(item),
    });
}

async function isItemExisted(sku) {
    const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items/sku/${sku}`;
    const response = await fetch(url, {
        method: "GET",
        headers: {
            Authorization: "Basic " + basicAuth
        }
    });
    return response.status !== 404;
}

async function createItems(items) {
    let success = 0;
    let alreadyCreated = 0;
    for (let i = 0; i < items.length; i++) {
        const item = items[i];
        if (item['sku'] === undefined) {
            console.log(`${i} Field "sku" not specified`);
            continue;
        }
        const sku = item['sku'];
        if (await isItemExisted(sku)) {
            console.log(`${i} Item with sku "${sku}" already created`);
            alreadyCreated++;
            continue;
        }
        const response = await createItem(item);
        if (response.status === 201) {
            console.log(`${i} Item with sku "${sku}" successfully created`)
            success++;
        } else {
            const jsonData = await response.json();
            console.log(`${i} An error occurred while creating the items with sku "${sku}"`);
            console.log(jsonData);
        }
        // add a delay so as not to run into rate limits
        await sleep(500);
    }
    console.log(`${success} items out of ${items.length} created. ${alreadyCreated} items already existed`);
}

async function run() {
  const items = await getItems();
  const formattedItems = prepareData(items);
  await createItems(formattedItems);
}

run(); 

Atualização por importação de sistemas externos

Siga as instruções para importar dados de sistemas externos, como PlayFab ou Google Play.

Este artigo foi útil?
Obrigado!
Podemos melhorar alguma coisa? Mensagem
Que pena ouvir isso
Explique porque este artigo não foi útil para você. Mensagem
Obrigado pelo seu feedback!
Avaliaremos sua mensagem e a usaremos para melhorar sua experiência.
Última atualização: 3 de Outubro de 2024

Encontrou um erro de texto ou digitação? Selecione o texto e pressione Ctrl+Enter.

Relatar um problema
Nós sempre avaliamos nossos conteúdos. Seu feedback nos ajuda a melhorá-los.
Forneça um e-mail para que possamos responder
Obrigado pelo seu feedback!