Saltar para o conteúdo principal
Correos Express · Odoo

Transportadoras no Odoo: Correos Express, OCA gratuito e o que cobre cada um

O módulo OCA delivery_correos_express é gratuito, tem ramo da 14.0 à 19.0 e resolve mais do que quase ninguém admite. Aqui está o diff real contra o conector pago, tirado do código de ambos.

Conector Correos Express para Odoo

Se expede com a Correos Express e trabalha com o Odoo, tem dois caminhos: instalar o módulo delivery_correos_express da OCA, gratuito e sob AGPL-3.0, ou pagar por um conector mantido. Aqui compara-se código: o do módulo OCA no ramo 19.0 do repositório OCA/delivery-carrier e o do conector próprio da FlexigoTech, campo a campo e chamada a chamada.

Resumo: para uma loja própria com um contrato, um produto fixo e entrega ao domicílio, o módulo OCA serve. Deixa de servir quando precisa de recolha programada, entrega em ponto de conveniência, peso declarado por volume ou que um erro temporário da API não lhe deixe a guia validada e sem etiqueta.

O que precisa antes de começar

Três coisas, e nenhuma lha dá o módulo. São idênticas qualquer que seja o caminho que escolha.

  • Contrato com a Correos Express. Os dois módulos falam com as suas credenciais e com a sua tarifa; nenhum revende transporte.
  • Quatro dados. Utilizador, palavra-passe, código de cliente e código de solicitante. No módulo OCA são os campos correos_express_username, correos_express_password, correos_express_customer_code e correos_express_sender_code. O de solicitante segue em solicitante ao registar o envio; o de cliente, em codRte e em keyCli ao pedir a etiqueta.
  • Dependências. O módulo OCA não funciona sozinho: precisa de delivery_package_number e delivery_state, do mesmo repositório, e da biblioteca Python unidecode. No Odoo.sh, unidecode vai no requirements.txt do repositório ou a instalação falha.

E um detalhe de rotas: o módulo OCA escolhe o ambiente com a flag prod_environment padrão de delivery.carrier e aponta para www.test.cexpr.es/wsps/ em testes e para www.cexpr.es/wspsc/ em produção. O prefixo não é o mesmo nos dois ambientes. O nosso conector usa /wspsc/ nos dois. Os dois prefixos respondem no host de testes, por isso, se algo falhar aí, comece pelo certificado e pelas credenciais.

Funcionalidade a funcionalidade: o que faz cada um

Cada linha sai de ler os dois módulos, não de um folheto. Quando a resposta é «nenhum dos dois», também está escrito.

FuncionalidadeMódulo OCA delivery_correos_expressConector próprio FlexigoTech
Licença e custoAGPL-3.0, sem custo de licençaOPL-1, módulo pago
Versões do OdooRamos 14.0 a 19.0 do repositório17, 18, 19 e 20
Dependênciasdelivery_package_number, delivery_state e unidecodedelivery, stock, sale, sale_stock (tudo do Odoo)
Formato da etiquetaPDF e ZPL (tipos 1 e 2 da API)PDF (tipo 5, térmica) e ZPL; o menu pendente oferece também EPL, que segue com o mesmo tipo que o ZPL
MultivolumeEnvia numBultos a partir de number_of_packages, mas a lista de volumes segue com quilos e medidas em brancoQuilos por volume e altura, comprimento e largura quando o pacote os tem
Cobrança à entregaNão: o campo reembolso é enviado vazioTambém não: é enviado vazio da mesma forma
Recolha programadaNão a chamaRegistar, modificar, anular, hora de corte e seguimento de recolha, mais creaRecogida ao registar o envio
Ponto de conveniência (PUDO)Não: codDirecDestino segue sempre vazio e não há consulta de pontosConsulta de pontos por raio e produto B-PACK com idPuntoExterno obrigatório
Manifesto / fecho do diaNão o geraTambém não como documento; há métodos contra lista de envios e geração de relatórios, mas o fecho continua a fazer-se no portal
Anulação do envioEscreve uma mensagem no chatter a dizer que não há método para anularChama o serviço de parar entrega e, se o contrato não o tiver, regista a anulação como manual
Tracking de retornoSim: escreve estado e histórico na guia, com o cron diário de delivery_stateSim: cron próprio a cada 30 minutos e janela de dias configurável, 21 por predefinição
Nova tentativa perante erro da APINão: qualquer falha sobe como UserError e fica por aíCron a cada 5 minutos, espera crescente de 5 a 240 minutos e um máximo de 6 tentativas por guia
Cálculo de tarifaA API não o fornece: devolve o preço de lista do produto de transporte e avisa por escritoTambém não: devolve o preço fixo configurado na transportadora e escreve zero no preço exato do envio
Chamadas distintas à API3: registo de envio, etiqueta e seguimento21 endpoints declarados: registo, etiqueta e 19 serviços mais, seguimento incluído
Testes dentro do módulo1854

