TMS — Visão Geral

Visão geral da integração entre TMS e a plataforma Abbiamo Go: rotas, motoristas e webhooks de status

TMS

Esta seção é voltada para sistemas de gestão de transporte (TMS) que integram com a Abbiamo para enviar rotas fechadas ao aplicativo do motorista (Abbiamo Go).

O fluxo garante que a inteligência de roteirização do TMS seja refletida fielmente no app: o TMS define a rota e escala o motorista; a Abbiamo recebe os dados e os exibe no aplicativo; o motorista executa a entrega; e a Abbiamo notifica o TMS sobre cada mudança de status.


Autenticação

Todas as requisições devem conter o header de autenticação do seller group:

HeaderDescrição
x-abbiamo-seller-group-keyChave fornecida pela Abbiamo para identificar e autorizar o seller group.
  • Base URL: https://api.abbiamo.io
  • Rate limit: 1500 requisições a cada 5 minutos.

Fluxo de integração

TMS                →   Abbiamo API   →   Abbiamo Go App
Define rota            Cria pedidos       Motorista visualiza
e motorista            e vincula à        e executa a rota
                       rota no app

                   ←   Webhooks
                       Notifica o TMS sobre
                       mudanças de status

Criar rota com pedidos

POST /v2/orders/route

Cria os pedidos e a rota de uma só vez, já vinculando o motorista. Limite de 50 pedidos por rota.

Referência oficial: Create route for new orders

Guarde o route.id

Salve o route.id retornado na resposta — ele é necessário para operações de cancelamento ou troca de motorista.

Campos do objeto orders[]

CampoTipoObrigatórioDescrição
order_numberstringSimIdentificador do pedido no TMS.
seller_identifierstringSimCNPJ ou identificador da filial (seller) de origem do pedido.
customer.namestringSimNome do destinatário.
destination_address.zip_codestringSimCEP do endereço de entrega (apenas números).
destination_address.statestringSimUF do estado de entrega (ex: SP).
destination_address.citystringSimCidade de entrega.
destination_address.streetstringSimLogradouro de entrega.
destination_address.street_numberstringSimNúmero do endereço de entrega.

Campos do objeto route

CampoTipoObrigatórioDescrição
driver_documentstringNãoCPF do motorista responsável pela rota. Se não informado, a rota é criada sem motorista e pode ser atribuída depois pelo dashboard.
external_namestringNãoNome externo da rota (identificador do TMS).
orders_sequencedbooleanNãoSe true, a Abbiamo respeita a ordem exata do array orders. Use quando o TMS já definiu a sequência otimizada.
start.typestringNãoTipo do ponto de partida. Use WAREHOUSE_SELLER_IDENTIFIER para partir de uma filial.
start.valuestringNãoIdentificador da filial de partida (CNPJ ou seller identifier).
end.typestringNãoTipo do ponto de chegada. Use WAREHOUSE_SELLER_IDENTIFIER para retornar a uma filial.
end.valuestringNãoIdentificador da filial de chegada (CNPJ ou seller identifier).

Exemplo de requisição

{
  "orders": [
    {
      "order_number": "PEDIDO-001",
      "seller_identifier": "71955998000126",
      "customer": { "name": "Cliente Exemplo" },
      "destination_address": {
        "zip_code": "01412100",
        "state": "SP",
        "city": "São Paulo",
        "street": "Rua Exemplo",
        "street_number": "100"
      }
    }
  ],
  "route": {
    "driver_document": "05217304065",
    "external_name": "ROTA_SUL_0502",
    "orders_sequenced": true,
    "start": {
      "type": "WAREHOUSE_SELLER_IDENTIFIER",
      "value": "71955998000126"
    },
    "end": {
      "type": "WAREHOUSE_SELLER_IDENTIFIER",
      "value": "71955998000126"
    }
  }
}

Exemplo de resposta

{
  "status": "success",
  "route": {
    "id": "1d1dfa9c-4fe2-4315-9d65-ec0e8f95d239",
    "cost": 1200
  },
  "orders": [
    {
      "id": "30c24480-8e45-4afa-af35-0231b460e9ed",
      "order_number": "PEDIDO-001",
      "tracking": "abc123#",
      "already_exists": false,
      "mail_label_link": "https://mail-label-api.abbiamo.io/mail-label/v1?trackings=abc123#",
      "tracking_link": "http://meupedido.abbiamolog.com/abc123#"
    }
  ]
}

O campo already_exists indica se o pedido já existia no sistema e foi apenas vinculado à rota (sem ser recriado).


Trocar motorista da rota

PATCH /v1/routes/{route_id}/change-driver

Atribui um novo motorista a uma rota já criada. A rota deve estar com status CREATED.

{
  "document_number": "17027297623"
}

Para mais detalhes, consulte a referência completa de Rotas.


Cancelar rota

PUT /v1/routes/{route_id}

Cancela a rota. Os pedidos vinculados retornam ao estado pendente. A rota deve estar com status CREATED.

Para mais detalhes, consulte a referência completa de Rotas.


Gestão de motoristas

Motoristas são vinculados a uma ou mais filiais (sellers). Para que um motorista visualize rotas no app, ele precisa estar associado ao seller_identifier correto.

Os endpoints disponíveis são:

EndpointDescrição
POST /v1/driversCria ou atualiza um motorista.
GET /v1/driversLista motoristas do seller group (paginado).
GET /v1/drivers/{document_number}Retorna os dados de um motorista específico.

Para mais detalhes, consulte a referência completa de Motoristas.


Webhooks de status

A cada mudança no status de um pedido, a Abbiamo envia um POST para a URL configurada no TMS.

StatusDescrição
CREATEDPedido recebido no sistema.
DISPATCHEDRota planejada e enviada ao app do motorista.
START_DELIVERYMotorista iniciou o deslocamento para o cliente.
SUCCESSFULEntrega realizada com sucesso.
FAILEDFalha na entrega.

Regras de negócio

  • Idempotência de pedidos: se o order_number já existir e não estiver finalizado, a Abbiamo apenas vincula o pedido à nova rota, sem recriar.
  • Sequenciamento: se o TMS já define a ordem otimizada, sempre envie "orders_sequenced": true.
  • Limite de rota: rotas com mais de 50 pedidos não são aceitas.
  • Filiais (Sellers): certifique-se de que as filiais foram criadas antes de criar rotas — o seller_identifier deve existir no seller group autenticado.

Nesta página