Kural · Technology
WhathappensonaKuralcall.
This page is for the person who has to sign off on it: an IT head, a hospital compliance officer, a reviewer doing diligence. Real phone lines, streamed speech in both directions, a gate that runs before a single number is dialled, and data that stays in India.
Oneturn,streamedendtoend.
Caller audio arrives from the carrier over a signed stream and goes straight into speech recognition. A voice-activity model decides when the caller has finished a thought — not when they paused for breath — and the transcript goes to the language model with the conversation so far, the agent's instructions and the facts it is allowed to use. Tokens come back as a stream; the reply is sent to speech synthesis a sentence at a time and played while the rest is still being written.
If the caller speaks over the agent, playback is cancelled and the new speech takes over — a real interruption, not a restart. If the model is slow to start, a short natural filler keeps the line alive. Nothing on this path touches the database: at call start one bundle is loaded with the agent's published configuration, the chosen providers and the customer's compliance policy, and the call runs from memory.
Tamil and English, mixed
Recognition and synthesis are chosen per agent for the language the caller actually speaks, including both in one sentence. Hindi is in beta.
Providers locked per call
Telephony and the voice never change mid-call. Recognition and the language model have fallback chains behind circuit breakers, invisible to the caller.
Tools during the call
Lookup, availability and booking run against your system while the caller is on the line. The agent only promises what a tool has confirmed.
Clean handoff
When a person is needed, the call is transferred with everything said so far attached. If a tool fails, the agent follows your configured fallback and the result says so.
Sevenchecksbeforeanumberisdialled.
Outbound calling in India is regulated, and the people being called did not ask for a machine. So the gate is code, not a policy document. Every dial request passes these checks in order, and a rejection is recorded with its reason:
- Is outbound allowed for this customer right now? Suspended or incomplete accounts cannot dial.
- Is the telecom registration for commercial calling (TRAI / DLT) verified and current?
- Is the number on a do-not-call or suppression list?
- Is it inside the calling window the customer set, in their time zone? If not, it waits for the next one.
- Are the attempt caps for the day and for the campaign respected?
- Is there balance or an included minute to pay for the call?
- Is a concurrency slot free? If not, the call queues instead of failing.
Inbound has its own rule: the agent says what it is at the start of the call, and offers a person whenever the caller asks for one.
Agentsareversioned,likecode.
A Kural agent is a configuration: the conversation, the facts it may use, the fields it must collect, the tools it can call, the voice and the languages. Each change is a new version. It is validated, tested in the console on a browser call or an allow-listed number (never billed), approved by the customer, then published. The previous version stays one click away. Live calls finish on the version they started on, because published versions are immutable.
The customer edits the safe knobs — hours, slots, the fee table, who to transfer to. Vektor edits the prompts. That split is what keeps a healthcare agent from drifting into medical advice after a well-meant edit.
Trigger→liveaction→result.
- Trigger. Your system calls the API with the agent, the number, your own reference id and any context. The request is idempotent.
- Act. During the call, the agent uses the tools you configured — look up a patient, check a slot, book it — with credentials encrypted per customer. Tool arguments are validated against a schema and are never built from raw caller speech.
- Result. A signed webhook carries your reference, the outcome, the structured fields and the status of every tool call, with retries for 24 hours. The same record is available by API and in the console, with the recording and transcript attached.
Failure is an outcome, not silence: a tool that times out produces a result that says so, so your system can follow up.
Whatitrunson.
| Layer | Provider | Note |
|---|---|---|
| Telephony | Indian carrier, real phone lines | Ordinary inbound and outbound calls on a number you own or we provision. The carrier sits behind one adapter, so a second carrier is a configuration change. |
| Speech to text | Streaming recognition tuned for Tamil, English and code-switching | Partials and finals as the caller speaks; a second engine behind a circuit breaker for fallback. |
| Language model | Pluggable model behind one adapter | Hosted or self-hosted models through the same interface, with a fallback chain. The model only sees the facts and script the customer approved. |
| Text to speech | Natural neural voices, Tamil and English | Streamed sentence by sentence. The voice is locked for the life of a call. |
| Database | Managed Postgres, Mumbai region | Row-level security on every tenant table; transcripts stored redacted; secrets encrypted at the application level. |
| Queues and cache | Redis-compatible queue | Dialer, post-call processing, webhook delivery, retention jobs, concurrency semaphore. |
| Recordings | Object storage, India | Opened only through short-lived signed URLs; every play is audited. |
| Billing | Prepaid credits, rated in our system | Usage is metered per call in our own ledger; GST invoices are generated in-house. UPI, card or bank transfer. |
| Observability | Error tracking and tracing | Personal data is redacted before anything leaves the runtime. |
| Hosting | Single region, India | Everything runs in an Indian region today; moving clouds is a deployment change, not a rewrite. |
The runtime, control API, admin app and customer console are TypeScript on Node 22, behind Caddy for TLS. Vendor SDKs live only inside adapters; the core of the call loop depends on ports, so swapping a provider is a new adapter that passes the same contract tests.
Wherethedatalives,andwhocanseeit.
Call records, redacted transcripts and recordings are stored in India. Audio and text go to speech and language providers over TLS only for the length of the call. The customer console, the admin app and the API run behind separate domains; the admin app sits behind an identity gate with MFA. Personal data is masked by default in lists, exports are watermarked, and healthcare customers get a stricter tier where revealing a record needs a reason and is logged.
Roles
The customer is the Data Fiduciary; Vektor Labs is the Data Processor. A data-processing agreement and a published sub-processor list are part of onboarding.
Consent
Every call opens with an AI disclosure. Consent is recorded per call and travels with the record.
Data-subject requests
Access, correction and erasure requests have a workflow in the console with a service level, and erasure jobs that are verified rather than assumed.
Breach register
An incident register and a runbook for the 72-hour notice to affected individuals, with a contact matrix per customer.
Retention
Transcripts and recordings expire on the schedule the customer chooses. Retention jobs run on the queue and are logged.
Audit
An immutable audit log. Customers can see every time Vektor staff touched their data.
The company-wide position on encryption, access, backups and the grievance officer is on the security page.
Readit,thentryit.
The demo console is open. Open a sample workspace, place a browser test call, interrupt the agent, and look at the result it hands back. Test calls are never billed and never leave the sandbox.
Put Kural on one real call.
Give us one list, or one number that rings too often. We'll write the call with you, run it on a real line, and show you what came back.
One number, one credit pack, no free plan. Pricing is published.
