Alla artiklar

Kom igång

Skicka besök till Zapier eller n8n med en webhook

Lägg upp en webhook så att Zapier, n8n eller ert eget system får veta om varje slutfört besök, och kontrollera att varje leverans verkligen kommer från Rytmia.

En webhook gör att Rytmia kan berätta för ett annat system när något händer. Ni ger Rytmia en URL, och varje gång ett besök slutförs skickar Rytmia ett meddelande dit med besöket, kunden, serviceadressen och vilka som gjorde jobbet.

URL:en hör oftast till ett automatiseringsverktyg som Zapier eller n8n. Där bestämmer ni vad som händer sedan: skicka en recensionsförfrågan till kunden, lägga till en rad i ett kalkylark, skriva i en chattkanal eller något annat verktyget kan göra.

Vad som skickas

I dag skickar Rytmia en händelse:

Händelse i Rytmia Typ i meddelandet Skickas när
Besök slutfört work-shift.completed Alla medarbetare på ett besök har slutfört sin del. Medarbetare som har ursäktats eller tackat nej till besöket räknas inte.

Fler händelser kommer senare. Varje webhook väljer vilka händelser den tar emot.

Det här behöver du

  • Behörighet att ändra integrationer i Rytmia. Som standard har ägare och kontorspersonal den. Fältarbetare har den inte.
  • Något som tar emot meddelandena. En Zap i Zapier, ett arbetsflöde i n8n eller ert eget system. Adressen måste börja med https:// och gå att nå från internet. Webhooks by Zapier ingår inte i Zapiers gratisabonnemang.

En organisation kan ha upp till 10 webhooks.

Zapier och n8n har menyer på engelska, därför står de här som de ser ut där.

Lägg upp i Zapier

  1. Skapa en Zap i Zapier. Välj Webhooks by Zapier som trigger.

  2. Välj Catch Hook under Trigger event och sedan Continue.

    Ska ni kontrollera signaturen (se Kontrollera signaturen) väljer ni Catch Raw Hook i stället. Den behåller meddelandet precis som Rytmia skickade det.

  3. Kopiera webhook-URL:en på fliken Test.

  4. Skapa webhooken i Rytmia med den URL:en och skicka en testhändelse.

  5. Välj Test trigger i Zapier. Testhändelsen dyker upp.

Testhändelsen säger bara att den är ett test. För att koppla fält som kundens namn eller adressen till senare steg behöver Zapier ett riktigt Besök slutfört. När ett besök har slutförts väljer ni Test trigger igen och väljer den förfrågan.

Zapier svarar att varje meddelande gick fram så länge Zapen finns. Stänger ni av eller tar bort Zapen börjar Zapier neka meddelanden, och till slut slutar Rytmia skicka (se När leveranser misslyckas).

Lägg upp i n8n

  1. Lägg till en Webhook-nod som första nod i ett arbetsflöde i n8n.

  2. Sätt HTTP Method till POST.

    Ska ni kontrollera signaturen slår ni också på Raw Body bland nodens alternativ.

  3. Noden har två URL:er, en Test URL och en Production URL. Kopiera Test URL först.

  4. Skapa webhooken i Rytmia med Test URL.

  5. Välj Listen for test event i n8n. Skicka sedan, inom ett par minuter, en testhändelse från Rytmia. Händelsen dyker upp i noden.

  6. När arbetsflödet är klart publicerar ni det (i äldre versioner av n8n: aktiverar det). Kopiera Production URL, redigera webhooken i Rytmia och byt ut Test URL mot den.

Låt inte Test URL ligga kvar i Rytmia. n8n lyssnar bara på den en kort stund efter att ni har valt Listen for test event. Resten av tiden misslyckas varje meddelande, och efter ungefär två dygn stänger Rytmia av webhooken. Production URL innehåller /webhook/, Test URL innehåller /webhook-test/.

Meddelanden som når Production URL visas inte i redigeraren. Ni hittar dem under arbetsflödets flik Executions.

Skapa webhooken i Rytmia

  1. Gå till Administration → Integrationer.
  2. Välj Hantera under Webhooks.
  3. Välj Ny.
  4. Klistra in adressen från Zapier, n8n eller ert eget system under URL.
  5. Skriv vad webhooken är till för under Beskrivning, till exempel Zapier – recensionsförfrågningar. Det är frivilligt men hjälper när ni har flera.
  6. Kryssa i Besök slutfört under Händelser.
  7. Välj Spara.

