Saltar al contenido principal
Correos Express · Odoo

Transportistas en Odoo: Correos Express, OCA gratis y qué cubre cada uno

El módulo OCA delivery_correos_express es gratis, tiene rama de la 14.0 a la 19.0 y resuelve más de lo que casi nadie admite. Aquí está el diff real contra el conector de pago, sacado del código de los dos.

Conector Correos Express para Odoo

Si expides con Correos Express y trabajas con Odoo tienes dos caminos: instalar el módulo delivery_correos_express de la OCA, gratis y bajo AGPL-3.0, o pagar por un conector mantenido. Aquí se compara código: el del módulo OCA en la rama 19.0 del repositorio OCA/delivery-carrier y el del conector propio de FlexigoTech, campo a campo y llamada a llamada.

Resumen: para una tienda propia con un contrato, un producto fijo y entrega a domicilio, el módulo OCA te vale. Deja de valer cuando necesitas recogida programada, entrega en punto de conveniencia, peso declarado por bulto o que un error temporal de la API no te deje el albarán validado y sin etiqueta.

Qué necesitas antes de empezar

Tres cosas, y ninguna te la da el módulo. Son idénticas elijas el camino que elijas.

  • Contrato con Correos Express. Los dos módulos hablan con tus credenciales y con tu tarifa; ninguno revende porte.
  • Cuatro datos. Usuario, contraseña, código de cliente y código de solicitante. En el módulo OCA son los campos correos_express_username, correos_express_password, correos_express_customer_code y correos_express_sender_code. El de solicitante viaja en solicitante al dar de alta el envío; el de cliente, en codRte y en keyCli al pedir la etiqueta.
  • Dependencias. El módulo OCA no va solo: necesita delivery_package_number y delivery_state, del mismo repositorio, y la librería Python unidecode. En Odoo.sh, unidecode va en el requirements.txt del repositorio o la instalación falla.

Y un detalle de rutas: el módulo OCA elige entorno con el flag prod_environment estándar de delivery.carrier y apunta a www.test.cexpr.es/wsps/ en pruebas y a www.cexpr.es/wspsc/ en producción. El prefijo no es el mismo en los dos entornos. Nuestro conector usa /wspsc/ en los dos. Los dos prefijos responden en el host de pruebas, así que si algo te falla ahí, empieza por el certificado y por las credenciales.

Funcionalidad a funcionalidad: qué hace cada uno

Cada fila sale de leer los dos módulos, no de un folleto. Cuando la respuesta es «ninguno de los dos», también está escrito.

FuncionalidadMódulo OCA delivery_correos_expressConector propio FlexigoTech
Licencia y costeAGPL-3.0, sin coste de licenciaOPL-1, módulo de pago
Versiones de OdooRamas 14.0 a 19.0 del repositorio17, 18 y 19
Dependenciasdelivery_package_number, delivery_state y unidecodedelivery, stock, sale, sale_stock (todo de Odoo)
Formato de etiquetaPDF y ZPL (tipos 1 y 2 de la API)PDF (tipo 5, térmica) y ZPL; el desplegable ofrece también EPL, que viaja con el mismo tipo que ZPL
MultibultoManda numBultos desde number_of_packages, pero la lista de bultos va con kilos y medidas en blancoKilos por bulto y alto, largo y ancho cuando el paquete los tiene
ReembolsoNo: el campo reembolso se envía vacíoTampoco: se envía vacío igual
Recogida programadaNo la llamaGrabar, modificar, anular, hora de corte y seguimiento de recogida, más creaRecogida al dar de alta el envío
Punto de conveniencia (PUDO)No: codDirecDestino viaja siempre vacío y no hay consulta de puntosConsulta de puntos por radio y producto B-PACK con idPuntoExterno obligatorio
Manifiesto / cierre de díaNo lo generaTampoco como documento; hay métodos contra lista de envíos y generación de informes, pero el cierre se sigue haciendo en el portal
Anulación del envíoEscribe un mensaje en el chatter diciendo que no hay método para anularLlama al servicio de parar entrega y, si el contrato no lo tiene, registra la anulación como manual
Tracking de vueltaSí: escribe estado e histórico en el albarán, con el cron diario de delivery_stateSí: cron propio cada 30 minutos y ventana de días configurable, 21 por defecto
Reintento ante error de APINo: cualquier fallo sube como UserError y ahí se quedaCron cada 5 minutos, espera creciente de 5 a 240 minutos y un máximo de 6 intentos por albarán
Cálculo de tarifaNo lo da la API: devuelve el precio de lista del producto de transporte y avisa por escritoTampoco: devuelve el precio fijo configurado en el transportista y escribe cero en el precio exacto del envío
Llamadas distintas a la API3: alta de envío, etiqueta y seguimiento21 endpoints declarados: alta, etiqueta y 19 servicios más, seguimiento incluido
Pruebas dentro del módulo1854

