Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Odoo till Slack: semesteraviseringar utan överraskningar

Rickard Andersson Partner, Nodenordic.se

Ditt team missar inte deadlines för att folk tar ledigt. Det missar deadlines för att ingen ser det komma förrän den dag någon är borta.

Den här Odoo Slack alerts-automationen träffar projektledare först, men teknikledare och IT-drift får ofta hantera följderna också. Resultatet är enkelt: rätt personer får en tydlig förvarning om morgondagens frånvaro, tillräckligt tidigt för att kunna omfördela arbetet.

Du sätter upp ett dagligt arbetsflöde som hämtar godkänd ledighet från Odoo, matchar den mot Redmine-projekt, tar bort dubbletter av kollegor och postar riktade Slack-notiser (med valfria chefslarm).

Så fungerar den här automationen

Här är hela arbetsflödet som du kommer att sätta upp:

n8n Workflow Template: Odoo till Slack: semesteraviseringar utan överraskningar

Varför det här spelar roll: morgondagens ledighet ska inte komma som en överraskning

När någon är borta i morgon och teamet får veta det i morgon, betalar du för det på obekväma sätt. Standups blir till detektivarbete. Ärenden fastnar och “väntar på” någon som inte är där. Ett möte med intressenter flyttas i sista minuten, vilket får teamet att se oorganiserat ut även när leveransen är bra. Det mest frustrerande är att informationen redan finns i Odoo. Den når bara inte de personer som behöver den, i det läge när de fortfarande kan göra något åt det.

Det blir snabbt dyrt. Här är var det faller isär i verkliga team.

  • Ledighet godkänns i Odoo, men når aldrig ingenjörerna som är tilldelade samma Redmine-projekt.
  • Team övernotifierar “hela kanalen”, så folk börjar ignorera frånvaromeddelanden helt.
  • Du tappar det enda användbara fönstret: eftermiddagen innan, när du fortfarande kan möblera om ärenden och mötesagendor.
  • Manuella kontroller (Odoo, sedan Redmine, sedan Slack-DM) tar runt en timme om dagen och missar ändå edge cases.

Vad du bygger: dagliga ledighetslarm matchade mot Redmine-projekt

Det här arbetsflödet körs varje vardag kl. 17:15 och gör “morgon-checken” åt dig. Det hämtar alla godkända ledighetsposter som börjar nästa dag från Odoo och berikar sedan varje post med medarbetarens detaljer (inklusive e-post och chef-information). Därefter slår det upp personen i Redmine, hittar vilka aktiva projekt personen tillhör och samlar kollegorna i samma projekt. Till sist tar det bort dubbletter i målgruppen så att ingen blir spammande över överlappande projekt, och skickar ett riktat Slack-meddelande som faktiskt är relevant för dem som påverkas av frånvaron. Om ledighetstypen spelar roll (ledig vs distans) skickas meddelandet via rätt väg.

Arbetsflödet startar på ett schema, inte via en manuell trigger. Därifrån blir det en matchningsövning: Odoo-ledighet → Redmine-projektmedlemskap → lista över kollegor. Sista steget är meddelanden, strypta med en kort väntan så att Slack-anropen blir stabila.

Det här bygger du

Förväntade resultat

Säg att du ansvarar för 6 aktiva Redmine-projekt och försöker “rimlighetskolla” morgondagens tillgänglighet själv. En typisk dag ser ut så här: öppna Odoo (10 minuter), identifiera vilka som är borta (10), slå upp medlemskap i Redmine (30) och sedan meddela några Slack-kanaler eller DM (20). Det är ungefär en timme, och du riskerar ändå att missa någon i ett delat projekt. Med det här arbetsflödet blir “arbetet” noll minuter efter att det är uppsatt. Det kör kl. 17:15, postar rätt larm, och du lägger bara tid om du väljer att ombalansera ärenden.

Innan du börjar

  • n8n-instans (prova n8n Cloud gratis)
  • Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
  • Odoo för godkända ledighetsposter och medarbetarprofiler.
  • Redmine för att koppla frånvaro till projektkollegor.
  • Slack för riktade notiser till rätt personer.
  • Odoo API-nyckel (hämta den i dina Odoo användar-/API-inställningar).
  • Redmine API-nyckel (hämta den på din Redmine-sida “My account”).
  • Slack Bot Token eller webhook (skapa den i Slack API Apps).

