VoiceOI

Connect your dialer

Integrations and carriers: Google Sheets, Twilio and SIP setup

The Integrations page connects your dialer, Twilio numbers, Google Sheets and the AI engines your bots use. Carriers for the built-in dialer are added on Dialer > Carriers; accounts on VICIdial® place calls through the carriers in their own VICIdial. VoiceOI has no outbound webhooks, no public API and no native CRM sync, so call results leave through the Google Sheets step.

Applies to:Every account

Last checked against the product: . Found a mistake? Tell us.

What can I connect on the Integrations page?

Open Integrations in the sidebar (the SubManager role does not see it). Connected shows one card per connection, with a status and an on/off switch. Add integrations shows the tiles you can add.

TileWhat it is forShown whenSet up by
VicidialThe server address and API login VoiceOI uses to write outcomes back. See the connection.AlwaysThe VoiceOI team, with you
Closer dialerSends the caller’s details to a separate closer dialer during a transfer. See the guide.AlwaysThe VoiceOI team, with you
TwilioRuns a campaign’s script on calls that arrive on a Twilio number. Details.AlwaysYou, after the VoiceOI team creates the campaign
Google SheetsLets a script step add a row per call to your spreadsheet. Details.AlwaysYou
LLM providerThe model your AI agents and Smart Listen think with. Details.AI Voice Agent or Smart ListenYou
JavaA second engine for Smart Listen, on your own Tavora key. Details.Smart ListenYou
Cloud PrecisionYour own speech-to-text key for chosen questions. Details.Every accountYou
Restart serviceThe service name behind Settings > General > Restart Server, which ends all calls in progress.Only if the team allowed bot restartThe team gives you the name
  • A tile button reads Connect, Add another (several connections allowed) or Manage (LLM provider, Java and Cloud Precision have one each). A card shows Live, Switched off or Not signed in. One that needs a fix is listed under “1 connection needs attention”.
  • Carriers are not a tile. See how do I add a carrier.

What does Force bot sync do, and what do its messages mean?

The screen says saved changes reach your bots within a minute, but a Google Sheets or Twilio change reaches them on their next sync, which can take longer. Force bot sync (the button on Integrations, and Force Bot Sync in the sidebar footer) pushes your settings, integrations, scripts and other bot data to every bot now, without cutting off live calls. A notification follows it for up to 8 minutes. Press it if a test call behaves the old way.

MessageWhat it meansWhat to do
“Your bot is fully in sync” or “All N bots are fully in sync”Every bot has the update.Place a test call.
“N of M bots fully in sync”Each line names a bot and a reason: “problem with” an area such as scripts, “still syncing”, or “no report yet (offline, or restarting)”.Wait a few minutes and press again. If the same area repeats, send support the message.
“No bot answered”None of your bots is online. They sync when they next check in.Ask the VoiceOI team to check your bot servers.
“Full sync queued”No bot was listening. Bots pick it up on their next check-in, within 5 minutes.Wait. Do not press again.
“Sync already running…”A sync you started is still being followed.Wait for the result.
“Failed to trigger sync”The request did not reach the VoiceOI server.Check your connection and press again.

How do I connect Google Sheets?

The Google Sheets tile signs VoiceOI in to Google with an OAuth client from your own Google Cloud project: a Client ID and Client secret that you create in Google Cloud, which let VoiceOI ask for permission to your sheets (see the glossary). The script step that writes the rows is covered in Script Builder and Monitoring and reports.

  1. Create an OAuth client

    You

    In Google Cloud, create an OAuth client of the type Web application and enable the Google Sheets API and the Google Drive API. The How to create one link beside Client ID opens Google’s instructions. Then set up the consent screen (see the note below the steps).

  2. Add the redirect address

    You

    On the tile choose Connect, open Redirect URI for your OAuth client, copy the address and add it to your OAuth client as an authorized redirect URI. It must match exactly.

  3. Sign in

    You

    Enter the Client ID and Client secret and press Save and sign in to Google. VoiceOI saves the connection switched off and opens a Google pop-up. Allow pop-ups, choose the account and approve the permissions.

  4. Check it

    You

    The pop-up closes itself, and the panel shows the connected Google account. Test checks the connection.

  5. Use it in a script

    You

    Add an Integration node, pick this connection under Integration Account, then the spreadsheet and tab. Run a test call in the Simulator and look at the sheet.

  • Permissions. VoiceOI asks Google for access to all spreadsheets of the account you sign in with (it can read and change them), read access to that account’s Google Drive files (used to list your spreadsheets) and its email address. Sign in with an account that holds only the sheets you want VoiceOI to reach.
  • Buttons once signed in. Sign in again, Test and Change OAuth client (shows the Client ID and Client secret fields again).
  • Sign in again clears the sign-in first. It switches the connection off until the Google pop-up finishes. If you close the pop-up, the card reads Not signed in and is listed with Finish setup.