Duas linhas costumam surpreender. A primeira é a cobrança à entrega: nenhum dos dois a envia, por isso, se cobra contra entrega, hoje isso gere-se fora do Odoo com os dois módulos. A segunda é a tarifa: a API da Correos Express não cota envios, e por isso nenhum dos dois calcula nada. O OCA devolve o preço de lista do produto de transporte e deixa o aviso por escrito; o conector próprio devolve o preço fixo da transportadora. Se precisa que o carrinho calcule o transporte, isso resolve-se com regras de preço no Odoo ou com o módulo OCA delivery_price_method, não com o conector.

Onde o módulo OCA é suficiente

Loja própria, um contrato, entrega ao domicílio

Vende no seu site, tudo sai com o mesmo produto contratado e não oferece entrega em ponto. Imprime numa Zebra com ZPL ou numa laser com PDF. Esse fluxo é coberto inteiramente pelo módulo OCA: registo de envio, número de seguimento na guia, etiqueta anexada no chatter e estado atualizado pelo cron. Aqui um módulo pago não vai fazer nada melhor.

Odoo 14, 15 ou 16

Nós mantemos 17, 18, 19 e 20 e não vamos fingir o contrário. O repositório da OCA tem ramo para 14.0, 15.0 e 16.0. Se o seu Odoo é dessas versões, o módulo OCA não é a opção barata: é a opção.

Multivolume em que todos os volumes são iguais

Se lhe faturam pelo peso total do envio, que a lista de volumes vá com os quilos em branco não lhe muda nada: o peso total segue. O problema só aparece quando alguém precisa do peso volume a volume.

Tem alguém que mexe em código

O módulo OCA é curto e legível: umas 450 linhas entre transportadora, pedidos e guia. Se em casa há quem leia Python, corrigir um campo ou portar o ramo é trabalho de uma tarde e o controlo é seu.

Onde fica aquém e o que lhe custa em trabalho manual

Aqui não há opinião: é o que o código não faz e, portanto, o que alguém faz à mão.

  • A recolha pede-se fora. O módulo OCA não chama nenhum serviço de recolha: o aviso diário à transportadora sai do portal, do telefone ou de uma rota fixa já combinada.
  • Não pode vender entrega em ponto a partir do Odoo. O campo do ponto de destino é enviado vazio e não há consulta de pontos, por isso uma encomenda com entrega em ponto de conveniência sai do fluxo da guia.
  • A anulação é uma mensagem, não uma ação. O módulo escreve no chatter que a Correos Express não oferece método para anular um envio registado. É verdade para o registo do envio; o serviço de parar entrega existe à parte e tem de estar habilitado no contrato.
  • Um corte da API deixa a guia a meio. Qualquer exceção sobe como erro de utilizador e não há nova tentativa. Com poucos envios por dia, alguém volta a carregar no botão; quando são centenas, alguém tem de os ir procurar um a um.
  • O botão de reimprimir etiqueta só aparece com a guia validada. Está condicionado a que o estado seja hecho e a que haja número de seguimento. Se o seu armazém imprime antes de validar, esse botão não está onde o procuram.

O certificado de testes: o incidente que mais se repete

Antes de mudar de módulo por um erro de ligação, verifique isto. Ao chamar o ambiente de testes www.test.cexpr.es, o Python falha com CERTIFICATE_VERIFY_FAILED. Não é o módulo. Esse host serve a cadeia inteira, mas emitida pela CA própria dos Correos: o certificado de servidor é assinado por AC SUB 2 CORREOS e essa assinatura sobe até AC RAIZ CORREOS, uma raiz autoassinada que não está no repositório de CA públicas. O Python só confia nesse repositório e corta aí. A produção, www.cexpr.es, valida contra CA públicas sem tocar em nada.