Nivå: Medel. Du klistrar in API-nycklar, testar några anrop och justerar mappningsfält (e-post och ID:n) så att de matchar din Odoo/Redmine-setup.

Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).

Steg för steg

Ett vardagsschema startar allt. Arbetsflödet kör kl. 17:15, vilket är sent nog för att fånga godkännanden som sker under dagen men tidigt nog för att agera innan i morgon.

Datumsträngar beräknas för “i morgon”. n8n förbereder de exakta datumformat som behövs av Odoo- och Redmine-anropen, så att arbetsflödet konsekvent frågar efter rätt tidsfönster.

Ledighetsposter hämtas från Odoo och valideras. Det hämtar bara “godkända” ledigheter som startar nästa dag och berikar sedan varje objekt med medarbetarprofil och chefdetaljer så att du kan routa eller eskalera om du vill.

Redmine används för att hitta vilka som påverkas. Arbetsflödet slår upp medarbetaren i Redmine, samlar deras aktiva projektmedlemskap och hämtar sedan kollegor i de projekten. Det tar bort dubbletter av ID:n så att en person inte blir notifierad fem gånger bara för att de delar fem projekt.

Slack-meddelanden routas och skickas. En kort fördröjning hjälper till att undvika instabila efterföljande anrop, och sedan routar arbetsflödet efter ledighetstyp och postar rätt meddelande. Du kan enkelt justera vem som blir larmad (bara kollegor, även chefer eller specifika “hög påverkan”-roller) utifrån dina behov. Se hela implementationsguiden nedan för alternativ för anpassning.

Steg-för-steg-guide för implementering

Steg 1: konfigurera schematriggern

Det här arbetsflödet körs automatiskt på vardagar och startar kedjan för frånvaronotifieringar.

  1. Öppna Weekday Schedule Trigger och ställ in schemaregeln så att den körs dagligen med Days Interval {{ 1 }}, Trigger At Hour {{ 17 }} och Trigger At Minute {{ 15 }}.
  2. Koppla Weekday Schedule Trigger till Assign Config Values enligt arbetsflödet.

Tips: Triggern använder uttryck för tidsstyrning. Om ni byter tidszon, uppdatera dessa värden så att de matchar era kontorstider.

Steg 2: ställ in konfiguration och datumlogik

Dessa noder definierar bas-URL:er, gränser och beräknar datumsträngar som används i alla HTTP-anrop.

  1. Öppna Assign Config Values och fyll i den råa JSON:en i JSON Output med era miljövärden (till exempel Redmine-URL:er, Odoo-endpoints, gränser och time_off_approval_link).
  2. Verifiera att Compute Date Strings innehåller den angivna JavaScript-koden för att beräkna today, tomorrow och andra datumsträngar.

⚠️ Vanlig fallgrop: Om ni lämnar Assign Config Values tom kommer varje HTTP-anrop att misslyckas eftersom URL:er byggs från dessa fält.

Steg 3: anslut datakällor (Redmine, Odoo, Slack)

Flera HTTP Request- och Slack-noder hämtar Redmine-användare, projektdata, Odoo-frånvaroposter och katalogdata från Slack.

  1. I Fetch Redmine Users ställer ni in URL till {{ $node['Assign Config Values'].json.redmine6_Url}}users.json?limit={{ $node['Assign Config Values'].json.limit}}. Credential Required: Anslut era httpHeaderAuth-uppgifter.
  2. I Retrieve Closed Projects ställer ni in URL till {{ $node['Assign Config Values'].json.get_prj_closed}}. Credential Required: Anslut era httpHeaderAuth-uppgifter.
  3. I Fetch Tomorrow Leave Records ställer ni in Method till POST och behåller JSON Body som angivet, inklusive uttrycken {{ $node['Compute Date Strings'].json.today}} och {{ $node['Compute Date Strings'].json.tomorrow}}. Credential Required: Anslut era httpHeaderAuth-uppgifter.
  4. I Retrieve Slack Users ställer ni in Resource till user, Operation till getAll och Limit till 100. Credential Required: Anslut era slackApi-uppgifter.
  5. Koppla Fetch Leave Details, Fetch Employee Profile, Fetch Manager Profile, Lookup Redmine User och Get User Memberships till samma uppgiftstyp httpHeaderAuth som används för Odoo- och Redmine-API-anrop.

