Salta al contingut principal
Arquitectura · Integracions amb Odoo

Del middleware a la connexió nativa a Odoo: quan val la pena moure's i com es fa sense aturar l'operació

Pagues una capa intermèdia entre Odoo i els teus marketplaces, transportistes o EDI i sospites que et sobra. La regla per saber-ho, els tres casos en què no cal moure's i el pla de tall per canal de la nostra pròpia migració.

Albarà d'Odoo marcat com a sincronitzat amb Amazon, amb el document d'origen, el número d'enviament MRW i l'etiqueta PDF adjunta

Val la pena treure el middleware quan aquesta capa guarda un estat que Odoo hauria de tenir: l'estoc que es publica, l'estat real de cada comanda, el seguiment que torna al canal. No val la pena quan només transporta: rep un fitxer i el deixa en un altre lloc sense decidir res. Aquesta és tota la regla. El que ve a continuació: quan la resposta honesta és «no et moguis» i com es fa el canvi sense deixar de servir comandes, explicat des de la nostra pròpia migració a connectors que viuen dins d'Odoo, en producció.

Idea clau: el middleware no et costa la quota. Et costa que la veritat de la teva operació visqui en dos llocs. Cada estat que existeix a la capa intermèdia i també a Odoo és una reconciliació que algú fa a mà o que ningú no fa.

Què et costa el middleware en feina diària, no en diners

L'argument de treure una capa ja el vam fer amb la factura electrònica a SERES des d'Odoo, i la comparativa de fons és a Odoo 19 davant de connectors amb middleware. Amb marketplaces i transportistes és el mateix multiplicat per les comandes del dia: quatre tasques que ningú pressuposta.

TascaAmb middlewareAmb connexió nativa
Mestre de productesDos: Odoo i el mapatge del middlewareUn. El mapatge al canal és un camp del producte
Estat de la comandaTres veritats: marketplace, middleware i OdooDues: el canal i Odoo, amb l'estat remot al costat de la comanda
Traçabilitat d'un enviamentComanda a Odoo, seguiment al middleware, confirmació al marketplaceComanda, albarà, seguiment i confirmació a la mateixa fitxa
Qui mira el logEl tauler del proveïdor, amb el seu usuari i la seva retencióUn model d'Odoo amb petició i resposta, filtrable i amb purga

La fila del log mereix un avís: «ho tenim a Odoo» no vol dir que s'escrigui. A l'auditoria del nostre connector de Mirakl, la funció que registrava cada crida preguntava if not log_model, i l'ajudant retornava un recordset buit quan tot anava bé; a Odoo un recordset buit és fals, així que el registre va ser un no-op des del primer dia. La prova era a producció: la seqüència d'aquella taula seguia a NULL després de mesos de crons. Avui la comprovació és if log_model is False.

Quan no cal moure's: els tres casos clars

  1. Diversos ERP. Si Odoo porta una societat i un altre sistema en porta una altra, i totes dues venen als mateixos canals, el middleware és l'únic lloc on l'estoc publicat és la suma dels dos.
  2. Orquestració entre tercers. Si el flux és marketplace → operador logístic extern → transportista i Odoo només se n'assabenta al final, la capa dirigeix sistemes que no són teus.
  3. Ningú que mantingui Odoo. Un connector natiu és codi dins del teu ERP. Si ningú, intern o partner d'Odoo, farà aquesta feina, el middleware amb la seva quota és l'opció barata.

El pla de migració sense aturar l'operació

Quatre passos i un principi: la connexió nativa entra llegint i no escriu cap a fora fins que fa dies que llegeix el mateix que el middleware. El vam aplicar el juny de 2026 en substituir, a la nostra pròpia producció a Odoo.sh, un mòdul antic d'Amazon pel connector que crida SP-API des d'Odoo.

1. Inventari de fluxos, amb direcció

Una fila per flux: comandes que entren, estoc i preus que surten, seguiment que surt, cancel·lacions i devolucions que entren, factures que pugen. Per a cadascuna, direcció, freqüència i disparador (cron, webhook o persona). Un marketplace de Mirakl dona entre vuit i dotze files; un transportista, tres o quatre; una plataforma de signatura, dues.

2. Ordre: lectura abans que escriptura

El connector natiu s'instal·la amb totes les escriptures cap al tercer apagades: al nostre, un interruptor global més un indicador per compte per a cada acció que surt. Només llegeix comandes, estats i inventari; el middleware continua escrivint i ningú deixa de servir. Aquí va sortir la primera errada del tall: l'importador nou comprovava si una comanda existia mirant la seva pròpia taula, acabada de crear i buida, i no les comandes de venda que el sistema anterior ja havia creat. Resultat: disset comandes de venda duplicades i confirmades, cadascuna reservant estoc una altra vegada. L'arranjament va ser buscar la referència del marketplace a sale.order abans de crear res. La regla: es deduplica contra la destinació, mai contra la taula intermèdia del propi connector.

3. Període en paral·lel amb comparació diària

Una o dues setmanes amb els dos sistemes llegint el mateix canal i, cada matí, una llista curta: comandes que un va importar i l'altre no, estats que no coincideixen, SKU sense casar. Zero dos dies seguits, i llavors la primera escriptura.

4. Tall per canal, i escriptures només cap endavant

Es talla un canal, no tots. I en encendre les escriptures, només les que dispara una transició: confirmar l'enviament en validar un albarà és segur, perquè passa una vegada per comanda que de veritat surt. Allò que no és segur és un cron que recorri registres existents i els reenviï. Al nostre tall quedaven 534 albarans històrics fets i marcats «pendent de sincronitzar» pel mòdul antic; el cron de reintents els va trobar i va enviar 28 confirmacions d'enviament a Amazon en quatre minuts, abans que l'apaguéssim. La lliçó: abans d'encendre un cron d'escombrada, reconcilia l'històric que queda en l'estat que aquest cron cerca.

