Skip to main content
Vobiz runs as a Zoho PhoneBridge telephony provider. A Zoho user clicks a phone number, the call is placed on Vobiz from their browser, and the call log lands on the Zoho record with its recording.
Early access. Vobiz hosts this integration for you on request: email support@vobiz.ai and we set it up with your Zoho administrator. Prefer to run it yourself? Self-host the open-source backend, vobiz-ai/Vobiz-Zoho-Calling. One-click install from Zoho Marketplace comes once Zoho approves the Vobiz Telephony listing.
There is no widget to install in Zoho. Zoho draws the whole calling interface: its own call bar and its own call pop-ups. Each agent keeps one Vobiz softphone tab open in the browser, and that tab carries the audio.

What you get

The backend uses Zoho’s PhoneBridge API only, with no code specific to one Zoho app, so calls appear wherever Zoho shows PhoneBridge telephony in your organization.

How it works

Sequence diagram of a Zoho click-to-dial call across four lanes: Zoho, the Vobiz backend, the agent's browser and the customer. Zoho posts tonumber to the backend, the backend hands the number to the agent's softphone over the call-events stream, the browser sends the SIP INVITE and Vobiz dials the customer, audio flows both ways, and the backend reports callnotify ringing, answered and ended back to Zoho.Sequence diagram of a Zoho click-to-dial call across four lanes: Zoho, the Vobiz backend, the agent's browser and the customer. Zoho posts tonumber to the backend, the backend hands the number to the agent's softphone over the call-events stream, the browser sends the SIP INVITE and Vobiz dials the customer, audio flows both ways, and the backend reports callnotify ringing, answered and ended back to Zoho.
  • Zoho calls your backend when a user clicks a number.
  • The backend passes the number to that agent’s open softphone tab.
  • The browser places the call to Vobiz, and Vobiz asks your backend’s /answer URL what to do. The backend dials the customer with the agent’s caller ID.
  • Your backend reports ringing, answered and ended back to Zoho. The final state carries the duration and the recording link.
  • Inbound calls reach the same /answer URL. The backend rings the agents signed in to the Vobiz account that owns the dialled number.
  • Zoho is always reached in your organization’s own Zoho datacentre, worked out when you connect.

Ways to get started

One-click install is coming. Once Zoho approves the Vobiz Telephony listing in Zoho Marketplace, you will be able to install it from Zoho’s own Marketplace page and connect to the Vobiz-hosted backend with no setup call. Until then, use one of the two options above.

Hosted by Vobiz: how setup works

1

Request access

Email support@vobiz.ai with your Vobiz Auth ID, your Zoho organization’s datacentre (for example India or US), and the agents who will take calls: each one’s name and Zoho login email.
2

Connect your Zoho organization

On a short setup call, your Zoho administrator installs Vobiz Telephony from Marketplace → Telephony and approves the connection to Vobiz. Vobiz then activates click-to-dial for each of your agents.
3

Agents sign in

Each agent receives a personal sign-in link. They open it, sign in with your Vobiz account (Auth ID and Auth Token) or SIP direct, allow the microphone, and keep the tab open. A green dot and Ready mean they can make and take calls.
Everything after that, from making calls to logging, recordings and inbound calls, works as described in Sign-in modes and Using it.

Prerequisites

Vobiz account

The Auth ID and Auth Token from Vobiz Console → API credentials, at least one active voice-enabled number, and balance. Every call is billed.

Zoho organization

A Zoho CRM edition that supports telephony (PhoneBridge) integrations, and an administrator who can install a provider from Marketplace → Telephony.

Your server (self-hosted only)

Node.js 20.12 or later, a public HTTPS URL such as https://calling.example.com, and a persistent disk. There are no npm dependencies.

Agents

A current Chrome, Edge or Firefox, with microphone access allowed for your backend’s URL.
To self-host, you also need the Vobiz Telephony listing enabled for your Zoho organization and the PhoneBridge OAuth client (client ID and client secret) for it. Vobiz provides both during early access.
A client you register yourself at the Zoho API console does not work. Zoho grants PhoneBridge scopes only to the provider’s own client. The redirect URI you use must be registered on that client exactly, character for character.

Self-host it

These steps are for running the backend on your own server. If Vobiz hosts it for you, skip to Sign-in modes.
1

Request access

Email support@vobiz.ai with your Vobiz Auth ID, your Zoho organization’s datacentre (for example India or US) and your backend’s redirect URI, https://calling.example.com/oauth/zoho/callback. You receive the PhoneBridge client ID and secret.
2

Get the code and configure it