Tips: Det finns 11+ httpRequest-noder. Säkerställ att alla Redmine- och Odoo-anrop delar giltiga httpHeaderAuth-uppgifter för att undvika inkonsekventa behörighetsfel.

Steg 4: konfigurera frånvarobearbetning och sammanslagning

Det här avsnittet validerar frånvaroposter, berikar dem och slår ihop flera dataströmmar för att förbereda notifieringar.

  1. I Validate Leave Records behåller ni villkoret {{ $json.result.length }} not equals 0 för att stoppa arbetsflödet när det inte finns några frånvaroposter.
  2. Säkerställ att Map Leave User Data och Cycle Leave Records är kopplade så att varje post bearbetas i batchar.
  3. Låt Fetch Leave Details och Derive Leave Name vara oförändrade; de beräknar display_name_leave_record, date_from och date_to.
  4. Derive Leave Name skickar utdata parallellt till både Fetch Employee Profile och Combine Data Streams.
  5. Extract Work Email skickar utdata parallellt till både Combine Data Streams och Fetch Manager Profile.
  6. Extract Manager Email skickar utdata parallellt till både Lookup Redmine User och Combine Data Streams.
  7. Bekräfta att Combine Data Streams är inställd på Mode combine, Combine By combineByPosition och Number Inputs 5.

Steg 5: konfigurera projektmedlemskap och förberedelse av aviseringar

Detta steg avgör vilka projekt och medlemmar som ska notifieras och förbereder aviseringsobjekt.

  1. I Evaluate Project List behåller ni boolean-kontrollen {{ $json.isAccountRedmine }} equals true och listkontrollen {{ $json.redmine_listProjectID }} not empty.
  2. Ställ in Iterate Project Items till batchstorlek {{ 1 }} och säkerställ att den flödar vidare till Fetch Redmine Memberships och Deduplicate Member IDs.
  3. Låt Map Team Member Emails, Prepare Leave Notices A och Prepare Leave Notices B vara oförändrade; de bygger notifieringspayloads med hjälp av katalogdata från Slack.
  4. Check Project List For Notify routar till Prepare Leave Notices A och Prepare Leave Notices B beroende på Redmine-kontokontrollen.

⚠️ Vanlig fallgrop: Run Sub-Workflow (Configure Required) och Run Sub-Workflow (Configure Required) 2 har tomma workflow-ID:n. Ni måste välja rätt underarbetsflöden i båda noderna innan ni kör detta arbetsflöde.

Steg 6: konfigurera routing för Slack-notifieringar

Notifieringar routas efter typ och skickas till Slack via direkta chat.postMessage API-anrop.

  1. I Route By Type behåller ni reglerna som jämför {{ $node['Subflow Execution Trigger'].json.type}} med timeoff och remote.
  2. I Send Slack Timeoff behåller ni URL som https://slack.com/api/chat.postMessage och säkerställer att body innehåller channel satt till {{ $node['Subflow Execution Trigger'].json.memberID}} samt malltexten för meddelandet. Credential Required: Anslut era httpBearerAuth- och httpQueryAuth-uppgifter.
  3. I Send Slack Remote behåller ni samma Slack-endpoint och body-format. Credential Required: Anslut era httpBearerAuth- och httpQueryAuth-uppgifter.
  4. Säkerställ att Delay 1 Second finns med för att strypa notifieringstakten innan Route By Type.

Steg 7: testa och aktivera ert arbetsflöde

