Gerenciar configurações omnichannel

A API OmnichannelSettings é o ponto de entrada para configurar seus programas de anúncios de inventário local (AIL, na sigla em inglês) e listagens locais sem custo financeiro (FLL, na sigla em inglês).

Usar de forma programática

  • Gerenciar (criar e atualizar) as configurações omnichannel
  • Buscar (receber e listar) as configurações omnichannel
  • Solicitar verificação de inventário para comerciantes qualificados

Para mais informações, consulte Visão geral dos anúncios de inventário local e das listagens locais sem custo financeiro.

Pré-requisitos

Você precisa ter

Criar uma configuração omnichannel

Use o método omnichannelSettings.create para criar uma configuração omnichannel. O método de criação usa um recurso omnichannelSetting como entrada e retorna a configuração omnichannel criada, se bem-sucedida.

Ao criar, é necessário preencher o regionCode e o LsfType:

  • A configuração "OmnichannelSetting" é definida por país. RegionCode define o país de destino. Não é possível mudar o nome depois que ele é criado. RegionCode precisa seguir a regra de nomenclatura definida pelo projeto Common Locale Data Repository (CLDR).
  • O LsfType é baseado na página do produto. Para ver detalhes, consulte:LsfType.

Para mais detalhes, consulte Mudar a experiência na página do produto para seus anúncios de inventário local.

Não é necessário preencher todos os campos na fase de criação, mas é possível configurá-los mais tarde. Para atualizar um omnichannelSetting, consulte Atualizar uma configuração omnichannel.

Confira um exemplo de solicitação se você escolher MHLSF_BASIC e se inscrever em inStock:

POST https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/omnichannelSettings

{
  "regionCode": "{REGION_CODE}",
  "lsfType: "MHLSF_BASIC",
  "inStock": {
      "uri": "{URI}"
  }
}

Substitua:

  • {ACCOUNT_ID}: o identificador exclusivo da sua conta do Merchant Center
  • {REGION_CODE}: um código de região conforme definido pelo CLDR
  • {URI}: um URI válido usado para a respectiva avaliação. Um URI não qualificado pode impedir a aprovação.

Depois que a solicitação for concluída, você vai receber a seguinte resposta:

{
  "name": "accounts/{ACCOUNT_ID}/omnichannelSettings/{omnichannel_setting}",
  "regionCode": "{REGION_CODE}",
  "lsfType: "MHLSF_BASIC",
  "inStock": {
      "uri": "{URI}",
      "state": "RUNNING"
  }
}

A inscrição de diferentes recursos de LIA/FLL usando campos omnichannelSetting aciona análises manuais que geralmente exigem de algumas horas a alguns dias. Recomendamos verificar novamente as entradas para evitar esperas desnecessárias devido a dados não qualificados.

Para conferir a configuração omnichannel recém-criada ou verificar o estado das avaliações, use accounts.omnichannelSettings.get ou accounts.omnichannelSettings.list, especificando o país.

Tipo de vitrine local (LSF, na sigla em inglês)

Com base na página do produto que você planeja usar, escolha uma LsfType:

Tipo de página do produto LsfType Valor de tipo enumerado
Páginas de produtos com disponibilidade na loja Vitrine local hospedada pelo comerciante (versão básica) MHLSF_BASIC
Páginas de produtos específicas da loja com disponibilidade e preço Vitrine local hospedada pelo comerciante (versão completa) MHLSF_FULL
Páginas de produtos sem disponibilidade na loja Vitrine local hospedada pelo Google (GHLSF, na sigla em inglês) GHLSF

Se você escolher os tipos de vitrine local hospedada pelo comerciante, também precisará preencher o campo de URI para pelo menos um dos tipos inStock ou pickup.

InStock

Você pode usar o InStock para fornecer mais informações sobre a página do produto.

Se você escolher os tipos de LSF hospedados pelo comerciante e especificar o campo URI em "InStock", vai mostrar sua intenção de veicular produtos com disponibilidade em estoque. Vamos iniciar uma análise com base no URI fornecido.