What does the Twilio tile do?

The Twilio tile is for incoming calls. Twilio sends each call that arrives on your number to a web address VoiceOI gives you, and VoiceOI replies with what to play, listen for or do next, following a campaign’s script. It is not an inbound receptionist. The tile’s summary also says it “places” calls, but dialing out through Twilio uses a Twilio SIP trunk added as a carrier.

FieldWhat to enter
Phone numberYour Twilio number in international format, for example +15551234567.
Account SID, Auth tokenFrom the Twilio Console.
CampaignUnder Inbound calls. The list holds the campaigns the VoiceOI team created for you. If it is empty, ask the team.
Webhook URLAppears after you choose a campaign. Press Copy and paste it into the number’s voice settings in Twilio.
  1. Prepare the campaign

    VoiceOI team

    The team creates the campaign, links your script and makes it active.

  2. Fill in the tile and copy the address

    You

    Enter the number, Account SID and Auth token, choose the Campaign, save, then copy the Webhook URL into Twilio.

  3. Call the number

    You

    Check that the script plays and the call appears in Call Logs (titled Interaction Logs).

  • If the caller is not among your leads, VoiceOI adds one named Inbound Caller.
  • On this route VoiceOI runs Play Audio, Listen, Check Condition, Wait, Transfer Call and End Call steps. Listen follows its keyword branches, without Smart Listen’s AI. Age Extraction works the same way and extracts no age. AM Detect passes straight through to the next step and does not detect an answering machine. The AI Voice Agent, Smart Reply and Google Sheets steps are not handled, so do not attach a script that needs them.
  • The call is hung up at once if the campaign is not active, has no script or no longer exists, or if your account has reached its call-log limit.

How do I set up the LLM provider, Java and Cloud Precision?

These tiles hold keys and endpoints that belong to you. Saving reaches your bots with no redeploy or restart. Each has a switch that turns it off and keeps the saved key.

LLM provider: the model behind your AI agents and Smart Listen

FieldWhat to enter
Start from presetsOpal (“Reliable tool calling.”), Gale (“Fastest first token.”) or Your own server (AI Voice Agent accounts only). A preset fills the fields below, never the key.
Base URL“Any chat-completions compatible base URL, such as your own vLLM server.” The test refuses private or internal addresses.
API keyThe panel shows Key on file or “No key saved yet”. Leave it blank to keep the saved key.
ModelThe model name your provider uses. Gale leaves it blank, so type a current one.
First-token timeout (ms)400 to 10000. If the model has not started answering in time, the turn is dropped and the caller hears your fallback line. The panel suggests about 1400 for your own network and 2000 to 3000 for a hosted model.

Test connection works before or after you save. It sends one real request and checks the endpoint, key, model, speed and tool calling. A pass reads “The endpoint answered” with Round trip and Exit tool calling (works or not used). If it is not used, a call may never end on its own, so try a larger model. A reply slower than the budget warns that callers will often hear the fallback line, so raise the timeout.

Failure messageWhat to do
“The endpoint rejected the API key.” or “The endpoint does not serve a model called …”Re-enter the key and check the Model spelling.
“Rate limited by the provider. The key works, but quota is exhausted.”Check your quota or billing.
“The endpoint hostname could not be resolved.”, “Nothing is listening at that endpoint.”, “The endpoint did not respond within 20 seconds.”, “The endpoint TLS certificate was rejected.” or “This address points to a private or internal network and is not allowed”Correct the host or port in Base URL, check that your server is running and has a valid certificate, and use a public address.

In effect now shows what a call uses at this moment, with the badge From this page when your saved settings are in use. Until you save, bots keep the values they were deployed with and the card can read Using deploy settings, No API key or Key unreadable. See the AI model.

Java

The Java tile appears only when Smart Listen is on. Paste your Tavora API key, press Connect and leave Use Java for Smart Listen on. When Java is unsure, slow or down, the turn goes to the backup the panel names: your LLM provider, or keywords. When you connect your own key, Tavora bills that key, not VoiceOI. Held by support means support is keeping your calls on your LLM provider for now. See Java on the Smart Listen page.

Cloud Precision

