The Edesy JavaScript SDK has one entry point, connect(). Pass it the JSON from your token endpoint, or the URL of that endpoint, and it resolves with a Device once the browser is registered. Call device.call(number) to dial a phone number. It returns a Call object with events and controls.
SDK reference#
| API | Returns | Description |
|---|---|---|
connect(config) |
Promise<Device> |
config is the token JSON object, or a URL string the SDK POSTs to for that JSON. Resolves once registered |
device.call(number) |
Call |
Dials a phone number (country code, no plus) |
device.on(event, cb) |
Device |
ready, unregistered, error, incoming |
device.disconnect() |
- | Unregisters and closes the connection |
call.on(event, cb) |
Call |
ringing, answered, ended, failed, mute, hold, dtmf |
call.hangup() |
- | Ends the call |
call.toggleMute() |
- | Mutes or unmutes the microphone |
call.toggleHold() |
- | Holds or resumes the call |
call.sendDigit(d) |
- | Sends a DTMF digit |
call.isHeld |
boolean | Whether the call is on hold |
EdesyVoice.version |
string | SDK version (hosted bundle) |
Install#
Hosted bundle (no build step). It sets a global EdesyVoice:
<script src="https://webrtc.edesy.in/sdk/edesy-voice.js"></script>
Or the package:
npm install @edesy/voice-sdk
import { connect } from "@edesy/voice-sdk";
Connect#
With a token URL. The SDK sends a POST with no body and throws if the response is not OK:
const device = await EdesyVoice.connect("https://your-app.example.com/edesy-token");
With the JSON you already fetched:
const config = await fetch("/edesy-token", { method: "POST" }).then((r) => r.json());
const device = await connect(config);
connect() resolves after registration, so a ready handler attached afterwards still runs straight away.
device.on("ready", () => console.log("registered"));
device.on("error", (e) => console.error("device error", e));
Place a call#
const call = device.call("919876543210");
call.on("ringing", () => showStatus("Ringing"));
call.on("answered", () => showStatus("In call"));
call.on("ended", () => showStatus("Call ended"));
call.on("failed", (e) => showStatus("Call failed"));
hangupButton.onclick = () => call.hangup();
How it works#
- Register.
connect()opens a secure WebSocket to theserverin your token and registers with the short-lived credentials. - Dial.
device.call()starts a WebRTC call using theiceServersfrom your token. - Bridge. Edesy places the call to the phone network with your
callerIdand bridges the audio. - Clean up. Call
device.disconnect()when the user signs out or leaves the page.
FAQ#
Can I place more than one call per connection?#
Yes. Connect once, then call device.call() for each call. Keep the Device for the whole session.
What happens if the token URL returns an error?#
connect() rejects with an error that includes the HTTP status, for example token endpoint 401.
Does call() need a plus sign?#
No. Use the country code followed by the number, for example 919876543210.
Which version am I running?#
With the hosted bundle, read EdesyVoice.version.
How do I know the device is ready?#
connect() resolves only after registration. You can also listen for ready.
How do I end everything when the user logs out?#
Hang up any active call with call.hangup(), then call device.disconnect().
Can I use it inside a CRM?#
Yes. Any web page that can load a script can use the SDK. For zero code, use the drop-in dialer.