The Edesy SDK emits events on two objects. The Device from connect() reports registration and incoming calls: ready, unregistered, error and incoming. Each Call reports its progress and controls: ringing, answered, ended, failed, mute, hold and dtmf. Subscribe with .on(event, callback), which returns the object so calls can be chained.
Device events#
| Event | Fires when | Callback argument |
|---|---|---|
ready |
The device is registered. A handler attached after connect() resolves runs straight away |
none |
unregistered |
The registration ended | none |
error |
Registration failed or the connection reported an error | error details |
incoming |
A call is sent to this device | Call |
Call events#
| Event | Fires when | Callback argument |
|---|---|---|
ringing |
The far end is ringing | none |
answered |
The call is answered | none |
ended |
The call ends after it was set up | end details |
failed |
The call could not be set up | failure details |
mute |
Mute changes after toggleMute() |
mute state |
hold |
Hold changes after toggleHold() |
hold state |
dtmf |
A DTMF digit is sent or received on the call | digit details |
Example: a call status line#
const call = device
.call("919876543210")
.on("ringing", () => setStatus("Ringing..."))
.on("answered", () => { setStatus("In call"); startTimer(); })
.on("ended", () => { setStatus("Call ended"); stopTimer(); })
.on("failed", () => setStatus("Call failed"))
.on("mute", (muted) => setMuteIcon(muted))
.on("hold", (held) => setHoldIcon(held));
Event order on a normal call#
ringingwhen the phone starts to ring.answeredwhen the person picks up.endedwhen either side hangs up.
A call that never connects (busy, invalid number, network error) fires failed instead of ended.
FAQ#
Should I listen for both ended and failed?#
Yes. A call ends with exactly one of them, so reset your UI in both handlers.
Can I add more than one handler for the same event?#
Yes. Each .on() adds a handler, and they run in the order you added them.
What if my handler throws?#
The SDK catches errors thrown inside handlers so one bad handler does not stop the others.
How do I detect a lost connection?#
Listen for error and unregistered on the device, then mint a new token and call connect() again.
Is there an event for the call duration?#
No. Start a timer on answered and stop it on ended. Call history in the portal shows durations.
Do events fire for incoming calls too?#
Yes. The Call object passed to incoming emits the same call events.