Grandstream idle screen: Unterschied zwischen den Versionen

Aus metasec wiki
Wechseln zu: Navigation, Suche
Zeile 1: Zeile 1:
<pre>
+
=Allgemein=
  
[grandstream-idle-screen-refresh]
+
Um bei den Grandstream Telefonen einen dynamischen Idle Screen zu installieren
Event=>x-gs-screen
+
sind nachfolgende Schritte zu befolgen. Der dynamische Idle Screen kann z.b.
Content-Length=>0
+
dazu verwendet werden um den DND oder Umleitungsstatus einzublenden.
  
</pre>
+
Der Screen als solches kann auch noch mit diversen Informationen "angereichert"
 +
werden. Datum, Benuztername, LineID, etc...
  
<pre>
+
=Installation=
<?php
+
include("/var/www/zphone/etc/config.inc.php");
+
include($CCBOX["INC"]."func_sql.inc.php");
+
include($CCBOX["INC"]."func_manager.inc.php");
+
  
 +
Als erstes muss ein weiterer SIP Notify Typ im System hinzugefügt werden. Dazu muss
 +
in der Datei /etc/asterisk/sip_notify.conf folgender Inhalt hinzugefügt werden:
  
function zphone_manager_db_get( $family, $key ) {
+
<pre>
  
 
+
[grandstream-idle-screen-refresh]
    $str    = trim(zphone_manager_exec_cmd("database get ".$family." ".$key));
+
Event=>x-gs-screen
    $uml_nr = (string)str_replace("Value: ","", $str );
+
Content-Length=>0
 
+
    if ( $uml_nr == "" || $uml_nr == -1 || $uml_nr == "0I>" || $uml_nr == 0 )
+
        return -1;
+
    else
+
        return $uml_nr;
+
 
+
 
+
    return true;
+
 
+
}
+
 
+
 
+
 
+
 
+
 
+
$str = $_SERVER["HTTP_USER_AGENT"];
+
$_arr = explode("DevId", $str);
+
$_arr[1] = trim($_arr[1]);
+
 
+
$s = new SQL;
+
$s->query("SELECT ae_ext FROM ast_users WHERE ae_mac_ip='".strtoupper($_arr[1])."'");
+
$s->next_record();
+
$ae_ext = $s->f("ae_ext");
+
$s->free_result();
+
 
+
//$uml = $ae_ext;
+
$uml = zphone_manager_db_get( "uml_target", $ae_ext );
+
print("<?xml version=\"1.0\"?>\n");
+
?>
+
<Screen>
+
  <IdleScreen>
+
      <ShowStatusLine>true</ShowStatusLine>
+
      <DisplayString font="f10h" halign="Center" a1reg="false">
+
          <DisplayStr>$N</DisplayStr>
+
          <X>64</X>
+
          <Y>1</Y>
+
      </DisplayString>
+
      <DisplayString font="f10b" halign="Center" a1reg="true">
+
          <DisplayStr>$N</DisplayStr>
+
          <X>64</X>
+
          <Y>1</Y>
+
      </DisplayString>
+
 
+
      <DisplayString font="f16" halign="Center" a1reg="false">
+
          <DisplayStr>$X</DisplayStr>
+
          <X>64</X>
+
          <Y>10</Y>
+
      </DisplayString>
+
 
+
      <DisplayString font="f16b" halign="Center" a1reg="true">
+
          <DisplayStr>$X</DisplayStr>
+
          <X>64</X>
+
          <Y>10</Y>
+
      </DisplayString>
+
 
+
<?php
+
if ( $uml > 0 ) {
+
?>
+
      <DisplayString font="f8" halign="Center" a1reg="true">
+
          <DisplayStr>UML: <?php
+
          print($uml);
+
          ?></DisplayStr>
+
          <X>64</X>
+
          <Y>28</Y>
+
      </DisplayString>
+
<?php
+
}
+
?>
+
      <DisplayString font="f8" halign="Center">
+
          <DisplayStr>$M $D, $Y</DisplayStr>
+
          <X>64</X>
+
          <Y>40</Y>
+
      </DisplayString>
+
  </IdleScreen>