Cloud Precision is your own speech-to-text key. It affects only Listen and Age Extraction questions you set to Cloud Precision Engine (Best on Phone Calls) under Recognition Engine (ASR) (see the engine list). If the cloud engine is slow, fails or runs out of credit, Deep Precision transcribes that answer instead.

FieldWhat to enter
Engine, ModelOpal: Opal Mini (fast, cheapest), Opal Full (most accurate) or Opal Classic. Delta: Delta 3 (newest), Delta 2 Phone or Delta 2. A different engine from the saved one needs its own key.
RegionDelta only: United States or Europe.
Opal API key or Delta API keyYour key. The provider bills you, not VoiceOI.
Use Cloud Precision, TestOff means those questions use Deep Precision and the key stays saved. Test sends one short request, saves nothing, and reads “Opal answered in N ms. The key works.” (or Delta).

How do I add a carrier?

Add carriers on Dialer > Carriers (titled Carrier Connections), on the Management tab. You may see this screen called the “Carrier Manager” elsewhere. The Dialer group shows only to the Admin, and only when the VoiceOI team has switched on the built-in dialer. If VICIdial is your dialer, it places calls through the carriers in your own VICIdial and you add nothing here (which setup do I have).

You can use a SIP carrier of your own, including a Twilio Elastic SIP trunk or a Telnyx SIP connection. Your carrier bills the minutes; VoiceOI bills per bot. The Handbook tab says the carrier must support SIP (RFC 3261), G.711 u-law audio and RFC 2833 keypad tones, and must accept calls from the VoiceOI dialing servers. Check your carrier’s rules for automated and AI-voice calling before you rely on it. See the SIP trunk guide.

  1. Collect the details from your carrier

    You

    You need the SIP server address, how it authenticates you (your IP address, or a username and password with registration), the caller ID numbers you may show and the number format it expects. See Twilio and Telnyx.

  2. Get the addresses to allow

    Both

    Ask the VoiceOI team for the addresses of your dialing servers and add them to your carrier’s access list. The servers can change, so allow the whole range the team gives you if your carrier lets you.

  3. Add the carrier

    Both

    On Management, under SIP Carrier Registry, press Add Carrier. Fill in Carrier Name, Registration String and Account Entry from your carrier’s details. Dialplan Entry is required to save: the VoiceOI team enters or confirms it with you on your first carrier, so do not paste a dialplan from VICIdial or another system. Then press Create Carrier.

  4. Confirm it is live

    Both

    Saving stores the carrier on your account. Ask the VoiceOI team to confirm it is live before you rely on it.

  5. Test with your own phone

    You

    On Dialer > Missions, set the mission’s Outbound Carrier to this carrier (the mission form). Load a list with only your own number and place one call. Check that it rings, shows the caller ID you expect and appears in Call History.

The carrier form

FieldWhat to enter
Carrier Name *Required. A label for you. The name your dialplan dials must match the [header] line inside the Account Entry, not this label. Give the header a distinctive name (your company name plus the carrier), not a generic one such as twilio.
Registration StringBlank for IP authentication. For registration, enter only the part after register =>, for example user:pass@host (add :port or /extension if your carrier needs them). VoiceOI adds register => itself.
Account Entry (sip.conf)The carrier’s peer block: one [name] header and its settings. sip.conf is Asterisk’s SIP settings file, and the block is one carrier’s entry in it. You can paste the block your VICIdial carrier uses. If your carrier gives you only PJSIP settings, ask the VoiceOI team to confirm they work before you rely on them.
Dialplan Entry *Required. The dialing lines, entered or confirmed by the VoiceOI team. It starts with an exten => line for the number the dialer sends, then same => n, lines. The dial prefix is read from the pattern, so _9. gives 9.
Dialplan Entry (shape only: the team writes yours)
exten => _9.,1,NoOp(Outbound call)
same => n,Set(CALLERID(num)=+15555550123)
same => n,Dial(SIP/${EXTEN:1}@ExampleCarrier,,tTo)
same => n,Hangup()

The dialer puts the prefix 9 in front of each number and ${EXTEN:1} drops that digit again. The Set line is explained under caller ID.

Each carrier card has an Active or Disabled switch (only active carriers are used), Edit and a delete button. Protocol on a card is a label guessed from the pasted text, not a test. For Live Traffic, see the built-in dialer guide.

Does VoiceOI provide its own carrier?

Yes. VoiceOI offers its own carrier service as a separate product. It is never part of the bot price, and carrier prices are not listed here. Contact the team for prices and setup. You can also use a SIP carrier of your own.