Fill in PUBLIC_BASE_URL, APP_SECRET, TOKEN_ENCRYPTION_KEY, ADMIN_TOKEN, DATA_DIR, ZOHO_PB_CLIENT_ID, ZOHO_PB_CLIENT_SECRET and ZOHO_PB_REDIRECT_URI. No Vobiz credential goes in .env. See Configuration.
3

List your agents

Create agents.json (in DATA_DIR, or copy agents.example.json). One entry per agent, keyed by an agent ID you choose:
Each agent needs email (matched to the Zoho user’s email) or zohoUser (the Zoho PhoneBridge user ID). No SIP login, password or number.
4

Run it on a public HTTPS URL

Put it behind your load balancer or reverse proxy so PUBLIC_BASE_URL reaches it. Run exactly one instance.
5

Install Vobiz Telephony in Zoho

As a Zoho administrator, open Marketplace → Telephony, choose Vobiz Telephony and install it for your organization.
6

Connect your Zoho organization

Open https://calling.example.com/admin/login and enter your ADMIN_TOKEN. In the same browser, open https://calling.example.com/zoho/phonebridge/connect and approve the request in Zoho. The response shows your orgId, for example org_1a2b3c4d5e6f7a8b.
7

Register click-to-dial

This activates Vobiz as your organization’s phone system, pairs your Zoho users with the agents in agents.json, and registers click-to-dial for each pair. The response lists any unmatchedAgents and unmatchedZohoUsers. Run it again whenever you change agents.json.
8

Send agents their sign-in links

Send each agent their own link privately. It works like a password.
9

Agents sign in

Each agent opens their link, signs in to Vobiz, allows the microphone, and keeps the tab open. A green dot and Ready mean they can make and take calls.
Each Zoho organization you connect is kept separately. A Zoho organization is not tied to one Vobiz account: each call uses the Vobiz account or SIP endpoint that agent signed in with.

Sign-in modes

Opening the sign-in link starts a 12-hour agent session in that browser. The softphone then shows Sign in to Vobiz with two tabs. The agent enters the Auth ID (MA_XXXXXXXX) and Auth Token and clicks Sign in. The backend then:
  1. Checks the pair with Vobiz.
  2. Finds or creates one application in that account named Vobiz-Zoho-PhoneBridge, with answer URL https://calling.example.com/answer and hangup URL https://calling.example.com/hangup. It never changes any other application.
  3. Finds or creates one SIP endpoint for the agent (alias zoho-<agentId>), sets a fresh random SIP password, and attaches it to that application. If the agent already has a softphone tab open, the current password is kept instead (see More than one tab).
  4. Starts the softphone with that SIP login and asks for the microphone straight away. If it is blocked, the softphone says Microphone blocked — calls will have no audio.
The Caller ID dropdown lists the account’s active, voice-enabled numbers. The backend refuses a caller ID that is not on the account.
Your Auth Token never leaves the server and is never stored on disk. The SIP password is never written to disk either: the backend keeps it in memory while the agent’s session lasts, so a second tab can join it.

Enable inbound calls

Choose a number in the Caller ID dropdown and click Enable inbound calls on this number. This attaches the number to the Vobiz-Zoho-PhoneBridge application, so calls to it ring your agents.
This moves the number off the application that answered it before. The softphone asks first and names that application (by name, or by ID if it has none). Numbers already routed to this integration show · inbound on.

SIP direct

For an endpoint you already have. The agent enters the endpoint’s SIP username, SIP password and a Caller ID in E.164 format (+91XXXXXXXXXX). The SIP password stays in the browser. Before using it, point the endpoint and the number at an application whose answer URL is your backend’s /answer:
  1. Create an application with answer URL https://calling.example.com/answer (POST) and hangup URL https://calling.example.com/hangup (POST). API: Create an application.
  2. Attach the endpoint to that application. API: Update an endpoint with application.
  3. For inbound calls, attach the number to the same application. API: Attach a number.
SIP direct has no caller ID dropdown, no Enable inbound calls, no recording links in Zoho, no billed duration from Vobiz and no webhook signature checks. Inbound calls to the caller ID number ring that agent.

Using it

Outbound calls

Click a phone number in Zoho. The agent’s softphone dials it and Zoho’s call bar follows the call. If the agent’s softphone tab is closed, or they have not signed in to Vobiz there, no call is placed and Zoho is told the call failed with AGENT_OFFLINE. Agents can also type a number in the softphone and click Call. Those calls are logged in Zoho too, against the agent’s Zoho user.

More than one tab

An agent can open the softphone in a second tab. Signing in there while another tab is open keeps the same SIP password, so the first tab stays connected. Zoho click-to-dial goes to one tab only, the one opened most recently; the other tabs show where the call went.

