Sms en bel rechtstreeks vanuit uw n8n-workflow
n8n roept de REST-API van volai aan via de HTTP Request-node - zonder code verstuurt u een sms, start u een gesprek via een spraakagent en krijgt u het resultaat terug per webhook.
1Sla uw sleutel op als credential
Maak in n8n een nieuwe credential van het type HTTP Header Auth aan: headernaam Authorization, waarde Bearer vk_JOUW_SLEUTEL (de sleutel vindt u in het portaal onder AI-assistent). Koppel de credential aan elke HTTP Request-node die /v1/* aanroept - dezelfde sleutel geldt voor sms, gesprekken en de webhook.
2Een sms versturen vanuit de workflow
Voeg een HTTP Request-node toe: methode POST, URL https://volai.cz/v1/messages, JSON-body met de velden to en body. Het antwoord bevat priceHal (de prijs in honderdsten van de factuurmunt voor alle segmenten van het bericht) en segments - een tekst met speciale tekens kost meer segmenten dan een bericht in puur ASCII. In het voorbeeld hieronder staat de berichttekst daarom bewust zonder accenten, zodat hij binnen één segment blijft - met accenten werkt het precies hetzelfde, alleen worden er meer segmenten verbruikt.
curl -X POST https://volai.cz/v1/messages \
-H "Authorization: Bearer vk_JOUW_SLEUTEL" \
-H "Content-Type: application/json" \
-d '{"to": "+420777123456", "body": "Uw bestelling ligt klaar om af te halen."}'3Een klant bellen via uw agent
Een tweede HTTP Request-node: POST https://volai.cz/v1/calls met to en de agentId van een bestaande spraakagent (die maakt u aan in het portaal of via POST /v1/agents) - de agent moet een eigen nummer toegewezen hebben, anders eindigt het verzoek met de fout agent_no_number. Het verzoek start het gesprek alleen en geeft de id ervan terug - de werkelijke uitkomst (afgerond, niet opgenomen, mislukt) hoort u via de webhook in de volgende stap.
curl -X POST https://volai.cz/v1/calls \
-H "Authorization: Bearer vk_JOUW_SLEUTEL" \
-H "Content-Type: application/json" \
-d '{"to": "+420777123456", "agentId": "ag_kx91fa2b"}'4Een webhook instellen zodat de workflow een terugmelding krijgt
Voeg een Webhook-trigger toe (n8n genereert de URL voor u) en sla precies dat adres op via PUT /v1/webhook, samen met de lijst van gebeurtenissen die u interesseren. Let op: een leeg veld events betekent niet geen enkele gebeurtenis, maar juist alle - som ze daarom liever altijd op. Het antwoord bevat ook het secret - sla het meteen op, GET /v1/webhook geeft het niet meer terug.
curl -X PUT https://volai.cz/v1/webhook \
-H "Authorization: Bearer vk_JOUW_SLEUTEL" \
-H "Content-Type: application/json" \
-d '{"url": "https://jouw-n8n.app.n8n.cloud/webhook/volai", "events": ["call.completed", "message.sent"]}'5Controleer de handtekening en verwerk pas dan de body
Elk verzoek bevat de header Volai-Signature in de vorm t=<unix>,v1=<hex>. Bereken in een Code-node de HMAC-SHA256 over {t}.{rawBody} met uw secret en vergelijk die met v1 - verwerk de body pas als ze overeenkomen. Schakel in de Webhook-node onder Add Options de optie Raw Body in - zonder die optie parseert n8n de body meteen en gaan de bytes waarover de handtekening is berekend verloren. Met de optie ingeschakeld komt de body echter binnen als binaire data (eigenschap data), niet in json.body - de code hieronder leest de body daarom via getBinaryDataBuffer, dat werkt ongeacht of n8n binaire data in het geheugen, op schijf of in S3 bewaart. De ingebouwde module crypto is in de Code-node alleen te gebruiken op self-hosted n8n met NODE_FUNCTION_ALLOW_BUILTIN=crypto ingeschakeld - n8n Cloud ondersteunt het importeren van modules helemaal niet, dus de controle past daar niet in één node. Verleng de keten in de cloud daarom met een Extract From File-node (bewerking Extract From Text File) - die zet de binaire data eerst om naar tekst in een veld naar keuze (bijvoorbeeld rawBody) - en pas daarna berekent een Crypto-node (actie Hmac, type SHA256, codering HEX, als waarde een expressie die de timestamp uit de header combineert met het veld rawBody, het secret via een Crypto-credential in plaats van een gewoon tekstveld) de hash zonder code; de vergelijking met v1 rondt een IF-node af.
// Invoer van de Webhook-node met de optie Raw Body ingeschakeld: de header is de waarde
// "Volai-Signature", bijv. "t=1756111640,v1=8f2ac1d4..."; de ruwe body
// komt binnen als binaire data (standaardnaam van de eigenschap "data"), niet in json.body.
const header = $input.first().json.headers['volai-signature'];
// getBinaryDataBuffer werkt in alle opslagmodi voor binaire data in n8n
// (standaard in het geheugen, maar ook filesystem/S3) - rechtstreeks lezen van
// $input.first().binary.data.data zou alleen in de geheugenmodus werken.
const rawBody = (await this.helpers.getBinaryDataBuffer(0, 'data')).toString('utf8');
// secret is de waarde uit stap 4 (PUT /v1/webhook) - lees hem in productie
// uit een n8n-credential of omgevingsvariabele en zet hem nooit hard in de code
const secret = 'whsec_vervang_door_het_jouwe';
const crypto = require('crypto'); // alleen self-hosted n8n, zie de tekst van de stap
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('Ongeldige handtekening Volai-Signature');
}Wat u ermee doet
Bevestigings-sms na een bestelling
Uw webshop of reserveringssysteem stuurt bij een nieuwe bestelling een webhook naar n8n - de workflow verstuurt meteen een sms met de bevestiging en de verwachte afhaaltijd.
Uitgaande gesprekken vanuit een planner of spreadsheet
Een rij in Google Sheets, Airtable of uw CRM activeert een HTTP Request-node die de klant belt via uw spraakagent - een afspraakherinnering, een verzoek om een bestelling af te ronden, een korte enquête.
Gespreksresultaat terugschrijven naar uw systeem
De webhook call.completed levert het transcript, de samenvatting en de vastgelegde gegevens uit het gesprek (data) - de workflow schrijft ze weg in het CRM, in een spreadsheet of stuurt ze naar Slack, zonder dat iemand de opname handmatig hoeft te beluisteren.
Veelgestelde vragen
- Is er een officiële n8n-node voor volai?
- Nog niet - vandaag volstaan de algemene nodes HTTP Request en Webhook, die n8n altijd meebrengt. Een geverifieerde community-node zou de review in het n8n Creator Portal moeten doorlopen - die bereiden we momenteel niet voor.
- Hoe weet ik dat de webhook echt van volai komt en niet van iemand anders?
- Aan de header
Volai-Signature- een HMAC-SHA256-handtekening met hetsecretdat elkePUT /v1/webhookteruggeeft (sla het meteen op,GETgeeft het niet meer terug). De exacte formule met voorbeelden in Python en TypeScript vindt u op/docs/webhooky. - Wat als de HTTP Request in een timeout loopt en n8n hem opnieuw probeert?
- Voeg de header
Idempotency-Keytoe met een willekeurige stabiele waarde (bijvoorbeeld het bestel-ID). Binnen 24 uur krijgt u op een herhaald verzoek met dezelfde sleutel exact hetzelfde antwoord terug - de sms en het gesprek worden niet een tweede keer verstuurd. - Wat kost de automatisering extra ten opzichte van het handmatig aanroepen van de API?
- Niets - er geldt geen toeslag voor n8n. Dezelfde tarieven als op de prijzenpagina: sms 1.36 CZK (~EUR 0.06), uitgaand gesprek 0.92 CZK/min (~EUR 0.04), spraakagent extra 2.50 CZK/min (~EUR 0.10). De exacte prijzen staan op
/cenik.
Probeer het meteen
Registreer u en de eerste 50 kr is voor onze rekening.