Skip to content
REST API

SMS and calls straight from a Make scenario

Make calls the volai REST API through its generic HTTP module - send an SMS, place a call through a voice agent, and get the result back as a webhook.

You can install the native volai connector for Make from an invitation link. It can send SMS, start calls and voice messages, read information such as your balance, agents and numbers, and trigger automatically for SMS and call events. The connector is not yet listed in Make’s public app directory. The manual HTTP and Webhooks setup below remains available as an alternative.

1Set up your key as a connection

In the HTTP > Make a request module, add an Authorization header with the value Bearer vk_YOUR_KEY (find the key in the portal under AI assistant). Save it as a reusable connection so you don't retype it in every module.

2Send an SMS from the scenario

Add an HTTP > Make a request module: method POST, URL https://volai.cz/v1/messages, Raw (JSON) body with to and body - map the values from an earlier module's bundle (a spreadsheet row, a webhook) instead of typing them in. Turn on Parse response so priceHal (the price in hundredths of a credit, for all segments) and segments land straight in the bundle for mapping - without it you only get raw text and would need a separate Parse JSON module. A message with non-ASCII characters uses more segments than a plain ASCII one.

json
{
  "to": "+420777123456",
  "body": "Objednavka je pripravena k vyzvednuti."
}

3Trigger a call through your voice agent

Add a second HTTP > Make a request module: POST https://volai.cz/v1/calls, Raw (JSON) body with to and the agentId of an existing voice agent - the agent must have a phone number assigned, otherwise the request fails with agent_no_number. You'll usually map to from the bundle of an earlier module - a phone number from a Google Sheets row, say - instead of typing it in, by clicking the field and picking the variable. Parse response helps here too: it unpacks the started call's id straight into the bundle, so you can map it onward without a separate Parse JSON module. The module only starts the call - the actual outcome (completed, no answer, failed) only comes from the webhook in the next step.

json
{
  "to": "+420777123456",
  "agentId": "ag_kx91fa2b"
}

4Receive events back through a Custom webhook

Add a Webhooks > Custom webhook module - Make generates a URL and acknowledges the incoming request right away (which satisfies the fast-200 rule from /en/docs/webhooks). Save that same address with PUT /v1/webhook, along with the list of events you care about. Watch out: an empty events array doesn't mean none - it means all of them. List the ones you want. The response also returns a secret - save it right away, GET /v1/webhook never returns it.

bash
curl -X PUT https://volai.cz/v1/webhook \
  -H "Authorization: Bearer vk_TVUJ_KLIC" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://hook.eu2.make.com/xxxxxxxx", "events": ["call.completed", "message.sent"]}'

5Branch the scenario by event type

Split on the event field in the webhook body (call.completed, call.failed, call.no_answer, call.missed, message.sent, message.received) with a Router module or a filter on each route. Add signature verification (Volai-Signature, HMAC-SHA256 over {t}.{rawBody} with your secret) following the exact formula on /en/docs/webhooks - don't skip it for a sensitive scenario, such as one touching payments or bookkeeping.

What you can do with it

Iterator sends SMS across a list of contacts

The Iterator module breaks an array of contacts (from Google Sheets, or a JSON array) into individual bundles, and an HTTP module then calls POST /v1/messages for each one - a batch announcement or reminder for a whole group of customers at once.

A filter on the connector decides who gets called

Make lets you put a condition right on the line between two modules - the filter only lets through the rows that match (say, the appointment is tomorrow and the customer hasn't confirmed), and only those trigger the HTTP module calling POST /v1/calls.

An error handler catches a failed call

Add an error handler route with the Ignore directive to the HTTP module calling /v1/calls - a single failed call, such as an invalid number, gets logged to a table or sent to Slack for manual follow-up, instead of failing the whole scenario.

Frequently asked questions

Is there a dedicated volai app in the Make marketplace?
You can install the volai connector for Make from an invitation link. It supports SMS, calls, voice messages, read operations and automatic triggers for SMS and call events. The connector is not yet listed in Make’s public app directory. To set it up manually, follow the HTTP and Webhooks steps below.
How many operations does a scenario with two HTTP modules use?
Each module run counts as one operation - a scenario that calls /v1/messages and then /v1/calls uses roughly two to three operations per run, depending on how many modules sit between them. Your Make plan sets the operations limit, not volai.
How do I add an error handler to the HTTP module, so one failed call doesn't stop the whole scenario?
Right-click the HTTP module, add an error handler and choose Ignore so the scenario keeps going. Resume supplies a substitute output, Break stops the run.
Why does Custom webhook return `Accepted` right away, before the scenario finishes?
That's how the module works: it confirms receipt with a 200 right away and the scenario finishes in the background. The caller (volai, in this case) only needs that 200 within a few seconds.
Why does the HTTP module move on right after POST /v1/calls, even though the call hasn't finished?
POST /v1/calls only starts the call and returns its id right away. The outcome arrives later through the call.completed, call.failed, call.no_answer or call.missed webhook.

Try it now

Sign up and get $5 in credit on top.