+
</Screen>
+
  
 
</pre>
 
</pre>
  
<pre>
+
Danach bitte auf der Asterisk CLI ein
#!/usr/bin/php4 -q
+
<?php
+
  
/*
+
  sip reload
  some zphone specific includes
+
*/
+
  
// main config file
+
durchführen. Nun steht das SIP Notify im System zu verfügung. Dieses wird benötigt um
include_once("/var/www/zphone/etc/config.inc.php");
+
den Telefonen mitzuteilen dass diese sich ein Update des Idle Screens holen sollen.
  
// main file for doing any sql lookups
+
Als nächstes wird ein AGI Script installiert. Diese ist dazu da, dass beim Auflegen das
include($CCBOX["INC"]."func_sql.inc.php");
+
Telefon immer den Aktuellsten Screen lädt.
  
// some other zAPI files
 
include($CCBOX["INC"]."func_manager.inc.php");
 
  
 
$in = fopen("php://stdin", "r" );
 
$err = fopen("php://stderr", "r" );
 
 
 
/*
 
 
asterisk pass some values via stdin to the agi
 
script. format is key: vale
 
just get the values and extact them into an
 
array named $agivars with key value index
 
 
*/
 
 
$agivars = array();
 
while (!feof($in)) {
 
    $agivar = trim(fgets($in));
 
 
    if ($agivar === '')
 
        break;
 
 
    $agivar = explode(':', $agivar);
 
    $agivars[$agivar[0]] = trim($agivar[1]);
 
}
 
 
 
/*
 
this is needed if executing via DeadAGI dialplan app
 
*/
 
pcntl_signal(SIGHUP, SIG_IGN);
 
 
/*
 
hier kommt der code hin, den man verwenden will
 
wenn man die richtigen includes im kopf definiert,
 
stehen einem alle zphone internen funktionen zur
 
verfuegung
 
 
 
paste here your code you want to use
 
if you include the needed/right files in the
 
header of this file, you are able to user all
 
of the internal zphone functions form the zAPI
 
*/
 
 
/*
 
 
print("noop just an info...\n");
 
print("set varialble Z_AGI_TEST hallo\n");
 
 
*/
 
exec("echo kahsdkjhd >> /tmp/akshkjsad");
 
zphone_manager_exec_cmd("sip notify grandstream-idle-screen-refresh ".$argv[1]);
 
 
fclose($in);
 
fclose($err);
 
return 0;
 
 
 
?>
 
</pre>
 
  
 
<pre>
 
<pre>
 
exten => h,n,System(/usr/sbin/asterisk -rx "sip notify grandstream-idle-screen-refresh ${CALLERID(num)}")
 
exten => h,n,System(/usr/sbin/asterisk -rx "sip notify grandstream-idle-screen-refresh ${CALLERID(num)}")
 
</pre>
 
</pre>

Version vom 21. Januar 2010, 15:46 Uhr

Allgemein

Um bei den Grandstream Telefonen einen dynamischen Idle Screen zu installieren sind nachfolgende Schritte zu befolgen. Der dynamische Idle Screen kann z.b. dazu verwendet werden um den DND oder Umleitungsstatus einzublenden.

Der Screen als solches kann auch noch mit diversen Informationen "angereichert" werden. Datum, Benuztername, LineID, etc...

Installation

Als erstes muss ein weiterer SIP Notify Typ im System hinzugefügt werden. Dazu muss in der Datei /etc/asterisk/sip_notify.conf folgender Inhalt hinzugefügt werden:


[grandstream-idle-screen-refresh]
Event=>x-gs-screen
Content-Length=>0

Danach bitte auf der Asterisk CLI ein

sip reload

durchführen. Nun steht das SIP Notify im System zu verfügung. Dieses wird benötigt um den Telefonen mitzuteilen dass diese sich ein Update des Idle Screens holen sollen.

Als nächstes wird ein AGI Script installiert. Diese ist dazu da, dass beim Auflegen das Telefon immer den Aktuellsten Screen lädt.


exten => h,n,System(/usr/sbin/asterisk -rx "sip notify grandstream-idle-screen-refresh ${CALLERID(num)}")