Pode verificá-lo em dez segundos com openssl s_client -connect www.test.cexpr.es:443: a cadeia que devolve termina numa raiz autoassinada dos Correos. A saída rápida é pôr verify=False, e é má ideia: enfraquece todas as chamadas HTTPS dessa instância. O correto é montar um bundle PEM com essa raiz e passá-lo como verify apenas nas chamadas dessa transportadora, para que a produção e as restantes integrações continuem a verificar contra o repositório predefinido. Tem o passo a passo em o erro SSL da Correos Express no Odoo.

Como se verifica que funciona de verdade

O teste não é que o módulo instale. É gerar uma etiqueta real contra o contrato e ver o número escrito na guia. Quatro coisas têm de estar lá:

  • O número de expedição no campo de seguimento da guia, não só no PDF.
  • A etiqueta guardada como anexo, com o número no nome do ficheiro.
  • A ligação pública de seguimento a resolver com esse mesmo número.
  • Os códigos de volume, um por cada pacote que declarou.
Guia do Odoo com a etiqueta da Correos Express gerada e o número de expedição escrito no picking
Guia CENT/OUT/00136 após o registo: estado de fluxo «Etiqueta OK», número de expedição 1823059046850141, código de volume e o PDF da etiqueta anexado. Se o seu teste não acabar num ecrã assim, não está a funcionar: está a compilar.

Veredicto

Comece pelo módulo OCA. É gratuito, está no ramo da sua versão e o cenário que cobre é o da maioria das lojas que expedem com a Correos Express. Instale-o, tire uma etiqueta real e trabalhe com ele umas semanas.

Passado esse tempo, escreva a lista do que continua a fazer fora do Odoo. Se nessa lista houver pedir recolha, oferecer ponto de conveniência, perseguir guias sem etiqueta ou declarar peso por volume, é aí que um módulo pago se justifica: não por ter mais botões, mas por eliminar essa lista. Se a lista estiver vazia, já terminou e não tem de comprar nada.

Quem o monta é outra conversa: instalação, credenciais e bundle do certificado custam o mesmo com o módulo gratuito que com o pago. Tratamos disso em implementação de módulos OCA e em logística no Odoo.

Para continuar

Módulo OCA da Correos ExpressFicha do módulo gratuito e o que é preciso para o pôr a funcionarConector Correos Express da FlexigoTechO módulo próprio: recolhas, PUDO, novas tentativas e anulaçãoComparação completa OCA contra módulo próprioA mesma decisão, com os erros de API que verá em produção

Perguntas frequentes

Existe um módulo da Correos Express para Odoo gratuito?

Sim: delivery_correos_express, no repositório OCA/delivery-carrier sob AGPL-3.0 e com ramo da 14.0 à 19.0. Cobre registo de envio, etiqueta em PDF ou ZPL e atualização de estado.

O módulo OCA tira etiquetas para impressora térmica?

Sim, em ZPL. O tipo de etiqueta é um menu pendente com duas opções, PDF e ZPL, que são os tipos 1 e 2 da API da Correos Express. Se a sua impressora fala outra linguagem, aí o módulo não chega.

Posso oferecer entrega em ponto de conveniência com o módulo OCA?

Não a partir do Odoo. O campo do ponto de destino é sempre enviado vazio e o módulo não inclui nenhuma consulta de pontos, por isso a encomenda com entrega em ponto gere-se fora da guia.

Porque é que o envio me aparece a 0 € na encomenda?

Porque a API da Correos Express não cota envios. O módulo OCA di-lo com todas as letras e devolve o preço de lista do produto de transporte; o conector próprio devolve o preço fixo da transportadora e escreve zero no preço exato do envio. O transporte define-se com regras de preço no Odoo ou com o módulo OCA delivery_price_method.

É possível anular um envio já registado?

O registo de envio não tem anulação: o módulo OCA escreve-o no chatter e fica por aí. Existe um serviço à parte de parar entrega, que tem de estar habilitado no contrato, e que o conector próprio chama.

O que fazemos sobre isto

Conector Correos ExpressO que faz, capturas, versões e preço.

Quer que alguém veja o seu caso concreto?

Contrato, versão do Odoo, volume e o que faz hoje fora do ERP. Com isso sabe-se se o módulo OCA lhe chega ou não, e dizemo-lo mesmo que a resposta seja que lhe chega.

Falar com um engenheiro