Skip to main content
Freshdesk Vobiz Calling for Freshdesk adds a phone to Freshdesk. Your agents make and receive real phone calls in the browser, through your Vobiz account, from a panel in the Freshdesk sidebar. They don’t need a desk phone or a desktop app, and they don’t have to leave the helpdesk. There are two parts, and you run both. The panel is a Freshdesk custom app that you upload to your own Freshdesk account. The calling backend is a small Node service that you host. Both are in the vobiz-ai/Vobiz-Freshdesk-Calling repository.
This replaces your current Freshdesk telephony. Freshdesk runs only one CTI app at a time, and Freshcaller must be turned off.

What you get

Click-to-call

An agent clicks any phone number in Freshdesk and the panel opens and dials it. Agents can also type a number.

Inbound calls in the browser

Calls to your Vobiz number ring the panel, and the panel picks them up.

Caller ID choice

Agents choose which of your Vobiz numbers their calls come from.

Call recording

Turn it on for every call, then play recent recordings in the panel.

Two ways to sign in

Sign in with a Vobiz account and the backend sets up the line for you, or sign in with a SIP endpoint you already have.

One backend, any account

One backend serves any number of Vobiz accounts. You don’t put any account details in its configuration.
The app does not write anything into Freshdesk. It does not create tickets, add call notes or look up contacts. See Limitations.

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 /answer URL 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

1

Clone the repository and install

2

Configure the backend

Copy the example file, then set two values:
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.
3

Start the backend

The startup banner shows the answer URL, the outbound mode, and whether recording is on.
4

Make the backend public

Point 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:
5

Pack the Freshdesk app

Use npm run pack, not a bare fdk pack. A bare fdk pack stops on lint errors in the bundled SIP library.
6

Upload it as a custom app

  1. In Freshdesk, go to Admin → Apps and click Go to Developer Portal.
  2. Click Create New App, choose Custom App, and select your Freshdesk account.
  3. Upload the zip from dist/, and fill in a name (for example Vobiz Calling), a description and your support email.
  4. Click Save and Publish, then Promote to Live.
Freshworks does not review custom apps. The app is usually available within about thirty minutes.
7

Install it and fill in the settings

Go to Admin → Apps → Manage Apps, filter to Custom, and click Install on the app.There is nothing to set per agent: each agent’s own Freshdesk login decides which SIP line they get. To change these later, go to Admin → Apps → Manage Apps → Custom → Vobiz Calling → Settings → Configure.
8

Sign in

Open any agent page and click the Vobiz icon at the bottom left. If you don’t see it, do a hard refresh (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.
Try it before you upload. Run npm run dev (this is fdk run on http://localhost:10001) while the backend is running. The first time, enter your Freshdesk domain at http://localhost:10001/system_settings. Then set the installation parameters at http://localhost:10001/custom_configs. Use http://localhost:8093 as the backend URL, because the panel accepts plain http only for localhost. Finally, open any Freshdesk agent page with ?dev=true added to the URL. PUBLIC_BASE must still be a public HTTPS URL, because Vobiz needs to reach it.

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. 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: The panel reads the logged-in Freshdesk agent and signs in as 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 the Freshdesk-Calling application, so calls to it ring the panel.
Attaching the number moves it off the application it is on now. Anything that number did before, such as an IVR or another integration, stops. Before you click, the panel names that application, with its ID: “+91XXXXXXXXXX is attached to application “My IVR” (…) now; enabling moves it to this panel’s.” (only the ID if the name can’t be read), or says the number already rings this panel. Nothing moves until you click the button.

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:
1

Create the application

In the Console, go to Voice → Applications → + Create New Application. Set the Answer URL to https://calling.example.com/answer with method POST. With the API, use Create an application with answer_url and answer_method: "POST".
2

Attach the endpoint

In Voice → Endpoints, edit the endpoint and set its Application. With the API, use Update an endpoint with {"app_id": "<app_id>"}.
3

Attach the number (for inbound)

Open the application, go to the Phone Numbers tab, and click + Attach Number. With the API, use Attach a number: POST /Account/{auth_id}/numbers/%2B<digits>/application with {"application_id": "<app_id>"}.
SIP direct does not include the caller-ID list, Enable inbound calls or the recordings list. Outbound calls always use a plain dial instead of the conference bridge. The registrar checks the password, and Vobiz refuses a caller ID that the account doesn’t own.

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 or OUTBOUND_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 reads backend/.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_DIR on persistent storage, so agents get the same endpoint after a restart.
  • Set SIGNING_SECRET to a fixed random value.
  • Set VOBIZ_WEBHOOK_SIGNATURE=require once the log shows that signatures verify. Leave it at log if 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 pack again 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 in ALLOWED_ORIGINS.
  • Webhook signatures (X-Vobiz-Signature-V3) are checked with the Auth Token of the account the call belongs to.

Troubleshooting

The Calling backend URL is empty or has no https://. Fix it under Manage Apps → Custom → Vobiz Calling → Settings.
The backend is down, the URL is wrong, or the backend refused the page’s origin. Check curl https://calling.example.com/health. If the backend log says origin … is not allowed, add that origin to ALLOWED_ORIGINS.
Copy both again from Console → API credentials. The Auth Token is not your Console password.
Set 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 panel says “this account has no phone numbers yet”. Buy or activate a voice-enabled number, then sign in again.
With a Vobiz account, sign in again, because each sign-in sets a new password. With SIP direct, check the username and password. Also make sure your network allows wss://registrar.vobiz.ai:5063.
Freshdesk did not return the logged-in agent to the app. Reload the Freshdesk page.
Each Freshdesk agent has one session, and a new sign-in replaces the previous one. Use the panel in one tab at a time.
If the backend log says “which no signed-in agent holds”, the backend restarted or the session expired, so sign in again. If no /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.
Vobiz refused the call to the customer (check the balance, the destination and the caller ID in the backend log), or no caller ID is selected.
Nobody is signed in to the account that owns the number, the number isn’t attached (click Enable inbound calls), or no panel is open and Ready.
The browser blocked the microphone. Allow it for Freshdesk in the address bar, then reload.
Playback links expire after 5 minutes, so refresh the list. If nobody from that account is signed in right now (for example after a backend restart), sign in again first.
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.

Source code and support

GitHub repository

The panel, the backend, the full README and the backend route reference.

Endpoints

How SIP endpoints and applications fit together in the Console.
For questions about accounts, numbers or billing, email support@vobiz.ai.