SMS a hovory priamo z n8n workflow
n8n volá REST API volai cez uzol HTTP Request - bez písania kódu tak z workflow odošlete SMS, spustíte hovor cez hlasového agenta a výsledok dostanete späť ako webhook.
1Uložte si kľúč ako credential
V n8n založte nový credential typu HTTP Header Auth: názov hlavičky Authorization, hodnota Bearer vk_VAS_KLUC (kľúč nájdete v portáli v sekcii AI asistent). Priraďte ho každému uzlu HTTP Request, ktorý bude volať /v1/* - rovnaký kľúč platí pre SMS, hovory aj webhook.
2Pošlite SMS z workflow
Pridajte uzol HTTP Request: metóda POST, adresa https://volai.cz/v1/messages, telo JSON s poľami to a body. Odpoveď obsahuje priceHal (cena v halieroch za všetky segmenty správy) a segments - text s diakritikou zaberie viac segmentov ako čisto ASCII správa. Ukážka nižšie preto text správy zámerne ponecháva bez diakritiky, aby ostal v jednom segmente - s diakritikou funguje rovnako, len sa spotrebuje viac segmentov.
curl -X POST https://volai.cz/v1/messages \
-H "Authorization: Bearer vk_VAS_KLUC" \
-H "Content-Type: application/json" \
-d '{"to": "+420777123456", "body": "Objednavka je pripravena na vyzdvihnutie."}'3Zavolajte zákazníkovi cez svojho agenta
Druhý uzol HTTP Request: POST https://volai.cz/v1/calls s to a agentId existujúceho hlasového agenta (založíte ho v portáli alebo cez POST /v1/agents) - agent musí mať priradené vlastné číslo, inak požiadavka skončí chybou agent_no_number. Požiadavka hovor len spustí a vráti jeho id - o skutočnom výsledku (dokončil sa, nezdvihol sa, zlyhal) sa dozviete z webhooku v ďalšom kroku.
curl -X POST https://volai.cz/v1/calls \
-H "Authorization: Bearer vk_VAS_KLUC" \
-H "Content-Type: application/json" \
-d '{"to": "+420777123456", "agentId": "ag_kx91fa2b"}'4Nastavte webhook, aby sa workflow ozvalo späť
Pridajte trigger Webhook (n8n vám vygeneruje URL) a rovnakú adresu uložte cez PUT /v1/webhook spolu so zoznamom udalostí, ktoré vás zaujímajú. Pozor: prázdne pole events neznamená žiadnu udalosť, ale úplne všetky - radšej ich vždy vymenujte. Odpoveď vráti aj secret - uložte si ho hneď, GET /v1/webhook ho už nevráti.
curl -X PUT https://volai.cz/v1/webhook \
-H "Authorization: Bearer vk_VAS_KLUC" \
-H "Content-Type: application/json" \
-d '{"url": "https://vas-n8n.app.n8n.cloud/webhook/volai", "events": ["call.completed", "message.sent"]}'5Overte podpis a až potom spracujte telo
Každá požiadavka nesie hlavičku Volai-Signature v tvare t=<unix>,v1=<hex>. V uzle Code vypočítajte HMAC-SHA256 nad {t}.{rawBody} so svojím secret a porovnajte s v1 - telo spracujte, až keď sa zhodujú. V uzle Webhook zapnite v sekcii Add Options voľbu Raw Body - bez nej n8n telo rovno rozparsuje a bajty, z ktorých sa počítal podpis, sa stratia. So zapnutou voľbou však dorazí ako binárne dáta (vlastnosť data), nie v json.body - kód nižšie preto telo číta cez getBinaryDataBuffer, čo funguje bez ohľadu na to, či n8n drží binárky v pamäti, na disku alebo v S3. Vstavaný crypto sa dá v uzle Code použiť len na self-hosted n8n s povoleným NODE_FUNCTION_ALLOW_BUILTIN=crypto - n8n Cloud import modulov nepodporuje vôbec, takže sa tam overenie nezmestí do jedného uzla. Na Cloude preto reťaz predĺžte o uzol Extract From File (operácia Extract From Text File) - ten binárku najprv prevedie na text do zvoleného poľa (napríklad rawBody) - a až potom uzol Crypto (akcia Hmac, typ SHA256, kódovanie HEX, hodnota výraz spájajúci časovú pečiatku z hlavičky s poľom rawBody, secret zadaný cez Crypto credential, nie obyčajné textové pole) vypočíta odtlačok bez písania kódu; porovnanie s v1 potom dokončí uzol IF.
// Vstup z uzla Webhook so zapnutou voľbou Raw Body: header je hodnota
// "Volai-Signature", napr. "t=1756111640,v1=8f2ac1d4..."; surové telo
// dorazí ako binárne dáta (predvolený názov vlastnosti "data"), nie v json.body.
const header = $input.first().json.headers['volai-signature'];
// getBinaryDataBuffer funguje vo všetkých režimoch ukladania binárok n8n
// (predvolene v pamäti aj filesystem/S3) - priame čítanie
// $input.first().binary.data.data by fungovalo len v pamäťovom režime.
const rawBody = (await this.helpers.getBinaryDataBuffer(0, 'data')).toString('utf8');
// secret je hodnota z kroku 4 (PUT /v1/webhook) - v produkcii ho čítajte
// z n8n credentialu alebo premennej prostredia, nikdy ho nepíšte natvrdo
const secret = 'whsec_nahradte_svojim';
const crypto = require('crypto'); // len self-hosted n8n, pozri text kroku
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('Neplatný podpis Volai-Signature');
}Čo s tým urobíte
Potvrdzujúca SMS po objednávke
E-shop alebo rezervačný systém pošle do n8n webhook o novej objednávke - workflow hneď odošle SMS s potvrdením a odhadovaným časom vyzdvihnutia.
Odchádzajúci hovor z plánovača alebo tabuľky
Riadok v Google Sheets, Airtable alebo CRM spustí uzol HTTP Request, ktorý zavolá zákazníkovi cez vášho hlasového agenta - pripomienka termínu, výzva na dokončenie objednávky, krátky prieskum.
Zápis výsledku hovoru späť do systému
Webhook call.completed prinesie prepis, zhrnutie a zapísané údaje z hovoru (data) - workflow ich zapíše do CRM, tabuľky alebo pošle na Slack, bez ručného počúvania nahrávky.
Časté otázky
- Existuje pre volai oficiálny n8n uzol?
- Zatiaľ nie - dnes stačia všeobecné uzly HTTP Request a Webhook, ktoré má n8n vždy k dispozícii. Overený komunitný uzol by musel prejsť review v n8n Creator Portal - zatiaľ ho nepripravujeme.
- Ako poznám, že webhook naozaj poslal volai, a nie niekto cudzí?
- Podľa hlavičky
Volai-Signature- HMAC-SHA256 podpis sosecretom, ktorý vám vráti každéPUT /v1/webhook(uložte si ho hneď,GETho už nevráti). Podrobný vzorec aj ukážka v Pythone a TypeScripte je na/docs/webhooky. - Čo ak HTTP Request zlyhá na timeout a n8n ho zopakuje?
- Pridajte hlavičku
Idempotency-Keys ľubovoľnou stabilnou hodnotou (napríklad ID objednávky). Do 24 hodín dostanete na opakovanú požiadavku s rovnakým kľúčom späť presne tú istú odpoveď - SMS ani hovor sa neodošlú druhýkrát. - Koľko stojí automatizácia navyše oproti ručnému volaniu API?
- Nič - za n8n žiadny príplatok. Platia rovnaké sadzby ako v cenníku: SMS 1,36 kr (≈ 0,06 EUR), odchádzajúci hovor 0,92 kr/min (≈ 0,04 EUR), hlasový agent navyše 2,50 kr/min (≈ 0,10 EUR). Presný cenník je na
/cenik.
Vyskúšajte to hneď
Zaregistrujte sa a prvých 50 kr je na nás.