Onboarding fallerar på de tråkiga ställena. Någon markerar en nyanställd i Odoo, men begäran ”skapa Redmine- + GitLab-konton” hamnar i en kö, missas i mejlen eller blir ett vagt Slack-meddelande utan någon uppföljning.
Den här Odoo Slack onboarding-automationen träffar HR Ops först, men IT-drift och systemadministratörer får ofta städa efteråt. Den ger konsekvent kontoprovisionering och en tydlig statuspost i Slack, så nyanställda får åtkomst dag ett i stället för dag ”när någon kommer ihåg det”.
Nedan ser du hur arbetsflödet upptäcker vad som behövs (Redmine, GitLab eller båda), undviker dubbletter, skapar bara det som saknas och rapporterar hela resultatet tillbaka till Slack.
Så fungerar den här automationen
Se hur detta löser problemet:
n8n Workflow Template: Odoo till Slack: onboardingstatus för Redmine och GitLab
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/>Step1: Odoo 18 called a webh.."]
n1["<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/>Step2: Respond to Webhook"]
n2@{ icon: "mdi:cog", form: "rounded", label: "Step 3: Wait 5s", pos: "b", h: 48 }
n3["<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/>Step5: Handle get today"]
n4["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 6: Check if there's a r.."]
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Step7: If total_count is not..", pos: "b", h: 48 }
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/slack.svg' width='40' height='40' /></div><br/>Step8: Get many users"]
n7@{ icon: "mdi:cog", form: "rounded", label: "End", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 9: Find the record requ.."]
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Step10: If total_count is no..", pos: "b", h: 48 }
n10["<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/>Step 11.1: Find and extract .."]
n11["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step12.1: Get user info in RM6"]
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Step13.1: If total_count is ..", pos: "b", h: 48 }
n13["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step14.1: Get user informati.."]
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Step15.1: Check if there is..", pos: "b", h: 48 }
n15["<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/slack.svg' width='40' height='40' /></div><br/>Step16.1: Send a message to .."]
n16["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 16.2: Create a new user.."]
n17["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 17.1: Send reset password"]
n18["<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/slack.svg' width='40' height='40' /></div><br/>Step 19.1: Send a message to.."]
n19["<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/>Step18.1: Convert to text"]
n20["<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/slack.svg' width='40' height='40' /></div><br/>Step20.1: Send a message to .."]
n21["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 14.2: Create a new user.."]
n22["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 15.2: Assign the user t.."]
n23["<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/>Step 16.3: Code"]
n24["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 17.2: Create a new user.."]
n25["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 18.2: Send reset password"]
n26["<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/>Step19.2: Convert to text"]
n27["<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/slack.svg' width='40' height='40' /></div><br/>Step 20.2: Send a message to.."]
n28["<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/slack.svg' width='40' height='40' /></div><br/>Step21.1: Send a message to .."]
n29["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 11.2: Find the Redmine .."]
n30@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Step12.2: If total_count is ..", pos: "b", h: 48 }
n31["<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/>Step13.2: Find and extract t.."]
n32["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 14.3: Get user info in .."]
n33@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Step 15.3: If total_count is..", pos: "b", h: 48 }
n34["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 16.3: Create a new user.."]
n35["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 17.3: Assign the user t.."]
n36["<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/>Step18.3: Convert to text"]
n37["<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/slack.svg' width='40' height='40' /></div><br/>Step20.3: Send a message to .."]
n38["<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/slack.svg' width='40' height='40' /></div><br/>Step 19.3: Send a message to.."]
n39["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 13.3: Find the Gitlab a.."]
n40@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Step 14.4: If total_count is..", pos: "b", h: 48 }
n41["<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/>Step15.4: Find and extract t.."]
n42["<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/>Step 16.4: Code"]
n43["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 17.4: Create a new user.."]
n44["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Step 18.4: Send reset password"]
n45["<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/>Step19.4: Convert to text"]
n46["<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/slack.svg' width='40' height='40' /></div><br/>Step 20.4: Send a message to.."]
n47["<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/slack.svg' width='40' height='40' /></div><br/>Step21.2: Send a message to .."]
n48@{ icon: "mdi:swap-vertical", form: "rounded", label: "Step4: Set Variables", pos: "b", h: 48 }
n23 --> n24
n42 --> n43
n2 --> n48
n48 --> n3
n6 --> n8
n3 --> n4
n19 --> n18
n36 --> n38
n26 --> n27
n45 --> n46
n1 --> n2
n17 --> n19
n25 --> n26
n44 --> n45
n11 --> n12
n32 --> n33
n0 --> n1
n16 --> n17
n24 --> n25
n43 --> n44
n21 --> n22
n34 --> n35
n13 --> n14
n14 --> n15
n14 --> n16
n5 --> n6
n5 --> n7
n9 --> n10
n9 --> n29
n22 --> n23
n35 --> n36
n30 --> n31
n30 --> n39
n12 --> n13
n12 --> n21
n40 --> n41
n33 --> n34
n31 --> n32
n41 --> n42
n10 --> n11
n39 --> n40
n29 --> n30
n8 --> n9
n4 --> n5
n18 --> n20
n38 --> n37
n46 --> n47
n27 --> n28
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 n5,n9,n12,n14,n30,n33,n40 decision
class n0,n1,n4,n8,n11,n13,n16,n17,n21,n22,n24,n25,n29,n32,n34,n35,n39,n43,n44 api
class n3,n10,n19,n23,n26,n31,n36,n41,n42,n45 code
class n48 disabled
classDef customIcon fill:none,stroke:none
class n0,n1,n3,n4,n6,n8,n10,n11,n13,n15,n16,n17,n18,n19,n20,n21,n22,n23,n24,n25,n26,n27,n28,n29,n31,n32,n34,n35,n36,n37,n38,n39,n41,n42,n43,n44,n45,n46,n47 customIcon
Utmaningen: kontoskapande vid onboarding blir rörigt snabbt
Kontoprovisionering låter enkelt tills det är utspritt över verktyg och personer. HR markerar ”behöver GitLab” i Odoo, sedan kontrollerar IT manuellt om användaren redan finns, skapar ett konto, försöker komma ihåg vilka grupper som ska läggas till och pingar någon i Slack med ”klart” (kanske). När det går fel sker det tyst: en dubblett skapas, fel e-post används eller kontot finns men saknar projektåtkomst, så den nyanställda börjar sin första dag blockerad och förvirrad. Det blir ärenden, pingar och kontextbyten. Ärligt talat är det värsta osäkerheten.
Ingen av de här sakerna var för sig är huvudproblemet. Tillsammans skapar de en flaskhals precis när du vill att onboarding ska kännas smidig.
- HR-notiser missas, vilket försenar provisioneringen tills någon följer upp manuellt.
- Dubblettkonton uppstår eftersom ”kolla först” är lätt att glömma under press.
- Oenhetliga steg leder till oenhetlig åtkomst, så två nyanställda kan få två helt olika upplevelser dag ett.
- Ingen har en samlad plats där man ser vad som lyckades, vad som hoppades över och vad som misslyckades med ett faktiskt felmeddelande.
Lösningen: provisionera Redmine och GitLab, och rapportera status till Slack
Det här arbetsflödet startar i samma stund som Odoo flaggar att en anställd behöver ett Redmine-konto, ett GitLab-konto eller båda. n8n hämtar medarbetaruppgifter (som e-post och begärda system) och delar sedan upp begäran i rätt spår så att du inte hanterar alla onboardings likadant. Innan något skapas kontrollerar det Redmine och GitLab för att se om användaren redan finns, vilket förhindrar dubblettkonton och obekväma efterstädningar senare. Endast konton som saknas skapas. Till sist får Slack en statusöversikt som faktiskt är användbar: vad som skapades, vad som hoppades över eftersom det redan fanns, och vad som misslyckades med felinformation inkluderad.
Arbetsflödet börjar med en Odoo-webhook och en snabb konfigurationsdel. Därefter hämtar det begäranden från Odoo, kontrollerar Redmine och GitLab via deras API:er, skapar användare och tilldelar grupper vid behov och avslutar med att skicka meddelanden till rätt personer i Slack (inklusive direktmeddelanden till användaren när det är relevant).
Vad som förändras: före vs. efter
| Det här eliminerar du | Effekten du kommer se |
|---|---|
|
|
Praktisk effekt i verkligheten
Säg att du onboardar 10 personer under en hektisk månad och att alla behöver GitLab och Redmine. Manuellt är det lätt att lägga cirka 15 minuter på att kontrollera befintliga användare, 10 minuter på att skapa konton och ytterligare 5 minuter på att posta uppdateringar i Slack, alltså runt 30 minuter per nyanställd (cirka 5 timmar totalt). Med det här arbetsflödet triggar HR det i Odoo, n8n gör kontroller och skapande automatiskt, och Slack får en sammanfattning inom en minut eller två. Tiden du får tillbaka är påtaglig, men den större vinsten är färre ”jag kan inte logga in”-ärenden dag ett.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Odoo 18 för att trigga onboardingbegäran via webhook.
- Redmine för att skapa användare och tilldela grupper.
- GitLab för att skapa användare och sätta inloggningsuppgifter.
- Slack för statusöversikter och direktmeddelanden.
- Redmine admin API-nyckel (skapa den i Redmines admininställningar).
- GitLab admin access token (skapa den i GitLabs access tokens).
Kompetensnivå: Medel. Du kommer koppla konton, lägga in API-uppgifter och bekräfta rätt endpoints och behörigheter.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
Odoo markerar att en anställd behöver konton. Odoo skickar en webhook till n8n när HR flaggar Redmine, GitLab eller båda under onboarding. Arbetsflödet bekräftar webbhooken direkt så att Odoo inte hänger.
Begäran valideras och kategoriseras. n8n hämtar relevant data för onboardingbegäran från Odoo och kontrollerar sedan att det faktiskt finns något att göra. Begäranden delas upp i ”båda kontona”, ”endast Redmine” och ”endast GitLab”, så att varje spår förblir rent och förutsägbart.
Befintliga användare kontrolleras innan något skapas. Arbetsflödet anropar Redmines användar-endpoint och GitLabs users-endpoint för att se om e-postadressen redan finns. Om ett konto redan finns rapporterar det ”hoppades över” i stället för att skapa en dubblett eller fallera halvvägs.
Konton skapas och åtkomst tilldelas. För användare som saknas skapar det kontot, sätter ett GitLab-lösenord vid behov och lägger användaren i en Redmine-grupp. Sedan mappar det användaren till rätt Slack member ID så att notiser går till rätt person.
Slack får en tydlig statusöversikt. Arbetsflödet postar en slutrapport som visar vad som skapades, vad som redan fanns och vad som misslyckades med felkontext. Du kan enkelt justera Slack-meddelandena och grupp-/projektlogiken så att det matchar din onboardingchecklista. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera webhook-triggern
Det här arbetsflödet startar från en Odoo-webhook och svarar omedelbart innan det fortsätter bearbetningen.
- Lägg till Incoming Odoo Webhook och ställ in Path till
79db09d5-d242-42ff-9792-5840b41f9de6, HTTP Method tillPOST, Response Mode tillresponseNodeoch Authentication tillheaderAuth. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - Koppla Incoming Odoo Webhook till Return Webhook Reply så att förfrågan bekräftas direkt.
- Koppla Return Webhook Reply till Pause 5 Seconds för att införa en kort bearbetningsfördröjning.
Steg 2: Anslut Odoo och grundkonfiguration
Definiera bas-URL:er och beräkna datumintervall som används för alla Odoo-frågor.
- Aktivera Define Configuration (den är inaktiverad som standard) och ställ in JSON Output till
{ "limit": 100, "web_search_read_api": "", "web_read_api": "" }, och lägg sedan till nycklar förweb_search_read,redmine6_Urlochgitlab_Urleftersom de refereras i hela arbetsflödet. - Koppla Pause 5 Seconds till Define Configuration och därefter till Compute Current Dates.
- I Compute Current Dates, behåll den medföljande JavaScript-koden som skriver ut
date,lastday,tomorrowochdayOfWeekför filtrering av förfrågningar. - Konfigurera Query Odoo Account Requests med URL satt till
={{ $node['Define Configuration'].json.web_search_read }}, MethodPOSToch den medföljande JSON-body:n som innehåller datumfilter som{{ $node['Compute Current Dates'].json.lastday }} 17:10:01och{{ $node['Compute Current Dates'].json.date }} 16:55:01. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter.
web_search_read, redmine6_Url eller gitlab_Url. Lägg till dessa fält, annars kommer alla HTTP-förfrågningar att misslyckas.Steg 3: Sätt upp validering av ärenden och Slack-katalog
Validera att Odoo-ärenden finns och ladda sedan Slack-användare för meddelanden.
- I Validate Requests Found, ställ in villkoret till Not Equals med Left Value
{{ $json.result.length }}och Right Value{{ 0 }}. - Koppla utgången true till Retrieve Slack Users och ställ in Resource till
user, Operation tillgetAlloch Limit till100. Inloggningsuppgift krävs: anslut eraslackApi-inloggningsuppgifter. - Koppla utgången false till Finish Flow för att stoppa när inga Odoo-ärenden hittas.
- Fortsätt från Retrieve Slack Users till Locate Dual Account Requests för att påbörja klassificeringen.
Steg 4: Konfigurera hantering av begäran om dubbla konton
Den här vägen kontrollerar ärenden som kräver både Redmine- och GitLab-åtkomst.
- I Locate Dual Account Requests, ställ in URL till
={{ $node['Define Configuration'].json.web_search_read }}, Method tillPOST, och behåll JSON-body:n med begränsningar som{{ $node['Define Configuration'].json.limit }}och datumfilter som{{ $node['Compute Current Dates'].json.lastday }} 17:55:55. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - Konfigurera Check Dual Requests Count att kontrollera
{{ $node['Locate Dual Account Requests'].json.result.length }}Not Equals{{ 0 }}. - Skicka utgången true till Extract Email From Dual för att parsa värdena
rawEmail,extractedochlogin. - Koppla Extract Email From Dual till Fetch Redmine User Info med URL
={{ $node['Define Configuration'].json.redmine6_Url }}users.json?mail={{ $node['Extract Email From Dual'].json.rawEmail }}, och därefter till Verify Redmine User Exists med{{ $json.total_count }}Not Equals{{ 0 }}. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - Från Verify Redmine User Exists (true), anropa Fetch GitLab User Info med URL
={{ $node['Define Configuration'].json.gitlab_Url }}api/v4/users?search={{ $node['Extract Email From Dual'].json.extracted }}, och skicka sedan till Branch If GitLab User. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - På utgången true från Branch If GitLab User, skicka en kanalnotis via Notify Slack User Exists med meddelandeuttrycket
The email: {{ $node['Extract Email From Dual'].json.rawEmail }} is already available in Redmine and Gitlab.. Inloggningsuppgift krävs: anslut eraslackApi-inloggningsuppgifter.
Steg 5: Konfigurera skapande av konton för dubbla ärenden
När konton inte finns skapar den här vägen dem och notifierar användare och kanaler.
- På utgången false från Verify Redmine User Exists, skapa Redmine-kontot via Create Redmine User och tilldela gruppen
[22]i Assign Redmine Group. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - Fortsätt till Pass Through A → Create GitLab User A → Set GitLab Password A för att etablera GitLab efter Redmine. Inloggningsuppgift krävs: anslut era
httpHeaderAuth-inloggningsuppgifter. - På utgången false från Branch If GitLab User, skapa GitLab direkt med Create GitLab User → Set GitLab Password. Inloggningsuppgift krävs: anslut era
httpHeaderAuth-inloggningsuppgifter. - Mappa Slack-mottagare med Map Slack Member Id (endast GitLab) och Map Slack Member Id A (båda kontona), och skicka sedan DM via DM GitLab Account Created eller DM Both Accounts Created. Inloggningsuppgift krävs: anslut era
slackApi-inloggningsuppgifter. - Publicera kanaluppdateringar med Report GitLab Creation och Report Both Accounts. Inloggningsuppgift krävs: anslut era
slackApi-inloggningsuppgifter.
Helloworld@123, Helloworld@132). Ersätt dem eller hämta dem från en säker hemlighet.Steg 6: Konfigurera provisionering endast för Redmine
Den här vägen hanterar ärenden som endast kräver Redmine-åtkomst.
- Från utgången false från Check Dual Requests Count, fortsätt till Locate Redmine Requests och validera med Check Redmine Requests genom att använda
{{ $node['Locate Redmine Requests'].json.result.length }}Not Equals{{ 0 }}. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - Bearbeta posterna i Extract Email Redmine, och kontrollera sedan befintliga användare med Fetch Redmine User Info B och Verify Redmine User Exists B. Inloggningsuppgift krävs: anslut era
httpHeaderAuth-inloggningsuppgifter. - När ingen användare finns, skapa och tilldela med Create Redmine User B → Assign Redmine Group B (grupp
[22]). Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - Skicka användar- och kanalnotiser via Map Slack Member Id B → DM Redmine Account Created och Report Redmine Creation. Inloggningsuppgift krävs: anslut era
slackApi-inloggningsuppgifter.
Steg 7: Konfigurera provisionering endast för GitLab
Den här vägen hanterar ärenden som endast kräver GitLab-åtkomst.
- Från utgången false från Check Redmine Requests, gå vidare till Locate GitLab Requests och validera med Check GitLab Requests genom att använda
{{ $node['Locate GitLab Requests'].json.result.length }}Not Equals{{ 0 }}. Inloggningsuppgift krävs: anslut erahttpHeaderAuth-inloggningsuppgifter. - Parsa e-postadresser med Extract Email GitLab, skicka vidare via Pass Through B och skapa sedan konton med Create GitLab User B → Set GitLab Password B. Inloggningsuppgift krävs: anslut era
httpHeaderAuth-inloggningsuppgifter. - Mappa Slack-ID:n via Map Slack Member Id C och skicka notiser med DM GitLab Account Created B och Report GitLab Creation B. Inloggningsuppgift krävs: anslut era
slackApi-inloggningsuppgifter.
Steg 8: Testa och aktivera ert arbetsflöde
Verifiera skapande och notifieringar end-to-end innan ni slår på arbetsflödet.
- Använd test-URL:en i Incoming Odoo Webhook för att skicka en exempelbegäran och bekräfta att Return Webhook Reply svarar korrekt.
- Kör en manuell exekvering för att bekräfta att Query Odoo Account Requests returnerar resultat och routas via Validate Requests Found.
- Kontrollera Slack för direktmeddelanden från DM GitLab Account Created, DM Both Accounts Created, DM Redmine Account Created eller DM GitLab Account Created B, och verifiera kanalnotiser från motsvarande Report-noder.
- Verifiera att Redmine- och GitLab-användare skapas/uppdateras i respektive adminpanel baserat på efterfrågad väg.
- Aktivera arbetsflödet genom att slå om Active i n8n för produktionsanvändning.
Saker att se upp med
- Redmine-uppgifter kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera Redmine API-nyckeln och bekräfta att
/users.jsonär aktiverat först. - Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Slack-mappning av användare kan vara förvånansvärt skör när e-postadresser inte matchar eller profiler är ofullständiga. Om DM inte kommer fram, verifiera att e-postadressen i Odoo matchar Slack-katalogen.
Vanliga frågor
Oftast runt en timme om du redan har adminnycklar och endpoints redo.
Ja, men du vill ha någon som är bekväm med API-nycklar och behörigheter. Ingen kodning krävs, men du kommer att testa anrop och rätta små datamissmatchar (oftast e-postformat).
Ja. n8n har ett gratis self-hosted-alternativ och en gratis testperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in kostnader för Slack, Odoo, Redmine och GitLab (API-åtkomst ingår vanligtvis, men vissa organisationer begränsar admin-tokens).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och klarar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serverhantering.
Du kan byta ut HTTP-stegen ”Create Redmine User” och ”Create GitLab User” så att de matchar din organisations obligatoriska fält (regler för användarnamn, standardgrupper eller upplägg med enbart SSO). Vanliga anpassningar är att tilldela standardprojekt direkt efter skapande, ändra vem som får Slack-sammanfattningen (IT-kanal vs. HR-kanal) och lägga till ett loggningssteg i Google Sheets för revisionshistorik. Om du använder ett annat ärendehanteringsverktyg än Redmine kan du behålla Odoo-triggern och Slack-rapporteringen och bara ersätta Redmine-grenen.
Oftast beror det på att webbhooken inte triggas från Odoo eller att Odoo API-anropet saknar inloggningsuppgifter. Kontrollera på nytt Odoo-automationen som anropar n8n-webbhooken och bekräfta sedan att steget ”Query Odoo Account Requests” använder rätt bas-URL och autentiseringsmetod. Håll också utkik efter e-postfält som kommer igenom tomma; det kan få efterföljande ”kontrollera om användare finns”-anrop att se ut som att de misslyckas när de i själva verket får felaktig indata.
För de flesta små team klarar den onboardingvolymen utan någon särskild finjustering.
Ofta, ja. Det här arbetsflödet bygger på förgreningslogik (båda kontona vs. ett konto), ”kontrollera innan du skapar”-beteende och detaljerad Slack-rapportering, vilket kan bli klumpigt eller dyrt i verktyg som tar betalt per steg eller låser dig i rigida flöden. n8n gör också self-hosting realistiskt, vilket är viktigt om du onboardar i toppar och inte vill räkna varje körning. Zapier eller Make kan fortfarande fungera om du håller det enkelt, men när du lägger till deduplicering, felhantering och flera API-anrop brukar n8n vara det lugnare alternativet. Om du är osäker, prata med en automationsexpert och beskriv din onboardingvolym och dina säkerhetskrav.
Du sätter upp detta en gång, och sedan blir varje onboardingbegäran förutsägbar. Arbetsflödet hanterar de repetitiva kontrollerna och kontoskapandet så att ditt team kan fokusera på de delar av onboarding som faktiskt kräver människor.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.