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
- Cliente compra na Shopify — o pedido é criado e pago na loja.
- Shopify envia o pedido — o webhook
orders/paidé disparado para a Abbiamo. - Abbiamo enriquece e filtra — o sistema consulta a API GraphQL da Shopify, identifica a filial (location) e aplica o filtro de entrega configurado.
- 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>. - 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.


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.
- Abra o link de instalação fornecido pela Abbiamo.
- Autorize a instalação do app na loja.
- Ao final, será exibido o Token de Acesso da loja (
shpca_...). - Copie o token — ele será usado no cadastro da integração.

![]()
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.
- No painel Shopify, vá em Configurações → Locais.
- Clique no local desejado.
- O número no final da URL é o identificador. Ex.:
https://admin.shopify.com/store/nomedaloja/settings/locations/72808693869→72808693869.


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.


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ção | Comportamento |
|---|---|
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.

Campos da integração (o que você preenche)
| Campo | Descrição | Exemplo |
|---|---|---|
| Endereço da loja | Domínio .myshopify.com da loja | minhaloja.myshopify.com |
| Token de acesso | Token gerado no Passo 1 | shpca_XXXXXXXX |
| Identificador do local | ID numérico do local (Passo 2) | 72808693869 |
| Modo de filtro | SHIPPING_LINE ou QUOTATION_ONLY | SHIPPING_LINE |
| Taxas de frete | Nomes aceitos (modo A; e retirada no modo B) | Entrega Padrão, Entrega Expressa |
| Retirada | Não criar / Criar / Criar como pronto para retirada | Criar como pronto para retirada |
Como o dado vem na Abbiamo
Cliente
| Na Abbiamo | Origem na Shopify |
|---|---|
| Nome | customer.first_name + last_name |
customer.email | |
| Telefone | customer.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 Abbiamo | Origem na Shopify |
|---|---|
| CEP | shipping_address.zip |
| Rua | shipping_address.address1 |
| Complemento | shipping_address.address2 |
| Cidade | shipping_address.city |
| Estado | shipping_address.province |
| País | shipping_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 Abbiamo | Condição na Shopify |
|---|---|
| DELIVERY | delivery method SHIPPING |
| TAKEOUT | delivery method PICK_UP |
Atualização de status na Shopify
Quando o pedido muda de status na Abbiamo, a Shopify é atualizada automaticamente:
| Status na Abbiamo | O que é enviado para a Shopify |
|---|---|
| Despachado (entrega) | Cria o fulfillment com código de rastreamento, transportadora e link meupedido.abbiamolog.com |
| Saiu para entrega | Evento de fulfillment "Out for delivery" |
| Entregue | Evento de fulfillment "Delivered" |
| Retirada — despachado | Marca 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)
-
No admin da Shopify, clique em Configurações, no canto inferior esquerdo.

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

-
Clique em Pedidos.

-
Clique em Adicionar definição.

-
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).

-
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 comocustom.nome_do_motorista.
-
Clique nesse identificador para editá-lo, apague o conteúdo e digite exatamente:
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.
-
Clique em Salvar, no aviso que aparece no rodapé da tela.

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:
- O pedido está pago (webhook
orders/paid). - O pedido tem linha(s) de frete (
shipping_lines). - Para entregas (não retirada), o pedido tem endereço de entrega.
- A entrega passa no filtro configurado (
SHIPPING_LINEouQUOTATION_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.