Shopify

Guia da integração de pedido com a Shopify — instalação/OAuth, locais, modos de entrega (taxa fixa e cotação dinâmica), retirada, mapeamento de dados e atualização de status

A integração com a Shopify permite receber pedidos automaticamente assim que são pagos e devolver o rastreamento ao lojista conforme o pedido é despachado, sai para entrega e é entregue.

Para entender o conceito geral, veja Integração de Pedido.


Como funciona

  1. Cliente compra na Shopify — o pedido é criado e pago na loja.
  2. Shopify envia o pedido — o webhook orders/paid é disparado para a Abbiamo.
  3. Abbiamo enriquece e filtra — o sistema consulta a API GraphQL da Shopify, identifica a filial (location) e aplica o filtro de entrega configurado.
  4. Abbiamo cria o pedido — se passar no filtro, o pedido é criado na filial correspondente e o pedido na Shopify recebe a tag AbbiamoInvoice:<número>.
  5. Atualização na Shopify — quando o pedido muda de status na Abbiamo (despachado, em rota, entregue), a Abbiamo atualiza o fulfillment na Shopify com código e link de rastreamento.

Fluxo da integração Shopify ↔ Abbiamo

Fluxo de atualização de status e fulfillment

Uma integração por filial

A integração de pedido Shopify é por filial (location). O mesmo token de acesso da loja é reutilizado em todas as filiais; o que muda entre integrações é o Identificador do local (location id) que define qual filial da Abbiamo recebe os pedidos daquele local na Shopify.


Passo 1 — Instalar o app da Abbiamo (OAuth 2.0)

A conexão é feita por OAuth 2.0. A Abbiamo envia ao lojista um link de instalação já com os parâmetros prontos.

  1. Abra o link de instalação fornecido pela Abbiamo.
  2. Autorize a instalação do app na loja.
  3. Ao final, será exibido o Token de Acesso da loja (shpca_...).
  4. Copie o token — ele será usado no cadastro da integração.

Instalação do app na loja Shopify

Tela de integração realizada com o token de acesso

Ao concluir o OAuth, a Abbiamo configura automaticamente o webhook orders/paid e o carrier service "Cotação Abbiamo Dinamica" (usado no modo de cotação dinâmica — ver Passo 3).

Uso interno — app dedicado

Por padrão as lojas usam o app Shopify compartilhado da Abbiamo, sem ajuste de código. Alguns clientes exigem um app Shopify dedicado (client id/secret próprios) — nesse caso é necessário um ajuste técnico interno na Abbiamo (mapeamento do domínio da loja + credenciais no ambiente) e um novo deploy. Combine com o time de engenharia antes do go-live.


Passo 2 — Descobrir o identificador do local (filial)

Você precisa do ID numérico do local para vincular à filial na Abbiamo.

  1. No painel Shopify, vá em Configurações → Locais.
  2. Clique no local desejado.
  3. O número no final da URL é o identificador. Ex.: https://admin.shopify.com/store/nomedaloja/settings/locations/7280869386972808693869.

Lista de locais (filiais) na Shopify

Identificador da filial no final da URL


Passo 3 — Escolher o modo de entrega (filtro)

A integração só cria pedidos que batem com o filtro de entrega configurado. Há dois modos.

Modo A — Taxa de frete fixa (SHIPPING_LINE)

Use quando o lojista já tem taxas de frete cadastradas manualmente na Shopify (ex.: "Entrega Padrão", "Local Delivery").

  • A integração compara o código (code) da taxa escolhida no checkout com a lista de nomes cadastrados na Abbiamo.
  • Só importa o pedido se a taxa bater com um dos nomes configurados.

Para descobrir os nomes: Configurações → Frete e Entrega, localize a zona de frete do local e anote exatamente os nomes das taxas.

Zonas de frete na Shopify

Nomes das taxas de frete cadastradas

O nome precisa ser idêntico

A comparação usa o código (code) da shipping line — que nas taxas manuais normalmente é igual ao nome exibido. Cadastre os nomes na Abbiamo exatamente como aparecem na Shopify; qualquer divergência faz o pedido ser ignorado com o erro "Invalid shipping line".

Modo B — Cotação dinâmica Abbiamo (QUOTATION_ONLY)

Use quando o frete deve ser cotado em tempo real pela Abbiamo no checkout.

  • No checkout, o carrier service "Cotação Abbiamo Dinamica" (criado na instalação) retorna as opções de frete da Abbiamo.
  • Cada opção carrega um código no formato ABB:logistic_id:method_id.
  • Ao pagar, a integração lê esse código e cria o pedido já com a transportadora e o método corretos.

Garanta que o carrier service da Abbiamo esteja ativo nas zonas de frete do local no checkout.

Retirada (takeout)

Se a loja oferece retirada na loja, defina o comportamento:

OpçãoComportamento
Não criar (IGNORE)Pedidos de retirada não são importados
Criar (CREATE)Pedidos de retirada são importados como pedidos normais
Criar como pronto para retirada (CREATE_READY_FOR_TAKEOUT)Importa já marcado como "pronto para retirada"

Passo 4 — Cadastrar a integração na Abbiamo

Cadastre uma integração de pedido por filial em Configurações → Integrações de Pedido, escolhendo o provedor Shopify.

Cadastro da integração no dashboard

Campos da integração (o que você preenche)

CampoDescriçãoExemplo
Endereço da lojaDomínio .myshopify.com da lojaminhaloja.myshopify.com
Token de acessoToken gerado no Passo 1shpca_XXXXXXXX
Identificador do localID numérico do local (Passo 2)72808693869
Modo de filtroSHIPPING_LINE ou QUOTATION_ONLYSHIPPING_LINE
Taxas de freteNomes aceitos (modo A; e retirada no modo B)Entrega Padrão, Entrega Expressa
RetiradaNão criar / Criar / Criar como pronto para retiradaCriar como pronto para retirada

