Naar de inhoud springen
REST API

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.

bash
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.

bash
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.

bash
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.

javascript
// 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 het secret dat elke PUT /v1/webhook teruggeeft (sla het meteen op, GET geeft 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-Key toe 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.