Ticket #637: click-to-call.txt

File click-to-call.txt, 4.6 KB (added by viani, 15 years ago)

Algoritmo para chamada voip

Line 
1Seguem as alterações necessárias para transformar um telefone em um link clicktocall :
2
31 - Verificando se usuario logado está com recurso clicktocall liberado (PHP):
4Obs.: $voip_enabled é o boolean que contém essa informação.
5
6//Begin: Enable/Disable VoIP Service -> Voip Server Config
7    $voip_enabled = false;
8    $voip_groups = array();   
9    if($GLOBALS['phpgw_info']['server']['voip_groups']) {
10        $emailVoip = false;
11        foreach(explode(",",$GLOBALS['phpgw_info']['server']['voip_groups']) as $i => $voip_group){
12            $a_voip = explode(";",$voip_group);           
13            $voip_groups[] = $a_voip[1];
14        }
15        foreach($GLOBALS['phpgw']->accounts->membership() as $idx => $group){           
16            if(array_search($group['account_name'],$voip_groups) !== FALSE){         
17                $voip_enabled = true;
18                break;
19            }
20        }
21    }
22//End: Enable/Disable VoIP Service -> Voip Server Config
23
24
252- Montando link clicktocall (Javascript):
26Obs.: phoneUser é a variável que contém o telefone de destino. Vira uma tag HREF com link clicktocall, se habilitado.
27
28// Verifica se o usuário tem o recurso VoIP ativado e se tem telefone cadastrado no Expresso
29if(preferences.voip_enabled && phoneUser) {
30            phoneUser = "<a title='Discar para esse telefone' href='#' onclick='javascript:connectVoip(\'"+phoneUser+"\', \'com\')'>"+phoneUser+"</a>";
31}
32
333 - Implementando função connectVoiP (Javascript)
34
35var connectVoip = function (phoneUser, typePhone){
36    var handler_connectVoip = function(data){
37        if(!data) {
38            alert(get_lang("Error contacting VoIP server."));
39        }
40        else{
41            alert(get_lang("Requesting a VoIP call")+":\n"+data);
42        }
43    }
44  // HTTPRequest
45    cExecute ("$this.functions.callVoipConnect&to="+phoneUser+"&typePhone="+typePhone, handler_connectVoip);
46}
47
484 - Implementando classe PHP com método callVoipConnect:
49
50class Functions{
51             
52        function CallVoipConnect($params){       
53            $fromNumber = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'];
54            if(!$fromNumber)
55                return false;
56            $fromNumber = substr($fromNumber,strlen($fromNumber) - 4, strlen($fromNumber) - 1);
57            $toNumber    = $params['to'] ? substr($params['to'],strlen($params['to']) - 4, strlen($params['to']) - 1) : 0;
58           
59            $voipServer    = $_SESSION['phpgw_info']['expressomail']['server']['voip_server'];
60            $voipUrl    = $_SESSION['phpgw_info']['expressomail']['server']['voip_url'];
61            $voipPort    = $_SESSION['phpgw_info']['expressomail']['server']['voip_port'];
62                           
63            if(!$voipServer || !$voipUrl || !$voipPort)
64                return false;
65            $url        = "http://".$voipServer.":".$voipPort.$voipUrl."?magic=1333&acao=liga&ramal=".$fromNumber."&numero=".$toNumber;           
66            $sMethod = 'GET ';
67            $crlf = "\r\n";
68            $sRequest = " HTTP/1.1" . $crlf;
69            $sRequest .= "Host: localhost" . $crlf;
70            $sRequest .= "Accept: */* " . $crlf;
71            $sRequest .= "Connection: Close" . $crlf . $crlf;           
72            $sRequest = $sMethod . $url . $sRequest;   
73            $sockHttp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);           
74            if (!$sockHttp)  {
75                return false;
76            }
77            $resSocketConnect = socket_connect($sockHttp, $voipServer, $voipPort);
78            if (!$resSocketConnect) {
79                return false;
80            }
81            $resSocketWrite = socket_write($sockHttp, $sRequest, strlen($sRequest));
82            if (!$resSocketWrite) {
83                return false;
84            }   
85            $sResponse = '';   
86            while ($sRead = socket_read($sockHttp, 512)) {
87                $sResponse .= $sRead;
88            }           
89           
90            socket_close($sockHttp);           
91            $pos = strpos($sResponse, $crlf . $crlf);
92            return substr($sResponse, $pos + 2 * strlen($crlf));                                   
93        }
94}
95 
96IMPORTANTE
97
98Para que o método CallVoipConnect (AJAX) funcione corretamente, é
99necessário popular alguns valores do $GLOBALS para $_SESSION na index.php
100ou em outro PHP usado para montar a página que terá o "Clicktocall" . São eles:
101
102$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber'];
103$_SESSION['phpgw_info']['expressomail']['server'] = $GLOBALS['phpgw_info']['server'];
104
105
106As variáveis da $_SESSION usadas são do ExpressoMail, pois já tem lá atualmente.