Upphämtningsförfrågningar landar i Gmail, och plötsligt gör du fem jobb samtidigt. Du kopierar adresser, jagar saknade uppgifter, klistrar in i ett kalkylark och försöker sedan “på känn” lägga en rutt som inte slösar bort en hel förardag.
Det här är den typ av röra som drabbar trafikledare först, men även driftschefer och logistikfokuserade grundare känner av den. Med den här Gmail Sheets-automationen förvandlar du ostrukturerade mejl till felfria rader och ett svar för ruttbekräftelse som är redo att skickas.
Nedan ser du vad flödet gör, vad du får ut av det och hur team använder det för att snabbare bekräfta upphämtningsrutter med flera stopp utan att leva i kalkylark.
Så fungerar den här automationslösningen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Gmail till Google Sheets, hämtrutter bekräftas snabbt
flowchart LR
subgraph sg0["Gmail Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "AI Agent Parser", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Record Email Content", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "5 sec", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Query Open Route API Pickup"]
n6@{ icon: "mdi:database", form: "rounded", label: "Save Pickup GPS", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "GPS Pickup", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Collect Coordinates", pos: "b", h: 48 }
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/>Request Open Route API"]
n10@{ icon: "mdi:database", form: "rounded", label: "Collect Shipment Information", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "AI Agent Reply", pos: "b", h: 48 }
n13@{ icon: "mdi:message-outline", form: "rounded", label: "Reply", pos: "b", h: 48 }
n14@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model2", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split by Address", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Extract Job"]
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Jobs Mapping", pos: "b", h: 48 }
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/>Format Jobs"]
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Jobs", pos: "b", h: 48 }
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/merge.svg' width='40' height='40' /></div><br/>Merge Sequence with coordina.."]
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format GPS Coordinates", pos: "b", h: 48 }
n23@{ icon: "mdi:database", form: "rounded", label: "Save Sequence & Duration", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Format Schedule"]
n4 --> n15
n7 --> n6
n20 --> n21
n17 --> n21
n19 --> n9
n19 --> n18
n18 --> n20
n0 --> n2
n12 --> n13
n2 --> n16
n2 --> n8
n2 --> n10
n24 --> n12
n15 --> n3
n6 --> n4
n16 --> n15
n11 -.-> n12
n14 -.-> n2
n8 --> n19
n3 --> n5
n22 --> n23
n9 --> n17
n1 -.-> n2
n5 --> n7
n10 --> n24
n21 --> n22
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 trigger
class n1,n2,n12 ai
class n11,n14 aiModel
class n3,n6,n8,n10,n23 database
class n5,n9 api
class n17,n19,n24 code
classDef customIcon fill:none,stroke:none
class n5,n9,n17,n19,n21,n24 customIcon
Problemet: upphämtningsförfrågningar skapar ruttdramatik
Ett mejl med en upphämtningsförfrågan ser enkelt ut tills du faktiskt ska driva det i verkligheten. En avsändare skriver “tisdag förmiddag”, en annan trycker in tre butiker i ett enda stycke, och någon glömmer alltid postnumret. Du slutar med att översätta röriga mejl till strukturerade stopp, byter sedan verktyg för att geokoda adresser och gissar till sist en effektiv ordning. Multiplicera det med ett antal förfrågningar per dag så blir det konstant kontextväxling, onödiga misstag och sena bekräftelser som frustrerar butiker och förare.
Det eskalerar snabbt. Här är var det oftast faller isär.
- Någon kopierar fel adressrad till arket, vilket senare blir en fel pin och en onödig omväg.
- Ruttplaneringen sker i någons huvud, så du kan inte upprepa den konsekvent när volymen ökar.
- Bekräftelsemejl tar evigheter eftersom du skriver om samma detaljer och formaterar varje gång.
- Du har ingen pålitlig logg över vad som begärdes kontra vad som schemalades, så tvister blir rena gissningsleken.
Lösningen: Gmail → Sheets → optimerad rutt → svar
Det här flödet lyssnar efter nya mejl med upphämtningsförfrågningar i Gmail och gör om dem till strukturerad logistikdata automatiskt. En AI-agent läser mejlet och plockar ut det du faktiskt behöver (butiks-ID, adresser, önskat datum och eventuella anteckningar), och skriver sedan både den råa förfrågan och de rensade fälten till Google Sheets så att du kan granska allt på ett ställe. Därefter geokodas varje stopp till GPS-koordinater, payloaden byggs för OpenRouteService multi-stop-optimeringsendpoint och bästa stoppordning räknas fram med en lastbilsprofil. Slutligen formaterar en annan AI-agent ett tydligt HTML-bekräftelsemejl med den ordnade upphämtningsplanen, tids-/varaktighetsdetaljer och rutlogiken redan beskriven, och svarar via Gmail.
Flödet startar när ett nytt Gmail-meddelande kommer in. Därifrån tolkar och formaterar AI-agenterna förfrågan, HTTP-anrop hanterar geokodning och ruttoptimering, och Google Sheets blir er gemensamma logg. Slutresultatet är ett bekräftelsesvar du kan skicka som det är, plus ett ark som hålls uppdaterat för driften.
Det du får: automation vs. resultat
| Det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du får 5 mejl om dagen med upphämtningsförfrågningar med flera stopp, och att varje förfrågan innehåller 4 stopp. Manuellt kanske du lägger cirka 10 minuter på att extrahera detaljer och logga dem, ytterligare 10 minuter på att geokoda eller kontrollera platser och 10 minuter på att bygga en rutt och skriva svaret, alltså ungefär 30 minuter per förfrågan (cirka 2,5 timmar per dag). Med det här flödet kastar du ett öga på Google-arket för en snabb rimlighetskontroll och trycker på skicka på den förformaterade bekräftelsen, vilket snarare landar på 5 minuter per förfrågan. Det är ungefär 2 timmar tillbaka de flesta dagar.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Gmail för att ta emot och svara på upphämtningsförfrågningar
- Google Sheets för att lagra råa och tolkade förfrågningar
- OpenRouteService API-nyckel (hämta den i OpenRouteService-dashboarden)
Kunskapsnivå: Medel. Du kopplar konton, klistrar in en API-nyckel och justerar ett par fält så att de matchar din mejlstil och dina kolumner i arket.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett nytt upphämtningsmejl kommer in i Gmail. Flödet triggar på inkommande upphämtningsförfrågningar så att inget missas i en stökig inkorg.
Mejlet tolkas till strukturerad logistikdata. En AI-agent extraherar fälten du bryr dig om (som stopp, datum och butiksidentifierare), och en strukturerad JSON-parser håller outputen tillräckligt konsekvent för att kunna sparas i ett kalkylark.
Stoppen geokodas och ruttas med OpenRouteService. Flödet gör om adresser till GPS-koordinater, bygger en multi-stop “jobs”-payload och anropar optimeringsendpointen för att få bästa sekvens och ruttens varaktighet med en lastbilsprofil.
Google Sheets uppdateras, sedan skickas bekräftelsesvaret. Arket berikas med koordinater och sekvensdetaljer, och en andra AI-agent formaterar ett HTML-bekräftelsemejl som skickas tillbaka direkt till beställaren via Gmail.
Du kan enkelt ändra bekräftelseformatet så att det matchar ert arbetssätt, eller justera vilken data som sparas i Sheets om du vill ha extra kolumner (förarnamn, fordonstyp eller servicetidsfönster). Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-implementeringsguide
Steg 1: konfigurera Gmail-triggern
Ställ in e-posttriggern så att inkommande kundförfrågningar startar arbetsflödet.
- Lägg till och öppna Inbox Email Trigger.
- Bekräfta att Simple är satt till
false. - Ställ in Poll Times till
everyMinuteom ni vill ha nära realtidsbearbetning. - Inloggning krävs: anslut era Gmail-inloggningsuppgifter.
Steg 2: anslut Google Sheets
Dessa noder skriver upphämtningsposter, uppdaterar koordinater, läser in jobb för optimering och hämtar slutliga sändningsrader. Det finns totalt fem Google Sheets-noder; konfigurera dem tillsammans.
- Öppna Append Pickup Records och välj måldokument och blad: Document
Transportation Orders, SheetMulti-Stop. - Mappa fält i Columns till uttryck som
{{ $json.address }}och{{ $json.store_id }}_{{ $json.collection_request_id }}. - Upprepa samma dokument-/bladval för Update Pickup Coordinates, Load Coordinate Rows, Update Sequence Duration och Fetch Shipment Rows.
- I Load Coordinate Rows och Fetch Shipment Rows ställer ni in Filters till
collection_request_id = [YOUR_ID](ersätt med ert faktiska ID eller ett uttryck). - Inloggning krävs: anslut era Google Sheets-inloggningsuppgifter till alla Google Sheets-noder.
[YOUR_ID] kommer arbetsflödet att misslyckas med att läsa eller skriva rader.Steg 3: konfigurera AI-extrahering och tolkning
Dessa noder tolkar inkommande e-post till strukturerad upphämtningsdata och genererar bekräftelsesvaret.
- Öppna Logistics Data Interpreter och låt Text vara satt till
=Here is an email from a customer requesting a shipment: ... {{ $json.subject }} ... {{ $json.text }}. - Verifiera att Structured JSON Extractor har JSON-schemaexemplet för
collection_request_id,store_id,address,collection_dateochcollection_time. - Säkerställ att Structured JSON Extractor är ansluten som output-parser för Logistics Data Interpreter (inloggningsuppgifter läggs till i föräldranodens modell).
- Öppna OpenAI Chat Engine 2 och ställ in Model till
gpt-4o-mini(redan konfigurerat). - Inloggning krävs: anslut era OpenAI-inloggningsuppgifter till OpenAI Chat Engine 2 (modellen som används av Logistics Data Interpreter).
- Öppna Compose Confirmation Reply och bekräfta att Text är
={{ $json.formatted_reply }}. - Öppna OpenAI Chat Engine och ställ in Model till
gpt-4o-mini. - Inloggning krävs: anslut era OpenAI-inloggningsuppgifter till OpenAI Chat Engine (modellen som används av Compose Confirmation Reply).
Steg 4: konfigurera geokodning av upphämtningar och uppdateringsloop
Den här delen lägger till upphämtningsrader, geokodar varje adress och uppdaterar GPS-fält i arket.
- I Split Address Items ställer ni in Field To Split Out till
outputför att iterera varje upphämtningsplats. - I Iterate Pickups ställer ni in Batch Size till
=1för bearbetning rad för rad. - Konfigurera Geocode Pickup Request med URL
https://api.openrouteservice.org/geocode/search, query-parametern text={{ $json.address }}och headers enligt definition. - Inloggning krävs: anslut era
httpQueryAuth-inloggningsuppgifter för Geocode Pickup Request. - I Map Pickup Coordinates mappar ni koordinater från
{{$json.features[0].geometry.coordinates[0]}}och{{$json.features[0].geometry.coordinates[1]}}. - I Update Pickup Coordinates mappar ni gps_coordinates till
{{ $json.longitude }}, {{ $json.latitude }}och matchar på location_id från{{ $('Append Pickup Records').item.json.location_id }}. - Behåll Short Delay mellan uppdateringar för att undvika throttling i API:et eller arket.
Steg 5: konfigurera optimering och sekvensering
Dessa noder bygger optimeringspayloaden, anropar optimerings-API:et och sammanfogar ordnade sekvenser med koordinater.
- I Load Coordinate Rows läser ni in raderna för aktuellt request-ID så att Build Job Payload kan skapa jobb.
- I Build Job Payload behåller ni den medföljande JavaScript-koden som skapar
jobsochvehiclesfrån arkdata. - Build Job Payload skickar utdata parallellt till både Optimization API Call och Prepare Jobs Payload.
- I Optimization API Call behåller ni URL
https://api.openrouteservice.org/optimizationoch låter Body vara satt till{{ JSON.stringify({ jobs: $json.jobs, vehicles: $json.vehicles }) }}. - Inloggning krävs: anslut era
httpHeaderAuth-inloggningsuppgifter för Optimization API Call. - I Prepare Jobs Payload ställer ni in jobs till
{{ $json.jobs }}, och splittrar sedan med Split Job List via Field To Split Outjobs. - Använd Extract Job Order för att läsa optimeringssteg och outputta värden för
idochsequence. - I Combine Sequence & Coords ställer ni in Mode till
combineoch Fields To Match tillid. - I Assemble GPS Fields ställer ni in sequence till
{{ $json.sequence }}och gps_coordinates till{{ $json.location[0] }}, {{ $json.location[1] }}. - I Update Sequence Duration ställer ni in total_duration till
{{ ($('Optimization API Call').item.json.summary.duration/60).toFixed(2) }}och matchar på gps_coordinates.
Steg 6: konfigurera utdata och e-postsvar
Den här delen formaterar upphämtningsschemat och skickar bekräftelsesvaret.
- I Fetch Shipment Rows behåller ni filtret på
collection_request_idså att endast rader för aktuell förfrågan används. - I Format Pickup Schedule behåller ni HTML-mallen som bygger
formatted_reply. - Säkerställ att Format Pickup Schedule kopplas till Compose Confirmation Reply, som sedan skickar vidare till Send Gmail Response.
- I Send Gmail Response ställer ni in Operation till
reply, Message till{{ $json.output }}och Message ID till{{ $('Inbox Email Trigger').item.json.id }}. - Inloggning krävs: anslut era Gmail-inloggningsuppgifter i Send Gmail Response.
Steg 7: testa och aktivera ert arbetsflöde
Validera hela flödet från e-postinläsning till levererat svar.
- Klicka på Execute Workflow och skicka ett testmejl till Gmail-inkorgen som övervakas av Inbox Email Trigger.
- Verifiera att Logistics Data Interpreter outputtar en JSON-array och att Split Address Items skapar en item per upphämtning.
- Kontrollera att Append Pickup Records skriver nya rader och att Update Pickup Coordinates fyller i longitud/latitud och gps_coordinates.
- Bekräfta att Optimization API Call returnerar rutter, att Extract Job Order skapar sekvenser och att Update Sequence Duration skriver
sequenceochtotal_duration. - Säkerställ att Send Gmail Response svarar i den ursprungliga tråden med HTML-bekräftelsen.
- När allt fungerar växlar ni arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Gmail-inloggning kan löpa ut eller kräva rätt scopes. Om svar slutar skickas, kontrollera först Gmail-nodens autentiseringsstatus i n8n.
- Om du använder Wait-noder eller externa routing-API:er varierar processtiderna. Öka väntetiden om nedströms noder fallerar på tomma svar.
- OpenRouteService kan neka anrop om jobs-payloaden är felaktigt byggd eller om du slår i rate limits. Kontrollera HTTP-svarets body i noden för Optimization API Call innan du ändrar något annat.
Vanliga frågor
Cirka 30 minuter om du redan har kontona och API-nyckeln.
Nej. Du kopplar främst konton och klistrar in din OpenRouteService-nyckel. Det enda “avancerade” är att redigera några fält så att den extraherade datan matchar ditt faktiska mejlformat för upphämtningar.
Ja. n8n har ett gratis self-hosted-alternativ 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 OpenAI API-användning (oftast liten per mejl) och vilken OpenRouteService-plan du har.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) 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.
Ja, och det bör du. Snabbaste vinsten är att justera AI-agentprompten som används för “Logistics Data Interpreter” så att den extraherar exakt de fält ert team använder (butikskod, kontaktnamn, tidsfönster, antal pallar, vad som helst). Du kan också ändra agenten “Compose Confirmation Reply” så att den ger din föredragna layout, språk och extra instruktioner (grindkoder, lossningsnoteringar, förarens telefonnummer). Om du behöver en annan routningsprofil byter du OpenRouteService-payloaden från truck till ett annat alternativ som stöds i kodnoderna som bygger payloaden.
Oftast är det en utgången OAuth-token eller saknade Gmail-behörigheter efter en säkerhetsändring. Återanslut Gmail-credentials i n8n och testa sedan noderna “Inbox Email Trigger” och “Send Gmail Response” igen. Kontrollera också att triggern tittar på rätt etikett eller inkorg, eftersom det är lätt att råka peka den mot en filtrerad mapp och tro att inget kommer in.
I de flesta upplägg är dussintals per dag normalt, och fler om du self-hostar på en vettig VPS.
Ofta, ja, eftersom det här inte är en enkel “mejl till kalkylark”-zap. Du gör strukturerad extrahering, batchning, flera HTTP-anrop, sammanslagning av resultat och bygger en riktig optimerings-payload, vilket är där n8n känns mer flexibelt och mindre inlåst bakom betalväggar. Self-hosting ändrar också kalkylen om du hanterar många förfrågningar. Zapier eller Make kan fortfarande fungera bra för enkel loggning, men när ruttoptimering och rikare formatering kommer in i bilden blir de pilliga. Prata med en automationsexpert om du vill ha en snabb rekommendation baserat på din volym och teamets upplägg.
När det här väl rullar slutar upphämtningsförfrågningar att vara en inkorgsbrandövning och blir i stället ett repeterbart system du kan lita på. Flödet tar hand om det repetitiva, så att du kan fokusera på avvikelser och verklig drift.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.