- Register for a Catapult (Bandwidth Application Platform) account here
- Register a SIP domain
- Create an endpoint/user
- If you want to make calls to the PSTN (normal phones) you will need a server to handler events from Catapult
- Make phone calls For a more in depth guide, view this article
Full docs are here CDN hosted library: minified not-minified JSFIDDLE Demo Client
var callOptions = {
mediaConstraints: {
audio: true, // only audio calls
video: false
}
};
var bwPhone = new JsSIP.UA({
'uri': 'sip:[email protected]',
'password': 'password',
'ws_servers': 'wss://webrtc.registration.bandwidth.com:10443'
});
bwPhone.start();
bwPhone.on("registered", function(){
bwPhone.call("222-333-4444", callOptions);
});
bwPhone.on("newRTCSession", function(data){
var session = data.session; // outgoing call session here
var dtmfSender;
session.on("confirmed",function(){
//the call has connected, and audio is playing
var localStream = session.connection.getLocalStreams()[0];
dtmfSender = session.connection.createDTMFSender(localStream.getAudioTracks()[0])
});
session.on("ended",function(){
//the call has ended
});
session.on("failed",function(){
// unable to establish the call
});
session.on('addstream', function(e){
// set remote audio stream (to listen to remote audio)
// remoteAudio is <audio> element on page
remoteAudio.src = window.URL.createObjectURL(e.stream);
remoteAudio.play();
});
//play a DTMF tone (session has method `sendDTMF` too but it doesn't work with Catapult server right)
dtmfSender.insertDTMF("1");
dtmfSender.insertDTMF("#");
//mute call
session.mute({audio: true});
//unmute call
session.unmute({audio: true});
//to hangup the call
session.terminate();
});
var callOptions = {
mediaConstraints: {
audio: true, // only audio calls
video: false
}
};
var bwPhone = new JsSIP.UA({
'uri': 'sip:[email protected]',
'password': 'password',
'ws_servers': 'wss://webrtc.registration.bandwidth.com:10443'
});
bwPhone.start();
bwPhone.on("newRTCSession", function(data){
var session = data.session;
if (session.direction === "incoming") {
// incoming call here
session.on("accepted",function(){
// the call has answered
});
session.on("confirmed",function(){
// this handler will be called for incoming calls too
});
session.on("ended",function(){
// the call has ended
});
session.on("failed",function(){
// unable to establish the call
});
session.on('addstream', function(e){
// set remote audio stream (to listen to remote audio)
// remoteAudio is <audio> element on page
remoteAudio.src = window.URL.createObjectURL(e.stream);
remoteAudio.play();
});
// Answer call
session.answer(callOptions);
// Reject call (or hang up it)
session.terminate();
}
});
var authToken = "1234567890"; // you can get this token by POST http request to /v1/users/<userId>/domains/<domainId>/endpoints/<endpointId>/tokens
var authHeader = "X-Callsign-Token: " + authToken;
var callOptions = {
extraHeaders: [authHeader], // set auth token here (it will be passed on making calls and answering incoming call)
mediaConstraints: {
audio: true, // only audio calls
video: false
}
};
var bwPhone = new JsSIP.UA({
'uri': 'sip:[email protected]',
'ws_servers': 'wss://webrtc.registration.bandwidth.com:10443',
});
bwPhone.registrator().setExtraHeaders([authHeader]); // set auth header on register
bwPhone.on('registered', function(){
// ready to make calls and receive incoming calls
// making a call
bwPhone.call("222-333-4444", callOptions);
});
bwPhone.on("newRTCSession", function(data){
var session = data.session;
if (session.direction === "incoming") {
// answer incoming call
session.answer(callOptions);
}
});
bwPhone.start();
- Firefox
- Chrome
- Opera You can check if browser supports WebRTC by code
if (!JsSIP.rtcninja.hasWebRTC()) {
alert("WebRTC is not supported. Please use another browser.");
}
- Thank you, @GaborTorma for updating and answering questions.
"%cJsSIP:UA %ccall()%c +31s", "color: #FF9933", "color: inherit", "color: #FF9933"
"%cJsSIP:RTCSession %cnew%c +13s", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cconnect()%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "peerconnection"%c +1ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cnewRTCSession()%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"con", [object RTCPeerConnection] {
addEventListener: function addEventListener() { [native code] },
addIceCandidate: function addIceCandidate() { [native code] },
addStream: function addStream() { [native code] },
addTrack: function addTrack() { [native code] },
addTransceiver: function addTransceiver() { [native code] },
canTrickleIceCandidates: null,
close: function close() { [native code] },
connectionState: "new",
createAnswer: function createAnswer() { [native code] },
createDataChannel: function createDataChannel() { [native code] },
createDTMFSender: function createDTMFSender() { [native code] },
createOffer: function createOffer() { [native code] },
currentLocalDescription: null,
currentRemoteDescription: null,
dispatchEvent: function dispatchEvent() { [native code] },
getConfiguration: function getConfiguration() { [native code] },
getLocalStreams: function getLocalStreams() { [native code] },
getReceivers: function getReceivers() { [native code] },
getRemoteStreams: function getRemoteStreams() { [native code] },
getSenders: function getSenders() { [native code] },
getStats: function getStats() { [native code] },
getTransceivers: function getTransceivers() { [native code] },
iceConnectionState: "new",
iceGatheringState: "new",
localDescription: null,
onaddstream: null,
onconnectionstatechange: null,
ondatachannel: null,
onicecandidate: null,
onicecandidateerror: null,
oniceconnectionstatechange: null,
onicegatheringstatechange: null,
onnegotiationneeded: null,
onremovestream: null,
onsignalingstatechange: null,
ontrack: null,
pendingLocalDescription: null,
pendingRemoteDescription: null,
remoteDescription: null,
removeEventListener: function removeEventListener() { [native code] },
removeStream: function removeStream() { [native code] },
removeTrack: function removeTrack() { [native code] },
restartIce: function restartIce() { [native code] },
sctp: null,
setConfiguration: function setConfiguration() { [native code] },
setLocalDescription: function setLocalDescription() { [native code] },
setRemoteDescription: function setRemoteDescription() { [native code] },
signalingState: "stable"
}
"%cJsSIP:RTCSession %csession connecting%c +44ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "connecting"%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %ccreateLocalDescription()%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "sdp"%c +116ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "sending" [request:%o]%c +0ms", "color: #99CC00", "color: inherit", {
body: "v=0
o=- 2164683428557940697 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS 542c8f1c-b2e8-4b46-8503-5277b3c628c3
m=audio 62874 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
c=IN IP4 10.10.10.135
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:1328652830 1 udp 2122260223 10.10.10.135 62874 typ host generation 0 network-id 1
a=candidate:2979755658 1 tcp 1518280447 10.10.10.135 9 typ host tcptype active generation 0 network-id 1
a=ice-ufrag:VY5Q
a=ice-pwd:atUYKfRy9vhp0nMT847h2Fbt
a=ice-options:trickle
a=fingerprint:sha-256 E3:0B:40:B6:8A:B1:9D:19:6C:C6:E8:1B:C0:D2:BF:11:E7:C6:BE:A2:25:D7:1E:43:34:C0:37:9D:C1:64:AF:2B
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:542c8f1c-b2e8-4b46-8503-5277b3c628c3 2ce77510-2ea7-46c7-9c87-a51c093f5982
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:126 telephone-event/8000
a=ssrc:531608100 cname:XCbvh2SbM0Pf6D7b
a=ssrc:531608100 msid:542c8f1c-b2e8-4b46-8503-5277b3c628c3 2ce77510-2ea7-46c7-9c87-a51c093f5982
",
call_id: "0fp8ni4redbckebe3q6j",
cseq: 6701,
extraHeaders: ["Contact: <sip:[email protected];transport=ws;ob>", "Content-Type: application/sdp", "Session-Expires: 90"],
from: {
_display_name: null,
_parameters: { ... },
_uri: { ... }
},
headers: {
Call-ID: ["0fp8ni4redbckebe3q6j"],
CSeq: ["6701 INVITE"],
From: ["<sip:[email protected]>;tag=4o2j6p6jqg"],
Max-Forwards: [69],
To: ["<sip:[email protected]>"],
Via: [""]
},
method: "INVITE",
ruri: {
_headers: { ... },
_host: "sip01.sipprovider.com",
_parameters: { ... },
_port: undefined,
_scheme: "sip",
_user: "9026951168"
},
to: {
_display_name: null,
_parameters: { ... },
_uri: [circular object Object]
},
transaction: null,
ua: {
_applicants: { ... },
_cache: { ... },
_closeTimer: null,
_configuration: { ... },
_contact: { ... },
_data: { ... },
_dialogs: { ... },
_dynConfiguration: { ... },
_error: null,
_events: { ... },
_eventsCount: 2,
_maxListeners: undefined,
_registrator: { ... },
_sessions: { ... },
_status: 1,
_transactions: { ... },
_transport: { ... },
addListener: function addListener(type, listener) {
return _addListener(this, type, listener, false);
},
emit: function emit(type) {
var er, handler, len, args, i, events;
var doError = (type === 'error');
},
eventNames: function eventNames() {
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
},
getMaxListeners: function getMaxListeners() {
return $getMaxListeners(this);
},
listenerCount: function listenerCount(type) {
var events = this._events;
},
listeners: function listeners(type) {
return _listeners(this, type, true);
},
on: function addListener(type, listener) {
return _addListener(this, type, listener, false);
},
once: function once(type, listener) {
if (typeof listener !== 'function')
throw new TypeError('"listener" argument must be a function');
this.on(type, _onceWrap(this, type, listener));
return this;
},
prependListener: function prependListener(type, listener) {
return _addListener(this, type, listener, true);
},
prependOnceListener: function prependOnceListener(type, listener) {
if (typeof listener !== 'function')
throw new TypeError('"listener" argument must be a function');
this.prependListener(type, _onceWrap(this, type, listener));
return this;
},
rawListeners: function rawListeners(type) {
return _listeners(this, type, false);
},
removeAllListeners: function removeAllListeners(type) {
var listeners, events, i;
}
}
}, "color: #99CC00"
"%cJsSIP:Transport %csend()%c +5s", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:Transport %csending message:
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/WSS 526h81p4pd99.invalid;branch=z9hG4bK2918698
Max-Forwards: 69
To: <sip:[email protected]>
From: <sip:[email protected]>;tag=4o2j6p6jqg
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6701 INVITE
Contact: <sip:[email protected];transport=ws;ob>
Content-Type: application/sdp
Session-Expires: 90
Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY
Supported: timer,ice,replaces,outbound
User-Agent: JsSIP 3.4.2
Content-Length: 1489
v=0
o=- 2164683428557940697 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS 542c8f1c-b2e8-4b46-8503-5277b3c628c3
m=audio 62874 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
c=IN IP4 10.10.10.135
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:1328652830 1 udp 2122260223 10.10.10.135 62874 typ host generation 0 network-id 1
a=candidate:2979755658 1 tcp 1518280447 10.10.10.135 9 typ host tcptype active generation 0 network-id 1
a=ice-ufrag:VY5Q
a=ice-pwd:atUYKfRy9vhp0nMT847h2Fbt
a=ice-options:trickle
a=fingerprint:sha-256 E3:0B:40:B6:8A:B1:9D:19:6C:C6:E8:1B:C0:D2:BF:11:E7:C6:BE:A2:25:D7:1E:43:34:C0:37:9D:C1:64:AF:2B
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:542c8f1c-b2e8-4b46-8503-5277b3c628c3 2ce77510-2ea7-46c7-9c87-a51c093f5982
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:126 telephone-event/8000
a=ssrc:531608100 cname:XCbvh2SbM0Pf6D7b
a=ssrc:531608100 msid:542c8f1c-b2e8-4b46-8503-5277b3c628c3 2ce77510-2ea7-46c7-9c87-a51c093f5982
%c +0ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:WebSocketInterface %csend()%c +5s", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:WebSocketInterface %creceived WebSocket message%c +48ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:Transport %creceived text message:
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/WSS 526h81p4pd99.invalid;received=103.106.194.125;rport=48134;branch=z9hG4bK2918698
To: <sip:[email protected]>;tag=5944.8e4b8ba743f000761380c53bf8df60de
From: <sip:[email protected]>;tag=4o2j6p6jqg
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6701 INVITE
Proxy-Authenticate: Digest realm="sip01.sipprovider.com", nonce="71Cnw3v3ZEwaGFMYLshtwX2VmewZVuU7lhN+vVuEsPgA", qop="auth"
Server: OpenSIPS (3.3.0 (x86_64/linux))
Content-Length: 0
%c +48ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:Transport %csend()%c +1ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:Transport %csending message:
ACK sip:[email protected] SIP/2.0
Via: SIP/2.0/WSS 526h81p4pd99.invalid;branch=z9hG4bK2918698
Max-Forwards: 69
To: <sip:[email protected]>;tag=5944.8e4b8ba743f000761380c53bf8df60de
From: <sip:[email protected]>;tag=4o2j6p6jqg
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6701 ACK
Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY
Supported: outbound
User-Agent: JsSIP 3.4.2
Content-Length: 0
%c +0ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:WebSocketInterface %csend()%c +1ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:DigestAuthentication %cauthenticate() | using qop=auth [a2:"%s"]%c +31s", "color: #FF9933", "color: inherit", "INVITE:sip:[email protected]", "color: #FF9933"
"%cJsSIP:DigestAuthentication %cauthenticate() | response generated%c +0ms", "color: #FF9933", "color: inherit", "color: #FF9933"
"%cJsSIP:Transport %csend()%c +0ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:Transport %csending message:
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/WSS 526h81p4pd99.invalid;branch=z9hG4bK5677102
Max-Forwards: 69
To: <sip:[email protected]>
From: <sip:[email protected]>;tag=4o2j6p6jqg
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6702 INVITE
Proxy-Authorization: Digest algorithm=MD5, username="x245akwD", realm="sip01.sipprovider.com", nonce="71Cnw3v3ZEwaGFMYLshtwX2VmewZVuU7lhN+vVuEsPgA", uri="sip:[email protected]", response="c134a1af7854e245e5cffa497b44e049", qop=auth, cnonce="f2f2h6km1ib5", nc=00000001
Contact: <sip:[email protected];transport=ws;ob>
Content-Type: application/sdp
Session-Expires: 90
Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY
Supported: timer,ice,replaces,outbound
User-Agent: JsSIP 3.4.2
Content-Length: 1489
v=0
o=- 2164683428557940697 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS 542c8f1c-b2e8-4b46-8503-5277b3c628c3
m=audio 62874 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
c=IN IP4 10.10.10.135
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:1328652830 1 udp 2122260223 10.10.10.135 62874 typ host generation 0 network-id 1
a=candidate:2979755658 1 tcp 1518280447 10.10.10.135 9 typ host tcptype active generation 0 network-id 1
a=ice-ufrag:VY5Q
a=ice-pwd:atUYKfRy9vhp0nMT847h2Fbt
a=ice-options:trickle
a=fingerprint:sha-256 E3:0B:40:B6:8A:B1:9D:19:6C:C6:E8:1B:C0:D2:BF:11:E7:C6:BE:A2:25:D7:1E:43:34:C0:37:9D:C1:64:AF:2B
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:542c8f1c-b2e8-4b46-8503-5277b3c628c3 2ce77510-2ea7-46c7-9c87-a51c093f5982
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:126 telephone-event/8000
a=ssrc:531608100 cname:XCbvh2SbM0Pf6D7b
a=ssrc:531608100 msid:542c8f1c-b2e8-4b46-8503-5277b3c628c3 2ce77510-2ea7-46c7-9c87-a51c093f5982
%c +0ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:WebSocketInterface %csend()%c +1ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:InviteClientTransaction %cTimer D expired for transaction z9hG4bK2918698%c +14s", "color: #FF3333", "color: inherit", "color: #FF3333"
"%cJsSIP:WebSocketInterface %creceived WebSocket message%c +50ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:Transport %creceived text message:
SIP/2.0 100 Giving it a try
Via: SIP/2.0/WSS 526h81p4pd99.invalid;received=103.106.194.125;rport=48134;branch=z9hG4bK5677102
To: <sip:[email protected]>
From: <sip:[email protected]>;tag=4o2j6p6jqg
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6702 INVITE
Server: OpenSIPS (3.3.0 (x86_64/linux))
Content-Length: 0
%c +51ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:RTCSession %creceiveInviteResponse()%c +103ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:WebSocketInterface %creceived WebSocket message%c +100ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:Transport %creceived text message:
SIP/2.0 180 Ringing
Via: SIP/2.0/WSS 526h81p4pd99.invalid;rport=48134;received=103.106.194.125;branch=z9hG4bK5677102
Record-Route: <sip:103.163.40.230;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
Record-Route: <sip:103.163.40.230:443;transport=wss;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
From: <sip:[email protected]>;tag=4o2j6p6jqg
To: <sip:[email protected]>;tag=as67cf82c0
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6702 INVITE
Server: Asterisk PBX 18.6.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Session-Expires: 90;refresher=uas
Contact: <sip:[email protected]:5060>
Content-Length: 0
%c +100ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:RTCSession %creceiveInviteResponse()%c +100ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:Dialog %cnew UAC dialog created with status EARLY%c +14s", "color: #33CC33", "color: inherit", "color: #33CC33"
"%cJsSIP:RTCSession %csession progress%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "progress"%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:WebSocketInterface %creceived WebSocket message%c +711ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:Transport %creceived text message:
SIP/2.0 180 Ringing
Via: SIP/2.0/WSS 526h81p4pd99.invalid;rport=48134;received=103.106.194.125;branch=z9hG4bK5677102
Record-Route: <sip:103.163.40.230;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
Record-Route: <sip:103.163.40.230:443;transport=wss;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
From: <sip:[email protected]>;tag=4o2j6p6jqg
To: <sip:[email protected]>;tag=as67cf82c0
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6702 INVITE
Server: Asterisk PBX 18.6.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Session-Expires: 90;refresher=uas
Contact: <sip:[email protected]:5060>
Content-Length: 0
%c +712ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:RTCSession %creceiveInviteResponse()%c +711ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %csession progress%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "progress"%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:WebSocketInterface %creceived WebSocket message%c +792ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:Transport %creceived text message:
SIP/2.0 183 Session Progress
Via: SIP/2.0/WSS 526h81p4pd99.invalid;rport=48134;received=103.106.194.125;branch=z9hG4bK5677102
Record-Route: <sip:103.163.40.230;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
Record-Route: <sip:103.163.40.230:443;transport=wss;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
From: <sip:[email protected]>;tag=4o2j6p6jqg
To: <sip:[email protected]>;tag=as67cf82c0
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6702 INVITE
Server: Asterisk PBX 18.6.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Session-Expires: 90;refresher=uas
Contact: <sip:[email protected]:5060>
Content-Type: application/sdp
Require: timer
Content-Length: 693
v=0
o=root 64994987 64994987 IN IP4 103.163.40.241
s=Asterisk PBX 18.6.0
c=IN IP4 103.163.40.241
t=0 0
m=audio 13584 UDP/TLS/RTP/SAVPF 111 0 8 126
a=maxptime:20
a=mid:0
a=rtpmap:111 opus/48000/2
a=fmtp:111 useinbandfec=1
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:126 telephone-event/8000
a=fmtp:126 0-16
a=sendrecv
a=rtcp:13584
a=rtcp-mux
a=setup:active
a=fingerprint:sha-256 01:F4:35:DC:48:F7:89:D3:A0:48:31:41:56:A0:67:8C:74:47:FC:97:B2:8A:A3:D1:D0:15:1E:ED:1B:36:14:33
a=ptime:20
a=ice-ufrag:ZScToNgg
a=ice-pwd:tGC7ADo18G2WBrgq2ksSpX8ne7
a=ice-options:trickle
a=candidate:jI2oon5gu1OTmegP 1 UDP 2130706431 103.163.40.241 13584 typ host
a=end-of-candidates
%c +791ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:RTCSession %creceiveInviteResponse()%c +792ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %csession progress%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "progress"%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "sdp"%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:WebSocketInterface %creceived WebSocket message%c +11s", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:Transport %creceived text message:
SIP/2.0 200 OK
Via: SIP/2.0/WSS 526h81p4pd99.invalid;rport=48134;received=103.106.194.125;branch=z9hG4bK5677102
Record-Route: <sip:103.163.40.230;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
Record-Route: <sip:103.163.40.230:443;transport=wss;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
From: <sip:[email protected]>;tag=4o2j6p6jqg
To: <sip:[email protected]>;tag=as67cf82c0
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6702 INVITE
Server: Asterisk PBX 18.6.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Session-Expires: 90;refresher=uas
Contact: <sip:[email protected]:5060>
Content-Type: application/sdp
Require: timer
Content-Length: 693
v=0
o=root 64994987 64994987 IN IP4 103.163.40.241
s=Asterisk PBX 18.6.0
c=IN IP4 103.163.40.241
t=0 0
m=audio 13584 UDP/TLS/RTP/SAVPF 111 0 8 126
a=maxptime:20
a=mid:0
a=rtpmap:111 opus/48000/2
a=fmtp:111 useinbandfec=1
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:126 telephone-event/8000
a=fmtp:126 0-16
a=sendrecv
a=rtcp:13584
a=rtcp-mux
a=setup:active
a=fingerprint:sha-256 01:F4:35:DC:48:F7:89:D3:A0:48:31:41:56:A0:67:8C:74:47:FC:97:B2:8A:A3:D1:D0:15:1E:ED:1B:36:14:33
a=ptime:20
a=ice-ufrag:ZScToNgg
a=ice-pwd:tGC7ADo18G2WBrgq2ksSpX8ne7
a=ice-options:trickle
a=candidate:jI2oon5gu1OTmegP 1 UDP 2130706431 103.163.40.241 13584 typ host
a=end-of-candidates
%c +11s", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:RTCSession %creceiveInviteResponse()%c +11s", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:Dialog %cdialog 0fp8ni4redbckebe3q6j4o2j6p6jqgas67cf82c0 changed to CONFIRMED state%c +13s", "color: #33CC33", "color: inherit", "color: #33CC33"
"%cJsSIP:RTCSession %cemit "sdp"%c +1ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %csession accepted%c +2ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "accepted"%c +1ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %csendRequest()%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:Transport %csend()%c +6ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:Transport %csending message:
ACK sip:[email protected]:5060 SIP/2.0
Route: <sip:103.163.40.230:443;transport=wss;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
Route: <sip:103.163.40.230;r2=on;lr;ftag=4o2j6p6jqg;did=f87.d2e83441>
Via: SIP/2.0/WSS 526h81p4pd99.invalid;branch=z9hG4bK1933423
Max-Forwards: 69
To: <sip:[email protected]>;tag=as67cf82c0
From: <sip:[email protected]>;tag=4o2j6p6jqg
Call-ID: 0fp8ni4redbckebe3q6j
CSeq: 6702 ACK
Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY
Supported: outbound
User-Agent: JsSIP 3.4.2
Content-Length: 0
%c +0ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:WebSocketInterface %csend()%c +6ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:RTCSession %csession confirmed%c +1ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:RTCSession %cemit "confirmed"%c +0ms", "color: #99CC00", "color: inherit", "color: #99CC00"
"%cJsSIP:WebSocketInterface %creceived WebSocket message%c +12s", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:Transport %creceived text message:
OPTIONS sip:[email protected];transport=ws SIP/2.0
Via: SIP/2.0/WSS 103.163.40.230:443;branch=z9hG4bK572.edb8810000003501
From: sip:[email protected];tag=07b883d3
To: sip:[email protected];transport=ws
Call-ID: [email protected]
CSeq: 1 OPTIONS
Max-Forwards: 70
Content-Length: 0
%c +12s", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:Transport %csend()%c +1ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:Transport %csending message:
SIP/2.0 200 OK
Via: SIP/2.0/WSS 103.163.40.230:443;branch=z9hG4bK572.edb8810000003501
To: sip:[email protected];transport=ws;tag=nsfmc92lc3
From: sip:[email protected];tag=07b883d3
Call-ID: [email protected]
CSeq: 1 OPTIONS
Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY
Accept: application/sdp, application/dtmf-relay
Supported: outbound
Content-Length: 0
%c +0ms", "color: #FF0066", "color: inherit", "color: #FF0066"
"%cJsSIP:WebSocketInterface %csend()%c +1ms", "color: #66CC33", "color: inherit", "color: #66CC33"
"%cJsSIP:NonInviteServerTransaction %cTimer J expired for transaction z9hG4bK572.edb8810000003501%c +30s", "color: #6633CC", "color: inherit", "color: #6633CC"
the attached log after call pickup successfully