Custom Directory via XML

...


Wenn dem so ist snd wir uns 100% einig :cool: Gut, dass wir darüber gesprochen haben


Ich habe das gerade mal mit der Datei per copy ub pase mit einem 7942 und Apache/win probiert. Da bekomme ich so auch einen xml /Analysefehler

Gruß,
Marcus
 
...

So geht's bei mir.

Localhost in echte IP

und

<?php
header("Content-type: text/xml");
?>
<CiscoIPPhoneMenu>
<Title>Phone-Selection</Title>
<Prompt>Test-Menu</Prompt>
<MenuItem>
<Name>Radar Sites</Name>
<URL>http://IP oder Name (wenn DNS im Phone eingetragen) des ext. Websevers/cisco/radarsites.php</URL>
</MenuItem>
<MenuItem>
<Name>CCTV</Name>
<URL>http://IP oder Name (wenn DNS im Phone eingetragen) des ext. Websevers/cisco/cctv.php</URL>
</MenuItem>
</CiscoIPPhoneMenu>

Und die Datei natürlich nicht .xml sondern .php

Gruß,
Marcus
 
Zuletzt bearbeitet:
lass mich raten - debian system?
@Stom2006
Ahso, sorry das ich zuvor etwas auf dem Schlauch stand - dachte immer du redest von dem localhost im xml-File - das andere habe ich nicht beachtet gehabt - sorry
 
...

Also mein Test von eben lief unter dem aktuellen xamp (win32)

@chaos2000: Kein Problem ;). Für sowas ist so ein Forum ja schließlich da und irgendwie muss man ja auch so einen Sonntag rum bekommen.

Ps.: Er wird aber auch mit den localhost Einträgen im XML File weit kommen. Auch diese würden sonst an den Webserver des Phones gesendet und nicht an den ext. Webserver.

Gruß,
Marcus
 
Hallo Zusammen!

Ich habe das Tool aus Post 9 "http://www.thelastinstance.de/soft/project13.phtml#updates" ausprobiert und es läuft auch soweit alles bis auf eingehende Anrufe gegen die Datenbank zu prüfen.

Dies bekomme ich einfach nicht zum laufen, ich habe das Skript nach Anweisung in den Ordner "/var/lib/asterisk/agi-bin" kopiert, angespasst und es dann mit dem Befehl "chmod +x get_callername.php" ausführbar gemacht.

Nach der Asterisk Konsole findet er das Skript nicht oder vielleicht keine Rechte...

Auf der Konsole von Asterisk 1.4.18 bekomme ich folgende Meldungen:
Code:
    -- Executing [123456e1@ankommend:1] SetCallerID("SIP/sipgate.de-082376f8", "0") in new stack
[Feb 19 19:58:31] WARNING[4184]: app_setcallerid.c:116 setcallerid_exec: SetCallerID is deprecated.  Please use Set(CALLERID(all)=...) or Set(CALLERID(ani)=...) instead.
    -- Executing [123456e1@ankommend:2] AGI("SIP/sipgate.de-082376f8", "get_callername.php|") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/get_callername.php
  ==  get_callername.php|: Failed to execute '/var/lib/asterisk/agi-bin/get_callername.php': No such file or directory
    -- AGI Script get_callername.php completed, returning 0
    -- Executing [123456e1@ankommend:3] Dial("SIP/sipgate.de-082376f8", "SCCP/255&SCCP/256&SCCP/258|20|r") in new stack
    -- SEP000D28BA9598: Asterisk request to call SCCP/255-00000001
    -- SEP000D28BA9598: DND is on. Call SCCP/255-00000001 rejected
    -- Called 255

Aussschnitt aus der extensions.conf
Code:
[ankommend]
; alle Anrufe mit einer ID 5256526e0 sollen an das SCCP Endgeraet 255
; signalisiert werden
exten => 123456e1,1,SetCallerID(0${CALLERID})
exten => 123456e1,2,agi(get_callername.php|${CALLERID})
exten => 123456e1,3,Dial,SCCP/255&SCCP/256&SCCP/258|20|r
exten => 123456e1,4,Goto,r-${DIALSTATUS}|1

exten => r-BUSY,1,voicemail,b256
exten => r-BUSY,2,Hangup
exten => r-NOANSWER,1,voicemail,u256
exten => r-NOANSWER,2,Hangup

Kann mir da vielleicht jemand einen Tipp geben, bin leider kein Linux Experte...?
 
probier es erst mal aus der konsole
Code:
/var/lib/asterisk/agi-bin/get_callername.php 01234567890
 
...

