The RingCentral WebPhone Library includes a JavaScript WebRTC library and a WebRTC phone demo app.
- Installation
- Usage
- Configuring your RingCentral app
- Include Library And HTML Elements
- Application
- API
- Initiating The Call
- Accepting Incoming Call
- DTMF
- Hold Unhold
- Mute Unmute
- Park
- Flip
- Transfer
- Forward
- Start Stop Recording
- Barge Whisper
- Development
- Demo app
- Demo app structure
npm install ringcentral-web-phone
// or
bower install ringcentral-web-phone
Ensure your app has the following properties set. If these are not set, the error specified will be returned.
App Property | Value | Error if not set |
---|---|---|
Permissions | VoIP Calling , Interoperability |
Specific application permission required |
Platform type | Browser-based |
Client edition is not compatible with current Brand |
You need to have a DIGITAL LINE
attached to an extension. You can configure this in Online Web Portal Production , Sandbox
These can be configured for your app in the RingCentral Developer Portal. Fill this Registration Form to get access to WebRTC permissions. Please contact devsupport@ringcentral.com to request these permissions.
<video id="remoteVideo" hidden="hidden"></video>
<video id="localVideo" hidden="hidden" muted="muted"></video>
<script src=".../ringcentral-bundle.js" type="text/javascript"></script>
<script src=".../ringcentral-web-phone.js" type="text/javascript"></script>
Configure the web-phone
var appKey = '...';
var appSecret = '...';
var appName = '...';
var appVersion = '...';
var sdk = new RingCentral.SDK({
appKey: appKey,
appSecret: appSecret,
appName: appName,
appVersion: appVersion,
server: RingCentral.SDK.server.production // or .sandbox
});
var platform = sdk.platform();
platform
.login({
username: '...',
password: '...'
})
.then(function(loginResponse) {
return platform
.post('/client-info/sip-provision', {
sipInfo: [{transport: 'WSS'}]
})
.then(function(res) {
return new RingCentral.WebPhone(res.json(), { // optional
appKey: appKey,
appName: appName,
appVersion: appVersion,
uuid: loginResponse.json().endpoint_id,
logLevel: 1, // error 0, warn 1, log: 2, debug: 3
audioHelper: {
enabled: true, // enables audio feedback when web phone is ringing or making a call
incoming: 'path-to-audio/incoming.ogg', // path to audio file for incoming call
outgoing: 'path-to-audio/outgoing.ogg' // path to aduotfile for outgoing call
}
});
});
})
.then(function(webPhone){
// YOUR CODE HERE
})
.catch(function(e){
console.error(e.stack);
});
Except for some RingCentral-specific features the API is 100% the same as SIP.JS: http://sipjs.com/api/0.7.0: most of the time you will be working with RC-flavored UserAgent and Session objects of SIP.JS.
We encourage you to take a look at Guides section, especially Make A Call and Receive A Call articles.
var webPhone = new RingCentral.WebPhone(provisionData, options);
- Provision Data — the JSON returned from
/client-info/sip-provision
API endpoint - Options — object with various configuration options that adjust WebPhone behavior
appKey
— your application keyappName
— your application short code nameappVersion
— your application versionuuid
— manually provide the unique identifier of WebPhone instance (should persist between page reloads)logLevel
— controls verboseness in browser console0
— Errors only (good for production)1
— Errors & warnings2
— Errors, warnings, logs3
— Everything including debug information (good for development)
audioHelper
— audio feedback when web phone is ringing or making a callenabled
— turns feedback on and offincoming
— path toincoming.ogg
, audio file for incoming calloutgoing
— path tooutgoing.ogg
, audio file for outgoing call
var session = webPhone.userAgent.invite('PHONE_NUMBER', {
media: {
render: {
remote: document.getElementById('remoteVideo'),
local: document.getElementById('localVideo')
}
},
fromNumber: 'PHONE_NUMBER', // Optional, Company Number will be used as default
homeCountryId: '1' // Optional, the value of
}).then(...);
webPhone.userAgent.on('invite', function(session){
session.accept({
media: {
render: {
remote: document.getElementById('remoteVideo'),
local: document.getElementById('localVideo')
}
}
}).then(...);
});
Callee will be put on hold and the another person can join into the call by dialing the extension number announced within the call.
session.dtmf('DTMF_DIGITS').then(...);
Callee will be put on hold and the another person can join into the call by dialing the extension number announced within the call.
session.hold().then(...);
session.unhold().then(...);
Callee will be put on mute or unmute
session.mute();
session.unmute();
Callee will be put on hold and the another person can join into the call by dialing the extension number announced within the call.
session.park().then(...);
Caller can filp calls to different devices logged in through the same credentials.
session.flip('TARGET_NUMBER').then(...);
session.transfer('TARGET_NUMBER').then(...);
session.forward('TARGET_NUMBER').then(...);
session.startRecord().then(...);
session.stopRecord().then(...);
Not yet implemented. Could be done by dialing *83. The account should be enabled for barge/whisper access through system admin.
$ git clone https://github.com/ringcentral/ringcentral-web-phone.git
$ npm install
$ npm install bower -g // skip this if you've already installed Bower
$ bower install
WebRTC works with issues when served from file system directly to browser (e.g. file://
protocol), you will need a
local HTTP server. If you don't have local HTTP server, please install it as well:
$ sudo npm install http-server -g
$ http-server
- Open localhost:8080/demo/ in the browser
- Add your RC credentials and click on
Register Sip Configurations
. - For making outbound calls, enter phone number and click on call. To disconnect to call, click on
Disconnect Call
. - For receiving incoming calls, Click on Accept button when window pops up (will be visible when there is an incoming call).
The demo app uses the sandbox environment. If there's any connection problems, you may need to switch to the production environment.
Functionalities included:
- Sip Register/UnRegister
- Make Outgoing Calls
- Accept Incoming calls
- Hold/UnHold calls
- Mute/Unmute calls
- Transfer calls
- Record/Stop recording calls
- Flip, park calls
- Send DTMF
- Forward incoming calls
/src
/demo
/img
favicon.ico
index.html
index.js