Dos filas suelen sorprender. La primera es el reembolso: ninguno de los dos lo manda, así que si cobras contra entrega, hoy eso se gestiona fuera de Odoo con los dos módulos. La segunda es la tarifa: la API de Correos Express no cotiza envíos, y por eso ninguno de los dos calcula nada. El OCA devuelve el precio de lista del producto de transporte y deja el aviso por escrito; el conector propio devuelve el precio fijo del transportista. Si necesitas que el carrito calcule porte, eso se resuelve con reglas de precio en Odoo o con el módulo OCA delivery_price_method, no con el conector.

Dónde el módulo OCA es suficiente

Tienda propia, un contrato, entrega a domicilio

Vendes en tu web, todo sale con el mismo producto contratado y no ofreces entrega en punto. Imprimes en una Zebra con ZPL o en una láser con PDF. Ese flujo lo cubre el módulo OCA entero: alta de envío, número de seguimiento en el albarán, etiqueta adjunta en el chatter y estado actualizado por el cron. Aquí un módulo de pago no te va a hacer nada mejor.

Odoo 14, 15 o 16

Nosotros mantenemos 17, 18 y 19 y no vamos a fingir lo contrario. El repositorio de la OCA tiene rama para 14.0, 15.0 y 16.0. Si tu Odoo es de esos años, el módulo OCA no es la opción barata: es la opción.

Multibulto en el que todos los bultos son iguales

Si te facturan por el peso total del envío, que la lista de bultos vaya con los kilos en blanco no te cambia nada: el peso total sí viaja. El problema solo aparece cuando alguien necesita el peso bulto a bulto.

Tienes a alguien que toca código

El módulo OCA es corto y legible: unas 450 líneas entre transportista, peticiones y albarán. Si en casa hay quien lee Python, parchear un campo o portar la rama es trabajo de una tarde y el control es tuyo.

Dónde se queda corto y qué te cuesta en trabajo manual

Aquí no hay opinión: es lo que el código no hace y, por tanto, lo que alguien hace a mano.

  • La recogida se pide fuera. El módulo OCA no llama a ningún servicio de recogida: el aviso diario al transportista sale del portal, del teléfono o de una ruta fija ya pactada.
  • No puedes vender entrega en punto desde Odoo. El campo del punto de destino se manda vacío y no hay consulta de puntos, así que un pedido con entrega en punto de conveniencia se sale del flujo del albarán.
  • La anulación es un mensaje, no una acción. El módulo escribe en el chatter que Correos Express no ofrece método para anular un envío registrado. Es cierto para el alta de envío; el servicio de parar entrega existe aparte y hay que tenerlo habilitado en contrato.
  • Un corte de API deja el albarán a medias. Cualquier excepción sube como error de usuario y no hay reintento. Con pocos envíos al día alguien vuelve a darle al botón; cuando son cientos, alguien tiene que ir a buscarlos uno a uno.
  • El botón de reimprimir etiqueta solo aparece con el albarán validado. Está condicionado a que el estado sea hecho y a que haya número de seguimiento. Si tu almacén imprime antes de validar, ese botón no está donde lo busca.

El certificado de pruebas: la incidencia que más se repite

Antes de cambiar de módulo por un error de conexión, comprueba esto. Al llamar al entorno de pruebas www.test.cexpr.es, Python falla con CERTIFICATE_VERIFY_FAILED. No es el módulo. Ese host sí sirve la cadena entera, pero emitida por la CA propia de Correos: el certificado de servidor lo firma AC SUB 2 CORREOS y esa firma sube hasta AC RAIZ CORREOS, una raíz autofirmada que no está en el almacén de CA públicas. Python solo confía en ese almacén y corta ahí. Producción, www.cexpr.es, valida contra CA públicas sin tocar nada.

