title | description | navigation | ||
---|---|---|---|---|
Getting started |
The Opensips JS library and its expansive ecosystem offer developers a powerful and flexible solution for integrating Opensips protocol functionalities into a multitude of applications. |
|
$ npm i @voicenter-team/opensips-js
You can include the OpensipsJS library directly in your HTML file using a CDN like UNPKG or jsDelivr. This is especially useful for quick prototyping or when you don't want to set up a build environment.
Add the following script tag to your HTML file:
<script src="https://cdn.opensipsjs.org/opensipsjs/v1.0.96/opensips-js.iife.js"></script>
This will load the library and attach the OpensipsJS class to the global window object as OpensipsJS.
Firstly lets import the library and create the OpenSIPS instance:
import OpenSIPSJS from '@voicenter-team/opensips-js'
const openSIPSJS = new OpenSIPSJS({
configuration: {
session_timers: false,
uri: 'sip:extension_user@domain',
// --- Use password or authorization_jwt to authorize
password: 'password',
// or
authorization_jwt: 'token',
},
socketInterfaces: [ 'wss://domain' ],
pnExtraHeaders: {
'pn-provider': 'acme',
'pn-param': 'acme-param',
'pn-prid': 'ZH11Y4ZDJlMNzODE1NgKi0K>'
},
sipDomain: 'domain',
sipOptions: {
session_timers: false,
extraHeaders: [ 'X-Bar: bar' ],
pcConfig: {},
},
modules: [ 'audio', 'video', 'msrp' ]
})
// Then you can work with the appropriate modules
opensipsJS.audio
opensipsJS.video
opensipsJS.msrp
After including the script via CDN, you can access the OpensipsJS class directly from the global scope.
<!DOCTYPE html>
<html>
<head>
<title>OpensipsJS CDN Usage</title>
</head>
<body>
<!-- Include the library via CDN -->
<script src="https://cdn.opensipsjs.org/opensipsjs/v1.0.96/opensips-js.iife.js"></script>
<script>
// Create an instance of OpensipsJS
const opensipsJS = new OpensipsJS({
configuration: {
session_timers: false,
uri: 'sip:extension_user@domain',
// --- Use password or authorization_jwt to authorize
password: 'password',
// or
authorization_jwt: 'token',
},
socketInterfaces: ['wss://domain'],
pnExtraHeaders: {
'pn-provider': 'acme',
'pn-param': 'acme-param',
'pn-prid': 'ZH11Y4ZDJlMNzODE1NgKi0K>',
},
sipDomain: 'domain',
sipOptions: {
session_timers: false,
extraHeaders: ['X-Bar: bar'],
pcConfig: {},
},
modules: ['audio', 'video', 'msrp'],
});
// Now you can use the modules
opensipsJS.audio;
opensipsJS.video;
opensipsJS.msrp;
</script>
</body>
</html>
Note: When using the library via CDN, ensure that you replace 'sip:extension_user@domain', 'password', 'token', and other placeholders with your actual configuration values.
If you prefer using ES modules in the browser and your environment supports them, you can import the ES module build directly from the CDN.
<!DOCTYPE html>
<html>
<head>
<title>OpensipsJS ES Module CDN Usage</title>
</head>
<body>
<script type="module">
import OpensipsJS from 'https://cdn.opensipsjs.org/opensipsjs/v1.0.96/opensips-js.es.js';
// Or using jsDelivr
// import OpensipsJS from 'https://cdn.jsdelivr.net/npm/@voicenter-team/opensips-js/dist/opensips-js.es.js';
const opensipsJS = new OpensipsJS({
configuration: {
session_timers: false,
uri: 'sip:extension_user@domain',
// --- Use password or authorization_jwt to authorize
password: 'password',
// or
authorization_jwt: 'token',
},
socketInterfaces: ['wss://domain'],
pnExtraHeaders: {
'pn-provider': 'acme',
'pn-param': 'acme-param',
'pn-prid': 'ZH11Y4ZDJlMNzODE1NgKi0K>',
},
sipDomain: 'domain',
sipOptions: {
session_timers: false,
extraHeaders: ['X-Bar: bar'],
pcConfig: {},
},
modules: ['audio', 'video', 'msrp'],
});
// Use the modules as before
opensipsJS.audio;
opensipsJS.video;
opensipsJS.msrp;
</script>
</body>
</html>
Important: When using ES modules via CDN:
- Ensure your browser supports ES modules.
- The
type="module"
attribute is necessary in the<script>
tag.
begin(): OpensipsInstance
- start opensipson(event: OpensipsEvent, callback): void
- remove event listenersubscribe({type: String, listener: function}): void
- subscribe to an event. Available events:new_call
,ended
,progress
,failed
,confirmed
removeIListener(type: String): void
- remove event listener
Event | Callback interface | Description |
---|---|---|
ready |
() => {} |
Emitted when opensips is initialized |
changeActiveCalls |
(calls: { [key: string]: ICall }) => {} |
Emitted when active calls are changed |
callAddingInProgressChanged |
(callId: string / undefined) => {} |
Emitted when any call adding state is changed |
changeAvailableDeviceList |
(devices: Array<MediaDeviceInfo>) => {} |
Emitted when the list of available devices is changed |
changeActiveInputMediaDevice |
(deviceId: string) => {} |
Emitted when active input device is changed |
changeActiveOutputMediaDevice |
(deviceId: string) => {} |
Emitted when active output device is changed |
changeMuteWhenJoin |
(value: boolean) => {} |
Emitted when mute on join value is changed |
changeIsDND |
(value: boolean) => {} |
Emitted when is DND value is changed |
changeIsMuted |
(value: boolean) => {} |
Emitted when mute value is changed |
changeActiveStream |
(stream: MediaStream) => {} |
Emitted when active stream was changed |
changeCallVolume |
(callId: string, volume: number) => {} |
Emits the volume meter's value for each participant |
currentActiveRoomChanged |
(number / undefined) => {} |
Emitted when active room is changed |
addRoom |
({room: IRoom, roomList: {[id: number]: IRoom}}) => {} |
Emitted when new room was added |
updateRoom |
({room: IRoom, roomList: {[id: number]: IRoom}}) => {} |
Emitted when room was updated |
removeRoom |
({room: IRoom, roomList: {[p: number]: IRoom}}) => {} |
Emitted when room was deleted |
WebrtcMetricsConfigType
Parameter | Type | Default |
---|---|---|
refreshEvery |
number |
undefined |
startAfter |
number |
undefined |
startAfter |
number |
undefined |
verbose |
boolean |
undefined |
pname |
string |
undefined |
cid |
string |
undefined |
uid |
string |
undefined |
record |
boolean |
undefined |
ticket |
boolean |
undefined |
Also, there are next public fields on OpensipsJS instance:
sipDomain: String
- returns sip domain
initCall(target: String, addToCurrentRoom: Boolean): void
- call to the target. If addToCurrentRoom is true then the call will be added to the user's current roomholdCall(callId: String, automatic?: Boolean): Promise<void>
- put call on holdunholdCall(callId: String): Promise<void>
- unhold a callterminateCall(callId: String): void
- terminate callmoveCall(callId: String, roomId: Number): Promise<void>
- Same as callChangeRoom. Move call to the specific roomtransferCall(callId: String, target: String): void
- transfer call to targetmergeCall(roomId: Number): void
- merge calls in specific room. Works only for rooms with 2 calls insidemergeCallByIds(firstCallId: string, secondCallId: string): void
- merge 2 calls by their idsanswerCall(callId: String): void
- answer a callmute(): void
- mute ourselfunmute(): void
- unmute ourselfmuteCaller(callId: String): void
- mute callerunmuteCaller(callId: String): void
- unmute callersetMicrophone(deviceId: String): Promise<void>
- set passed device as input device for callssetSpeaker(deviceId: String): Promise<void>
- set passed device as output device for callssetActiveRoom(roomId: Number): Promise<void>
- switch to the roomsetMicrophoneSensitivity(value: Number): void
- set sensitivity of microphone. Value should be in range from 0 to 1setSpeakerVolume(value: Number): void
- set volume of callers. Value should be in range from 0 to 1setDND(value: Boolean): void
- set the agent "Do not disturb" statussetMetricsConfig(config: WebrtcMetricsConfigType): void
- set the metric config (used for audio quality indicator)
sipOptions: Object
- returns sip optionsgetActiveRooms: { [key: number]: IRoom }
- returns an object of active rooms where key is room id and value is room datasipDomain: String
- returns sip domainsipOptions: Object
- returns sip optionsgetInputDeviceList: []
- returns list of input devicesgetOutputDeviceList: []
- returns list of output devicescurrentActiveRoomId: Number
- returns current active room idselectedInputDevice: String
- returns current selected input device idselectedOutputDevice: String
- returns current selected output device idisDND: Boolean
- returns if the agent is in "Do not disturb" statusisMuted: Boolean
- returns if the agent is muted
initMSRP(target: String, body: String): void
- initialize connection with target contact. Body is the initial message to this target.sendMSRP(sessionId: String, body: String): Promise<void>
- send messagemsrpAnswer(sessionId: String)
- accept MSRP session invitationmessageTerminate(sessionId: String)
- terminate message session
getActiveMessages: { [key: string]: IMessage }
- returns an object of active message sessions where key is session id and value is message session data.
joinRoom(roomId: String, displayName: String, mediaConstraints: Object): void
- join conference roomhangup()
- exit roomstartVideo()
- turn on camerastopVideo()
- turn off camerastartAudio()
- mutestopAudio()
- unmutestartScreenShare()
- start screen sharingstopScreenShare()
- stop screen sharingenableScreenShareWhiteboard(enable: boolean, stream: MediaStream)
- enable screen share whiteboard. stream parameter is screen share streamenableBokehEffectMask(): Promise<MediaStream>
- enable bokeh mask effectenableBackgroundImgEffectMask(): Promise<MediaStream>
- enable background image mask effectdisableMask(): Promise<MediaStream>
- turn off mask effect. Returns stream without maskingrestartMasking(): Promise<void>
- rerun mask effectsetupMaskVisualizationConfig(config: VisualizationConfigType)
- setup mask configstartNoiseFilter()
- start noise filterstopNoiseFilter()
- stop noise filtersetBitrate(bitrate: number)
- set bitrate for videoenableWhiteboard(mode: 'whiteboard' | 'imageWhiteboard', enable: boolean, base64Image?: string)
- enable whiteboard. if mode is 'imageWhiteboard' then third parameter base64Image is requiredsetupDrawerOptions(options: KonvaDrawerOptions)
- setup option for drawersetupScreenShareDrawerOptions(options: KonvaScreenShareDrawerOptions)
- setup option for screen share drawer
VisualizationConfigType
Parameter | Type | Default |
---|---|---|
foregroundThreshold |
number |
0.5 |
maskOpacity |
number |
0.5 |
maskBlur |
number |
0 |
pixelCellWidth |
number |
10 |
backgroundBlur |
number |
15 |
edgeBlur |
number |
3 |
KonvaDrawerOptions
Parameter | Type |
---|---|
container |
number |
width |
number |
height |
number |
KonvaScreenShareDrawerOptions
Parameter | Type |
---|---|
strokeWidth |
number |
strokeColor |
string |
Event | Callback interface | Description |
---|---|---|
member:join |
(data) => {} |
Emitted when new member is joined |
member:update |
(data) => {} |
Emitted when member data is changed |
member:hangup |
(data) => {} |
Emitted when member leaves the conference |
hangup |
() => {} |
Emitted when we leave the conference |
screenShare:start |
() => {} |
Emitted when we share a screen |
screenShare:stop |
() => {} |
Emitted when we stop a screen sharing |
reconnect |
() => {} |
Emitted when reconnecting |
mediaConstraintsChange |
() => {} |
Emitted when media constraints change |
metrics:report |
() => {} |
Emitted on metric report |
metrics:stop |
() => {} |
Emitted when metrics are stopped |