Rytmia visar då webhookens signeringsnyckel. Den börjar med whsec_. Kopiera den och spara den på ett säkert ställe, till exempel i er lösenordshanterare. Den visas bara den här gången. Ni behöver den för att kontrollera signaturen. Välj Jag har sparat den för att stänga dialogen.

Tappar ni bort nyckeln väljer ni Ny signeringsnyckel i webhookens meny. Den gamla nyckeln slutar gälla direkt, så byt den i er mottagare med en gång.

Skicka en testhändelse

Välj Skicka testhändelse i webhookens meny. Leveransloggen öppnas och visar när testet skickas.

En testhändelse ser ut så här:

{
  "type": "webhook.test",
  "timestamp": "2026-10-08T12:41:07+00:00",
  "data": {
    "webhookEndpointId": "0199c3a2-7f1e-7c3a-9b1d-2f6e8a4c5d10"
  }
}

Ett test provas bara en gång. Misslyckas det visar leveransloggen varför: HTTP-statusen er mottagare svarade med, eller felet. Rätta mottagaren och skicka ett nytt test. Ett misslyckat test stänger aldrig av webhooken.

Leveransloggen

Välj Leveranslogg i webhookens meny för att se vad Rytmia har skickat dit, det senaste först. Loggen sparas i 30 dagar.

Status Betyder
I kö Väntar på sitt första försök, oftast några sekunder.
Försöker igen Ett försök misslyckades. Rytmia försöker igen senare.
Levererad Mottagaren tog emot den.
Misslyckad Alla försök misslyckades. Rytmia har slutat försöka.
Inte skickad Webhooken stängdes av eller togs bort innan den skickades.

Öppna en leverans för att se HTTP-status, antal försök, senaste fel och Skickad JSON, precis som den skickades. Kopiera JSON:en när ni behöver se vilka fält det finns att koppla.

Vad ett meddelande om slutfört besök innehåller

Varje meddelande är en POST med JSON. Innehållet har händelsens type, en timestamp i UTC och data:

{
  "type": "work-shift.completed",
  "timestamp": "2026-10-08T12:41:07+00:00",
  "data": {
    "id": "0199c1f0-3b2a-7d4e-8f10-5a6b7c8d9e01",
    "startsAt": "2026-10-08T13:00:00+02:00",
    "endsAt": "2026-10-08T14:30:00+02:00",
    "timezone": "Europe/Stockholm",
    "completedAt": "2026-10-08T14:41:07+02:00",
    "order": {
      "id": "0199a8e4-1c2d-7e3f-9a0b-1c2d3e4f5a6b",
      "number": "1042"
    },
    "client": {
      "id": "01999b7d-4e5f-7a6b-8c9d-0e1f2a3b4c5d",
      "name": "Acme AB",
      "customerNumber": "10023"
    },
    "serviceLocation": {
      "id": "01999b7d-6a7b-7c8d-9e0f-1a2b3c4d5e6f",
      "name": "Acme huvudkontor",
      "line1": "Storgatan 1",
      "line2": null,
      "postalCode": "111 22",
      "city": "Stockholm",
      "country": "SWE"
    },
    "coworkers": [
      { "id": "0199a001-2b3c-7d4e-8f5a-6b7c8d9e0f1a", "name": "Anna Andersson" },
      { "id": "0199a001-9c8d-7e6f-8a5b-4c3d2e1f0a9b", "name": "Erik Berg" }
    ]
  }
}
Fält Vad det är
id Besöket.
startsAt, endsAt När besöket var schemalagt, i besökets egen tidszon, med tidsskillnaden mot UTC.
timezone Den tidszonen.
completedAt När besöket slutfördes, i samma tidszon.
order Ordern besöket hör till, och dess nummer.
client Kundens namn och kundnummer.
serviceLocation Serviceadressen: namn och adress. country är en kod på tre bokstäver, till exempel SWE.
coworkers Medarbetarna som slutförde sin del av besöket. Ursäktade medarbetare finns inte med.

Alla fält finns alltid med, även när de är tomma. Ett tomt värde är null, så en koppling ni gör på ett besök hittar sitt fält även på nästa. Rytmia kan lägga till fält i ett meddelande senare, men byter inte namn på dem och tar inte bort dem.

Meddelandet beskriver besöket som det var när det skickades. Ändras något efteråt, till exempel kundens namn, skickas tidigare meddelanden inte igen.

Kontrollera signaturen