Se você escolher o tipo GHLSF, será necessário fornecer um campo InStock vazio na solicitação. Ao contrário dos tipos de LSF hospedados pelo comerciante, para concluir a integração, você precisa concluir o processo de verificação de inventário.

Este exemplo de código cria um omnichannelSetting com GHLSF:

package shopping.merchant.samples.accounts.v1;

// [START merchantapi_create_omnichannel_setting]
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AccountName;
import com.google.shopping.merchant.accounts.v1.CreateOmnichannelSettingRequest;
import com.google.shopping.merchant.accounts.v1.InStock;
import com.google.shopping.merchant.accounts.v1.OmnichannelSetting;
import com.google.shopping.merchant.accounts.v1.OmnichannelSetting.LsfType;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceClient;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 *   This class demonstrates how to create an omnichannel setting for a given Merchant Center account
 *   in a given country
 */
public class CreateOmnichannelSettingSample {

  public static void createOmnichannelSetting(Config config, String regionCode) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the retrieved credentials.
    OmnichannelSettingsServiceSettings omnichannelSettingsServiceSettings =
        OmnichannelSettingsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (OmnichannelSettingsServiceClient omnichannelSettingsServiceClient =
        OmnichannelSettingsServiceClient.create(omnichannelSettingsServiceSettings)) {
      String accountId = config.getAccountId().toString();
      String parent = AccountName.newBuilder().setAccount(accountId).build().toString();

      // Creates an omnichannel setting with GHLSF type in the given country.
      CreateOmnichannelSettingRequest request =
          CreateOmnichannelSettingRequest.newBuilder()
              .setParent(parent)
              .setOmnichannelSetting(
                  OmnichannelSetting.newBuilder()
                      .setRegionCode(regionCode)
                      .setLsfType(LsfType.GHLSF)
                      .setInStock(InStock.getDefaultInstance())
                      .build())
              .build();

      System.out.println("Sending create omnichannel setting request:");
      OmnichannelSetting response =
          omnichannelSettingsServiceClient.createOmnichannelSetting(request);

      System.out.println("Inserted Omnichannel Setting below:");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println("An error has occurred: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();

    // The country which you're targeting at.
    String regionCode = "{REGION_CODE}";

    createOmnichannelSetting(config, regionCode);
  }
}
// [END merchantapi_list_omnichannel_settings]

Retirada

Além da disponibilidade na loja, você também pode aprimorar seus produtos disponíveis na loja com o recurso de retirada, que só é qualificado para tipos de LSF hospedados pelo comerciante.

Quando um produto é marcado para retirada, significa que o cliente pode comprar on-line e retirar na loja. Ao definir o campo Pickup, você mostra sua intenção de veicular produtos com um SLA de retirada. Vamos iniciar uma análise com base no URI fornecido.

Confira um exemplo de solicitação que cria uma configuração omnichannel com Pickup:

POST https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/omnichannelSettings

{
  "regionCode": "{REGION_CODE}",
  "lsfType: "MHLSF_BASIC",
  "pickup": {
     "uri: "{URI}"
  }
}

Em mostruário sem pronta entrega

Com o recurso Em mostruário sem pronta entrega, você pode mostrar produtos que estão em exibição na loja física, mas não estão disponíveis para compra imediata. Por exemplo, móveis grandes:

