172 lines
4.2 KiB
JavaScript
172 lines
4.2 KiB
JavaScript
const socketHost = 'ws://pbx.dyn.verdnatura.es:8088/asterisk/ws';
|
|
const uriHost = 'pbx.dyn.verdnatura.es';
|
|
|
|
var options = {
|
|
mediaConstraints: {
|
|
audio: true,
|
|
video: false
|
|
},
|
|
session_timers: false,
|
|
volume: 0.5,
|
|
microphone: true
|
|
};
|
|
|
|
let socket = new JsSIP.WebSocketInterface(socketHost);
|
|
let configuration = {
|
|
sockets : [ socket ],
|
|
uri : 'sip:8000@pbx.dyn.verdnatura.es',
|
|
password : '123456',
|
|
authorizationUser: '8000',
|
|
hackIpInContact: true,
|
|
rtcpMuxPolicy: 'negotiate',
|
|
hackWssInTransport: true
|
|
};
|
|
|
|
let ua = new JsSIP.UA(configuration);
|
|
|
|
/**
|
|
* Show event message
|
|
* @param {Object} event
|
|
*/
|
|
function eventStatus(event) {
|
|
if (event.cause === JsSIP.C.causes.CONNECTION_ERROR)
|
|
return Util.notify('Ha ocurrido un error de conexión');
|
|
|
|
if (event.cause === JsSIP.C.causes.INTERNAL_ERROR)
|
|
return Util.notify('Ha ocurrido un error inesperado');
|
|
|
|
if (event.cause === JsSIP.C.causes.AUTHENTICATION_ERROR)
|
|
return Util.notify('No se ha podido autenticar la sesión');
|
|
|
|
if (event.cause === JsSIP.C.causes.UNAVAILABLE)
|
|
return Util.notify('El destinatario no está disponible');
|
|
|
|
if (event.cause === JsSIP.C.causes.BUSY)
|
|
return Util.notify('El destinatario está ocupado');
|
|
|
|
if (event.cause === JsSIP.C.causes.REJECTED)
|
|
return Util.notify('La llamada ha sido rechazada')
|
|
|
|
if (event.cause === JsSIP.C.causes.NOT_FOUND)
|
|
return Util.notify('No se ha podido encontrar el destinatario');
|
|
|
|
if (event.cause === JsSIP.C.causes.REQUEST_TIMEOUT)
|
|
return Util.notify('El destinatario no ha respondido la llamada');
|
|
|
|
if (event.cause === JsSIP.USER_DENIED_MEDIA_ACCESS)
|
|
return Util.notify('Es necesario permitir el acceso al micrófono');
|
|
}
|
|
|
|
/**
|
|
* UA register
|
|
*/
|
|
ua.on('registered', function(event) {
|
|
$('.profile .status').removeClass('offline').addClass('online');
|
|
});
|
|
|
|
/**
|
|
* Client disconnection
|
|
*/
|
|
ua.on('disconnected', function(event) {
|
|
$('.profile .status').removeClass('online').addClass('offline');
|
|
eventStatus(event);
|
|
});
|
|
|
|
ua.on('registrationFailed', function(event) {
|
|
$('.profile .status').removeClass('offline').addClass('error');
|
|
eventStatus(event);
|
|
});
|
|
|
|
/**
|
|
* Call session
|
|
*/
|
|
ua.on('newRTCSession', function(event) {
|
|
let session = event.session;
|
|
ua.sessionInstance = session;
|
|
|
|
session.on('confirmed', function() {
|
|
console.log('confirmed');
|
|
});
|
|
|
|
session.on('reinvite', function() {
|
|
console.log('reinvite');
|
|
});
|
|
|
|
session.on('update', function() {
|
|
console.log('update');
|
|
});
|
|
|
|
/**
|
|
* Call in progress
|
|
*/
|
|
session.on('progress', function(event) {
|
|
if (session.direction === 'incoming') {
|
|
Util.load('#content', '/call', function() {
|
|
audio.addTrack('incoming');
|
|
audio.play(true);
|
|
});
|
|
} else {
|
|
Util.load('#content', '/call', function() {
|
|
audio.addTrack('outgoing');
|
|
audio.play(true);
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Call accepted
|
|
*/
|
|
session.on('accepted', function(event) {
|
|
console.log('accepted');
|
|
document.getElementById('callStatus').innerHTML = 'Llamada conectada';
|
|
if (session.connection.getRemoteStreams().length > 0) {
|
|
let stream = session.connection.getRemoteStreams()[0];
|
|
|
|
audio.addStream(stream);
|
|
audio.play();
|
|
}
|
|
Util.startTimer();
|
|
});
|
|
|
|
session.on('hold', function(event) {
|
|
$('callStatus').innerHTML = 'Llamada en espera';
|
|
});
|
|
|
|
session.on('unhold', function(event) {
|
|
$('callStatus').innerHTML = 'Llamada conectada';
|
|
});
|
|
|
|
session.on('refer', function() {
|
|
$('callStatus').innerHTML = 'Llamada transferida';
|
|
});
|
|
|
|
/**
|
|
* Call ended
|
|
*/
|
|
session.on('ended', function(event) {
|
|
audio.addTrack('hangup');
|
|
audio.play();
|
|
|
|
Util.load('#content', '/', function() {
|
|
|
|
});
|
|
|
|
Util.stopTimer();
|
|
|
|
ua.sessionInstance = null;
|
|
eventStatus(event);
|
|
});
|
|
|
|
/**
|
|
* Call failed
|
|
*/
|
|
session.on('failed', function(event) {
|
|
audio.addTrack('hangup');
|
|
audio.play();
|
|
|
|
ua.sessionInstance = null;
|
|
eventStatus(event);
|
|
});
|
|
});
|
|
|
|
ua.start(); |