Den som känner till er webhook-URL kan skicka meddelanden till den. Signaturen låter er mottagare kontrollera att ett meddelande verkligen kommer från Rytmia och inte har ändrats. Kontrollera den när automatiseringen gör något som spelar roll, till exempel skickar meddelanden till kunder.

Rytmia signerar meddelanden enligt Standard Webhooks. Varje meddelande har tre headers:

Header Vad det är
webhook-id Meddelandets id. Det är detsamma när ett meddelande skickas igen.
webhook-timestamp När det här försöket skickades, i sekunder sedan 1970.
webhook-signature v1, följt av signaturen.

I ert eget system använder ni ett av Standard Webhooks bibliotek, som finns för JavaScript, Python, PHP, Ruby, Go, Java, C#, Rust och Elixir. Ge biblioteket signeringsnyckeln som den är, med whsec_, tillsammans med headers och innehållet precis som ni tog emot det. Biblioteket nekar också meddelanden som är för gamla.

I Zapier eller n8n lägger ni till ett kodsteg direkt efter triggern som gör kontrollen nedan, och stoppar flödet när den ger false. Kontrollen behöver innehållet precis som Rytmia skickade det, tecken för tecken, så använd Catch Raw Hook i Zapier eller slå på Raw Body i n8n:s Webhook-nod.

const crypto = require('crypto');

function isFromRytmia(secret, id, timestamp, signature, body) {
  const key = Buffer.from(secret.replace(/^whsec_/, ''), 'base64');
  const expected = crypto.createHmac('sha256', key)
    .update(`${id}.${timestamp}.${body}`)
    .digest('base64');
  const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) <= 5 * 60;
  return fresh && signature.split(' ').includes(`v1,${expected}`);
}

secret är er signeringsnyckel, id, timestamp och signature är de tre headers, och body är det oförändrade innehållet. I n8n som ni driver själva kan Code-noden bara läsa in crypto om installationen tillåter det med inställningen NODE_FUNCTION_ALLOW_BUILTIN.

Varje försök signeras på nytt med en ny tidsstämpel, så ett meddelande som skickas igen senare klarar fortfarande kontrollen.

När leveranser misslyckas

En leverans har gått fram när mottagaren svarar med en status i 200-serien inom 10 sekunder. Allt annat är ett misslyckat försök: en felstatus, en omdirigering eller inget svar i tid.

Efter ett misslyckat försök försöker Rytmia igen efter 1 minut, 5 minuter, 30 minuter, 2 timmar, 6 timmar, 12 timmar och 24 timmar. Det blir åtta försök under ungefär två dygn. Misslyckas även det sista blir leveransen Misslyckad.

Rytmia stänger av webhooken när en leverans har misslyckats vid alla försök och inget annat har nått webhooken under tiden, alltså ungefär två dygn utan att en enda leverans har gått fram. Webhooken visar då Avstängd efter fel, och ett meddelande högst upp på sidan säger det. Så kommer ni igång igen:

  1. Öppna Leveranslogg och läs det senaste felet.
  2. Rätta mottagaren. Slå till exempel på Zapen igen, publicera arbetsflödet i n8n eller byt en Test URL i n8n mot Production URL.
  3. Välj Slå på i webhookens meny och skicka en testhändelse.

Medan en webhook är avstängd skickas inget dit, och leveranser som väntade släpps. Besök som slutfördes medan den var avstängd skickas inte när ni slår på den igen.

Ni kan också stänga av en webhook själva med Stäng av, till exempel medan ni bygger om en Zap. Ta bort tar bort webhooken och dess leveranslogg.

Bra att veta

  • Samma meddelande kan komma två gånger. Kan Rytmia inte avgöra om ett försök kom fram skickas meddelandet igen. Det har samma webhook-id, så en mottagare som håller koll på id:n kan hoppa över upprepningar.
  • Ett ångrat slutförande meddelas inte. Slutförs ett besök och slutförandet sedan ångras, till exempel för att en ursäkt tas bort, skickar Rytmia inget. När besöket slutförs igen skickas ett andra Besök slutfört, med ett nytt webhook-id.
  • Meddelanden skickas inom några sekunder, men det är inte säkert att de kommer fram i den ordning besöken slutfördes. Använd completedAt när ordningen spelar roll.

Behöver du fortfarande hjälp?

Om du inte hittar svaret här hjälper Rytmia-teamet dig vidare.

Kontakta Rytmia