WWebBuddyMarketplace
Using Reception AI

Phone numbers and carriers

What Twilio, Plivo, SIP, Vonage and Telnyx lines can do, how to import a number, which webhooks to set, how calls are metered, and outbound campaigns.

7 min readUpdated Oct 17, 2026Applies to Reception AI 1.0.0

On this page

Reception AI does not sell phone numbers. You bring your own carrier account, import a number into a workspace, and assign it to a receptionist. Carrier charges are billed to you by the carrier.

What each carrier can do

This table is enforced in code: a call a line cannot make is refused with the reason, rather than attempted.

Line Answers calls Places calls
Twilio Yes, live conversation Yes, turn-based conversation
Plivo Yes, live conversation No
SIP trunk Yes, if your trunk routes calls to OpenAI's SIP endpoint No
Vonage No (import only) Limited: plays your greeting as a one-way announcement
Telnyx No (import only) Limited: see the note below
Test number / test SIP address No, practice only No

For a receptionist that answers and makes calls, use Twilio. Plivo is a good choice for answering only.

Note

Telnyx outbound places the call on your Telnyx Call Control connection, which then decides what happens. It needs a Call Control connection ID on the number, and the import dialog does not collect one in 1.0.0, so treat Telnyx outbound as not available yet.

Test numbers (+14155550…) and test SIP addresses are fictional. They let you try the workspace and the Ring in simulator, and they never ring a real phone.

Before you connect a real number

  • Your install must be reachable at a public HTTPS address, with WebSocket upgrades passed through. See Installation.
  • APP_URL must be that address. Webhook URLs, the audio stream URL and signature checks are all built from it.
  • OPENAI_API_KEY must be set: live calls are answered by OpenAI Realtime.

For local testing, npm run tunnel gives you a temporary public address; see Quick start.

Importing a number

Open Phone numbers in the workspace, choose the carrier and fill in:

Carrier You enter How it is checked
Twilio The number, Account SID and Auth Token Looked up live in your Twilio account
Plivo Auth ID and Auth Token Looked up live in your Plivo account
Vonage API key and API secret Looked up live in your Vonage account
Telnyx API key Looked up live in your Telnyx account
SIP trunk SIP URI, username and password Format check only

Credentials are encrypted per number with CREDENTIAL_ENCRYPTION_KEY. Importing the same number again updates it. Each real number counts toward the workspace plan's number allowance (test numbers do not).

Automatic webhook setup

With Point this number at Reception AI switched on (the default), the app configures the carrier for you:

  • Twilio: sets the number's voice webhook to POST https://<APP_URL>/api/voice/inbound.
  • Plivo: creates (or reuses) a Plivo application named ReceptionAI with the answer URL https://<APP_URL>/api/voice/plivo, and attaches the number to it.

Existing numbers can be re-pointed later from the same screen. Vonage, Telnyx and SIP are never configured automatically.

Webhooks, if you set them by hand

Carrier Setting in the carrier console Value
Twilio A call comes in (HTTP POST) https://<APP_URL>/api/voice/inbound
Plivo Answer URL (POST) https://<APP_URL>/api/voice/plivo
OpenAI (for SIP) Project → Webhooks https://<APP_URL>/api/voice/realtime

The app answers with instructions that point the carrier at wss://<APP_URL>/api/voice/stream, the audio relay. That stream only opens with a signed token that expires after five minutes, issued by a webhook that passed its signature check.

Carrier-specific setup

Twilio

  • Signatures are checked with the Auth Token stored on the number.
  • With APP_URL set, inbound calls stream to the live relay and are answered by OpenAI Realtime.
  • Without APP_URL, inbound calls fall back to the turn-based path described below.
  • send_sms works from Twilio numbers that have SMS enabled.

Plivo

Plivo needs three platform settings, all under Configuration:

Setting Why
APP_URL There is no turn-based fallback on Plivo. Without it, callers hear "This line is not configured yet" and the call ends.
PLIVO_AUTH_TOKEN Verifies Plivo's webhook signatures. Without it every Plivo webhook is rejected.
OPENAI_PROJECT_ID Required for Plivo calls in 1.0.0, even though it is labelled optional. Without it callers hear "This line is not configured yet".

Important

Plivo signatures are checked against the single platform-wide PLIVO_AUTH_TOKEN, so every Plivo number on an install must belong to that one Plivo account. On a multi-tenant SaaS, customers cannot each bring their own Plivo account in 1.0.0; offer Twilio instead.

