Seguem as alterações necessárias para transformar um telefone em um link clicktocall : 1 - Verificando se usuario logado está com recurso clicktocall liberado (PHP): Obs.: $voip_enabled é o boolean que contém essa informação. //Begin: Enable/Disable VoIP Service -> Voip Server Config $voip_enabled = false; $voip_groups = array(); if($GLOBALS['phpgw_info']['server']['voip_groups']) { $emailVoip = false; foreach(explode(",",$GLOBALS['phpgw_info']['server']['voip_groups']) as $i => $voip_group){ $a_voip = explode(";",$voip_group); $voip_groups[] = $a_voip[1]; } foreach($GLOBALS['phpgw']->accounts->membership() as $idx => $group){ if(array_search($group['account_name'],$voip_groups) !== FALSE){ $voip_enabled = true; break; } } } //End: Enable/Disable VoIP Service -> Voip Server Config 2- Montando link clicktocall (Javascript): Obs.: phoneUser é a variável que contém o telefone de destino. Vira uma tag HREF com link clicktocall, se habilitado. // Verifica se o usuário tem o recurso VoIP ativado e se tem telefone cadastrado no Expresso if(preferences.voip_enabled && phoneUser) { phoneUser = ""+phoneUser+""; } 3 - Implementando função connectVoiP (Javascript) var connectVoip = function (phoneUser, typePhone){ var handler_connectVoip = function(data){ if(!data) { alert(get_lang("Error contacting VoIP server.")); } else{ alert(get_lang("Requesting a VoIP call")+":\n"+data); } } // HTTPRequest cExecute ("$this.functions.callVoipConnect&to="+phoneUser+"&typePhone="+typePhone, handler_connectVoip); } 4 - Implementando classe PHP com método callVoipConnect: class Functions{ function CallVoipConnect($params){ $fromNumber = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number']; if(!$fromNumber) return false; $fromNumber = substr($fromNumber,strlen($fromNumber) - 4, strlen($fromNumber) - 1); $toNumber = $params['to'] ? substr($params['to'],strlen($params['to']) - 4, strlen($params['to']) - 1) : 0; $voipServer = $_SESSION['phpgw_info']['expressomail']['server']['voip_server']; $voipUrl = $_SESSION['phpgw_info']['expressomail']['server']['voip_url']; $voipPort = $_SESSION['phpgw_info']['expressomail']['server']['voip_port']; if(!$voipServer || !$voipUrl || !$voipPort) return false; $url = "http://".$voipServer.":".$voipPort.$voipUrl."?magic=1333&acao=liga&ramal=".$fromNumber."&numero=".$toNumber; $sMethod = 'GET '; $crlf = "\r\n"; $sRequest = " HTTP/1.1" . $crlf; $sRequest .= "Host: localhost" . $crlf; $sRequest .= "Accept: */* " . $crlf; $sRequest .= "Connection: Close" . $crlf . $crlf; $sRequest = $sMethod . $url . $sRequest; $sockHttp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$sockHttp) { return false; } $resSocketConnect = socket_connect($sockHttp, $voipServer, $voipPort); if (!$resSocketConnect) { return false; } $resSocketWrite = socket_write($sockHttp, $sRequest, strlen($sRequest)); if (!$resSocketWrite) { return false; } $sResponse = ''; while ($sRead = socket_read($sockHttp, 512)) { $sResponse .= $sRead; } socket_close($sockHttp); $pos = strpos($sResponse, $crlf . $crlf); return substr($sResponse, $pos + 2 * strlen($crlf)); } } IMPORTANTE Para que o método CallVoipConnect (AJAX) funcione corretamente, é necessário popular alguns valores do $GLOBALS para $_SESSION na index.php ou em outro PHP usado para montar a página que terá o "Clicktocall" . São eles: $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber']; $_SESSION['phpgw_info']['expressomail']['server'] = $GLOBALS['phpgw_info']['server']; As variáveis da $_SESSION usadas são do ExpressoMail, pois já tem lá atualmente.