Ich bin zwar kein Asterisk Experte aber für mich sieht das deutlich nach einem Rechte-Problem aus. Der Test auf der Console ist eine gute Idee (Damit ist auf alle Fälle sichergestellt, das die Datei da auch liegt). Es könnte aber natürlich sein, dass er an der Console als root arbeitet und es da dann funktioniert, der Asterisk aber evtl. aus Sicherheitsgründen als User mit eingeschränkten Rechten. Und ob der dann darf?

Aber wie gesagt: Ich nix Asterisk Experte / kenne ich aber von verschiedenen "Apacheproblemen"

Muss mal dumm fragen:

Hat der Asterisk einen eigenen Webserver dabei? Oder wird dort z.B. Apache genutzt... Es gibt doch bestimmt ein Webserverlog?

Gruß,
Marcus
 
Erstmal vielen Dank für deine Antwort...

Ich habe den Befehl auf der Konsole "Asterisk CLI" eigegeben:

Code:
server*CLI> /var/lib/asterisk/agi-bin/get_callername.php 01234567890
No such command '/var/lib/asterisk/agi-bin/get_callername.php 01234567890' (type 'help' for help)
server*CLI>

Einmal der Inhalt des Verzeichnis:
Code:
root@server:/var/lib/asterisk/agi-bin# dir
agi-test.agi  eagi-sphinx-test  eagi-test  get_callername.php  jukebox.agi
root@server:/var/lib/asterisk/agi-bin#

Das PHP Skript sieht so aus:
Code:
#!/usr/bin/php -q
<?php

  // Konfigurations Array - Anpassen an dein System
  $sql_data = array(
    database_server => 'server',
    database        => 'xml_directory',
    database_user   => 'root',
    database_pawd   => 'xxxxx'
  );

  // $CALLERID bei Aufruf aus der extensions.conf übergeben
  $caller_num = $argv[1];
  if ($caller_num == "0CID withheld") $caller_num = "inkognito";
  $caller_num = strtok($caller_num, "\"");

  if(is_numeric($caller_num))
  {
    // das SELECT zusammenbauen
    $query  = "select * from directory_entries, directory_numbers ";
    $query .= "where directory_entries.entry_id = directory_numbers.entry_id ";
    $query .= "and number = '$caller_num'";

    // zur Datenbank verbinden
    connect_db($sql_data);

    // query an die Datenbank
    $result = safe_query($query);

    if (mysql_num_rows($result) == 0)
    {
      // wurde kein passender Name in der Datenbank gefunden setze den Namen auf "Kein Name"
      $CIDname = "Kein Name";
    }
    else
    {
      // den ersten Treffer in der DB als Name einsetzen
      $row = mysql_fetch_array($result, MYSQL_ASSOC);
      $CIDname = $row['name'] . " " .  $row['lastname'];
      mysql_free_result($result);
    }
  }

  // die neue CallerID setzen
  echo "SET CALLERID \"$CIDname\"<$caller_num>\n";

function connect_db($sql_data)
{
  $noconnect = "Die Verbindung konnte nicht aufgebaut werden";
  $notfound = "Konnte Datenbank nicht selektieren";
  mysql_connect($sql_data['database_server'], $sql_data['database_user'], $sql_data['database_pawd']) or die($noconnect);
  mysql_select_db($sql_data['database']) or die ($notfound);
}


function safe_query($query)
{
  global $query_debug;
  if (empty($query)) { return FALSE; }
  if (!empty($query_debug)) { print "<pre>$query</pre>\n"; }
  $result = mysql_query($query)
  or die("ack! query failed: "
  ."<li>errorno=".mysql_errno()
  ."<li>error=".mysql_error()
  ."<li>query=".$query
  );
  return $result;
}

?>
 
das wird als konsolenscript ausgeführt - hat also nicht mit einem webserver zu tun ;)

ah, noch eine idee.
hast du auch php-cli installiert, bzw. geschaut ob die /usr/bin/php existiert?
 
Habe ich auch schon probiert:

Code:
root@server:~#
root@server:~# /var/lib/asterisk/agi-bin/get_callername.php 01234567890
-bash: /var/lib/asterisk/agi-bin/get_callername.php: /usr/bin/php: bad interpreter: No such file or directory
root@server:~#
 
da steht es doch
bad interpreter
 
sorry habe ich keine Ahnung von, ich schaue mal bei google...

ich habe aber PHP am laufen;)
 
im apache sicher - oder?
hast du schon mal in der konsole

php -v

versucht?
 
Danke, wir kommen der Sache näher...

Code:
root@server:~# php -v
PHP 5.2.3-1ubuntu6.3 (cli) (built: Jan 10 2008 09:38:37)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
root@server:~# /var/lib/asterisk/agi-bin/get_callername.php 01234567890

Warning: mysql_connect(): Lost connection to MySQL server at 'reading initial communication packet', system error: 111 in /var/lib/asterisk/agi-bin/get_callername.php on line 51
Die Verbindung konnte nicht aufgebaut werdenroot@server:~#

