Voice calls for agents

Install one skill, hand your agent a phone, and let it call for real.

Voizbot exposes a multitenant public API for outbound calls, transcripts, templates, tools, and call logs. This page lists the public skill bundle — SKILL.md plus the Python CLI — and how to configure it.

Public API

Use https://api.voizbot.com/v1 with a Voizbot API token generated in Settings.

Agent-friendly

Point your coding agent at the two public URLs — it can fetch SKILL.md and the script and wire them like any other skill.

Multitenant by default

Templates, tools, phone numbers, calls, and transcripts are scoped to the authenticated organization.

1 · Install

Fetch SKILL.md and the CLI script

There is no installer script. Give your AI agent the two public URLs (or download them yourself): SKILL.md describes when and how to call the API; voizbot_calls.py is the standalone CLI. The agent can place them in whatever skill tree your environment uses — Hermes-style layouts often use ~/.hermes/skills/voizbot-phone-calls/.

Optional manual fetch:

curl -fsSL https://voizbot.com/skills/voizbot-phone-calls/SKILL.md -o SKILL.md
curl -fsSL https://voizbot.com/skills/voizbot-phone-calls/scripts/voizbot_calls.py -o voizbot_calls.py
chmod +x voizbot_calls.py

2 · Configure

Create a Voizbot token and save your config

  1. Sign in to Voizbot and open Settings.
  2. Generate an API token.
  3. Save a config file at ~/.config/voizbot/config.json.
  4. Use the numbers command once to discover your phoneNumberId if you do not know it yet.
{
  "baseUrl": "https://api.voizbot.com/v1",
  "apiToken": "VOIZBOT_TOKEN",
  "phoneNumberId": "pn_..."
}

The CLI also accepts VOIZBOT_API_TOKEN, VOIZBOT_API_BASE_URL, and VOIZBOT_PHONE_NUMBER_ID if you prefer environment variables.

3 · Discover resources

Inspect phone numbers, templates, and tools before making calls

The skill is built around the public API, so agents can inspect the organization resources instead of hardcoding ids.

python3 ~/.hermes/skills/voizbot-phone-calls/scripts/voizbot_calls.py numbers
python3 ~/.hermes/skills/voizbot-phone-calls/scripts/voizbot_calls.py templates
python3 ~/.hermes/skills/voizbot-phone-calls/scripts/voizbot_calls.py tools

The numbers command is especially important because outbound calls require phoneNumberId.

4 · Call

Start with a dry run, then place the real call

Dry runs validate the payload and create the call record without touching the phone network. Once the prompt looks right, remove --dry-run.

python3 ~/.hermes/skills/voizbot-phone-calls/scripts/voizbot_calls.py create   --to "+346****1222"   --template-id "out_tpl_demo"   --extra-system-prompt "Confirm the appointment and repeat the final date before ending the call."   --dry-run

The same flow is available over plain HTTP if your agent prefers raw API calls.

curl -X POST "https://api.voizbot.com/v1/calls/outbound"   -H "Authorization: Bearer *** \
  -H "Content-Type: application/json"   -d '{
    "phoneNumberId": "pn_123",
    "to": "+141****0123",
    "templateId": "out_tpl_follow_up",
    "extraSystemPrompt": "If they agree, offer Tuesday at 18:30 first.",
    "extraFunctionToolIds": ["tool_check_calendar"]
  }'

The response returns jobId. In the multitenant API that value is the call id you can reuse with call <id> and transcript <id>.

5 · Monitor

Read status, transcript, and outcome

Agents should avoid stupidly tight polling loops. Start with wider waits, then tighten only if the call is clearly close to finishing.

python3 ~/.hermes/skills/voizbot-phone-calls/scripts/voizbot_calls.py calls --filter active --limit 10
python3 ~/.hermes/skills/voizbot-phone-calls/scripts/voizbot_calls.py call call_abc123
python3 ~/.hermes/skills/voizbot-phone-calls/scripts/voizbot_calls.py transcript call_abc123

Calls expose status, transcript, metadata, events, and recording info through the public API. When the call is finished, summarize the concrete agreement or blocker, not a fluffy novel.

6 · Files

Public skill bundle URLs