Du behöver en kundlista nu. Men den ”senaste exporten” ligger i någons inkorg, filnamnet är otydligt och halva teamet jobbar i förra veckans version. Det är ett litet kaos som slösar verklig tid.
Marknadschefer känner av det när de bygger en kampanjlista. Sales ops dras in för att ”bara exportera igen”. Och grundare slutar med att vidarebefordra kalkylblad som om det vore 2012. Den här automatiseringen för Odoo Excel-export ger dig en pålitlig länk som hämtar rätt kunder på beställning.
Du får se hur arbetsflödet hämtar kunder från Odoo, filtrerar på namn och returnerar antingen JSON eller en nedladdningsbar Excel-fil, beroende på vad du begär.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutligt resultat:
n8n Workflow Template: Odoo till Excel: kundlistor på beställning
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Receive Company Request1"]
n1@{ icon: "mdi:code-braces", form: "rounded", label: "Prepare Dynamic Filter1", pos: "b", h: 48 }
n2@{ icon: "mdi:code-braces", form: "rounded", label: "Prepare Output Data1", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Excel Required1", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Convert to Excel1", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond with File1"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Respond with JSON1"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/odoo.svg' width='40' height='40' /></div><br/>Fetch Customer"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Return all data for create b.."]
n7 --> n2
n4 --> n5
n2 --> n3
n1 --> n7
n3 --> n8
n3 --> n6
n0 --> n1
n8 --> n4
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n3 decision
class n0,n5,n6 api
class n1,n2,n8 code
classDef customIcon fill:none,stroke:none
class n0,n5,n6,n7,n8 customIcon
Problemet: kundexporter är alltid inaktuella
Att exportera kunder från Odoo låter enkelt tills du gör det mer än en gång. Någon filtrerar kontakter, någon annan ber om ”bara kunder, inte företag”, och fälten matchar aldrig det som fanns i förra kalkylbladet. Sedan mejlas listan, redigeras, laddas upp igen och återanvänds långt efter att den borde ha ersatts. Även när inget går sönder stjäl det fokus: du växlar mellan skärmar, dubbelkollar filter och svarar på Slack-meddelanden som ”är det här den senaste?”
Friktionen byggs på. Här är var det oftast fallerar.
- Folk exporterar med lite olika filter, så två ”kundlistor” stämmer inte överens.
- Ett kalkylblad skickas runt, och ingen kan med säkerhet säga vilken version som är korrekt.
- Fält ändras mellan exporter, vilket innebär extra arbete för att rensa och förbereda data innan du kan använda den.
- Begäran om ”en export till” blir 30 minuter fram och tillbaka, särskilt när rätt person är upptagen.
Lösningen: en enkel Odoo-API-endpoint som returnerar Excel eller JSON
Det här arbetsflödet gör kundexporter till en repeterbar begäran vid begäran. Det lyssnar efter ett HTTP GET-anrop till en specifik endpoint, kontrollerar att du skickat med den obligatoriska parametern name, och bygger sedan Odoo-sökfiltret åt dig. Därefter frågar det Odoo-modellen res.partner och returnerar endast kundkontakter (inte företagsposter). Till sist paketerar det resultatet och svarar i det format du bad om: korrekt formaterad JSON för system och dashboards, eller en nedladdningsbar Excel-fil för människor som bara behöver ett kalkylblad.
Arbetsflödet startar när du anropar /api/v1/get-customers med ett namn att söka efter. Det hämtar matchande kunder från Odoo och sammanställer en konsekvent uppsättning fält. Sedan kontrollerar det response_format och svarar med JSON som standard, eller genererar en .xlsx-fil när du begär Excel.
Vad du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att teamet tar ut kundlistor två gånger i veckan för kampanjer och kundgenomgångar. Manuellt tar det ofta cirka 20 minuter att öppna Odoo, återskapa filtret, välja fält, exportera, byta namn på filen och skicka den. Gör du det två gånger i veckan bränner du ungefär 1,5 timmar, plus avbrott. Med det här arbetsflödet klickar någon på en sparad länk som /api/v1/get-customers?name=Demo&response_format=excel, väntar på filsvaret och är klar på ett par minuter.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Odoo som CRM-databasen du exporterar från
- E-post (valfritt) om du vill skicka exporter automatiskt
- Odoo API-inloggningsuppgifter (skapa dem i Odoo-användarinställningarna)
Kunskapsnivå: Medel. Du klistrar in webhook-URL:er, kopplar Odoo-inloggning och justerar ett par fält på ett säkert sätt.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En begäran träffar din endpoint. n8n lyssnar efter ett GET-anrop till /api/v1/get-customers. Begäran innehåller ett name-värde (obligatoriskt) och kan även innehålla response_format om du vill ha Excel.
Arbetsflödet bygger sökfiltret. Ett Function-steg översätter din indata till en Odoo-anpassad fråga, med delmatchning så att ”Demo” kan hitta ”Demo Customer” och liknande namn.
Odoo returnerar kundkontakterna. Odoo-noden frågar res.partner och filtrerar fram kundkontakter (inte företagsposter). Sedan standardiserar ett output-steg fälten du returnerar (som namn, e-post, telefon, land och relaterade ID:n).
Du får JSON eller ett kalkylblad. En If-kontroll routar datat: JSON går direkt tillbaka i webhook-svaret, medan Excel går via ett ”collect items”-steg och en filgenerator som returnerar en nedladdningsbar .xlsx.
Du kan enkelt ändra standardlistan med fält för att inkludera fler kunddetaljer, som adress, stad eller momsregistreringsnummer, utifrån dina behov. Se hela implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera webhook-triggern
Sätt upp den inkommande API-endpointen så att klienter kan begära kunddata.
- Lägg till noden Client Request Webhook som trigger.
- Ställ in Path på
/api/v1/get-customers. - Ställ in Response Mode på
responseNodeför att delegera svaret till efterföljande noder.
name-queryparameter; annars returnerar Build Query Filter ett meddelande om att en parameter saknas.Steg 2: Anslut Odoo och bygg frågan
Validera indata och gör en fråga mot Odoo efter matchande kundposter.
- I Build Query Filter, behåll den befintliga Function Code som säkerställer det obligatoriska
name-filtret och sätter standardvärden förresponse_format. - Lägg till noden Retrieve Contact Records och konfigurera Odoo-frågan.
- Ställ in Resource på
customoch Custom Resource påres.partner. - Aktivera Return All och behåll uttrycket för Filter:
={{ $json.filters[0][2] && $json.filters[0][2].toString().trim() !== '' ? $json.filters[0][2] : "False" }}. - Inloggningsuppgifter krävs: Anslut era odooApi-credentials i Retrieve Contact Records.
Steg 3: Förbered svarspayloaden
Normalisera utdata och lägg till metadata innan ni routar svarformatet.
- I Assemble Output Payload, behåll den befintliga Function Code som lägger till
report_generated_onoch hanterar tomma resultat. - Konfigurera Format Selection Check med ett strängvillkor: Value 1 satt till
={{ $('Build Query Filter').item.json.response_format }}och Value 2 satt tillexcel.
response_format eller sätt det till json.Steg 4: Konfigurera output-routing och filgenerering
Routa till rätt svarstyp och generera en Excel-fil när det efterfrågas.
- Koppla Format Selection Check-utgången true till Collect Items for File för Excel-utdata och utgången false till Return JSON Response.
- I Collect Items for File, behåll JavaScript Code som
return $input.all()för att skicka alla poster vidare. - Ställ in Generate Excel File Operation på
xlsx. - Ställ in Return File Response Respond With på
binaryför filnedladdningar. - Ställ in Return JSON Response Respond With på
allIncomingItemsför JSON-svar från API:t.
Steg 5: Testa och aktivera ert workflow
Verifiera att ni får lyckade svar för både JSON- och Excel-format, och aktivera sedan workflowet.
- Klicka på Execute Workflow och anropa webhook-URL:en med
?name=Acmeför att testa JSON-svarsvägen. - Testa Excel-vägen genom att anropa webhooken med
?name=Acme&response_format=exceloch bekräfta att en fil laddas ner. - Bekräfta lyckad körning när antingen Return JSON Response eller Return File Response skickar svaret utan fel.
- Växla workflowet till Active för användning i produktion.
Vanliga fallgropar
- Odoo-inloggning kan löpa ut eller kräva specifika behörigheter. Om det uppstår fel, kontrollera först den kopplade Odoo-användarens API-åtkomsträttigheter och inloggningsinställningarna i n8n.
- Om du använder Wait-noder eller extern rendering varierar behandlingstiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du redigera utdata för alltid.
Vanliga frågor
Cirka 30 minuter om du redan har Odoo API-åtkomst.
Nej. Du kopplar mestadels Odoo och justerar sedan fältlistan samt inställningarna för webhook-svaret.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Molnplaner börjar på 20 USD/månad för högre volym. Du behöver också räkna in Odoo-hosting och eventuella API-begränsningar som din Odoo-installation tillämpar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en vanlig justering. Uppdatera fältlistan i Odoo-noden så att den inkluderar moms, gata, stad eller vad du nu behöver, och spegla sedan dessa fält i steget ”Assemble Output Payload” så att JSON och Excel ligger i linje. Om du bara vill ha extrafälten i Excel, routea dem till spåret ”Collect Items for File” och håll JSON-svaret slimmat. Ärligt talat är det oftast bättre på lång sikt att hålla båda formaten konsekventa.
Oftast beror det på utgångna inloggningsuppgifter eller att Odoo-användaren saknar behörighet att läsa res.partner. Skapa om eller spara om Odoo API-inloggningsuppgifterna i n8n och bekräfta sedan att användaren kan öppna appen Kontakter och läsa kundposter. Om arbetsflödet plötsligt returnerar tomma resultat, dubbelkolla den obligatoriska parametern name och bekräfta att din filterlogik fortfarande matchar din data. Hastighetsbegränsningar kan också dyka upp om du bombar endpointen under listbygge.
Mer än tillräckligt för typiska exporter i små team, men mycket stora listor kan timea ut beroende på din server och Odoo-prestanda.
För just det här flödet har n8n några fördelar: mer komplex logik med obegränsad förgrening utan extra kostnad, möjlighet till egen hosting för obegränsade körningar och inbyggda webhook-svar som passar bra för ”ladda ner en fil”-användningsfall. Zapier och Make kan göra exporter, men de trivs oftast bättre med att trycka rader till en annan app än att returnera en Excel-fil från en endpoint. Om allt du behöver är ”Odoo till Google Sheets” och inget annat kan de verktygen vara enklare. Om du vill ha en delbar länk som alltid returnerar det senaste är n8n ett bättre val. Prata med en automationsexpert om du är osäker på vad som passar.
När det här väl är live blir ”skicka mig kundlistan” en länk, inte en uppgift. Arbetsflödet tar hand om det repetitiva, så att du kan lägga tiden på att använda datat i stället för att exportera det.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.