Skip to content

Object model

Everything in Voicebot hangs off a two-level ownership chain.

Tenant ← you, as our customer
├── Tenant administrator ← holds the tenant API key
├── Trunk ← the voice path to your telephony
└── Account ← a unit inside your organisation
├── User ← a person who signs in
├── Number / Pool ← numbers this account may dial from
├── Scenario ← call flow definition
├── Agent ← a scenario bound to a number and a schedule
└── Communication ← one dialable unit: one recipient, one run

The top-level container. In a cloud deployment there are many tenants on one installation and they are fully isolated from each other. In an on-premises deployment there is normally one.

A tenant is issued by us, never self-created. The endpoints live on the Tenant API, which is reachable only from the internal network.

POST/v1/internal/tenant
POST/v1/internal/tenant/{sid}/api-key

A unit inside your organisation: a department, a brand, a region or a client of yours. Accounts are where all the day-to-day work happens, and they are the isolation boundary for scenarios, numbers and call data.

This is the entity your system mirrors: when a unit appears on your side, an account appears on ours.

POST/v1/internal/account
GET/v1/internal/account

A person who signs in. Users are scoped: a tenant administrator sees the whole tenant, an account-level user sees one account. Capability gates the action; scope gates the objects it may touch.

GET/v1/user

Read Identity and access for how roles and capabilities resolve.

EntityWhat it isLives on
Numberone number Voicebot may dial from or receive onAccount API
Number poola group of numbers one agent answers onAccount API
Scenariothe call flow: what is said, heard, decidedAccount API
Scenario versionan immutable published snapshot of a scenarioAccount API
Agenta scenario bound to a gateway: one number, or a poolAccount API
Communicationone dialable unit: one recipient, one run, one rowAccount API
Trunkthe SIP path between Voicebot and your telephonyTenant API

A number is a logical record inside Voicebot saying “this identifier belongs to this account”. A trunk is the actual signalling path to your carrier.

Registering numbers without a working trunk produces a system that accepts every dispatch request and never rings anybody. They are configured by different people at different times. See phase 1, step 3.