Kör ett manuellt test för att bekräfta att frånvaroposter hämtas, transformeras och skickas till Slack utan problem.

  1. Klicka på Execute Workflow och följ körningen som startar vid Weekday Schedule Trigger.
  2. Verifiera att Fetch Tomorrow Leave Records returnerar en icke-tom result.records och att Validate Leave Records följer true-grenen.
  3. Bekräfta att Combine Data Streams ger sammanslagna poster och att Prepare Leave Notices A eller Prepare Leave Notices B skapar notifieringsobjekt.
  4. Kontrollera Slack för meddelanden som skickas av Send Slack Timeoff eller Send Slack Remote.
  5. När ni är nöjda, växla arbetsflödet till Active för att aktivera schemalagd körning.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Felsökningstips

  • Odoo-uppgifter kan löpa ut eller sakna åtkomst till HR-ledighetsendpoints. Om det skapar fel, kontrollera först din Odoo API-nyckel/användarbehörigheter och de specifika rättigheterna för ledighetsmodellen.
  • Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder faller på tomma svar.
  • Slack-fel orsakas ofta av mismatch vid användaruppslag. Bekräfta att arbetsflödet mappar samma e-postformat som Slack använder (arbetsmejl vs alias) innan du felsöker vidare.

Snabba svar

Hur lång tid tar det att sätta upp den här Odoo Slack alerts-automationen?

Cirka 30 minuter om dina API-nycklar är klara.

Krävs kodning för den här ledighetslarm-automationen?

Nej. Du kopplar mest konton och klistrar in API-nycklar. Du kan behöva justera ett par fältmappningar (som e-post) så att de matchar dina system.

Är n8n gratis att använda för det här Odoo Slack alerts-arbetsflödet?

Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också ta höjd för kostnader för Odoo/Redmine/Slack API-åtkomst (ofta 0 USD om du använder inbyggda tokens i befintliga planer).

Var kan jag hosta n8n för att köra den här automationen?

Två alternativ: n8n Cloud (hanterat, enklast att sätta upp) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.

Kan jag modifiera det här Odoo Slack alerts-arbetsflödet för andra use cases?

Ja, och det bör du troligen. Du kan ändra tiden för schema-triggern, byta Slack-leverans från HTTP-webhook till den inbyggda Slack-noden och justera routningen i switchen “Route By Type” så att den passar dina ledighetskategorier. Vanliga anpassningar är “endast chef”-larm, att notifiera en dedikerad projektkanal i stället för individer, och att lägga till ett dagligt sammanfattningsmeddelande efter att individuella larm har skickats.

Varför fallerar min Odoo-anslutning i det här arbetsflödet?

Oftast är det ett API-nyckelproblem eller att Odoo-användaren saknar behörighet att läsa ledighetsposter. Skapa en ny nyckel, bekräfta att bas-URL:en är korrekt och testa sedan om anropet “Fetch Tomorrow Leave Records” igen. Om det fungerar isolerat men fallerar i full körning, kontrollera det beräknade datumformatet för “i morgon” och se till att din Odoo-instans förväntar sig exakt det filtret.

Vilken volym kan det här Odoo Slack alerts-arbetsflödet hantera?

Mer än tillräckligt för de flesta små och medelstora team: dussintals ledighetsposter per dag är normalt. På n8n Cloud Starter kan du köra ett bra antal dagliga körningar, och högre planer hanterar mer. Om du self-hostar finns ingen körningsgräns, och den praktiska begränsningen blir din server och hur snabbt Slack/Redmine svarar.

Är den här Odoo Slack alerts-automationen bättre än att använda Zapier eller Make?

Ofta, ja. Det här arbetsflödet gör mycket “join och filter”-arbete mellan Odoo, Redmine och Slack, plus deduplicering, batchning och villkorsstyrd routning, och det blir snabbt klumpigt (och dyrt) i enklare verktyg. n8n ger dig också ett self-host-alternativ, vilket är hjälpsamt om du kör detta dagligen och inte vill tänka på task counts. Zapier eller Make kan fortfarande vara bättre om din version i praktiken är “Odoo-ledighet godkänd → posta i en kanal”, utan Redmine-matchning. Om du är osäker, prata med en automationsexpert så får du ett rakt svar.

När det här väl rullar slutar frånvaro vara en morgonöverraskning och blir i stället en eftermiddagsplan. Arbetsflödet tar hand om den repetitiva koordineringen så att teamet kan hålla ärendena i rörelse.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Få prisoffert redan idag!
Få prisoffert redan idag!

Berätta vad ni behöver hjälp med så hör vi av oss inom en arbetsdag!

Launch login modal Launch register modal