Inbound calls

A call to a number that rings this integration rings every agent signed in to the Vobiz account that owns it. The softphone shows Accept and Decline; Enter accepts and Escape declines. If nobody answers in 20 seconds, the caller can leave a voicemail of up to 2 minutes. If no agent of that account is signed in, the caller hears that no one is available.

Call logging and recordings

Each call is logged in Zoho with its direction, numbers, start time, duration (billed duration from Vobiz when available) and Zoho user. For outbound calls that is the user who clicked, or the agent’s own Zoho user for a typed number. For inbound calls it is the agent who answered. Zoho’s ringing pop-up appears for the first ringing agent mapped to a connected Zoho organization, and an inbound call nobody answers is logged as missed against that agent. An unanswered call is logged with duration 0, or as missed with ZOHO_PB_SEND_MISSED_STATE=true. The log is written when the recording is ready, or 90 seconds after the call ends if none arrives. Outbound calls are recorded unless OUTBOUND_RECORD=false. Inbound calls are recorded with INBOUND_RECORD=true, and voicemail is always recorded. The call log links to a signed recording URL on your backend that expires after 30 days by default. It carries no Vobiz credentials and cannot be altered to fetch another recording.

Configuration

Running in production

  • Serve the backend over HTTPS only, and run exactly one instance.
  • To share a host with other services, put the backend under a path prefix such as https://integrations.example.com/zoho, have your proxy strip /zoho, and set PUBLIC_BASE_URL to the full prefixed URL. Sign-in cookies are then limited to /zoho. If your registered redirect URI is <host>/oauth/zoho/callback at the root, route that one path to the backend unchanged.
  • Keep DATA_DIR on a persistent disk, and keep secrets in your host’s secret manager.
  • Set REQUIRE_VOBIZ_SIGNATURE=true once your logs show signature ok on real calls.
  • Rate-limit /zoho/phonebridge/clicktodial, /agent-session and /agent/vobiz-session at your proxy.
  • GET /zoho/phonebridge/status (admin) shows connected organizations, signed-in accounts and calls in progress. POST /zoho/phonebridge/disconnect with {"orgId":"…"} removes an organization and revokes its Zoho token.

Troubleshooting

ZOHO_PB_REDIRECT_URI must be <PUBLIC_BASE_URL>/oauth/zoho/callback and must be registered on the PhoneBridge client exactly. Ask Vobiz support to check the registered value.
The client is registered in one Zoho datacentre only. Open /zoho/phonebridge/connect?dc=in, replacing in with your datacentre (us, eu, au and so on).
Open /zoho/phonebridge/complete on your backend and paste the full URL Zoho redirected to, within a minute. Then fix the redirect URI.
Vobiz Telephony is not installed for this Zoho organization. Install it from Marketplace → Telephony and register again.
Use the zohoUsers list in the response to correct email or zohoUser in agents.json, then register again.
The agent’s softphone tab is closed, they have not signed in to Vobiz there, or the backend restarted. Open the softphone, sign in, wait for Ready, and keep the tab open.
The Vobiz account has no active, voice-enabled number. Add one and sign in again.
The 12-hour agent session expired. Open your sign-in link again, or ask your admin for a new one.
Copy the Auth ID and Auth Token again from Vobiz Console → API credentials.
The SIP password changed: the agent signed in again with no other tab open, or the backend restarted. Reload the tab and sign in again. A second tab opened while one is still open does not change the password.
Click-to-dial goes to the agent’s most recently opened softphone tab. Use that tab, or close it so clicks go to the other one.
The browser refused the microphone at sign-in. Allow it for your backend’s URL (the icon left of the address bar) and reload.
No agent of the account that owns the number is signed in, or the backend restarted. Have an agent sign in, and check the number shows · inbound on.
Allow the microphone for your backend’s URL permanently, so the browser does not ask during a call.

Operating notes

  • Early access. The Vobiz-hosted service is set up on request. One-click install from Zoho Marketplace comes once Zoho approves the listing.
  • Run one backend instance. Calls in progress, agent sessions and Auth Tokens are held in memory.
  • Sign in again after a restart. After the backend restarts, every agent reloads the softphone and signs in to Vobiz again. A call in progress during a restart is not logged.
  • Sign in again after a page reload, and keep a softphone tab open. With several tabs open, Zoho click-to-dial reaches the most recently opened one.
  • Inbound rings everyone on the account. Zoho’s ringing pop-up appears for one agent, and the call log goes to the agent who answered.
  • Agent sessions last 12 hours. A backend restart ends all of them together.

Next steps