## 網頁通話
>[info] **功能說明**
>webRTC (Web Real-Time Communications) ,是一項實時通訊技術,它允許網絡應用或者站點,在不借助中間媒介的情況下,建立瀏覽器之間點對點(Peer-to-Peer)的連接,實現視頻流和(或)音頻流或者其他任意數據的傳輸。
> 在CTI應用中,webRTC可以理解為直接使用瀏覽器撥打電話,支持PC端與移動端。
> 我們已經將webRTC封裝為JavaScript(js),開發者無需掌握webRTC底層技術,僅需要簡單的js調用即可實現通過網頁撥打電話。
* **調用方式**
```
在項目開發中我們會提供已經開發好的demo文件,
開發者只需引用已經封裝好的js文件,并拷貝demo文件中的js調用方法到自己的業務系統中即可。
```

* **js調用方法**
```
以下為部分代碼,在實際開發中我們會有提供demo文件并提供一對一技術支持。
```
~~~
//定義 SoftPhone 類
var SoftPhone = function(config) {
var that = this;
JsSIP.debug.disable('JsSIP:*');//關閉調試
JsSIP.C.SESSION_EXPIRES = 3600;//sip注冊周期
JsSIP.C.MIN_SESSION_EXPIRES = 120; // 修改定義 JsSIP 的 SESSION_TIMER 常量,默認 FreeSwitch 的 Session Timer 范圍為 120,而 JsSIP 默認為 90
var socket=new JsSIP.WebSocketInterface(config.WSS_URI); // 構建用于信令傳輸的 WebSocket 接口
var audioRemote=config.audioRemote;//播放遠端通話聲的audio標簽
var audioRingin=config.audioRingin;//播放來電振鈴聲的audio標簽
var audioRingback=config.audioRingback;//播放外呼回鈴聲的audio標簽
var audioHangup=config.audioHangup;//播放掛機聲音的audio標簽
//通過拼接構造 JsSIP.UA 實例的配置參數
var configuration = {
sockets : [ socket ],
uri : 'sip:' + config.user + '@' + config.SIP_DOMAIN,
password : config.password,
display_name : config.user,
contact_uri : 'sip:' + config.user + '@' + config.SIP_DOMAIN + ';transport=wss',
register_expires : config.register_expires
};
//構造 JsSIP.UA 類的實例
var ua = new JsSIP.UA(configuration);
this.ua = ua;
// 邦定 RTCSession 實例監聽的事件
var eventHandlers = {
'getusermediafailed': function(e) {
alert('找不到麥克風設備!');
},
'progress': function(e) {
// 外呼/呼入進行中事件
console.log('call is in progress');
that.updateView();
audioRingin[0].pause();
},
'failed': function(e) {
// 呼叫失敗事件處理
console.log('call failed with cause: '+ e.cause);
that.updateView();
audioRingin[0].pause();
audioRingback[0].pause();
audioHangup[0].currentTime = 0;
//audioHangup[0].play();
},
'ended': function(e) {
// 呼叫結束事件
console.log('call ended with cause: '+ e.cause);
that.updateView();
audioRingin[0].pause();
audioRingback[0].pause();
audioHangup[0].currentTime = 0;
audioHangup[0].play();
},
'confirmed': function(e) {
// 呼叫建立事件
console.log('call confirmed');
that.updateView();
audioRingin[0].pause();
audioRingback[0].pause();
},
"peerconnection": function(e) {
// RTCPeerConnection 對象創建成功后的事件,用于將 Early Media 以及遠端的聲音,通過 audioRemote 的 DOM:audio 對象實時播放出來
console.log('peer connection');
//監聽 RTCPeerConnection 實例的 OnAddStream 事件,一旦有遠端流被添加進來,就賦予給 audioRemote 進行還原播放
e.peerconnection.addEventListener('track', function(event) {
console.log('onaddstream');
audioRingback[0].pause();
audioRemote[0].srcObject = event.streams[0];
audioRemote[0].play();//播放遠端聲音
});
}
};
//撥打電話
$('#btn_call').click(function() {
var telnum = $('#tel').val();
telnum=telnum.replace(/[ ]/g,'');//刪除所有空格
if(!telnum){
return false;
}
var session = phone.call(telnum);
});
//掛機
$('#btn_end').click(function() {
phone.endcall();
});
~~~