Les dades històriques: què es migra i què es deixa en només lectura

Es migra el que encara pot canviar: comandes obertes, el mapatge SKU ↔ referència del canal, enviaments amb un seguiment que encara no ha tornat al marketplace i devolucions en curs. No es migra l'històric de crides ni les comandes tancades: es demana accés de només lectura al seu tauler durant el termini de reclamacions. Al nostre tall les dades de negoci no es van tocar: 1.838 comandes de venda i 13.236 productes van seguir on eren.

Com es comprova que la connexió nativa funciona abans del tall

Amb una build real d'Odoo i el sandbox del tercer, no amb mocks. Ho vam explicar amb números a els tests estaven en verd i el connector no funcionava: un connector amb 236 de 236 tests en verd a Odoo 19, 18 i 17 tenia 32 errades reals a sota, i un altre amb 163 de 163 mai no havia escrit una línia de log. Les tres proves que importen:

  • La finestra de sincronització demana el que ha canviat, no el que s'ha creat. Ho vam cometre dues vegades: el connector de Mirakl enviava start_date (creació) en lloc de start_update_date, i el d'AliExpress filtrava per data de creació des de l'última passada. En tots dos, una comanda creada al matí i enviada a la tarda no tornava a entrar a la finestra i el seu estat a Odoo es quedava congelat.
  • El log té files. Després de la primera importació, compta els registres del model de log. Zero vol dir que no s'escriu, no que no hi hagi errors.
  • La traça és a la fitxa. Des d'una comanda importada has d'arribar a la comanda de venda, a l'albarà i al seguiment sense sortir d'Odoo.
Fitxa d'una comanda de Mirakl a Odoo 19: referència del marketplace, instància Leroy Merlin, estat remot SHIPPED, estat a Odoo Enviat, comanda de venda enllaçada i última sincronització
La traça a Odoo 19 amb el nostre connector de Mirakl sobre una instància de Leroy Merlin: l'estat remot tal com el retorna l'API (SHIPPED), l'estat a Odoo, la comanda de venda S00509 enllaçada i l'última sincronització. L'albarà i el seguiment pengen d'aquesta comanda; amb un middleware, això es reparteix entre el seu tauler i Odoo.

Què queda després: qui manté el connector a la versió següent d'Odoo

Aquesta és la part que el middleware t'estalviava i ara és teva. Cada versió d'Odoo canvia alguna cosa que un connector toca: a la 19, read_group està marcat com a obsolet al propi ORM; a la 18 les vistes de llista van passar de <tree> a <list>; a la 17 un ir.cron sense numbercall corre una vegada i s'apaga sol. Cap de les tres dona error en instal·lar. Els nostres connectors es publiquen per a la 19, la 18 i la 17 alhora i es proven en builds reals de cada sèrie. Abans de moure't, decideix qui fa aquesta feina: el teu equip, un partner d'Odoo, o l'autor del connector si el publica per a diverses versions i el migra tan bon punt surt la nova.

Si el connector és per al teu propi programari, a connector Odoo per al teu programari expliquem com ho fem amb partners tecnològics; a el catàleg hi ha els que ja parlen amb Amazon, Mirakl, ManoMano, AliExpress i els transportistes. Amb diversos canals, l'ordre de tall depèn de quin canal publica l'estoc: ho tractem a vendre a diversos marketplaces des d'un sol Odoo i estoc en temps real per a marketplaces.

Checklist de decisió

  • El middleware guarda estoc, estat de comanda o seguiment que Odoo no té? Si només transporta fitxers, no et moguis.
  • Un sol ERP, o diversos venent als mateixos canals? Odoo s'assabenta de la comanda al principi del flux o al final?
  • Qui passa el connector a la versió següent d'Odoo, i quan?
  • Saps quants registres històrics queden en l'estat que cerca un cron de reintents?

Si vols que algú miri el teu cas amb aquests criteris, a serveis i solucions hi ha com treballem.

Preguntes freqüents

Quant de temps cal tenir els dos sistemes en paral·lel?

Fins que la comparació diària doni zero diferències dos dies seguits, i mai menys d'una setmana.

Es pot moure un canal i deixar la resta al middleware?

Sí, i és el recomanable. Només cal decidir qui publica l'estoc a aquest canal a partir del tall, i que sigui un de sol.

Val el mateix per a EDI i signatura electrònica que per a marketplaces?

La regla sí: si la capa guarda l'estat del document (acceptat, rebutjat, signat), moure-la val la pena. Hi ha dos o tres fluxos en lloc de deu, i el paral·lel es fa enviant el mateix document pels dos camins a l'entorn de proves del tercer.

Enllaços útils dins de FlexigoTech

Odoo 19 davant de connectors amb middlewareLa comparativa de fons: on viu la veritat del negociEls tests estaven en verd i el connector no funcionava32 errades que la suite no veiaConnector Odoo per al teu programariCom ho fem amb partners tecnològics

El que fem sobre això

Integracions a midaQuè fa, captures, versions i preu.

Pagues un middleware i no saps si et sobra?

Explica'ns quins canals tens, quina versió d'Odoo i qui la manté. Et diem si moure's val la pena, en quin ordre, i què ha de seguir al middleware. Escriu a comercial@flexigobe.com o truca al +34 616 809 504.

Parlar amb un enginyer