SIP trunk (OpenAI SIP)

With a SIP trunk, your carrier sends calls straight to OpenAI and OpenAI notifies Reception AI, which accepts the call and runs the conversation:

  1. In the OpenAI dashboard, note your project ID and create a webhook for your project pointing to https://<APP_URL>/api/voice/realtime. Copy its signing secret (whsec_…).
  2. In Configuration, set OPENAI_API_KEY, OPENAI_PROJECT_ID and OPENAI_WEBHOOK_SECRET.
  3. Configure your trunk to send calls to sip:<your-project-id>@sip.api.openai.com;transport=tls, following OpenAI's SIP documentation.
  4. Import the dialled number as a SIP trunk line and assign it to a receptionist. The dialled number must match the imported number.

The SIP URI, username and password stored at import are not used by this path. SIP calls do not speak the greeting first, always use the default Realtime model, and are not checked against the monthly minute allowance in 1.0.0.

Live calls and the turn-based path

Live (Realtime) Turn-based
Used for Twilio and Plivo inbound with APP_URL, SIP inbound Every Twilio outbound call, Twilio inbound without APP_URL
How it works Speech to speech with OpenAI Realtime; callers can interrupt Twilio speech recognition (English, US), an xAI model, then text to speech
Needs OPENAI_API_KEY XAI_API_KEY (callers hear "the desk is offline" without it)
Knowledge and workflow Knowledge only via search_catalog; no workflow Both
Length Up to 15 minutes (relay) or 10 minutes (SIP) Ends after 8 exchanges

On the turn-based path, Reception AI voices are synthesised by xAI and OpenAI voices by OpenAI. If synthesis fails or takes longer than five seconds, Twilio's built-in voice reads the reply instead.

When a workspace runs out of minutes

Inbound calls on Twilio and Plivo are checked before they are answered. A workspace over its monthly allowance hears: "This line has used all of its included minutes for the month. Please try again later, or reach the business another way." and the call ends. No minutes are spent.

In 1.0.0, SIP calls, outbound calls and campaigns are not checked against the allowance. See Selling it as SaaS.

Outbound calls and campaigns

Outbound calling is on by default; FEATURE_OUTBOUND turns it off for the whole platform.

  • Call someone on a receptionist's Phone setup places one call.
  • Reach out (campaigns) calls a list of contacts.

Every outbound call:

  • checks the platform switch, the receptionist's direction, the line's capability and the do-not-call list before dialling;
  • uses the caller ID override if you set one, otherwise the line's own number;
  • is recorded as failed (and not billed) if the carrier rejects it.

On Twilio, an outbound call runs on the turn-based path and opens with the receptionist's greeting. In 1.0.0 the outbound "First line" and the automated-caller disclosure are saved on the call record but not spoken, so put any disclosure you need in the greeting itself.

Campaign settings

Setting Default Range
Lines at once 3 1 to 8
Retry gap 60 minutes 5 minutes or more
Attempts per contact from the receptionist 1 to 5
Calling window from the receptionist Checked in the campaign's timezone, which defaults to America/New_York

Campaigns pause on a line that cannot dial. Import contacts as CSV or XLSX with the columns Name, Phone, Email, Company, Notes, or paste phone,name,company lines (numbers without a country code are treated as +1).

Warning

Automated calling is regulated in most countries (for example consent rules, calling hours and caller ID requirements). You and your customers are responsible for complying with the rules where you call.

How calls are metered

Call Usage recorded
Live inbound (relay or SIP) Call length rounded up to whole minutes, minimum 1
Turn-based exchange One phone turn per exchange (0.25 minute by default)
Twilio outbound The duration Twilio reports, rounded up; unanswered calls cost nothing
Vonage or Telnyx outbound 1 minute per call

Rates are adjustable; see Configuration.

Troubleshooting calls

Symptom Likely cause
Twilio call is answered but the conversation is slow and robotic APP_URL is not set, so the call used the turn-based path
Plivo call says "This line is not configured yet" APP_URL or OPENAI_PROJECT_ID is missing
Plivo call hangs up immediately PLIVO_AUTH_TOKEN is missing or belongs to a different Plivo account
Call connects, then silence WebSocket upgrades are blocked by your proxy, or OPENAI_API_KEY is missing or invalid
Twilio call hangs up as soon as it connects The signature check failed: APP_URL differs from the webhook URL in Twilio, or the Auth Token stored on the number is out of date (re-import the number)

More in the FAQ.