Das war wohl nur mit Apache installiert und nicht die CLI für PHP...
 
gehts jetzt?
 
Ich habe den Fehler gefunden, hatte unter
database_server => 'server', "den Namen meines Servers eingetragen"

Er möchte da aber
database_server => 'localhost',

haben.

Jetzt geght es, vielen vielen Dank :D..
 
das wird aber nichts mit dem problem oben zu tun gehabt haben
 
Zuletzt bearbeitet:
Teilweise, habe es gestern nur über die Konsole getestet und da kann ich das Skript starten und bekomme auch den Namen zur angegeben Rufnummer zurück.

Wenn Asterisk das Skript ausführt aber leider nur einen unbekannten externen Anrufen.

Code:
server*CLI>
    -- Executing [1234567e0@ankommend:1] SetCallerID("SIP/sipgate.de-0826de30", "0") in new stack
    -- Executing [1234567e0@ankommend:2] AGI("SIP/sipgate.de-0826de30", "get_callername.php|") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/get_callername.php
    -- AGI Script get_callername.php completed, returning 0
    -- Executing [1234567e0@ankommend:3] Dial("SIP/sipgate.de-0826de30", "SCCP/255&SCCP/256&SCCP/258|20|r") in new stack
    -- SEP000D28BA9598: Asterisk request to call SCCP/255-00000008
    -- Called 255
[Feb 20 15:08:29] WARNING[9630]: app_dial.c:1196 dial_exec_full: Unable to create channel of type 'SCCP' (cause 44 - Requested channel not available)
    -- SEP0015C69E020B: Asterisk request to call SCCP/258-00000009
    -- SEP0015C69E020B: DND is on. Call SCCP/258-00000009 rejected
    -- Called 258
    -- SCCP/255-00000008 is ringing
    -- SCCP/258-00000009 is busy
    -- SCCP: Asterisk request to hangup channel SCCP/258-00000009
[Feb 20 15:08:29] WARNING[9630]: cdr_csv.c:266 writefile: Account code 'SCCP/%s' insecure for writing file
[Feb 20 15:08:29] WARNING[9630]: cdr_csv.c:318 csv_log: Unable to write CSV record to account file 'SCCP/%s' : No child processes
    -- SCCP: Asterisk request to hangup channel SCCP/255-00000008
[Feb 20 15:08:31] WARNING[9630]: cdr_csv.c:266 writefile: Account code 'SCCP/%s' insecure for writing file
[Feb 20 15:08:31] WARNING[9630]: cdr_csv.c:318 csv_log: Unable to write CSV record to account file 'SCCP/%s' : No child processes
  == Spawn extension (ankommend, 1234567e0, 3) exited non-zero on 'SIP/sipgate.de-0826de30'
server*CLI>
 
hast du den Namen such gesetzt?
Wenn du es noch so hast wie in [post=1041569]#25[/post] kann es nicht funktionieren

Code:
[ankommend]
; alle Anrufe mit einer ID 5256526e0 sollen an das SCCP Endgeraet 255
; signalisiert werden
exten => 123456e1,1,SetCallerID(0${CALLERID})
exten => 123456e1,2,agi(get_callername.php|${CALLERID})
exten => 123456e1,3,SetCIDName(${CIDname})
exten => 123456e1,4,Dial,SCCP/255&SCCP/256&SCCP/258|20|r
exten => 123456e1,5,Goto,r-${DIALSTATUS}|1

exten => r-BUSY,1,voicemail,b256
exten => r-BUSY,2,Hangup
exten => r-NOANSWER,1,voicemail,u256
exten => r-NOANSWER,2,Hangup
 
nimmt er noch nicht ganz...

Code:
Verbosity was 0 and is now 3
    -- Executing [123456e0@ankommend:1] SetCallerID("SIP/sipgate.de-0823a6d8", "0") in new stack
[Feb 20 16:09:15] WARNING[9964]: app_setcallerid.c:116 setcallerid_exec: SetCallerID is deprecated.  Please use Set(CALLERID(all)=...) or Set(CALLERID(ani)=...) instead.
    -- Executing [123456e0@ankommend:2] AGI("SIP/sipgate.de-0823a6d8", "get_callername.php|") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/get_callername.php
    -- AGI Script get_callername.php completed, returning 0
[Feb 20 16:09:15] WARNING[9964]: pbx.c:1821 pbx_extension_helper: No application 'SetCIDName' for extension (ankommend, 123456e0, 3)
  == Spawn extension (ankommend, 123456e0, 3) exited non-zero on 'SIP/sipgate.de-0823a6d8'

Er kennt wohl "SetCIDName" nicht.. und für mich sieht es so aus als wenn er die Nummer nicht übergiebt "AGI Script get_callername.php completed, returning 0"
 
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.