Como o dado vem na Abbiamo

Cliente

Na AbbiamoOrigem na Shopify
Nomecustomer.first_name + last_name
E-mailcustomer.email
Telefonecustomer.phone (ou default_address.phone)

CPF/CNPJ do cliente

A Shopify não expõe o documento (CPF/CNPJ) do cliente pela API. Se a operação exigir documento, é preciso tratar por metafields ou outro caminho.

Endereço de entrega

Na AbbiamoOrigem na Shopify
CEPshipping_address.zip
Ruashipping_address.address1
Complementoshipping_address.address2
Cidadeshipping_address.city
Estadoshipping_address.province
Paísshipping_address.country

Itens e valores

  • Cada item do pedido vira um item nos volumes da Abbiamo (nome, SKU, quantidade, valor e peso em grams).
  • O valor do pedido vem de total_price.

Tipo de pedido

Na AbbiamoCondição na Shopify
DELIVERYdelivery method SHIPPING
TAKEOUTdelivery method PICK_UP

Atualização de status na Shopify

Quando o pedido muda de status na Abbiamo, a Shopify é atualizada automaticamente:

Status na AbbiamoO que é enviado para a Shopify
Despachado (entrega)Cria o fulfillment com código de rastreamento, transportadora e link meupedido.abbiamolog.com
Saiu para entregaEvento de fulfillment "Out for delivery"
EntregueEvento de fulfillment "Delivered"
Retirada — despachadoMarca o fulfillment como "pronto para retirada"

Ver o nome do motorista no pedido

Conforme o pedido avança (saiu para entrega, foi entregue), a Abbiamo também envia o nome do motorista para o pedido na Shopify. Esse dado fica visível só para o time da loja no painel administrativo — o comprador final nunca vê essa informação, nem na página de rastreio nem em e-mails.

Por padrão a Shopify não mostra esse campo na tela do pedido. Para habilitar a exibição, é preciso criar uma definição de metacampo uma única vez por loja. É rápido e só precisa ser feito uma vez.

Como habilitar (passo a passo)

  1. No admin da Shopify, clique em Configurações, no canto inferior esquerdo.

    Menu Configurações

  2. Na lista de configurações, clique em Metacampos e metaobjetos.

    Item Metacampos e metaobjetos no menu de Configurações

  3. Clique em Pedidos.

    Opção Pedidos na tela de Metacampos e metaobjetos

  4. Clique em Adicionar definição.

    Botão Adicionar definição

  5. Você vai ver o formulário de criação, com o campo Nome, o Tipo e a opção Acesso à API Storefront (que vem ligada por padrão — atenção nesse ponto no passo 7).

    Formulário vazio de criação de definição

  6. No campo Nome, digite Nome do motorista (ou outro texto de sua preferência — é só o rótulo exibido na tela). Assim que você digita, a Shopify gera um identificador técnico logo abaixo, algo como custom.nome_do_motorista.

    Campo Nome preenchido, com identificador custom.nome_do_motorista gerado abaixo

  7. Clique nesse identificador para editá-lo, apague o conteúdo e digite exatamente:

    abbiamo.driver_name

    Campo de Namespace e chave preenchido com abbiamo.driver_name

    Em seguida, selecione Texto de linha única no campo Tipo, e desligue a opção Acesso à API Storefront (estava ligada por padrão no passo 5) — isso garante que o nome do motorista não fique acessível pelo site de compra do cliente final.

  8. Clique em Salvar, no aviso que aparece no rodapé da tela.

    Barra de alterações não salvas com botão Salvar

O identificador precisa ser exatamente abbiamo.driver_name

Se o identificador ficar diferente disso (por exemplo custom.nome_do_motorista, que é o padrão sugerido pela Shopify), o campo aparece vazio na tela — mesmo o dado já estando disponível internamente. Confira esse identificador com atenção antes de salvar.

Erro "Namespace e chave já estão em uso"

Se aparecer esse aviso ao digitar abbiamo.driver_name, significa que já existe uma definição com esse identificador na loja (alguém já configurou antes). Cancele a criação, volte para a lista de definições e edite a que já existe em vez de criar uma nova.

Onde aparece depois de configurado

Na página de qualquer pedido despachado pela Abbiamo, dentro da seção Metacampos, o campo com o nome escolhido no passo 3 mostra o motorista responsável pela entrega — atualizado automaticamente conforme o pedido avança.

Esse passo é só visual

Mesmo sem configurar essa definição, a Abbiamo já envia o dado do motorista normalmente. Esse passo só controla se o campo aparece na tela para o time da loja — não afeta o funcionamento da integração.


Critérios para importação de pedidos

Um pedido só é importado quando todas as condições abaixo são verdadeiras:

  1. O pedido está pago (webhook orders/paid).
  2. O pedido tem linha(s) de frete (shipping_lines).
  3. Para entregas (não retirada), o pedido tem endereço de entrega.
  4. A entrega passa no filtro configurado (SHIPPING_LINE ou QUOTATION_ONLY).

Pedidos que não atendem a esses critérios são ignorados pela integração.


Onde acessar

  • Configuração da integração: Configurações > Integrações de pedido — o cliente cadastra a integração de pedido Shopify.
  • Pedidos recebidos: Operação > Pedidos — filtre pela filial e verifique a origem para identificar pedidos vindos da Shopify.

Nesta página