Which caller ID do my calls show, and who is responsible?

  • Built-in dialer. The number comes from your carrier and dialplan. Tell the VoiceOI team which number to show. It goes in the Dialplan Entry as a line such as same => n,Set(CALLERID(num)=+15555550123) before the Dial line, and it must be a number you own or are authorized to use. The sample number is a placeholder.
  • Your carrier decides which numbers it lets you show, so ask it whether it accepts the number you set. Twilio, for example, accepts only a Twilio number on your account or one you have verified with it. See the Twilio guide.
  • VICIdial accounts. The number comes from your VICIdial and its carrier, not from a VoiceOI setting.

Does VoiceOI have webhooks, an API or a CRM integration?

No. VoiceOI has no outbound webhooks, no public API or SDK, and no native CRM sync with HubSpot, Salesforce, GoHighLevel, Zapier, Make or n8n. The only webhook address on the Integrations page is the Twilio one, and it carries calls into VoiceOI, not data out.

If you needWhat exists today
Call results in a CRM or other toolThe Google Sheets step, then a CSV import or a third-party tool that watches the sheet, following that tool’s documentation. VoiceOI does not build or support those connections. See send call results to your CRM. On VICIdial, outcomes are also written back as dispositions.
Call results as a fileCall Logs > Export (Admin only). See Go Live and Export.
Leads from a Google SheetNot available: the step only writes. Upload a CSV list on the built-in dialer, or keep lists in VICIdial.

Put the Google Sheets step only where you count the caller as qualified, because a call that reaches it is logged as SALE (details).

When something does not work

The Google Sheets card says “Not signed in”

Likely cause

The Google sign-in did not finish, for example because the pop-up was blocked or closed.

How to check

The card reads “Not signed in to Google yet”.

How to fix it

Press Finish setup, allow pop-ups and press Save and sign in to Google.

Still stuck

The time you tried (with time zone) and any text Google showed.

Google shows “redirect_uri_mismatch” in the sign-in pop-up

Likely cause

The authorized redirect address on your OAuth client does not match the one VoiceOI sent. Google compares the whole address, including http or https, letter case and a trailing slash.

How to check

Compare the redirect address in Google’s error details with the one on the tile.

How to fix it

Copy the address from the tile again, add it to your OAuth client (type Web application), save it and sign in again. Google can take from 5 minutes to a few hours to apply the change, so if the same error shows, wait and retry.

Still stuck

Both addresses, if they differ.

Google blocks my account at sign-in with an access error

Likely cause

The project is in the “Testing” state and the Google account is not on its list of test users.

How to check

Look at the test users on the project’s consent screen in Google Cloud.

How to fix it

Add the account, wait a minute and press Save and sign in to Google.

Still stuck

The exact text Google showed.

Google Sheets worked, then stopped about a week later

Likely cause

An OAuth client on a consent screen left in the “Testing” state gets sign-ins that expire after 7 days. This is Google’s rule, not a VoiceOI setting.

How to check

Press Test on the tile. It fails once the sign-in has expired.

How to fix it

Press Sign in again, then Force bot sync when the pop-up closes, so the bots use the new sign-in. To stop it recurring, move your consent screen out of “Testing”, or, if your project belongs to a Google Cloud organization, set the user type to Internal, which limits sign-in to that organization.

Still stuck

The text Test shows.

My spreadsheet is missing from Select Spreadsheet, or the list says “No spreadsheets found”

Likely cause

The list shows up to 100 spreadsheets the signed-in account can open, most recently changed first, so an older sheet can be missing.

The Google Drive API or Google Sheets API is not enabled in your project, you signed in with a different Google account, or the sign-in has expired.

How to check

Press Test, then check the Google email shown on the connection.

How to fix it

Edit the sheet so it becomes recent, enable both APIs, or sign in again with the account that can open the sheet.

Still stuck

The Google email on the connection and the spreadsheet name.

The LLM provider card says “No API key” or “Key unreadable”

Likely cause

No key is saved, so AI turns fail until one is.

A key is saved, but this server cannot read it, so it must be entered again.

How to check

Open the tile and read In effect now: API key shows “not set” or “unreadable”.

How to fix it

Type your key in API key, press Test connection, save, then press Force bot sync.

Still stuck

The card status and the Test connection result.

A question set to Cloud Precision Engine still runs on Deep Precision

Likely cause

The tile is not connected, or Use Cloud Precision is off.

Your bot server runs an older release.

The built-in dialer’s engine runs this choice as Deep Precision (see the engine list).

How to check

The node in the Script Builder warns to connect your speech-to-text key under Integrations > Cloud Precision (until then it runs on Deep Precision), or that your bot server runs an older release.

