Sms och samtal direkt från ditt n8n-arbetsflöde
n8n anropar REST API:t från volai via noden HTTP Request - utan kod kan arbetsflödet skicka sms, starta ett samtal via en röstagent och få resultatet tillbaka som en webhook.
1Spara nyckeln som en credential
Skapa en ny credential av typen HTTP Header Auth i n8n: headernamn Authorization, värde Bearer vk_DIN_NYCKEL (nyckeln finns i portalen under AI-assistent). Koppla den till varje HTTP Request-nod som anropar /v1/* - samma nyckel gäller för sms, samtal och webhook.
2Skicka sms från arbetsflödet
Lägg till en nod HTTP Request: metod POST, adress https://volai.cz/v1/messages, JSON-kropp med fälten to och body. Svaret innehåller priceHal (priset i hal, hundradelar av en tjeckisk krona, för alla segment i meddelandet) och segments - en text med specialtecken som å, ä och ö tar fler segment än ett rent ASCII-meddelande. Exemplet nedan lämnar därför medvetet meddelandets text utan specialtecken, så att den ryms i ett enda segment - med specialtecken fungerar det likadant, men fler segment går åt.
curl -X POST https://volai.cz/v1/messages \
-H "Authorization: Bearer vk_DIN_NYCKEL" \
-H "Content-Type: application/json" \
-d '{"to": "+420777123456", "body": "Bestallningen ar redo att hamtas."}'3Ring en kund via din agent
En andra HTTP Request-nod: POST https://volai.cz/v1/calls med to och agentId för en befintlig röstagent (skapas i portalen eller via POST /v1/agents) - agenten måste ha ett eget nummer kopplat, annars misslyckas anropet med felet agent_no_number. Anropet startar bara samtalet och returnerar dess id - det faktiska utfallet (genomfört, obesvarat, misslyckat) kommer från webhooken i nästa steg.
curl -X POST https://volai.cz/v1/calls \
-H "Authorization: Bearer vk_DIN_NYCKEL" \
-H "Content-Type: application/json" \
-d '{"to": "+420777123456", "agentId": "ag_kx91fa2b"}'4Ställ in en webhook så att arbetsflödet får svar
Lägg till en trigger av typen Webhook (n8n genererar en URL åt dig) och spara samma adress med PUT /v1/webhook tillsammans med listan över de händelser du är intresserad av. Observera: en tom array events betyder inte ingen händelse utan alla - räkna därför alltid upp dem. Svaret returnerar även ett secret - spara det direkt, GET /v1/webhook returnerar det aldrig igen.
curl -X PUT https://volai.cz/v1/webhook \
-H "Authorization: Bearer vk_DIN_NYCKEL" \
-H "Content-Type: application/json" \
-d '{"url": "https://din-n8n.app.n8n.cloud/webhook/volai", "events": ["call.completed", "message.sent"]}'5Verifiera signaturen innan kroppen behandlas
Varje anrop har en header Volai-Signature på formen t=<unix>,v1=<hex>. Räkna ut HMAC-SHA256 över {t}.{rawBody} med ditt secret i en nod Code och jämför med v1 - behandla kroppen först när de stämmer överens. Slå på alternativet Raw Body under Add Options i noden Webhook - utan det tolkar n8n kroppen direkt, och de exakta byten som signaturen räknades över går förlorade. Med alternativet påslaget kommer kroppen i stället som binärdata (egenskapen data), inte i json.body - koden nedan läser den därför via getBinaryDataBuffer, vilket fungerar oavsett om n8n lagrar binärdata i minnet, på disk eller i S3. Den inbyggda modulen crypto kan användas i noden Code bara på self-hosted n8n med NODE_FUNCTION_ALLOW_BUILTIN=crypto påslaget - n8n Cloud stöder inte modulimport alls, så verifieringen ryms inte i en enda nod där. På Cloud förlängs kedjan därför med en nod Extract From File (operationen Extract From Text File) - den gör först om binärdatan till text i ett valfritt fält (till exempel rawBody) - och först därefter räknar en nod Crypto (åtgärden Hmac, typ SHA256, kodning HEX, värdet ett uttryck som slår ihop tidsstämpeln från headern med fältet rawBody, hemligheten angiven via en Crypto-credential och inte i ett vanligt textfält) ut avtrycket utan kod; jämförelsen med v1 avslutas av en nod IF.
// Indata från noden Webhook med alternativet Raw Body påslaget: headern är värdet
// "Volai-Signature", t.ex. "t=1756111640,v1=8f2ac1d4..."; den råa kroppen
// kommer som binärdata (standardnamn på egenskapen "data"), inte i json.body.
const header = $input.first().json.headers['volai-signature'];
// getBinaryDataBuffer fungerar i alla lagringslägen för binärdata i n8n
// (standard i minnet samt filesystem/S3) - direkt läsning av
// $input.first().binary.data.data fungerar bara i minnesläget.
const rawBody = (await this.helpers.getBinaryDataBuffer(0, 'data')).toString('utf8');
// secret är värdet från steg 4 (PUT /v1/webhook) - läs det i produktion
// från en n8n-credential eller en miljövariabel, skriv det aldrig direkt i koden
const secret = 'whsec_ersatt_med_ditt';
const crypto = require('crypto'); // bara self-hosted n8n, se texten i steget
const [tPart, v1Part] = header.split(',');
const t = tPart.replace('t=', '');
const v1 = v1Part.replace('v1=', '');
const expected = crypto
.createHmac('sha256', secret)
.update(`${t}.${rawBody}`)
.digest('hex');
if (expected !== v1) {
throw new Error('Ogiltig signatur i Volai-Signature');
}Vad du kan göra med det
Bekräftelse per sms efter en beställning
Din webbutik eller ditt bokningssystem skickar en webhook till n8n när en ny beställning kommer in - arbetsflödet skickar direkt ett bekräftelsesms med beräknad upphämtningstid.
Utgående samtal från en planerare eller ett kalkylblad
En rad i Google Sheets, Airtable eller ditt CRM utlöser en HTTP Request-nod som ringer kunden via din röstagent - en påminnelse om en tid, en uppmaning att slutföra beställningen eller en kort enkät.
Samtalsresultatet tillbaka in i systemet
Webhooken call.completed levererar utskriften, sammanfattningen och de uppgifter som agenten fångade under samtalet (data) - arbetsflödet skriver in dem i ditt CRM, ett kalkylblad eller Slack, utan att någon lyssnar på inspelningen för hand.
Vanliga frågor
- Finns det en officiell n8n-nod för volai?
- Inte ännu - de generella noderna HTTP Request och Webhook, som alltid finns i n8n, räcker i dag. En verifierad community-nod måste granskas i n8n Creator Portal - någon sådan förbereder vi inte just nu.
- Hur vet jag att en webhook verkligen kom från volai och inte från någon annan?
- Genom headern
Volai-Signature- en HMAC-SHA256-signatur med detsecretsom returneras vid varje anrop avPUT /v1/webhook(spara det direkt,GETreturnerar det aldrig). Den fullständiga formeln, med exempel i Python och TypeScript, finns på/docs/webhooky. - Vad händer om HTTP Request får en timeout och n8n försöker igen?
- Lägg till en header
Idempotency-Keymed ett valfritt stabilt värde, till exempel beställningens ID. Inom 24 timmar ger ett upprepat anrop med samma nyckel exakt samma svar tillbaka - inget andra sms och inget andra samtal skickas. - Kostar det extra att automatisera via n8n?
- Nej - n8n medför inget påslag. Samma priser gäller som på prissidan: sms 1,36 kr (≈ 0,62 SEK), utgående samtal 0,92 kr/min (≈ 0,42 SEK), röstagenten tillkommer med 2,50 kr/min (≈ 1,14 SEK). Hela prislistan finns på
/cenik.