  • Esses anúncios vão aparecer com a nota "na loja" nos resultados da pesquisa para os clientes que procurarem produtos semelhantes no Google.
  • Quem estiver procurando a loja na página de resultados da Pesquisa Google vai encontrar esses produtos marcados como "Disponível para encomenda".

As pessoas podem escolher seu anúncio de inventário local ou a listagem local sem custo financeiro para conferir o item. Para comprar, elas podem visitar a loja física, conferir o item e fazer a encomenda para ser entregue em determinado endereço ou retirada na loja.

Sobre (Alemanha, Áustria e Suíça)

Se você estiver veiculando anúncios na Áustria e na Alemanha e escolher GHLSF, será necessário enviar uma página Sobre.

Se você estiver veiculando na Suíça, precisará enviar uma página "Sobre", independentemente de LsfType.

Até que o URL da página "Sobre" seja verificado, os comerciantes do GHLSF não poderão solicitar a verificação manual do inventário ao Google.

Para todos os comerciantes nesses três países, o serviço não ativa os recursos de FLL/LIA até que a página "Sobre" seja aprovada.

Verificação de inventário

A verificação de inventário é necessária apenas para comerciantes GHLSF. Ele não é compatível com tipos MHLSF.

Antes ou depois de adicionar dados de produtos e de inventário (usando accounts.products.localInventories.insert ou a interface do usuário do Merchant Center), é necessário verificar o contato. Forneça um contato responsável pela verificação de inventário (nome e endereço de e-mail) usando o método create ou update. O contato vai receber um e-mail do Google e poderá verificar o status clicando em um botão na mensagem.

Depois disso, você poderá solicitar a verificação de inventário. Para mais informações, consulte Sobre a verificação de inventário.

Você pode mudar seu contato durante o processo de verificação ou depois usando omnichannelSetting.update.

Após a conclusão desse processo, o Google vai validar a precisão das informações fornecidas.

Acessar uma configuração omnichannel

Para recuperar a configuração omnichannelSetting em um determinado país ou verificar o status atual das suas avaliações, use o método omnichannelSettings.get.

Confira um exemplo de solicitação:

GET https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/omnichannelSettings/{OMNICHANNEL_SETTING}

Substitua:

  • {ACCOUNT_ID}: o identificador exclusivo da sua conta do Merchant Center
  • {OMNICHANNEL_SETTING}: o código da região do país de destino

O status ACTIVE indica que a análise foi aprovada.

Se o status for FAILED, resolva os problemas e acione uma nova análise chamando omnichannelSetting.update.

O campo LFP, somente leitura, mostra o status da sua parceria com os feeds locais. Para vincular à parceria, use lfpProviders.linkLfpProvider.

Para mais informações sobre como verificar status e seus significados, consulte Conferir o status de uma configuração omnichannel.

Listar configurações omnichannel

Para recuperar todas as informações de omnichannelSetting da sua conta, use o método omnichannelSettings.list.

Confira um exemplo de código:

package shopping.merchant.samples.accounts.v1;

// [START merchantapi_list_omnichannel_settings]
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AccountName;
import com.google.shopping.merchant.accounts.v1.ListOmnichannelSettingsRequest;
import com.google.shopping.merchant.accounts.v1.OmnichannelSetting;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceClient;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceClient.ListOmnichannelSettingsPagedResponse;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 *   This class demonstrates how to get the list of omnichannel settings for a given Merchant Center
 *   account
 */
public class ListOmnichannelSettingsSample {