How to fix it

Connect the key, switch Use Cloud Precision on and press Test. For an older release, ask the VoiceOI team to update the bot server.

Still stuck

The script and node name.

Calls to my Twilio number hang up at once

Likely cause

The campaign in the Webhook URL is not active, has no script or no longer exists.

Your account has reached its call-log limit.

The number in Twilio does not hold the Webhook URL from the tile.

How to check

Confirm that the tile’s Webhook URL is the one saved on the number in Twilio.

How to fix it

Ask the VoiceOI team to confirm the campaign is active and has a script. Correct the address in Twilio if it differs.

Still stuck

The number called, the time of the call with time zone and the campaign name.

A message appears when I save a carrier and it is not saved

Likely cause

“Carrier name and dialplan are required”: Carrier Name or Dialplan Entry is empty.

“Account entry: …”: the Account Entry has a line starting with # or more than one section header.

“Dialplan template: this line is not allowed: …”: a line starts with #, looks like a section header, or runs a shell or exec application such as System().

How to check

The message names the line. Find it in the field.

How to fix it

Remove or correct that line and save again. Keep one [name] header in the Account Entry. For the Dialplan Entry, ask the VoiceOI team for the lines.

Still stuck

The full message and the field it names.

I saved a carrier but no calls go out through it

Likely cause

The carrier is saved on your account but is not yet live on the dialing server.

The carrier shows Disabled, or the mission’s Outbound Carrier is a different carrier.

Your carrier is not accepting calls from the dialing servers.

How to check

On Management the card should read Active, and the mission should name this carrier. Your carrier’s logs show whether it saw the call.

How to fix it

Set the carrier Active and the mission’s Outbound Carrier, and ask the VoiceOI team to confirm the carrier is live and its addresses are allowed at your carrier.

Still stuck

The carrier and mission names, the time of a test call (with time zone) and what Call History shows.

Calls fail right after dialing, or drop at once

Likely cause

The carrier host cannot be reached from the dialing server, or the carrier rejects its address.

The number format is wrong for the carrier. The dialer removes a leading 1 from an 11-digit number, and many carriers want a plus sign and country code.

The prefix in the exten pattern and the ${EXTEN:n} offset do not match, the mission has its own Dial Prefix that replaces the one read from the pattern, or the pattern starts with X or N (for example _X.) and gives a prefix that cannot be dialed.

How to check

Place one call to your own phone and compare it with your carrier’s call records.

How to fix it

Allow the dialing servers at your carrier and ask the VoiceOI team to correct the Dialplan Entry (country code, prefix offset, a pattern that starts with a digit). See calls end in seconds and every call fails after a prefix.

Still stuck

The time of the call with time zone, the number dialed and your carrier’s reason code.

A change I saved is not showing on calls

Likely cause

A bot that was offline or restarting waits for its next check-in, within 5 minutes. A call already in progress may keep the old settings.

How to check

Press Force bot sync and read the result.

How to fix it

Wait for “fully in sync”, then place a new test call.

Still stuck

The sync message and what you changed.

Common questions

Does VoiceOI have a HubSpot, Salesforce or GoHighLevel integration, a public API or webhooks?

No. VoiceOI has no native CRM sync, no public API or SDK and no outbound webhooks. Call results leave through the Google Sheets step, one row per call, and you import the sheet into your CRM or use a third-party tool that watches it.

Can I use Twilio or Telnyx with VoiceOI?

Yes, as SIP carriers on the built-in dialer, added under Dialer, Carriers, Management. The Twilio tile on the Integrations page is for incoming calls only. Accounts that use VICIdial keep their carriers in VICIdial.

Why does the Google Sheets tile ask for a client ID and client secret?

VoiceOI signs in to Google with an OAuth client from your own Google Cloud project, so the permission is granted through your project. You create the client, add the redirect address shown on the tile, then press Save and sign in to Google.

Can I choose any caller ID for my calls?

No. Use only numbers you own or are authorized to use, and that your carrier allows you to show. VoiceOI does not offer spoofing or number rotation, and you are responsible for the caller ID your calls show.

Related

VoiceOI provides tools. The customer is the caller and is responsible for consent, do-not-call lists, calling hours, caller ID, recording and monitoring consent, and disclosures. This page is not legal advice.

VICIdial is a registered trademark of the Vicidial Group. VoiceOI is an independent product and is not affiliated with or endorsed by the Vicidial Group. Asterisk, Twilio and other product names are trademarks of their respective owners.

Questions about your setup? Talk to the VoiceOI team.