Slack blir en supportdesk i samma stund som någon behöver en siffra från Snowflake. Du frågar efter ”intäkter per kanal”, någon svarar med en skärmdump, och sedan lägger ni nästa timme på att diskutera vad ”kanal” ens betyder.
Den här Snowflake Slack-automationen träffar dataanalytiker först (eftersom de blir pingade hela dagen). Men marknadsansvariga och ops-teamet märker det också, eftersom väntan på svar bromsar beslut och skapar röriga ”skuggmått”.
Du sätter upp ett n8n-flöde som låter folk ställa frågor i Slack, kör säker SQL i Snowflake och returnerar antingen ett korrekt formaterat svar eller en delbar rapportlänk med filter, diagram och CSV-export.
Så fungerar automatiseringen
Här är hela workflowet du kommer att sätta upp:
n8n Workflow Template: Snowflake till slack: svar och rapportlänkar vid begäran
flowchart LR
subgraph sg0["When chat message received Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When chat message received", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "AI Agent1", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n3@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "DB Schema1", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Get table definition", pos: "b", h: 48 }
n12@{ icon: "mdi:wrench", form: "rounded", label: "Retrieve Data", pos: "b", h: 48 }
n4 -.-> n1
n12 -.-> n1
n3 -.-> n1
n2 -.-> n1
n5 -.-> n1
n0 --> n1
end
subgraph sg1["When Executed by Another Workflow Flow"]
direction LR
n11@{ icon: "mdi:play-circle", form: "rounded", label: "When Executed by Another Wor..", 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/snowflake.svg' width='40' height='40' /></div><br/>Execute SQL"]
n14@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Data", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If Count100", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Link to Report", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return Data", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Return Error", pos: "b", h: 48 }
n13 --> n14
n13 --> n18
n15 --> n16
n15 --> n17
n14 --> n15
n11 --> n13
end
subgraph sg2["Flow 3"]
direction LR
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/>Webhook"]
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set HTML", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook"]
n9["<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/snowflake.svg' width='40' height='40' /></div><br/>Snowflake1"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Aggregate1", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Error page", pos: "b", h: 48 }
n6 --> n9
n7 --> n8
n7 --> n19
n10 --> n7
n19 --> n8
n9 --> n10
n9 --> n19
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,n11 trigger
class n1 ai
class n2 aiModel
class n12 ai
class n3 ai
class n15 decision
class n6,n8 api
classDef customIcon fill:none,stroke:none
class n13,n6,n8,n9 customIcon
Varför detta spelar roll: att få svar från Snowflake ska inte vara en flaskhals
De flesta team har inte ett ”dataproblem”. De har ett ”dataåtkomstproblem”. Informationen finns i Snowflake, men vägen dit är långsam: någon skriver en SQL-fråga, validerar schemat, kör om den eftersom ett kolumnnamn ändrades, och klistrar sedan in en bit i Slack som ingen kan återskapa senare. Och när resultatmängden är stor får folk antingen en värdelös vägg av rader eller så ber de om en export till kalkylark, vilket blir ännu en fil som flyter runt utan sammanhang.
Friktionen byggs på. Inte för att en enskild förfrågan är svår, utan för att avbrotten aldrig tar slut.
- Analytiker tappar stora delar av dagen på ”snabba frågor” som ändå kräver schemakontroller och justeringar i SQL.
- Kollegor som inte kan SQL får inkonsekventa svar, eftersom varje person formulerar frågan olika och ingen ser den exakta frågan som användes.
- Stora utskrifter skapar ett nytt problem, eftersom det är meningslöst att klistra in rader i chatten och filexport leder till versionsförvirring.
- AI-chattverktyg kan bli dyra eller ge fel svar om du matar dem med stora datamängder i stället för att låta Snowflake göra grovjobbet.
Vad du bygger: fråga i Slack, fråga Snowflake, dela en rapportlänk
Det här workflowet skapar en konversationsassistent som pratar ”affärsfråga” på ena sidan och ”säker Snowflake-SQL” på den andra. En användare ställer en fråga i chatten (som ”nya kunder per vecka” eller ”topp-produkter senaste 30 dagarna”). AI-agenten kontrollerar först det aktuella Snowflake-schemat och tabelldefinitionerna, och genererar sedan en SQL-fråga som faktiskt matchar din databasstruktur. n8n kör frågan med dina Snowflake-uppgifter, aggregerar resultaten och avgör vad som ska returneras baserat på storlek. Små resultat kommer tillbaka som ett korrekt formaterat svarspaket. Större resultat blir en säker rapportlänk som öppnar en interaktiv sida med sidindelning, filter, diagram och CSV-export.
Flödet startar med att chatttriggern skickar din fråga till AI-agenten. Snowflake gör frågningen, n8n sköter orkestreringen, och slutresultatet blir antingen ett omedelbart svar eller en länk till en rapportsida som du kan klistra in i en tråd så att vem som helst kan öppna den.
Det här bygger du
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att teamet ber om 10 Snowflake-utdrag i veckan i Slack. Manuellt tar varje förfrågan oftast cirka 15 minuter: reda ut definitionen, skriva SQL, köra om den och sedan klistra in resultatet (alltså cirka 2,5 timmar). Med det här workflowet skickar den som frågar ett enda meddelande, agenten genererar SQL utifrån det aktuella schemat och n8n returnerar antingen ett kort svar eller en rapportlänk; din ”analystid” blir mest stickprovskontroller, kanske ett par minuter per förfrågan. Det är ungefär 2 timmar tillbaka de flesta veckor, utan att anställa eller ändra din warehouse-setup.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Snowflake för att köra frågor och returnera resultat.
- Slack för att samla in frågor och leverera svar.
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard).
Svårighetsgrad: Medel. Du behöver vara bekväm med att lägga in autentiseringsuppgifter, redigera några variabler (databas-/schemanamn) och testa webhooks.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
En fråga kommer in via chatten. Workflowet startar med en trigger för chattmeddelanden som fångar vad användaren frågade, plus eventuell sessionskontext från minnet.
Assistenten validerar din Snowflake-struktur innan den skriver SQL. I stället för att gissa tabellnamn anropar agenten hjälptyg för att hämta databasschemat och tabelldefinitioner och använder sedan dem för att generera en fråga som passar det som faktiskt finns.
n8n kör SQL och bedömer svarets storlek. En Snowflake-nod kör kommandot, resultaten aggregeras och en ”if”-kontroll jämför antal rader mot din gräns (100 rader som standard) för att välja bästa utdataformat.
Du får antingen ett svarspaket eller en rapportlänk. Mindre utskrifter returneras direkt. Större skapar en URL-kodad rapportlänk som triggar en webhook-baserad rapportvisare, som kör om SQL:en för färska data och renderar en interaktiv HTML-rapport med sidindelning, filter, diagram och CSV-export.
Du kan enkelt justera radgränsen för att styra när workflowet returnerar en länk i stället för råa resultat, utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera chatt-triggern
Det här arbetsflödet startar när ett chattmeddelande tas emot, vilket drar igång AI-assistentflödet.
- Lägg till och öppna Chat Message Trigger.
- Behåll standardinställningarna i Chat Message Trigger (den använder den inbyggda chatt-webhooken).
- Koppla Chat Message Trigger till AI Assistant Core.
Steg 2: Anslut Snowflake
Snowflake-inloggningsuppgifter krävs för alla SQL-verktyg och körningar som används i det här arbetsflödet.
- Öppna Fetch DB Schema och ställ in Query till
SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema = 'TPCH_SF1';. - Credential Required: Anslut era snowflake-uppgifter i Fetch DB Schema.
- Öppna Load Table Definition och ställ in Query till
SELECT column_name, data_type FROM SNOWFLAKE_SAMPLE_DATA.information_schema.columns WHERE table_name = '{{ $fromAI("table_name") }}' AND table_schema = 'TPCH_SF1' ORDER BY ordinal_position;. - Credential Required: Anslut era snowflake-uppgifter i Load Table Definition.
- Öppna Run SQL Command och ställ in Query till
{{ $json.query }}med Operation inställd påexecuteQuery. - Credential Required: Anslut era snowflake-uppgifter i Run SQL Command.
- Öppna Snowflake Query Runner och ställ in Query till
{{ $json.query.sql }}med Operation inställd påexecuteQuery. - Credential Required: Anslut era snowflake-uppgifter i Snowflake Query Runner.
Steg 3: Konfigurera AI-assistenten och verktygen
AI-assistenten genererar SQL med hjälp av schemaverktyg och behåller chattkontext med minne.
- Öppna AI Assistant Core och bekräfta att System Message innehåller instruktionerna för Snowflake SQL-assistenten.
- Öppna OpenAI Chat Engine och välj modellen
gpt-4o-mini. - Credential Required: Anslut era openAiApi-uppgifter i OpenAI Chat Engine.
- Öppna Session Memory Buffer och ställ in Session Key till
{{ $('Chat Message Trigger').item.json.sessionId }}med Session ID Type inställd påcustomKey. - Öppna Query Generator Tool och ställ in Workflow Inputs → query till
{{ $fromAI("sql_query","SQL query") }}. - Säkerställ att Fetch DB Schema, Load Table Definition och Query Generator Tool är anslutna som AI-verktyg till AI Assistant Core.
Credential Required: För AI-undernoder som Session Memory Buffer, Fetch DB Schema, Load Table Definition och Query Generator Tool, lägg till inloggningsuppgifter på parent-noden AI Assistant Core där det är tillämpligt. OpenAI-uppgifter ställs in på OpenAI Chat Engine.
Steg 4: Konfigurera rapportering och webhook-utdata
Den här delen renderar frågeresultat till en HTML-dashboard och returnerar den via en webhook.
- Öppna Incoming Webhook Endpoint och ställ in Path till
87893585-d157-468d-a9af-7238784e814cmed Response Mode inställd påresponseNode. - Bekräfta flödet Incoming Webhook Endpoint → Snowflake Query Runner → Aggregate Result Set → Build HTML Output → Send Webhook Reply.
- Öppna Build HTML Output och säkerställ att den tilldelar html till den långa HTML-mallen, inklusive
{{ JSON.stringify($json.data) }}i script-delen. - Öppna Send Webhook Reply och ställ in Respond With till
textoch Response Body till{{ $json.html }}.
⚠️ Vanlig fallgrop: Om webhook-sökvägen i Create Report Link inte matchar Incoming Webhook Endpoint kommer rapportlänken att misslyckas. Håll sökvägen konsekvent.
Steg 5: Konfigurera dataaggregering och villkorlig utdata
Dessa noder aggregerar frågeresultat, gör en kontroll av antal rader och returnerar antingen en länk eller rådata.
- Öppna Aggregate Query Data och ställ in Aggregate till
aggregateAllItemData. - Öppna Check Row Count och ställ in villkoret leftValue till
{{ $json.data }}med operatornlengthGtoch rightValue till100. - Öppna Create Report Link och ställ in JSON Output till
{"output":"[Link to report](https://n8n.lowcoding.dev/webhook/87893585-d157-468d-a9af-7238784e814c?sql={{ $('Subworkflow Execution Trigger').item.json.query.urlEncode() }})"}. - Öppna Return Data Payload och ställ in JSON Output till
{{ $json }}. - Öppna Return Error Payload och ställ in JSON Output till
{{ $json }}. - Verifiera flödet Aggregate Query Data → Check Row Count → Create Report Link eller Return Data Payload.
Steg 6: Testa och aktivera ert arbetsflöde
Kör ett fullständigt test för att validera chattinmatning, AI-generering av frågor och rendering av Snowflake-utdata.
- Klicka på Test workflow och skicka ett chattmeddelande via Chat Message Trigger där ni ber om en Snowflake-rapport.
- Bekräfta att AI Assistant Core använder schemaverktyg (Fetch DB Schema och Load Table Definition) innan den genererar en fråga.
- Verifiera att Run SQL Command och Snowflake Query Runner returnerar data utan fel.
- Öppna svaret från Send Webhook Reply för att bekräfta att HTML-dashboarden renderas korrekt.
- Om resultatuppsättningen är stor, bekräfta att Create Report Link ger en fungerande länk till Incoming Webhook Endpoint.
- När ni är nöjda, klicka på Activate för att aktivera arbetsflödet i produktion.
Felsökningstips
- Snowflake-autentiseringsuppgifter kan gå ut, roteras eller sluta fungera när ett lösenord ändras. Om det börjar skapa fel, kontrollera Snowflake-uppgifterna i n8n och testa anslutningen igen först.
- Om du använder Wait-liknande timing på andra ställen eller förlitar dig på extern rapportrendering i webbläsaren varierar processtiderna. Höj eventuella vänt- eller timeout-inställningar om nedströmsnoder fallerar på tomma svar.
- OpenAI-prompter som är ”generiska” låter generiska. Lägg in dina definitioner (”vad räknas som intäkt”, ”hur hanteras återbetalningar”, namngivningskonventioner) tidigt, annars kommer du att städa upp tolkningar för alltid.
Snabba svar
Cirka 45 minuter om dina Snowflake- och OpenAI-uppgifter är klara.
Nej. Du kopplar konton, sätter autentiseringsuppgifter och redigerar några konfigurationsfält som databas- och schemanamn.
Ja. n8n har ett gratis alternativ för egen hosting 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å räkna in kostnader för OpenAI API (ofta några cent per fråga, beroende på prompter och användning).
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 bör du. De flesta team justerar tröskeln i ”Check Row Count”, anpassar vad som ingår i ”Return Data Payload” och skräddarsyr rapportsidan som byggs i ”Build HTML Output” så att den matchar ert språk för nyckeltal. Du kan också byta inställningar för OpenAI Chat Model för att tvinga fram striktare SQL-regler och uppdatera verktygen för schema-/tabelldefinitioner när du lägger till nya tabeller.
Oftast är det autentiseringsuppgifter. Dubbelkolla Snowflake-konto/host, warehouse, databas, schema, användarnamn och lösenord i n8n och kör sedan ett snabbt anslutningstest. Om det fungerade igår men fallerar i dag är ett roterat lösenord den vanligaste orsaken. Mer sällan handlar det om behörighetsomfattning (användaren ser inte schemat agenten refererar till) eller Snowflake-nätverksrestriktioner som blockerar din n8n-host.
Mycket, eftersom det främst begränsas av dina n8n-körningar och Snowflakes frågeprestanda. Med n8n Cloud Starter har du vanligtvis tillräckligt med månatliga körningar för tidig användning i teamet, och högre nivåer klarar mer. Vid egen hosting finns inget tak för körningar (det beror på din server). Workflowet skyddar dig också från enorma chattsvar genom att växla till en rapportlänk när resultaten överstiger radgränsen.
För det här användningsfallet: oftast ja. Du behöver förgreningslogik (kort svar vs. rapportlänk), schema-medvetna agentverktyg och webhooks som returnerar anpassad HTML, och n8n är helt enkelt mer bekvämt för den typen av workflow. Zapier eller Make kan fungera för en grundläggande ”ställ fråga, kör query, returnera ett litet svar”, men det blir klumpigt när du lägger till säkerhetskontroller, minne och en komplett rapportvisare. Om du är osäker, prata med en automationsexpert och beskriv din datavolym och dina rapportbehov.
Du behöver inte fler dashboards. Du behöver snabbare och mer konsekventa svar där arbetet redan sker, och det här workflowet levererar exakt 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.