SIP Library for JavaScript
- Create real-time peer-to-peer audio and video sessions via WebRTC
- Utilize SIP in your web application via SIP over WebSocket
- Send instant messages and view presence
- Support early media, hold and transfers
- Send DTMF RFC 2833 or SIP INFO
- Share your screen or desktop
- Written in TypeScript
- Runs in all major web browsers
- Compatible with standards compliant servers including Asterisk and FreeSWITCH
Demo
Want see it in action? The project website, sipjs.com, has a live demo.
Looking for code to get started with? This repository includes demonstrations which run in a web browser.
Usage
To place a SIP call, either utilize the SimpleUser
class...
import { Web } from "sip.js";
function getAudioElement(id: string): HTMLAudioElement {
const el = document.getElementById(id);
if (!(el instanceof HTMLAudioElement)) {
throw new Error(`Element "${id}" not found or not an audio element.`);
}
return el;
}
const options: Web.SimpleUserOptions = {
aor: "sip:alice@example.com",
media: {
constraints: { audio: true, video: false },
remote: { audio: getAudioElement("remoteAudio") }
}
};
const server = "wss://sip.example.com";
const simpleUser = new Web.SimpleUser(server, options);
simpleUser.connect()
.then(() => simpleUser.call("sip:bob@example.com"))
.catch((error: Error) => {
});
Or, alternatively, use the full API framework...
import { Inviter, SessionState, UserAgent } from "sip.js";
const userAgent = new UserAgent({
uri: UserAgent.makeURI("sip:alice@example.com"),
transportOptions: {
server: "wss://sip.example.com"
},
});
userAgent.start().then(() => {
const target = UserAgent.makeURI("sip:bob@example.com");
if (!target) {
throw new Error("Failed to create target URI.");
}
const inviter = new Inviter(userAgent, target, {
sessionDescriptionHandlerOptions: {
constraints: { audio: true, video: false }
}
});
inviter.stateChange.addListener((newState) => {
switch (newState) {
case SessionState.Establishing:
break;
case SessionState.Established:
break;
case SessionState.Terminated:
break;
default:
break;
}
});
inviter.invite()
.then(() => {
})
.catch((error: Error) => {
});
});
Installation
Node module
npm install sip.js
UMD bundle
Building, Development and Testing
Clone this repository, then...
npm install
npm run build-and-test
For more info please see the Documentation.
Support
- For migration guides and API reference please see the Documentation.
- For bug reports and feature requests please open a GitHub Issue.
- For questions or usage problems please use the Google Group.
- For more information see the project website at SIPjs.com.