Pickup pincode — fluxo motorista para filial
Passo a passo do modelo de pickup pincode em que a Abbiamo é dona do PIN e o motorista o repassa ao operador da loja no balcão.
Este é o fluxo de pickup pincode motorista para filial, controlado por pickup_verification.pincode_owner = "abbiamo" no webhook de Requisição de entrega. A Abbiamo gera o PIN na criação do pedido e o valida localmente quando o operador o digita no dashboard. É exigido por embarcadores que precisam ser a fonte da verdade do PIN — tipicamente por razões de auditoria, prevenção de fraude ou regulatórias.
Este modelo é opt-in por integração embarcador × transportadora — ambos os lados precisam suportá-lo. Para o fluxo padrão em que a transportadora gera o PIN, consulte Pickup pincode — fluxo filial para motorista.
Quem valida o quê
| Ator | Responsabilidade |
|---|---|
| Abbiamo | Gera o PIN na criação do pedido. Envia o PIN pré-gerado à transportadora. Valida o PIN digitado pelo operador localmente. Solicita à transportadora (de forma síncrona) que libere o motorista após o PIN ser validado. |
| Transportadora | Recebe o PIN pré-gerado na Requisição de entrega e o exibe ao motorista em seu próprio aplicativo. Expõe o webhook de Validação do pin de coleta para liberar o motorista quando a Abbiamo chamar. |
| Motorista | Recebe o PIN pelo aplicativo da transportadora e o informa verbalmente ao operador da loja no balcão. |
| Operador da loja | Recebe o PIN verbalmente do motorista e o digita no dashboard da Abbiamo. |
Passo a passo
- Criação do pedido. O embarcador cria uma entrega pela Orders API. A integração embarcador × transportadora está configurada pela Abbiamo com
pickup_verification.pincode = trueepickup_verification.pincode_owner = "abbiamo". A Abbiamo gera um PIN de 4 dígitos e o persiste na entrega. - Despacho. A Abbiamo envia o webhook de Requisição de entrega à transportadora. O bloco
logistic_data.pickup_verificationcontémpincode: true,pincode_owner: "abbiamo"epincode_valuecom o código de 4 dígitos. - Transportadora exibe o PIN ao motorista. O aplicativo do motorista mostra o código recebido em
pincode_valuejunto com as demais informações de coleta. - Motorista chega à loja. Informa verbalmente o PIN ao operador no balcão.
- Operador digita o PIN no dashboard. A Abbiamo valida o código localmente contra a cópia armazenada na criação do pedido.
- Abbiamo solicita à transportadora que libere o motorista. Se o PIN coincidir, a Abbiamo dispara o webhook de Validação do pin de coleta à transportadora. Esta chamada é síncrona — a Abbiamo aguarda a resposta da transportadora na mesma requisição HTTP, com timeout de 5 segundos.
- Transportadora libera o motorista e responde. Na mesma resposta HTTP, a transportadora retorna
200 / driver_unlocked(ou200 / already_unlockedpara uma nova tentativa idempotente). O aplicativo do motorista para de bloquear a coleta. - Coleta confirmada. A Abbiamo transita a entrega para
COLLECTED, retorna sucesso ao dashboard e o operador libera fisicamente o pacote ao motorista.
Se o PIN não coincidir, o operador vê um erro no dashboard. A transportadora não é chamada, o motorista permanece bloqueado e o status da entrega não muda. Se a transportadora responder com 4xx/5xx ou expirar o timeout, o dashboard exibe um erro de "transportadora indisponível" e o operador pode tentar novamente ou recorrer a um canal manual.
Exemplos de payload
Requisição de entrega da Abbiamo para a transportadora (bloco relevante apenas):
{
"event_type": "DELIVERY_REQUEST",
"logistic_data": {
"pickup_verification": {
"pincode": true,
"pincode_owner": "abbiamo",
"pincode_value": "8745"
}
}
}Webhook síncrono da Abbiamo para a transportadora quando o operador envia o PIN:
{
"event_type": "PICKUP_PIN_VALIDATION_REQUEST",
"event_at": "2026-05-12T14:34:17.890Z",
"delivery_id": "851dc274-e090-4881-8f3c-5b660cecf059"
}Resposta esperada da transportadora na mesma requisição HTTP:
{
"code": "driver_unlocked",
"delivery_id": "851dc274-e090-4881-8f3c-5b660cecf059",
"unlocked_at": "2026-05-12T14:34:18.014Z",
"driver": {
"id": "MOTO-5544",
"name": "Carlos Silva",
"document_number": "12345678900"
}
}Quando a Abbiamo chama a transportadora no passo 6, o PIN já foi validado localmente. A transportadora recebe apenas o delivery_id e deve liberar o motorista com base nisso. Reenviar o PIN nesta chamada duplicaria a fonte da verdade.
Habilitando este fluxo
A escolha do modelo faz parte do acordo comercial entre embarcador e transportadora, e é configurada pelo lado da Abbiamo — o embarcador não escolhe o modelo por pedido. Para habilitar o fluxo motorista para filial em um par embarcador × transportadora:
- A transportadora deve suportar a leitura de
pickup_verification.pincode_valueno webhook de Requisição de entrega e exibi-lo ao motorista. - A transportadora deve expor o handler do webhook de Validação do pin de coleta, respeitando os requisitos de idempotência e timeout de 5 segundos documentados ali.
- Ambos os lados entram em contato com carrier@abbiamolog.com para migrar a integração para
pincode_owner = "abbiamo".
Enquanto ambos os lados não estiverem prontos, a integração permanece no fluxo padrão pincode_owner = "carrier" — sem quebra de contrato.
Armadilhas comuns
- Transportadora ignora
pincode_valuee gera seu próprio PIN. Neste modelo, a transportadora deve exibir opincode_valuerecebido — o operador digitará esse código, não o que a transportadora gerou. PINs divergentes aparecem como errosINVALID_PINno dashboard. - Handler da transportadora muito lento no webhook síncrono. O timeout padrão da Abbiamo é de 5 segundos. Se a lógica de liberação da transportadora for mais pesada, ela deve responder
200 / driver_unlockedassim que o desbloqueio for confirmado em seu banco de dados e concluir o restante do trabalho de forma assíncrona. - Handler da transportadora não é idempotente. A Abbiamo realiza uma nova tentativa em caso de
5xx/ timeout. O handler deve retornar200 / already_unlocked(sem reexecutar os efeitos colaterais) ao receber uma segunda chamada para o mesmodelivery_id.
Validação via API (sem o dashboard)
Operações que usam ferramenta própria (em vez do dashboard da Abbiamo) executam os passos 5–6 via API pública:
- Verificações do pedido (coleta e retorno) — informa se o pedido exige o PIN de coleta (e o código de retorno, quando houver).
- Confirmar pincode de coleta — valida o PIN digitado, libera o motorista na transportadora e transita a entrega para
COLLECTED.
Referências relacionadas
Pickup pincode — fluxo filial para motorista
Passo a passo do modelo tradicional de pickup pincode, em que a transportadora é dona do PIN e o operador da loja repassa ao motorista.
Mensageria via webhook — notificando o cliente
Como usar os eventos de webhook da Abbiamo para disparar mensagens ao cliente em cada etapa do pedido, tanto para entregas quanto para retiradas (takeout).