Lo puedes comprobar en diez segundos con openssl s_client -connect www.test.cexpr.es:443: la cadena que devuelve termina en una raíz autofirmada de Correos. La salida rápida es poner verify=False, y es mala idea: debilitas todas las llamadas HTTPS de esa instancia. Lo correcto es montar un bundle PEM con esa raíz y pasarlo como verify solo en las llamadas de ese transportista, para que producción y el resto de integraciones sigan verificando contra el almacén por defecto. Tienes el paso a paso en el error SSL de Correos Express en Odoo.

Cómo se comprueba que funciona de verdad

La prueba no es que el módulo instale. Es generar una etiqueta real contra el contrato y ver el número escrito en el albarán. Cuatro cosas tienen que estar ahí:

  • El número de expedición en el campo de seguimiento del albarán, no solo en el PDF.
  • La etiqueta guardada como adjunto, con el número en el nombre del fichero.
  • El enlace público de seguimiento resolviendo con ese mismo número.
  • Los códigos de bulto, uno por cada paquete que has declarado.
Albarán de Odoo con la etiqueta de Correos Express generada y el número de expedición escrito en el picking
Albarán CENT/OUT/00136 tras el alta: estado de flujo «Etiqueta OK», número de expedición 1823059046850141, código de bulto y el PDF de la etiqueta adjunto. Si tu prueba no acaba en una pantalla así, no está funcionando: está compilando.

Veredicto

Empieza por el módulo OCA. Es gratis, está en la rama de tu versión y el escenario que cubre es el de la mayoría de las tiendas que expiden con Correos Express. Instálalo, saca una etiqueta real y trabaja con él un par de semanas.

Pasado ese tiempo, escribe la lista de lo que sigues haciendo fuera de Odoo. Si en esa lista hay pedir recogida, ofrecer punto de conveniencia, perseguir albaranes sin etiqueta o declarar peso por bulto, ahí es donde un módulo de pago se justifica: no por tener más botones, sino por quitar esa lista. Si la lista está vacía, ya has terminado y no tienes que comprar nada.

Quién lo monta es otra conversación: instalación, credenciales y bundle del certificado cuestan lo mismo con el módulo gratis que con el de pago. Lo tratamos en implantación de módulos OCA y en logística en Odoo.

Para seguir

Módulo OCA de Correos ExpressFicha del módulo gratuito y qué hace falta para ponerlo en marchaConector Correos Express de FlexigoTechEl módulo propio: recogidas, PUDO, reintentos y anulaciónComparativa completa OCA contra módulo propioLa misma decisión, con los errores de API que verás en producción

Preguntas frecuentes

¿Hay un módulo de Correos Express para Odoo gratis?

Sí: delivery_correos_express, en el repositorio OCA/delivery-carrier bajo AGPL-3.0 y con rama de 14.0 a 19.0. Cubre alta de envío, etiqueta en PDF o ZPL y actualización de estado.

¿El módulo OCA saca etiquetas para impresora térmica?

Sí, en ZPL. El tipo de etiqueta es un desplegable con dos opciones, PDF y ZPL, que son los tipos 1 y 2 de la API de Correos Express. Si tu impresora habla otro lenguaje, ahí el módulo no llega.

¿Puedo ofrecer entrega en punto de conveniencia con el módulo OCA?

No desde Odoo. El campo del punto de destino se envía siempre vacío y el módulo no incluye ninguna consulta de puntos, así que el pedido con entrega en punto se gestiona fuera del albarán.

¿Por qué el envío me sale a 0 € en el pedido?

Porque la API de Correos Express no cotiza envíos. El módulo OCA lo dice con todas las letras y devuelve el precio de lista del producto de transporte; el conector propio devuelve el precio fijo del transportista y escribe cero en el precio exacto del envío. El porte se pone con reglas de precio en Odoo o con el módulo OCA delivery_price_method.

¿Se puede anular un envío ya registrado?

El alta de envío no tiene anulación: el módulo OCA lo escribe en el chatter y ahí se queda. Existe un servicio aparte de parar entrega, que hay que tener habilitado en contrato, y que el conector propio sí llama.

Lo que hacemos sobre esto

Conector Correos ExpressQué hace, capturas, versiones y precio.

¿Quieres que alguien mire tu caso concreto?

Contrato, versión de Odoo, volumen y qué haces hoy fuera del ERP. Con eso se sabe si te sobra el módulo OCA o no, y lo decimos aunque la respuesta sea que te sobra.

Hablar con un ingeniero