Multi Frete no Storefront

Nessa secção iremos falar sobre como implementar adequadamente a funcionalidade de Multi Frete no Storefront Wake. Para saber o que é essa funcionalidade clique aqui.

A seguir, detalharemos os passos técnicos necessários para implementar corretamente o Multi-frete, garantindo o funcionamento adequado da funcionalidade no Storefront Wake.

❗️

Esse recurso só deve ser utilizado por lojas em construção!!

Se você está trabalhando em uma loja que já está em produção e precisa utilizar o recurso de Multi-frete, entre em contato com o Suporte Wake solicitando ajuda.

Pré-requisito

Antes de mais nada você deve habilitar a configuração de Multi-frete no admin da loja. Para isso siga o caminho Fretes> Configurações> Multi fretes nos produtos de CDs diferentes (Storefront).

Como Cotar o Frete

Com a configuração de Multi-frete ativa, a cotação de frete deve ser realizada exclusivamente através da query shippingQuoteGroups.

🚧

Importante!

A query shippingQuotes (antiga) foi substituída pela shippingQuoteGroups (nova) e elas não devem ser utilizadas em conjunto.

A query shippingQuoteGroups agrupa os produtos do checkout por Centro de Distribuição (CD) priorizado e retorna cotações para cada um desses grupos.

Para um exemplo real da query clique aqui

Query shippingQuoteGroups:

shippingQuoteGroups(
  cep: CEP
  checkoutId: Uuid!
  useSelectedAddress: Boolean
): [ShippingQuoteGroup]

checkoutId: (Obrigatório) O identificador único do checkout.

cep ou useSelectedAddress: Utilize um CEP específico ou defina useSelectedAddress: true para utilizar o endereço já salvo no checkout. Não envie ambos os parâmetros ao mesmo tempo.

Entendendo o Retorno

O retorno da query é um array de ShippingQuoteGroup. Cada objeto neste array representa um pacote de frete, contendo os produtos de um mesmo CD e as opções de envio disponíveis para eles.

Estrutura do ShippingQuoteGroup:

type ShippingQuoteGroup {
  distributionCenter: DistributionCenter
  pickups: [PickupShippingQuote]
  products: [ShippingQuoteGroupProduct]
  shippingQuotes: [GroupShippingQuote]
}


  • distributionCenter: O Centro de Distribuição de origem para este pacote.
  • products: A lista de produtos que fazem parte deste pacote.
  • shippingQuotes: A lista de cotações de frete (entrega ou retirada) disponíveis para este pacote, baseadas no CD priorizado.
  • pickups: A lista de opções de retirada adicionais.

Como selecionar o frete para cada pacote

Para cada ShippingQuoteGroup retornado pela query, sua aplicação deve permitir que o usuário final selecione uma das opções de frete disponíveis (shippingQuotes), e então enviar essa escolha via mutation checkoutSelectShippingQuote. Clique aqui para ver um exemplo real desta mutation.

  • Mutation checkoutSelectShippingQuote:
checkoutSelectShippingQuote(
  checkoutId: Uuid!
  shippingQuoteId: Uuid!
  distributionCenterId: ID
  # Outros campos como additionalInformation, customerAccessToken, etc.
): Checkout

Fluxo de seleção:

  1. Execute a query shippingQuoteGroups.
  2. Para cada grupo no array de resposta:
    • Apresente as opções de frete disponíveis no campo shippingQuotes.
  3. Para o usuário selecionar uma opção execute a mutation checkoutSelectShippingQuote, enviando:
    • checkoutId: O ID do checkout.
    • shippingQuoteId: O ID da cotação escolhida (vinda de shippingQuotes).
    • distributionCenterId: O ID do CD principal do grupo (vindo de distributionCenter.id).

Verificando as Cotações selecionadas e concluindo a etapa

Após cada chamada à mutation checkoutSelectShippingQuote, é possível verificar o estado atual das seleções de frete. O campo selectedShippingGroups no objeto Checkout (retornado por queries e mutations de checkout) contém essa informação.

O Campo selectedShippingGroups

Este array espelha a estrutura dos pacotes de frete, mostrando qual cotação foi selecionada para cada um.

Exemplo de Query para Verificar o Checkout:

query GetCheckout($checkoutId: String!) {  
  checkout(checkoutId: $checkoutId) {  
    checkoutId  
    # O array de grupos de cotações já selecionadas.  
    selectedShippingGroups {  
      distributionCenter {  
        id # CD do pacote  
        sellerName  
      }  
      products {  
        productVariantId  
      }  
      # A cotação que foi selecionada para este pacote.  
      # Se este campo for nulo, a seleção para este pacote ainda está pendente.  
      selectedShipping {  
        shippingQuoteId  
        name  
        type  
        value  
      }  
    }  
    completed  
  }  
}

A seleção de frete é considerada concluída quando todos os grupos no array selectedShippingGroups tiverem o campo selectedShipping preenchido (não nulo). A partir desse ponto, é possível prosseguir para as etapas seguintes do checkout, como pagamento e finalização.