Pincode de devolução — fluxo loja para motorista
Passo a passo do modelo tradicional onde a transportadora é dona do PIN de devolução e o operador da loja repassa o código ao motorista que está devolvendo o pacote.
Quando esse fluxo se aplica?Este é o fluxo tradicional de pincode de devolução, controlado por
return_verification.pincode_owner = "carrier"no webhook Delivery request. A transportadora gera o PIN como parte da operação dela; o dashboard da filial apenas ecoa o código para que o operador da loja possa repassar ao motorista no momento do handover de volta.É o comportamento padrão de toda integração de transportadora que suporta pincode de devolução.
Por que a transportadora gera o PIN nesse modelo?Esse é o jeito clássico: a transportadora gera o código internamente, mostra pro motorista no app dela quando ele entra em rota de retorno, e valida quando o motorista digita ao chegar de volta na loja. A Abbiamo só recebe o código pra exibir no dashboard da filial, ajudando o operador a confirmar a devolução no balcão.
É o caminho com menos integração nova — qualquer transportadora que já fazia pincode de devolução funciona aqui sem mudar nada. Em contrapartida, cada transportadora segue com sua própria regra (formato do código, quantas tentativas o motorista pode fazer, etc.), e a filial não tem como liberar administrativamente uma devolução no dashboard — esse controle fica todo do lado da transportadora.
Quando uma devolução acontece
Devolução é o caminho de volta do pacote pra origem (a loja) depois que a entrega ao cliente final não foi concluída — cliente ausente, recusa, endereço inválido, etc. A transportadora despacha o motorista pra refazer o caminho até a loja com o pacote, e é no handover de volta no balcão que esse PIN de 4 dígitos é validado.
Quem valida o quê
| Ator | Responsabilidade |
|---|---|
| Transportadora | Gera o PIN. Ecoa o código de volta pra Abbiamo no primeiro evento de status do retorno. Valida o PIN digitado pelo motorista dentro do próprio app. |
| Abbiamo | Recebe o PIN da transportadora e exibe na tela do pedido da filial. Não valida o PIN nesse modelo. |
| Operador da loja | Lê o PIN no dashboard e repassa para o motorista (geralmente verbalmente no balcão, no momento em que recebe o pacote de volta). |
| Motorista | Recebe o PIN do operador e digita no app da própria transportadora antes de finalizar a devolução. |
Passo a passo
- Falha na entrega ao cliente final. A entrega falha por um dos motivos típicos (
PACKAGE_NOT_COLLECTED, recusa do cliente, endereço inválido, etc.) e entra em fluxo de devolução. A integração filial × transportadora já está configurada comreturn_verification.pincode = trueereturn_verification.pincode_owner = "carrier". - Despacho da devolução. A Abbiamo envia o webhook Delivery request pra transportadora (ou outro despacho equivalente, dependendo da fase do ciclo de vida). O bloco
logistic_data.return_verificationtrazpincode: trueepincode_owner: "carrier". Nenhumpincode_valueé enviado — a própria transportadora vai gerar o código. - A transportadora gera o PIN. Internamente, nos sistemas dela, no momento em que decide despachar a rota de retorno.
- A transportadora ecoa o PIN. No primeiro evento de status do retorno enviado depois do despacho de devolução — tipicamente Returning delivery — a transportadora inclui o campo
return_verification_codeno payload. Eventos de status aceitos para carregar esse campo: - Dashboard exibe o PIN. A Abbiamo persiste o código e mostra no sidepanel do pedido dentro do dashboard da filial.
- Repasse na loja. O motorista chega na loja com o pacote. O operador lê o PIN no dashboard e repassa pro motorista (verbalmente no balcão é o caso mais comum) antes de aceitar fisicamente o pacote de volta.
- Motorista digita no app da transportadora. A validação acontece dentro do sistema da transportadora — a Abbiamo não participa nesse momento.
- Devolução confirmada. Quando a transportadora aceita o código, ela envia o evento Returned delivery pra Abbiamo, e a entrega transita pra
RETURNED.
Exemplos de payload
Delivery request da Abbiamo pra transportadora (bloco relevante):
{
"event_type": "DELIVERY_REQUEST",
"logistic_data": {
"return_verification": {
"pincode": true,
"pincode_owner": "carrier"
}
}
}Atualização de status da transportadora ecoando o PIN de devolução de volta pra Abbiamo (exemplo no returning-delivery):
{
"delivery_id": "851dc274-e090-4881-8f3c-5b660cecf059",
"event_at": "2026-05-12T16:10:00.000Z",
"return_verification_code": "8745"
}Quando return_verification.pincode = false (ou o bloco está ausente), a transportadora não deve enviar return_verification_code nos eventos de status — o campo é ignorado e só polui auditoria.
Dica de implementaçãoA transportadora deve persistir a decisão de "envia o código ou não" por
delivery_idno momento em que recebe o webhook Delivery request. A flag de pickup e a flag de return são independentes — uma entrega pode ter um, outro, ambos ou nenhum. Trate as duas separadamente.
Erros comuns
- Enviar
return_verification_codeem toda devolução. Só envie quando o Delivery request marcoureturn_verification.pincode = true. Caso contrário o campo é ignorado. - Misturar
collect_verification_codeereturn_verification_code. São campos distintos com semânticas diferentes — o primeiro é pra coleta na loja no início da rota, o segundo é pra devolução na loja no fim de uma rota que falhou. Não reaproveite o valor. - Validação só do lado da transportadora — a Abbiamo não ajuda se o operador disser o código errado. Se o operador lê errado e o motorista digita incorretamente, o app da transportadora rejeita. A Abbiamo só percebe indiretamente (o evento
returned-deliverynão chega). - Ecoar só no
returned. Ecoe o PIN noreturning-delivery— quanto antes melhor. Quando oreturnedchega, o eco no dashboard já perdeu utilidade pro operador.
Referências relacionadas
Updated 2 days ago
