# Getting started
# Installation
Using npm:
$ npm i @voicenter-team/opensips-js
# Usage
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 appropriate modules:
openSIPSJS.audio
openSIPSJS.video
openSIPSJS.msrp
# OpensipsJS
# OpensipsJS instance methods
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,confirmedremoveIListener(type: String): void- remove event listener
# OpensipsJS events
| 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:
# OpensipsJS instance fields
sipDomain: String- returns sip domain
# Audio
# Audio methods
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 insideanswerCall(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)
# Audio instance fields
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
# MSRP
# MSRP methods
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
# MSRP instance fields
getActiveMessages: { [key: string]: IMessage }- returns an object of active message sessions where key is session id and value is message session data.
# Video
# Video methods
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 |
# Video events
| 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 |
← Project Overview Demo →