Dina Bitrix24-chattar går snabbt, men svaren är begravda. En kund ställer en ”enkel” fråga och plötsligt gräver du i PDF:er, gamla trådar och delade enheter medan samtalet kallnar.
Det här drabbar supportledare först, ärligt talat, eftersom det är de som städar upp i eftersläpningen. Men driftsansvariga och säljteam känner också av det när produktdetaljer är utspridda. En Bitrix24 Gemini-chatbot gör om dina PDF:er till omedelbara, konsekventa svar direkt i Open Lines.
Det här arbetsflödet visar hur du routar Bitrix24-händelser, bearbetar PDF:er till en sökbar kunskapsbas och svarar med Google Gemini med rätt dokumentkontext (inte gissningar).
Så fungerar automationen
Hela n8n-arbetsflödet, från trigger till slutligt resultat:
n8n Workflow Template: Bitrix24 + Google Gemini: direkta svar från pdf
flowchart LR
subgraph sg0["Vector Store Retriev 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/webhook.dark.svg' width='40' height='40' /></div><br/>Bitrix24 Handler"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Credentials", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Token", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route Event", pos: "b", h: 48 }
n4@{ icon: "mdi:code-braces", form: "rounded", label: "Process Message", pos: "b", h: 48 }
n5@{ icon: "mdi:code-braces", form: "rounded", label: "Process Join", pos: "b", h: 48 }
n6@{ icon: "mdi:code-braces", form: "rounded", label: "Process Install", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Register Bot"]
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/>Send Message"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Send Join Message"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Process Delete", pos: "b", h: 48 }
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/webhook.dark.svg' width='40' height='40' /></div><br/>Success Response"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Error Response"]
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/merge.svg' width='40' height='40' /></div><br/>Merge parameters for Subwork.."]
n26@{ icon: "mdi:cube-outline", form: "rounded", label: "Vector Store Retriever", pos: "b", h: 48 }
n27@{ icon: "mdi:robot", form: "rounded", label: "Question and Answer Chain", pos: "b", h: 48 }
n28@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare output parameters", pos: "b", h: 48 }
n29@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings Ollama1", pos: "b", h: 48 }
n30@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n31@{ icon: "mdi:cube-outline", form: "rounded", label: "Qdrant Vector Store1", pos: "b", h: 48 }
n32@{ icon: "mdi:cog", form: "rounded", label: "Execute subworkflow", pos: "b", h: 48 }
n1 --> n2
n1 --> n13
n3 --> n4
n3 --> n5
n3 --> n6
n3 --> n10
n5 --> n9
n7 --> n11
n7 --> n13
n8 --> n11
n10 --> n11
n2 --> n3
n2 --> n12
n6 --> n7
n4 --> n27
n0 --> n1
n9 --> n11
n29 -.-> n31
n32 --> n11
n31 -.-> n26
n26 -.-> n27
n30 -.-> n27
n28 --> n8
n27 --> n28
n13 --> n32
end
subgraph sg1["Execute Workflow Flow"]
direction LR
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get a list of available stor.."]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get a list of List of Files .."]
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/>Get a list of Folders files"]
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/>Download file"]
n18@{ icon: "mdi:robot", form: "rounded", label: "Default Data Loader", pos: "b", h: 48 }
n19@{ icon: "mdi:robot", form: "rounded", label: "Recursive Character Text Spl..", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out folder files and f..", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter for files", pos: "b", h: 48 }
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/>Move files to Vector stored .."]
n23@{ icon: "mdi:play-circle", form: "rounded", label: "Execute Workflow Trigger", pos: "b", h: 48 }
n24@{ icon: "mdi:cube-outline", form: "rounded", label: "Qdrant Vector Store", pos: "b", h: 48 }
n25@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings Ollama", pos: "b", h: 48 }
n17 --> n22
n17 --> n24
n21 --> n17
n25 -.-> n24
n18 -.-> n24
n23 --> n14
n16 --> n20
n14 --> n15
n19 -.-> n18
n20 --> n21
n15 --> n16
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 n23 trigger
class n27,n18,n19 ai
class n30 aiModel
class n26,n31,n24 ai
class n29,n25 ai
class n2,n3,n21 decision
class n0,n7,n8,n9,n11,n12,n14,n15,n16,n17,n22 api
class n4,n5,n6 code
classDef customIcon fill:none,stroke:none
class n0,n7,n8,n9,n11,n12,n13,n14,n15,n16,n17,n22 customIcon
Problemet: Bitrix24-chattar kan inte ”komma ihåg” dina PDF:er
De flesta team har redan svaren. De sitter bara fast i PDF:er: policydokument, onboarding-guider, prislistor, funktionslistor, interna SOP:er. Så när en kund ställer samma fråga för tionde gången måste någon ändå söka, skumläsa, kopiera, klistra in och sedan skriva om det i en vänlig ton. Gör du det hela dagen blir det osynligt arbete som dränerar fokus. Ännu värre: två agenter svarar olika på samma fråga, vilket skapar förvirring och eskaleringar du aldrig behövde.
Det eskalerar snabbt. Här är var det fallerar i verkligheten:
- En enda ”snabb kontroll” i en PDF kan bli 10 minuter av skanning och tvekan.
- Kunskapen blir inaktuell eftersom en uppdatering i ett dokument inte uppdaterar vad agenter faktiskt säger i chatten.
- Nyanställda behöver veckor för att lära sig var svaren finns, så de eskalerar i stället för att svara.
- Konsekvensen försämras, vilket gör att kunder ställer följdfrågor som teamet kunde ha förebyggt.
Lösningen: svara i Bitrix24-chattar utifrån PDF:er med Gemini + Qdrant
Det här n8n-arbetsflödet gör om ditt PDF-bibliotek till något som din Bitrix24 Open Lines-bot faktiskt kan använda. När Bitrix24 skickar en inkommande webhook-händelse (till exempel ett nytt chattmeddelande) validerar arbetsflödet begäran, plockar ut användarens fråga och söker i dina indexerade dokument efter de mest relevanta avsnitten. Sedan genererar Google Gemini ett svar baserat på det hämtade innehållet, så svaret förankras i dina dokument. Till sist formaterar n8n svars-payloaden och postar den tillbaka till samma Bitrix24-konversation. Om boten inte hittar tillräckligt bra kontext kan den falla tillbaka till ett säkrare svar i stället för att hitta på.
Bakom kulisserna finns också en dokumentpipeline. PDF:er läses in, delas upp i mindre chunkar, konverteras till vektorinbäddningar med Ollama och lagras i Qdrant så att framtida sökningar går snabbt och semantiskt (vilket betyder att den kan matcha avsikt, inte bara nyckelord).
Det du får: automation vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här kan det se ut
Säg att ditt team får 30 ”var hittar jag / hur gör jag”-frågor per dag i Bitrix24. Manuellt, om varje fråga tar cirka 5 minuter att hitta rätt PDF och skriva ett korrekt formaterat svar, blir det ungefär 2,5 timmar agenttid per dag. Med det här arbetsflödet söker agenten inte alls: frågan träffar webhooken, hämtningen körs och Gemini skriver ett utkast till svar på under en minut. Du granskar fortfarande specialfall, men de flesta rutinfrågor slutar stjäla din förmiddag.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Bitrix24 för att ta emot och skicka Open Lines-meddelanden.
- Google Gemini API för att generera förankrade chattsvar.
- Qdrant-uppgifter (hämta dem från din Qdrant Cloud- eller egenhostade dashboard).
Kunskapsnivå: Medel. Du kopplar ihop några tjänster, klistrar in nycklar på ett säkert sätt och testar webhook-händelser i Bitrix24.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Bitrix24 triggar arbetsflödet. En Bitrix24 Open Lines-händelse träffar n8n-webhooken. Arbetsflödet sätter auth-variabler och kontrollerar app-token så att slumpmässiga förfrågningar inte går igenom.
Händelser routas till rätt hanterare. Installations- och anslutningshändelser får en egen väg (registrera boten, skicka ett välkomstsvar). Händelser för nya meddelanden går till logiken för att ”transformera payload” så att frågan och kontexten blir strukturerad och konsekvent.
Hämtningen hittar rätt dokumentchunkar. Dina PDF:er förbehandlas med en dokumentladdare och en rekursiv text-splitter, sedan skapas inbäddningar med Ollama och lagras i Qdrant. När en användare frågar något hämtar retrievern de mest relevanta chunkarna och skickar dem in i Retrieval QA-kedjan.
Gemini skriver svaret och Bitrix24 tar emot det. Google Gemini genererar svaret i naturligt språk baserat på hämtade avsnitt, n8n formaterar svars-payloaden och arbetsflödet skickar tillbaka svaret till chatttråden.
Du kan enkelt ändra mappen för kunskapsbasen och svarsstilen så att den matchar er supportton och policy. 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 webhooken som Bitrix24 kommer att anropa för alla botthändelser och meddelanden.
- Lägg till och öppna Inbound Bitrix Webhook.
- Ställ in HTTP Method på
POST. - Ställ in Path på
bitrix24/openchannel-rag-bothandler.php. - Ställ in Response Mode på
responseNodeså att svar skickas av Return Success Reply eller Return Error Reply.
Steg 2: Koppla Bitrix auth-data och validera tokens
Normalisera inkommande auth-värden och validera sedan applikationstoken innan ni routar händelser.
- Öppna Set Auth Variables och lägg till följande tilldelningar:
- Ställ in CLIENT_ID på
[YOUR_ID]och CLIENT_SECRET på[CONFIGURE_YOUR_API_KEY]. - Ställ in application_token på
={{ $json.body['auth[application_token]'] }}. - Ställ in domain på
={{ $json.body['auth[domain]'] }}och access_token på={{ $json.body['auth[access_token]'] }}. - Ställ in storageName på
Shared driveoch folderName påOpen line chat bot documents. - I Verify App Token, säkerställ att det första villkoret jämför
={{ $json.CLIENT_ID }}med={{ $json.application_token }}. - Bekräfta exekveringsflödet: Set Auth Variables skickar output till både Verify App Token och Combine Subflow Params parallellt.
[YOUR_ID], [CONFIGURE_YOUR_API_KEY] och [YOUR_EMAIL] innan ni testar, annars kommer Bitrix att neka installation och auth-kontroller.Steg 3: Routa händelser och transformera inkommande meddelanden
Förgrena på händelsetyp, transformera meddelandepayloads och hantera flöden för install/join/delete.
- I Event Router, verifiera reglerna för
ONIMBOTMESSAGEADD,ONIMBOTJOINCHAT,ONAPPINSTALLochONIMBOTDELETEmed={{ $json.body.event }}. - Öppna Transform Message Payload och behåll den medföljande funktionskoden för att extrahera meddelandedata och auth.
- Öppna Handle Join Event och behåll funktionen som bygger ITR-meny-meddelandet.
- Öppna Handle Install Event och verifiera att
handler_back_urlsätts frånitem.json.webhookUrl. - Bekräfta att ogiltiga tokens går till Return Error Reply med Response Body satt till
{{ "result": false, "error": "Invalid application token" }}.
Steg 4: Konfigurera underflödet för dokumentinläsning och vektorindexering
Detta underflöde hittar filer i Bitrix-lagring, laddar ner dem och lägger in embeddings i Qdrant.
- I Run Sub-Workflow (Configure Required), ställ in Workflow ID till det underflöde ni vill köra (för närvarande tomt).
- I Retrieve Storage List, behåll URL som
=https://{{ $json.domain }}/rest/disk.storage.getlist.json?auth={{ $json.access_token }}och JSON body-filtret förENTITY_TYPEoch%NAME. - I Retrieve Folder List, behåll URL som refererar
{{ $('Subflow Trigger Start').item.json.domain }}och JSON body som använder{{ $json.result[0].ID }}och{{ $('Subflow Trigger Start').item.json.folderName }}. - I Retrieve Folder Items, behåll id satt till
={{ $json.result[0].ID }}. - I Expand Folder Items, ställ in Field To Split Out på
result. - I Filter File Records, behåll villkoret att
={{ $json.TYPE }}är lika medfile. - I Fetch File Content, ställ in URL på
={{ $json.DOWNLOAD_URL }}. - Bekräfta parallell körning: Fetch File Content skickar output till både Move Files to Vector Folder och Qdrant Vector Index parallellt.
- I Move Files to Vector Folder, behåll id som
={{ $json.ID }}och targetFolderId som={{ $('Retrieve Folder Items').item.json.result[0].ID }}. - I Default Document Loader, ställ in Loader på
pdfLoaderoch Data Type påbinary. - I Recursive Text Splitter, ställ in Chunk Overlap på
100. - I Qdrant Vector Index, ställ in Mode på
insertoch välj samlingenbitrix-docs. - I Ollama Embeddings, ställ in Model på
nomic-embed-text:latest.
Steg 5: Sätt upp RAG-hämtning och AI-generering av svar
Koppla ihop retriever, embeddings och LLM för att besvara frågor med vektorlagret.
- I Qdrant Vector Index Alt, välj samma samling
bitrix-docsför hämtning. - I Ollama Embeddings Alt, ställ in Model på
nomic-embed-text:latest. - I Vector Store Fetcher, ställ in Top K på
10. - I Gemini Chat Model, ställ in Model Name på
models/gemini-2.0-flash. - I Retrieval QA Chain, ställ in Text på
={{ $json.MESSAGE_ORI }}och behåll den medföljande System Prompt Template. - I Format Response Payload, ställ in data på
={{ $json.response.text.removeMarkdown().replace(/`+$/, '')}}.
Steg 6: Konfigurera utgående svar och botregistrering
Skicka svar tillbaka till Bitrix och hantera flöden för installation/registrering.
- I Register Bot API, ställ in URL till
=https://{{ $json.DOMAIN }}/rest/imbot.register?auth={{$json.AUTH}}och behåll body-parametrarna för CODE, TYPE, handler-URL:er och PROPERTIES. - I Post Welcome Reply, ställ in URL till
=https://{{$json.DOMAIN}}/rest/imbot.message.add?auth={{$json.AUTH}}och behåll body-parametrarna förDIALOG_ID,MESSAGEochAUTH. - I Dispatch Chat Reply, ställ in URL till
=https://{{ $json.data.DOMAIN }}/rest/imbot.message.add?auth={{ $json.data.AUTH }}och behållDIALOG_ID,MESSAGEochAUTHi body. - Bekräfta parallell körning: Register Bot API skickar output till både Return Success Reply och Combine Subflow Params parallellt.
- Verifiera att Return Success Reply använder Respond With
jsonoch Response Body{ "result": true }.
Steg 7: Testa och aktivera ert workflow
Validera webhooken, routningen och AI-svarscykeln innan ni aktiverar workflowet.
- Klicka på Test Workflow och skicka en exempelbegäran för Bitrix-webhook till Inbound Bitrix Webhook.
- Bekräfta att Verify App Token routar giltiga tokens till Event Router och ogiltiga tokens till Return Error Reply.
- Skicka en meddelandehändelse och verifiera flödet Transform Message Payload → Retrieval QA Chain → Format Response Payload → Dispatch Chat Reply.
- Trigga en installationshändelse och bekräfta Handle Install Event → Register Bot API → Return Success Reply.
- När testet lyckas, växla workflowet till Active för användning i produktion.
Vanliga fallgropar
- Bitrix24-uppgifter kan löpa ut eller sakna rätt Open Lines-behörigheter. Om något slutar fungera, kontrollera Bitrix24-appens inställningar och token-giltighet först.
- Om du använder Wait-noder eller extern bearbetning (PDF-inläsning, inbäddningar eller vektorindexering) varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera utdata för alltid.
Vanliga frågor
Räkna med cirka 60–90 minuter när du har dina nycklar och Bitrix24-appen redo.
Nej. Du kopplar mest konton, klistrar in API-nycklar och testar händelser från Bitrix24 för att bekräfta att routingen fungerar.
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 användning av Google Gemini och din Qdrant-setup (samt Ollama-hosting om du kör inbäddningar själv).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärt och hanterar n8n bra. Egen drift ger obegränsade körningar men kräver grundläggande serveradministration.
Ja, men du vill justera delen för dokumentinläsning. Du kan byta ut HTTP Request-noderna ”Retrieve Storage List / Folder List / Folder Items” mot din egen källa (till exempel Google Drive) och behålla samma mönster för loader, splitter, inbäddningar och Qdrant-indexering. Vanliga justeringar är att ändra vilken mapp som behandlas som ”kunskapsbas”, lägga till en ”processed”-tagg eller ett flyttsteg efter indexering, samt strama upp svarsformatet så att svaren håller sig korta i chatten.
Oftast är det ett auth-problem: kontrollen av app-token misslyckas, webhook-URL:en matchar inte det Bitrix24 förväntar sig, eller Bitrix24-appens behörigheter inkluderar inte de Open Lines-åtgärder du anropar. Skapa om token eller installera om appen om du ändrade scopes. Kontrollera också ”Verify App Token” och HTTP Request-noderna som skickar svar, eftersom en enda fel parameter kan göra att Bitrix24 avvisar begäran.
Med n8n Cloud Starter kan du köra några tusen arbetsflödeskörningar per månad, vilket räcker för många små supportteam. Om du kör egen drift finns ingen gräns för körningar; de verkliga begränsningarna blir serverresurser och rate limits i Bitrix24, Gemini och Qdrant. I praktiken börjar de flesta team med ”normal affärsvolym” och skalar genom att lägga till en kö, begränsa hämtning till färre chunkar eller flytta inbäddningar/indexering till ett separat schema. Om du förväntar dig toppar (lanseringsdag, driftstörningar), planera för det i förväg.
Ofta, ja. RAG-liknande arbetsflöden kräver förgreningar, meddelandevalidering, dokumentbearbetning och en koppling till en vektordatabas, och det blir klumpigt (och dyrt) i enklare automationverktyg. n8n är också enklare att köra i egen drift, vilket spelar roll när du vill ha obegränsade körningar eller behöver stramare kontroll över kunddata. Zapier eller Make kan fortfarande fungera bra för lättviktiga flöden som ”skicka ett standardsvar”. Om du är osäker, prata med en automationsexpert och få en snabb rekommendation.
När detta väl är igång slutar dina PDF:er vara ”döda dokument” och börjar fungera som en supportkollega. Arbetsflödet tar hand om det repetitiva letandet, så att teamet kan fokusera på konversationerna som faktiskt behöver en människa.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.