  public static void omnichannelSettings(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the retrieved credentials.
    OmnichannelSettingsServiceSettings omnichannelSettingsServiceSettings =
        OmnichannelSettingsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String accountId = config.getAccountId().toString();
    String parent = AccountName.newBuilder().setAccount(accountId).build().toString();

    // Calls the API and catches and prints any network failures/errors.
    try (OmnichannelSettingsServiceClient omnichannelSettingsServiceClient =
        OmnichannelSettingsServiceClient.create(omnichannelSettingsServiceSettings)) {
      ListOmnichannelSettingsRequest request =
          ListOmnichannelSettingsRequest.newBuilder().setParent(parent).build();

      System.out.println("Sending list omnichannel setting request:");
      ListOmnichannelSettingsPagedResponse response =
          omnichannelSettingsServiceClient.listOmnichannelSettings(request);

      int count = 0;

      // Iterates over all the entries in the response.
      for (OmnichannelSetting omnichannelSetting : response.iterateAll()) {
        System.out.println(omnichannelSetting);
        count++;
      }
      System.out.println(String.format("The following count of elements were returned: %d", count));
    } catch (Exception e) {
      System.out.println("An error has occurred: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();

    omnichannelSettings(config);
  }
}
// [END merchantapi_list_omnichannel_settings]

Atualizar uma configuração omnichannel

Para atualizar a configuração de um ambiente omnichannel, use o método omnichannelSettings.update.

Para fazer isso, adicione o recurso à máscara de atualização e preencha os campos correspondentes no campo omnichannelSetting da solicitação de atualização. Você pode atualizar qualquer um dos

  • lsfType
  • inStock
  • pickup
  • odo
  • about
  • inventoryVerification

Se um atributo não for incluído na máscara de atualização, ele não será atualizado.

Se um atributo for incluído na máscara de atualização, mas não for definido na solicitação, ele será limpo.

O exemplo de código abaixo demonstra como atualizar o campo de verificação de inventário.

package shopping.merchant.samples.accounts.v1;

// [START merchantapi_update_omnichannel_setting]
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.accounts.v1.InventoryVerification;
import com.google.shopping.merchant.accounts.v1.OmnichannelSetting;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingName;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceClient;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceSettings;
import com.google.shopping.merchant.accounts.v1.UpdateOmnichannelSettingRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 *   This class demonstrates how to update an omnichannel setting for a given Merchant Center account
 *   in a given country
 */
public class UpdateOmnichannelSettingSample {

  public static void updateOmnichannelSettings(
      Config config, String regionCode, String contact, String email) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the retrieved credentials.
    OmnichannelSettingsServiceSettings omnichannelSettingsServiceSettings =
        OmnichannelSettingsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (OmnichannelSettingsServiceClient omnichannelSettingsServiceClient =
        OmnichannelSettingsServiceClient.create(omnichannelSettingsServiceSettings)) {
      String accountId = config.getAccountId().toString();
      String name =
          OmnichannelSettingName.newBuilder()
              .setAccount(accountId)
              .setOmnichannelSetting(regionCode)
              .build()
              .toString();

      OmnichannelSetting omnichannelSetting =
          OmnichannelSetting.newBuilder()
              .setName(name)
              .setInventoryVerification(
                  InventoryVerification.newBuilder()
                      .setContact(contact)
                      .setContactEmail(email)
                      .build())
              .build();
      FieldMask fieldMask = FieldMask.newBuilder().addPaths("inventory_verification").build();
      UpdateOmnichannelSettingRequest request =
          UpdateOmnichannelSettingRequest.newBuilder()
              .setOmnichannelSetting(omnichannelSetting)
              .setUpdateMask(fieldMask)
              .build();

      System.out.println("Sending update omnichannel setting request:");
      OmnichannelSetting response =
          omnichannelSettingsServiceClient.updateOmnichannelSetting(request);

      System.out.println("Updated Omnichannel Setting below:");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println("An error has occurred: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();

    // The country which you're targeting at.
    String regionCode = "{REGION_CODE}";
    // The name of the inventory verification contact you want to update.
    String contact = "{NAME}";
    // The address of the inventory verification email you want to update.
    String email = "{EMAIL}";

    updateOmnichannelSettings(config, regionCode, contact, email);
  }
}
// [END merchantapi_update_omnichannel_setting]

Solicitar verificação de inventário

O omnichannelSettings.requestInventoryVerification é relevante apenas para comerciantes GHLSF.

Antes de chamar esse RPC, você precisa fazer o seguinte:

  • Faça upload dos dados de produtos e inventário.
  • Verificar um contato responsável pela verificação de inventário.
  • Para comerciantes na Áustria, Alemanha ou Suíça, conclua uma revisão de página About.

Para determinar sua qualificação, chame omnichannelSettings.get e verifique omnichannelSetting.inventoryVerification.state. Se ele mostrar INACTIVE, você pode chamar omnichannelSettings.requestInventoryVerification.

package shopping.merchant.samples.accounts.v1;

// [START merchantapi_request_inventory_verification]
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingName;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceClient;
import com.google.shopping.merchant.accounts.v1.OmnichannelSettingsServiceSettings;
import com.google.shopping.merchant.accounts.v1.RequestInventoryVerificationRequest;
import com.google.shopping.merchant.accounts.v1.RequestInventoryVerificationResponse;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 *   This class demonstrates how to request inventory verification for a given Merchant Center account
 *   in a given country
 */
public class RequestInventoryVerificationSample {

  public static void requestInventoryVerification(Config config, String regionCode)
      throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the retrieved credentials.
    OmnichannelSettingsServiceSettings omnichannelSettingsServiceSettings =
        OmnichannelSettingsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (OmnichannelSettingsServiceClient omnichannelSettingsServiceClient =
        OmnichannelSettingsServiceClient.create(omnichannelSettingsServiceSettings)) {
      String accountId = config.getAccountId().toString();
      String name =
          OmnichannelSettingName.newBuilder()
              .setAccount(accountId)
              .setOmnichannelSetting(regionCode)
              .build()
              .toString();
      RequestInventoryVerificationRequest request =
          RequestInventoryVerificationRequest.newBuilder().setName(name).build();

      System.out.println("Sending request inventory verification request:");
      RequestInventoryVerificationResponse response =
          omnichannelSettingsServiceClient.requestInventoryVerification(request);

      System.out.println("Omnichannel Setting after inventory verification request below:");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println("An error has occurred: ");
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();

    // The country which you're targeting at.
    String regionCode = "{REGION_CODE}";

    requestInventoryVerification(config, regionCode);
  }
}
// [END merchantapi_request_inventory_verification]

Confira o status de uma configuração omnichannel.

Para verificar o status de revisão das avaliações de integração do LIA, verifique ReviewState para atributos correspondentes de omnichannelSetting retornados pelos métodos omnichannelSettings.get ou omnichannelSettings.list.

O campo ReviewState se aplica a todas as análises de integração, exceto o processo de verificação de inventário, e pode ter os seguintes valores:

  • ACTIVE: ela foi aprovada.
  • FAILED: ela é recusada.
  • RUNNING: ainda está em análise.
  • ACTION_REQUIRED: esse valor só existe no InStock.state para comerciantes do GHLSF. Isso significa que você precisa solicitar a verificação de inventário para veicular a LIA.

InventoryVerification.State tem os seguintes valores:

  • SUCCEEDED: ela foi aprovada.
  • INACTIVE: Você já pode solicitar a verificação do inventário.
  • RUNNING: está em análise
  • SUSPENDED: você falhou na verificação de inventário muitas vezes (geralmente cinco) e precisa aguardar antes de solicitar novamente.
  • ACTION_REQUIRED: você precisa realizar outras ações antes de solicitar a verificação de inventário.

Esta seção descreve como resolver problemas comuns.

Criar uma configuração omnichannel

  • Defina LsfType e RegionCode.
  • Se você escolher GHLSF, forneça um InStock vazio na solicitação.
  • Se você escolher tipos de LSF hospedados pelo comerciante, forneça pelo menos um URI em InStock ou Pickup.

Atualizar uma configuração omnichannel

O método de atualização desse recurso exige as seguintes regras adicionais:

  • Não é possível modificar o código da região.
  • Não é possível fazer atualizações enquanto o recurso LIA/FLL está em execução ou foi aprovado.
  • Ao mudar de tipos de LSF hospedados pelo comerciante para GHLSF, se InStock e Pickup foram configurados anteriormente, eles precisam ser incluídos na máscara de atualização junto com a atualização LsfType.

Por exemplo, se você aplicou MHLSF_BASIC e Pickup antes e eles foram rejeitados, é possível mudar para GHLSF enviando uma solicitação como esta:

PATCH https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/omnichannelSettings/{REGION_CODE}?update_mask=lsf_type,in_stock,pickup

{
  "lsfType: "GHLSF",
  "inStock": {},
}

Substitua:

  • {ACCOUNT_ID}: o identificador exclusivo da sua conta do Merchant Center
  • {REGION_CODE}: um código de região conforme definido pelo CLDR

Solicitar verificação de inventário

Se, apesar de atualizar os feeds de produtos ou inventário e confirmar o contato, InventoryVerification.state for diferente de INACTIVE:

  • Para comerciantes na Áustria, Alemanha e Suíça: confira se você concluiu a revisão da página "Sobre".
  • Isso vai levar cerca de 48 horas.
  • Em caso de falhas repetidas na verificação de inventário (mais de cinco), o serviço aplica um período de espera de 30 dias antes de permitir outra solicitação. Entre em contato com o Suporte do Google se quiser solicitar antes.

Saiba mais

Para mais detalhes, consulte a Central de Ajuda sobre anúncios de inventário local e listagens locais sem custo financeiro.