Skip to content
NagentNagent
Log inSign upHire your AI Growth Team
NagentNagent
Log inSign up
All documentation

Phone voice agents for customers

Connect Twilio or Exotel, add your numbers and webhooks, and set the calling hours, attempt limits, recording and cost caps your voice agents keep on customer calls.

Browse documentation

What a voice line is

A voice line is your workspace's connection to a telephone provider for customer calls. Your collections desk dials approved campaigns on it, and your customers call it for servicing. Each line has its own provider, numbers, compliance settings and cost caps, and you can pause it at any time. This is in Beta.

Two providers are available:

ProviderDefault forNotes
TwilioUS linesSigns every webhook; can hang up, play digits and pause recording by API
ExotelIndia linesRuns your Exotel flow; webhooks are protected by a user and password you choose

Plivo, Ozonetel and Knowlarity are listed and not yet available. An India line starts on Exotel, and you may choose Twilio for it instead.

Before you start

  • An admin with the Tools permission adds and edits lines.
  • Someone who can stop agents (AI governance: kill) pauses and resumes them.
  • Campaigns are created by someone with Workflows: write and approved by a different person with Approvals: decide.

Your credentials are sealed when saved, the same way connector secrets are. Nobody can read them back: the line shows which ones are set and the last four characters of the account id.

Connect Twilio (US)

  1. In the Twilio console, note the Account SID and Auth token.

  2. Buy or port the numbers the line will use. Under Voice geographic permissions, allow only the countries you call.

  3. Add the line (POST /api/admin/voice/lines) with the region US, the numbers, your bank's name as customers should hear it, the human queue number for transfers, and the credentials:

    { "provider": "twilio", "accountSid": "AC...", "authToken": "..." }
    
  4. The answer lists two webhook URLs for the line. On each number in Twilio, set A call comes in to the answer URL (HTTP POST) and the Call status changes URL to the status URL.

Twilio signs every request with your auth token. A request that does not verify against this line's own token is refused before anything is read.

Connect Exotel (India)

  1. In Exotel, note the Account SID, API key and API token, and which cluster your account is on: api.in.exotel.com (Mumbai, keeps data in India) or api.exotel.com (Singapore).

  2. Choose a webhook user (letters, digits, _ or -, at least 6) and a long random password. Exotel does not sign its requests, so this pair is what proves a request came from your flow.

  3. In App Bazaar, build one flow for the line:

    • Passthru: the line's passthru URL. A refused call takes the flow's hang-up branch.
    • Greeting, dynamic text: the greeting URL. This is the opening line: your bank's name, that this is an automated assistant, and that the call is recorded.
    • Connect, dynamic number: the connect URL, which answers with your human queue. Put your webhook user and password in each URL: https://<user>:<password>@your-host/api/webhooks/voice/exotel/<line>?step=greeting.
  4. Add the line with the region IN and the credentials:

    {
      "provider": "exotel", "accountSid": "...", "apiKey": "...", "apiToken": "...",
      "subdomain": "api.in.exotel.com",
      "flowUrl": "http://my.exotel.com/<sid>/exoml/start_voice/<app id>",
      "webhookUser": "...", "webhookPassword": "..."
    }
    
  5. Assign your ExoPhones to the flow. Set the status callback for calls to the line's status URL.

If your security team wants it, ask Exotel support for their IP ranges and allow only those at your edge. Never put a password or token in Voicebot custom parameters: Exotel sends those in plain text.

Compliance settings

SettingIndia defaultUS defaultWhat it does
Calling hours08:00 to 19:00, Asia/Kolkata08:00 to 21:00No call starts outside them, in the customer's own time zone when known
Attempts per day33Rings count, answered or not
Attempts per week1010Over seven days
Gap between attempts120 minutes120 minutes
Record callsononThe opening line says so
Consent before diallingoffonCustomers without consent on record are skipped
Languagesen-IN, hi-INen-USIndian languages use Sarvam to hear and speak
Promise-to-pay window7 days7 daysThe latest date a promise may fall on
Identity checkdate of birthdate of birthOr the last four of the loan account

The India hours follow the RBI rules on recovery agents as your knowledge base holds them. Set the hours your own policy states; a bank may narrow them, and the hours apply to every campaign on the line.

What every call does

Today a line says the opening disclosure and then connects the caller to your human queue. The agent conversation (collections and servicing in the caller's language) is rolling out next, under the same rules below, which are already enforced in the call engine.

  • Opens with the disclosure before the agent says anything: your bank's name, that the caller is an automated assistant, and that the call is recorded.
  • Checks it is the right person, then their identity, before mentioning the account, dues or amounts. Anyone else gets a polite close and nothing about the account.
  • Never asks for a card number, PIN, OTP, CVV or password. Payment is a UPI collect request, payment link or mandate link sent to the customer's phone by SMS or WhatsApp; they pay in their own app. If a customer starts reading a card number or code, it is removed from the transcript and the agent asks them to stop.
  • Keeps the conduct rules: no threats, shaming, police or court language, and no mention of family or employer. A line that breaks them is replaced and recorded as a finding; a second breach hands the call to a person.
  • Stops calling on request: "don't call me" ends the call and adds the number to your do-not-call list.
  • Hands over warmly: when the customer asks for a person, or the agent cannot help, the call goes to your human queue with who it is, how they were verified, what they asked and the transcript so far.
  • Never takes a spoken yes for money. On servicing calls, anything that moves money or cannot be undone is confirmed only by your bank's own step-up (an OTP to the registered mobile, or an app push).

Campaigns

A campaign carries an approved contact plan from your collections desk onto a line: the plan, its script and the customers. It is created as a draft and dials only after a different person approves it. Dialling (POST /api/admin/voice/campaigns/<id>/dial) checks, for each customer and in this order: the campaign is approved, the line and the agent are not paused, the agent is at level 2 or above, the workspace can spend, the day's minute and spend caps leave room for a whole call, it is inside calling hours, the number is not on the do-not-call list, consent is on record where required, and the attempt limits. Every decision is recorded on the call log with its reason.

Cost caps and the kill switch

Each line has a per-minute rate (set it to your contract rate), a longest call, and daily minute and spend caps. A call is pre-flighted at its longest length before it is placed.

Pausing the line (POST /api/admin/voice/lines/<id>/pause) or pausing the voice agent in AI governance stops dialling at the next number. Callers reach your human queue instead of the agent.

After a call

Each answered call goes to your collections desk lead (or your service desk for inbound calls) as a task on their team board, with the outcome and the transcript on the call record. Calls with conduct findings, an opt-out or a failed identity check also go to Conduct QA.