
What you get
Click-to-call
Inbound calls in the browser
Caller ID choice
Call recording
Two ways to sign in
One backend, any account
How it works
- The panel is a softphone. It registers with Vobiz over SIP-over-WebSocket, and the call audio runs in the browser tab.
- When an agent signs in, the backend checks the credentials with Vobiz. In that account it then sets up an application that points at the backend and a SIP endpoint for the agent.
- Outbound: the panel calls Vobiz, and Vobiz asks the backend’s
/answerURL what to do. By default the backend places the agent in a private conference room, then dials the customer into that room from the caller ID the agent chose. - Inbound: a call to your number reaches
/answer. The backend dials every agent who is signed in to that Vobiz account, and the panel answers. - Recordings: the backend lists them and gives the panel a playback link that is signed and short-lived. Your Auth Token never reaches the browser.
Prerequisites
Set it up
Clone the repository and install
Configure the backend
backend/.env holds deployment settings only. It never contains a Vobiz Auth ID, Auth Token, phone number or endpoint. See the configuration reference for every setting.Start the backend
Make the backend public
https://calling.example.com at 127.0.0.1:8093 with a reverse proxy, or use a tunnel while you test. Then check it from outside:Pack the Freshdesk app
npm run pack, not a bare fdk pack. A bare fdk pack stops on lint errors in the bundled SIP library.Upload it as a custom app
- In Freshdesk, go to Admin → Apps and click Go to Developer Portal.
- Click Create New App, choose Custom App, and select your Freshdesk account.
- Upload the zip from
dist/, and fill in a name (for example Vobiz Calling), a description and your support email. - Click Save and Publish, then Promote to Live.
Install it and fill in the settings
Sign in
Ctrl + F5). On the Vobiz account tab, enter your Auth ID and Auth Token and click Log in. When the badge turns Ready, you can make a call.Signing in
The panel has two tabs. Agents sign in each time they open the panel. The panel keeps no credentials, so reloading the Freshdesk tab also means signing in again.Vobiz account (recommended)
Enter your Auth ID (MA_XXXXXXXX) and Auth Token, then click Log in. The backend checks them with Vobiz by listing the account’s phone numbers.
The first time anyone signs in, the backend creates these in your Vobiz account:
fd<their user ID>, so colleagues who share one Vobiz account each get their own line and never sign each other out. Each sign-in gives the endpoint a new random SIP password. Only that browser session receives it. Signing in again as the same Freshdesk agent (for example in a second tab) ends the previous session.
Sign out. Click Sign out under the sign-in form. The panel ends any call, unregisters from Vobiz so inbound calls stop ringing that browser, and returns to Signed out. When the last agent of a Vobiz account signs out, or their session expires, the backend drops that account’s Auth Token from memory, after any outbound call still in progress has ended.
Choose a caller ID. The Calling from list shows every active, voice-enabled number on the account. Your outbound calls come from the number you pick. The backend accepts only numbers on that account.
Enabling inbound calls
Click Enable inbound calls once for each number. This attaches the selected number to theFreshdesk-Calling application, so calls to it ring the panel.
SIP direct
Use this tab to sign in with a Vobiz SIP endpoint you already have. Enter its SIP username (letters and digits, as the Console shows it), its SIP password, and a Caller ID in E.164 format (+91XXXXXXXXXX) from the same account. Then click Connect.
The backend has no account credentials in this mode, so it cannot set anything up for you. Before you sign in, attach the endpoint, and the number if you want inbound calls, to an application whose answer URL is your backend’s /answer:
Create the application
https://calling.example.com/answer with method POST. With the API, use Create an application with answer_url and answer_method: "POST".Attach the endpoint
{"app_id": "<app_id>"}.Attach the number (for inbound)
POST /Account/{auth_id}/numbers/%2B<digits>/application with {"application_id": "<app_id>"}.Using it
Making a call. Type a number in E.164 format and click Call, or click any phone number in Freshdesk. The Call button works only when you are signed in and the panel is registered. If either is missing, the hint under the button says which. Your browser asks for microphone access on the first call. Click Hang up to end the call. With the default conference bridge, your side joins a private room first and the customer is then dialled into it. The panel shows Ringing while their phone rings (you hear silence) and On a call once they answer. If the customer doesn’t answer, the backend ends your side of the call. With SIP direct orOUTBOUND_MODE=dial, the panel can’t see the customer’s leg, so it shows On a call as soon as your side connects.
Taking a call. Keep a Freshdesk tab open with the panel signed in and showing Ready. When a call reaches your number, every agent signed in to that Vobiz account rings, and the first panel to pick up answers automatically. If nobody is signed in, the caller hears “Sorry, nobody is available to take your call.”
Call logging. Nothing is written to Freshdesk. Vobiz keeps a call log for every call in your account, under Voice → Call Logs in the Console.
Recordings. Set RECORD_CALLS=1 on the backend to record both sides of every call, inbound and outbound. Recording is off by default. Tell the people you call that you record. The panel’s Call recordings list shows the 15 most recent recordings on the Vobiz account. Click ▶ Play to listen. Each playback link stops working after 5 minutes. The recordings stay in your Vobiz account.
Configuration reference
The backend readsbackend/.env when it starts. A variable that is already set in the environment takes priority over the file.
Deploying to production
- Serve over HTTPS on a stable hostname with a valid certificate.
- Run exactly one backend instance. Sessions, signed-in accounts and active calls are held in memory.
- Keep
DATA_DIRon persistent storage, so agents get the same endpoint after a restart. - Set
SIGNING_SECRETto a fixed random value. - Set
VOBIZ_WEBHOOK_SIGNATURE=requireonce the log shows that signatures verify. Leave it atlogif your agents only use SIP direct. - Expect agents to sign in again after a restart. Until an agent from an account signs in again, calls for that account can’t be routed.
- Ship updates by running
npm run packagain and uploading the new zip to the same custom app in the Developer Portal.
Security and privacy
- Your Auth Token never leaves the backend and is never stored on disk. The panel sends it once, at sign-in. The backend keeps it in memory only while an agent of that account is signed in (or a call they placed is still up), drops it at sign-out or session expiry, and never logs it or returns it to the browser.
- The panel stores nothing. It uses no cookies or browser storage. Everything the browser asks for, including the SIP password, requires the session token from sign-in.
- The browser receives a session token, the account’s phone numbers and the ID and name of the application each number is attached to, its own endpoint’s SIP username and password, and signed playback links.
- On disk, the backend keeps only a map of endpoint IDs and usernames, with file mode
0600. - Recordings are reached only through signed links that expire, made for one account. The backend fetches the audio itself, only from Vobiz media hosts.
- CORS allows only Freshdesk and Freshworks origins,
localhost, and anything you add inALLOWED_ORIGINS. - Webhook signatures (
X-Vobiz-Signature-V3) are checked with the Auth Token of the account the call belongs to.
Troubleshooting
“Not configured” or “Backend URL must start with https://”
“Not configured” or “Backend URL must start with https://”
https://. Fix it under Manage Apps → Custom → Vobiz Calling → Settings.“Cannot reach the calling backend”
“Cannot reach the calling backend”
curl https://calling.example.com/health. If the backend log says origin … is not allowed, add that origin to ALLOWED_ORIGINS.“Vobiz did not accept that Auth ID and Auth Token”
“Vobiz did not accept that Auth ID and Auth Token”
“This backend has no PUBLIC_BASE” or “Could not set up this agent's phone line”
“This backend has no PUBLIC_BASE” or “Could not set up this agent's phone line”
PUBLIC_BASE to an https:// URL and restart. If it is already set, Vobiz refused to create the application or endpoint, and the backend log shows Vobiz’s status code.The account has no phone numbers, and Call stays disabled
The account has no phone numbers, and Call stays disabled
“Registration failed”
“Registration failed”
wss://registrar.vobiz.ai:5063.“Could not identify the signed-in Freshdesk agent”
“Could not identify the signed-in Freshdesk agent”
The panel signs out after you open it in another tab
The panel signs out after you open it in another tab
Outbound calls fail straight away
Outbound calls fail straight away
/answer webhook appears at all, the endpoint isn’t attached to your application. Sign in again on the Vobiz account tab, or attach it yourself for SIP direct.“The call could not be placed” or “This account has no phone number to call from”
“The call could not be placed” or “This account has no phone number to call from”
Inbound callers hear “nobody is available”, or ringing that never reaches the panel
Inbound callers hear “nobody is available”, or ringing that never reaches the panel
Connected, but no audio
Connected, but no audio
A recording won't play
A recording won't play
Webhooks get 403
Webhooks get 403
VOBIZ_WEBHOOK_SIGNATURE=require is set, and either PUBLIC_BASE doesn’t exactly match the URL Vobiz calls, or nobody has signed in with a Vobiz account. Fix PUBLIC_BASE, or set the mode to log.Limitations
- Nothing is written to Freshdesk. The app does not create tickets, add call notes, show the caller’s contact (screen pop) or attach recordings. The only link to Freshdesk data is click-to-call.
- Inbound calls answer themselves. The panel doesn’t ring first, doesn’t show the caller’s number, and has no Accept or Decline buttons.
- There are no hold, mute, transfer or conference controls.
- Sign in again after reloading the page, after the backend restarts, and after 12 hours (
SESSION_TTL_HOURS). - Run one backend instance.
- With SIP direct or
OUTBOUND_MODE=dial, the panel shows “On a call” while the customer’s phone is still ringing. Only the conference bridge reports when the customer answers. - SIP direct has no recordings list, no caller-ID list and no Enable inbound calls, and outbound calls always use a plain dial.
- The recordings list covers the whole Vobiz account, not just your own calls.
- Calls run only in the browser. Inbound calls need an open, signed-in Freshdesk tab.