Du försöker köra support i Slack, men kunderna fortsätter att skriva i WhatsApp. Så du sitter och copy-pastar, vidarebefordrar skärmdumpar och letar efter ”det där enda röstmeddelandet” när någon ber om sammanhang.
Den här WhatsApp Slack-integrationen träffar supportansvariga först, helt ärligt. Men ops-chefer som gör överlämningar och byråägare som jonglerar kundkommunikation känner av det också. Resultatet är enkelt: varje WhatsApp-konversation blir en privat Slack-tråd som teamet faktiskt kan samarbeta i.
Du sätter upp ett flöde som hämtar WhatsApp-meddelanden (inklusive filer) till Slack automatiskt och skickar Slack-svar tillbaka till rätt WhatsApp-kontakt. Strukturerade trådar. Snabbare svar. Mindre ”vänta, vem svarade?”
Så här fungerar automatiseringen
Här är hela flödet du kommer att sätta upp:
n8n Workflow Template: WhatsApp + Slack för delade supporttrådar
flowchart LR
subgraph sg0["WhatsApp Flow"]
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/whatsapp.svg' width='40' height='40' /></div><br/>WhatsApp Trigger"]
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/slack.svg' width='40' height='40' /></div><br/>Send Message in Channel"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Message Type", pos: "b", h: 48 }
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/whatsapp.svg' width='40' height='40' /></div><br/>get audio URL"]
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/whatsapp.svg' width='40' height='40' /></div><br/>get document URL"]
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/whatsapp.svg' width='40' height='40' /></div><br/>get image URL"]
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/slack.svg' width='40' height='40' /></div><br/>Create Channel"]
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/slack.svg' width='40' height='40' /></div><br/>get All Channels"]
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Channel by Name", 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/slack.svg' width='40' height='40' /></div><br/>upload media"]
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/>download media"]
n3 --> n1
n3 --> n4
n3 --> n6
n3 --> n5
n4 --> n11
n6 --> n11
n7 --> n8
n11 --> n10
n0 --> n7
n8 --> n9
n5 --> n11
n9 --> n3
end
subgraph sg1["Slack Flow"]
direction LR
n2["<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/>Slack Trigger"]
n12["<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/>Get Channel by ID"]
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Checking Message Type", pos: "b", h: 48 }
n14["<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/whatsapp.svg' width='40' height='40' /></div><br/>Send Message"]
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/>Get Media URL"]
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/>Download Media"]
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/whatsapp.svg' width='40' height='40' /></div><br/>Send Message1"]
n15 --> n16
n2 --> n12
n16 --> n17
n12 --> n13
n13 --> n15
n13 --> n14
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 n0,n2 trigger
class n3,n9,n13 decision
class n11,n16 api
classDef customIcon fill:none,stroke:none
class n0,n1,n4,n5,n6,n7,n8,n10,n11,n2,n12,n14,n15,n16,n17 customIcon
Varför det här spelar roll: supportkonversationer splittras mellan verktyg
WhatsApp är där kunderna är. Slack är där teamet jobbar. När de två världarna inte hänger ihop blir supporten ett rörigt stafettlopp. Någon ser WhatsApp-meddelandet, pingar i Slack, slänger in en halv skärmdump, glömmer filen, och sedan svarar en annan kollega utan hela bakgrunden. Multiplicera det med en stressig dag så får du missade detaljer, långsamma överlämningar och den där ”vi har redan svarat på det här”-frustrationen som dränerar teamet.
Det eskalerar snabbt. Här är hur det brukar skapa fel i verkligheten:
- Att copy-pasta WhatsApp-meddelanden till Slack stjäl cirka 5 minuter per kundtråd, och det blir värre när det finns bilagor.
- Filer som delas i WhatsApp (bilder, dokument, röstmeddelanden) försvinner i privata telefoner, vilket betyder att teamet inte kan söka eller hänvisa till dem senare.
- Två personer svarar parallellt eftersom det inte finns en gemensam tråd, och kunden blir förvirrad eller irriterad.
- Nya teammedlemmar kan inte se hela kontexten, så överlämningar blir en mini-onboarding varje gång.
Vad du bygger: tvåvägs WhatsApp-trådar i Slack
Det här flödet gör WhatsApp till en ytterdörr och Slack till den gemensamma arbetsytan bakom den. När en kund skickar ett WhatsApp-meddelande fångar n8n det direkt via en webhook-trigger. Flödet letar efter en matchande privat Slack-kanal som är namngiven efter kontakten (oftast telefonnumret). Om den inte finns ännu skapar det en, så att varje kund får sin egen dedikerade tråd. Sedan routas meddelandet efter typ: text går rakt in i Slack, medan bilder, ljud och dokument hämtas från WhatsApp, laddas ned säkert och laddas upp i samma Slack-kanal.
Svaren fungerar åt andra hållet också. När någon i teamet skriver i den Slack-kanalen lyssnar flödet efter nya Slack-meddelanden eller filuppladdningar, avgör om det är text eller en fil och skickar sedan tillbaka till WhatsApp till rätt kontakt (identifierad via Slack-kanalens namn). En gemensam plats att samarbeta på, medan kunden stannar i WhatsApp.
Det här bygger du
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du får cirka 30 WhatsApp-meddelanden per dag, och att runt 10 av dem innehåller en fil (foto, PDF eller röstmeddelande). Manuellt kan det ta 2 minuter att logga varje meddelande i Slack, och filhantering kan ta ytterligare 5 minuter. Det är ungefär 2 timmar rutinjobb en vanlig dag. Med den här automatiseringen är ”jobbet” i princip bara att svara i Slack; meddelanden synkar på sekunder och bilagor dyker upp utan att någon behöver ladda ned och ladda upp dem igen.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- WhatsApp Cloud API för att ta emot och skicka meddelanden
- Slack för att skapa kanaler och posta uppladdningar
- WhatsApp access token (från Meta Developer-dashboarden)
Kunskapsnivå: Medel. Du klistrar in API-tokens, testar webhooks och mappar några fält, men du skriver ingen kod.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
En kund skriver till dig på WhatsApp. Flödet startar när WhatsApp-triggern tar emot ett nytt inkommande meddelande via webhook från WhatsApp Cloud API.
En privat Slack-kanal hittas eller skapas. n8n hämtar dina befintliga Slack-kanaler, filtrerar på avsändarens nummer och skapar en ny privat kanal om det inte finns någon ännu, så att varje kontakt får ett dedikerat utrymme.
Meddelandet routas efter typ. En Switch-nod kontrollerar om det är text, en bild, ett ljudmeddelande eller ett dokument. Text postas direkt i Slack. För media begär flödet medielänken från WhatsApp, laddar ned filen via en HTTP-förfrågan och laddar sedan upp den i samma Slack-kanal.
Teamet svarar i Slack och det går tillbaka till WhatsApp. En Slack-trigger lyssnar efter nya meddelanden och filuppladdningar. En annan kontroll av meddelandetyp avgör om den ska skicka ett WhatsApp-textmeddelande eller ladda ned Slack-filen och skicka den som WhatsApp-media.
Du kan enkelt ändra reglerna för kanalnamn och routning så att de matchar hur teamet jobbar (till exempel namnge kanaler efter kundnamn i stället för telefonnummer). Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera WhatsApp Incoming Trigger
Konfigurera arbetsflödets startpunkt så att inkommande WhatsApp-meddelanden kan starta reläet.
- Lägg till noden WhatsApp Incoming Trigger som din trigger.
- Autentisering krävs: Anslut era
whatsAppTriggerApi-inloggningsuppgifter i WhatsApp Incoming Trigger. - Säkerställ att updates inkluderar
messagesså att meddelandehändelser fångas upp.
Steg 2: Anslut Slack- och WhatsApp-tjänster
Auktorisera Slack- och WhatsApp-noder som publicerar meddelanden, hanterar kanaler och skickar media.
- Autentisering krävs: Anslut era
slackApi-inloggningsuppgifter i Post to Slack Channel, Slack Event Listener, Generate Slack Channel, Retrieve All Channels, Retrieve Channel Details, Fetch Slack File Link och Upload File to Slack. - Autentisering krävs: Anslut era
whatsAppApi-inloggningsuppgifter i Fetch Audio Link, Fetch Image Link, Fetch Document Link, Send WhatsApp Text och Send WhatsApp Media.
Steg 3: Sätt upp skapande av kanaler och routning av meddelanden
Skapa privata Slack-kanaler per WhatsApp-avsändare och routa meddelandetyper genom rätt gren.
- I Generate Slack Channel ställer ni in resource till
channel, channelVisibility tillprivateoch channelId till={{ $('WhatsApp Incoming Trigger').item.json.messages[0].from }}. - I Retrieve All Channels ställer ni in resource till
channel, operation tillgetAlloch returnAll tilltrue. Lägg till filters → types medprivate_channel. - I Filter Channels by Name matchar ni leftValue
={{ $json.name }}mot rightValue={{ $('WhatsApp Incoming Trigger').item.json.messages[0].from }}. - I Route Message Kind behåller ni reglerna som mappar meddelandets type till utgångarna
text,audio,imageochdocumentmed={{ $('WhatsApp Incoming Trigger').item.json.messages[0].type }}. - I Post to Slack Channel ställer ni in text till
={{ $('WhatsApp Incoming Trigger').item.json.messages[0].text.body }}och channelId till={{ $json.id }}.
Steg 4: Konfigurera uppladdning av WhatsApp-media till Slack
Hämta WhatsApp-media-URL:er, ladda ner filerna och ladda upp dem till rätt Slack-kanal.
- I Fetch Audio Link ställer ni in resource till
media, operation tillmediaUrlGetoch mediaGetId till={{ $('WhatsApp Incoming Trigger').item.json.messages[0].audio.id }}. - I Fetch Image Link ställer ni in mediaGetId till
={{ $('WhatsApp Incoming Trigger').item.json.messages[0].image.id }}. - I Fetch Document Link ställer ni in mediaGetId till
={{ $('WhatsApp Incoming Trigger').item.json.messages[0].document.id }}. - I Download Media File ställer ni in url till
={{ $json.url }}, authentication tillgenericCredentialTypeoch genericAuthType tillhttpHeaderAuth. - Autentisering krävs: Anslut era
httpBearerAuth- ochhttpHeaderAuth-inloggningsuppgifter i Download Media File. - I Upload File to Slack behåller ni resource som
fileoch ställer in options.channelId till={{ $('Route Message Kind').item.json.id }}.
Steg 5: Konfigurera relä från Slack till WhatsApp
Lyssna efter Slack-meddelanden, mappa dem tillbaka till WhatsApp-mottagare och skicka text eller media därefter.
- I Slack Event Listener låter ni watchWorkspace vara aktiverat för att fånga meddelanden över flera kanaler.
- I Retrieve Channel Details ställer ni in resource till
channel, operation tillgetoch channelId till={{ $json.channel }}. - I Evaluate Slack Message behåller ni reglerna som routar filbilagor med
={{ $('Slack Event Listener').item.json.files }}och text med={{ $('Slack Event Listener').item.json.text }}. - I Fetch Slack File Link ställer ni in fileId till
={{ $('Slack Event Listener').item.json.files[0].id }}, resource tillfileoch operation tillget. - I Download Slack File ställer ni in url till
={{ $json.url_private_download }}och behåller genericAuthType somhttpHeaderAuth. Autentisering krävs: Anslut erahttpHeaderAuth-inloggningsuppgifter. - I Send WhatsApp Text ställer ni in textBody till
={{ $('Slack Event Listener').item.json.blocks[0].elements[0].elements[0].text }}, recipientPhoneNumber till={{ $('Retrieve Channel Details').item.json.name }}och phoneNumberId till=[YOUR_ID]. - I Send WhatsApp Media ställer ni in mediaPath till
useMedian8n, messageType tilldocument, recipientPhoneNumber till={{ $('Retrieve Channel Details').item.json.name }}och phoneNumberId till=[YOUR_ID].
=[YOUR_ID] i Send WhatsApp Text och Send WhatsApp Media med ert faktiska WhatsApp-telefonnummer-ID, annars skickas inga meddelanden.Steg 6: Testa och aktivera ert arbetsflöde
Verifiera båda riktningarna i reläet och aktivera arbetsflödet för produktionsanvändning.
- Klicka på Test workflow och skicka en WhatsApp-text, bild, ljud och ett dokument för att verifiera varje gren i Route Message Kind.
- Bekräfta att Slack-kanalen skapas av Generate Slack Channel och att meddelanden/filer visas i Slack via Post to Slack Channel eller Upload File to Slack.
- Skicka ett Slack-meddelande och en fil till kanalen och verifiera att Send WhatsApp Text eller Send WhatsApp Media levererar till rätt WhatsApp-mottagare.
- När testerna lyckas, slå på arbetsflödet Active för kontinuerlig drift.
Felsökningstips
- Slack-uppgifter kan gå ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera posten Credentials för Slack i n8n och bekräfta att den fortfarande har åtkomst för att skapa privata kanaler och ladda upp filer.
- Om du använder HTTP-nedladdningar för media varierar processningstiderna och vissa fillänkar är kortlivade. Om efterföljande uppladdningsnoder misslyckas, försök igen snabbt och bekräfta att WhatsApp-media-URL:en eller Slack-fil-URL:en fortfarande är giltig.
- Matchning på kanalnamn är hård. Om ditt flöde förväntar sig att Slack-kanalens namn är lika med WhatsApp-telefonnumret kommer all manuell omdöpning att göra att svar tillbaka till WhatsApp slutar fungera.
Snabba svar
Cirka 30–60 minuter om din WhatsApp Cloud API och dina Slack-appar är redo.
Nej. Du kopplar ihop konton och mappar några fält i n8n. Logiken är redan inbyggd i flödesnoderna.
Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för användning av WhatsApp Cloud API (oftast små om du inte kör väldigt hög volym).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du troligen göra. Du kan ändra hur kanaler namnges genom att justera Slack-logiken för ”skapa/hämta kanal” (noderna som hämtar kanaler, filtrerar på namn och skapar Slack-kanalen). Vanliga justeringar är att först posta i en gemensam triage-kanal, lägga till taggar som ”fakturering” vs ”teknik” eller routa VIP-kontakter till ett annat Slack-workspace.
Oftast handlar det om behörigheter. Slack-appen/token behöver åtkomst för att skapa privata kanaler, läsa kanalhändelser, posta meddelanden och ladda upp filer. Om någon installerade om appen eller ändrade scopes, uppdatera Slack-credentials i n8n och testa genom att skapa en kanal och ladda upp en liten fil.
Det beror mer på din hosting och Slack/WhatsApp:s rate limits än på själva flödet.
För tvåvägskommunikation med bilagor är n8n ofta det mer praktiska valet. Du kan förgrena på meddelandetyp, ladda ned och ladda upp filer igen och hålla all routning på ett ställe utan att behöva sy ihop många separata zaps/scenarier. Egen drift är en stor grej om du förväntar dig högre volym eftersom du inte betalar per litet steg. Zapier eller Make kan fortfarande funka om du bara behöver enkelriktad vidarebefordran av text. Om du vill ha hjälp att välja (eller om du behöver härda detta för ett riktigt supportteam), prata med en automationsexpert.
När det här är live slutar WhatsApp att vara en privat inkorg och börjar fungera som en riktig delad supportkö i Slack. Sätt upp det en gång, och låt flödet bära kontexten åt dig.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.