Howto: Snippets zum Flash Operator Panel, click2dial, CTI

o_dapenguin

Neuer User
Mitglied seit
16 Jun 2005
Beiträge
67
Punkte für Reaktionen
0
Punkte
0
In unserer Telefonzentrale läuft derzeit erfolgreich ein Test mit der click2dial-Lösung des Flash Operator Panels. Von der alten Telefonanlage war noch eine CSV-Datei übrig, in der die 200 wichtigsten Telefonnummern abgespeichert waren.

1) HTML-Seite mit 2 Iframes in Tabelle

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Meine Telefonzentrale</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="100%" border="0" align="left">
  <tr> 
    <td width="630" align="left" valign="top"> 
      <iframe  frameborder="0" scrolling="no" src="index-clicktodial.html" name="FOP" height="580" width="620">IFrames wollen nicht</iframe>
    </td>
    <td align="left" valign="top">
      <iframe  frameborder="0" scrolling="auto" src="Telefonliste.php" name="TB" height="580">IFrames wollen nicht</iframe>
    </td>
  </tr>
</table>
</body>
</html>

2) Iframe 1 "FOP" lädt das Flash Operator Panel mit dem Javascript zum click2dial (Originalcode aus dem FOP-Projekt), "?dial=" entsprechend der gewünschten Extension abändern

Code:
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  <link rel="stylesheet" href="styles.css" media="screen" />
  <META HTTP-EQUIV="Expires" CONTENT="Fri, Jun 12 1981 08:20:00 GMT">
  <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
  <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<SCRIPT LANGUAGE="JavaScript"> 
<!--  
var movieName = "operator_panel";

function thisMovie(movieName) {
  // If you want to run this from another frame, change window or document 
  // for the appropiate reference, like parent.frame[1].window[movieName] 
  if (navigator.appName.indexOf ("Microsoft") !=-1) {
    return window[movieName]
  } else {
    return document[movieName]
  }
}

function movieIsLoaded (theMovie) {
  if (typeof(theMovie) != "undefined") {
    return theMovie.PercentLoaded() == 100;
  } else {
    return false;
  }
}


function sendnumber(telefono) {
  if (movieIsLoaded(thisMovie(movieName))) {
        thisMovie(movieName).TGotoFrame("_level0/numdial",10); // Erase previous number
        for(a=0;a<telefono.length;a++) {
            var frame= telefono.charAt(a);
            if(!isNaN(frame)) {
            thisMovie(movieName).TGotoFrame("_level0/numdial",frame); // Add digit to number
            thisMovie(movieName).TGotoFrame("_level0/numdial",12);    // next digit
            }
        }
        thisMovie(movieName).TGotoFrame("_level0/numdial",11); // Dial current number
  }
}
</script>
</head>
<body>
<!--
To enable click to dial, you have to specify the dial parameter after each
appearance of operator_panel.swf below. You can specify the button number
as this example, or the channel name, like
operator_panel.swf?dial=SIP/john
When a dial order is received from javascript, it will use that channel
to originate the call. It only works for channels for the 1st server
(if you are monitoring multiple servers).
-->
 <div align='center'>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="990" height="600" id="operator_panel">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="operator_panel.swf?dial=SIP/20" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="operator_panel.swf?dial=SIP/20" quality="high" bgcolor="#ffffff" width="990" height="600" name="operator_panel" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</div>
</body>
</html>

3) Iframe 2 "TB" ist eine PHP-Seite und lädt das Telefonbuch aus der CSV-Datei

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<?php
$zeiger = fopen("telefonbuch.csv", "r");
while(($Daten=fgetcsv($zeiger, 1000, ","))!==FALSE)
{
		echo "<a href='#' onclick=\"top.frames['FOP'].sendnumber('$Daten[1]'); return false;\">$Daten[0] $Daten[1]</a><br>";
}
fclose($zeiger);
?>
</body>
</html>

In der Zeile
Code:
while(($Daten=fgetcsv($zeiger, 1000, ","))!==FALSE)
muss je nach Trennzeichen der Tabellenfelder das Komma durch ein Semikolon oder was auch immer ausgetauscht werden.

Geplant ist eine Anbindung an die AstDB oder eine extra MySQL-DB, schöner wäre noch LDAP, damit die Telefonbücher der GXP2000 dementsprechend auch mit dem Webinterface übereinstimmen.

Versuche laufen derzeit (noch ohne Erfolg) mit dem optionalen Hinzuladen von http://www.telefonbuch.de in ein weiteres IFrame. Firefox mit Greasemonkey soll dann die <div class='phonenr'> Tags entsprechend durch den Aufruf des o.g. sendnumber - Scripts ersetzen und damit die Rufnummer per Klick direkt anwählen:

Hier das Greasemonkey .js

Code:
// ==UserScript==
// @name          Telefonbuch-FOP
// @author         o_dapenguin
// @include	   * 
// @description	  Finds phonenr divs and replaces them with the final destination link
// ==/UserScript==

// get the links to the next pages
var divtel = document.evaluate("//div[@class='phonenr']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if (!divtel) return;
for (i = 0; i < divtel.snapshotLength; i++){ 
	//divtel.snapshotItem(i).innerHTML = "Test"
	telefonnummer = divtel.snapshotItem(i).innerHTML.replace(/[^0-9]/ig,"");
	divtel.snapshotItem(i).innerHTML = make_voip(telefonnummer)
}

function make_voip (telefonnummer){
links_zu_voip_string  ='<A href="#" onclick="top.frames[0].sendnumber('+telefonnummer+'); return false;")>'+telefonnummer+'</a>';
return links_zu_voip_string;
}

Greasmonkey macht seine Arbeit gut, dennoch will das Ganze noch nicht so richtig klappen, - sieht jemand einen bug ?

Grüße

o_dapenguin
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.