Repertoire interne d'Elastix

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#1
Bonjour ,

J'ai cherché pendant longtemps où se trouve le répertoire interne d'Elastix et ça me bloque dans ce que je veux faire donc je me tourne vers vous :cheer:

Le répertoire externe d'Elastix étant /var/www/db/address_book.db mais il ne contient que les numéro que je rajoute moi-même , donc je me demande si il a une base de donnée ou un fichier qui contient toutes les extensions que j'ai créé , ainsi que leur noms :

J'ai fait un script php pour récupérer les noms compris dans sip_additionnal.conf mais ce fichier ne comprend pas les noms ,
mon but étant de créer des répertoires xml pour chacun des téléphones étant des cisco, yealink et Aastra .

Ma question est donc de savoir où se trouve cette base de donnée contenant toutes les extensions et noms que j'ai créé.

Merci beaucoup :laugh:
 

danardf

Joined
Dec 3, 2007
Messages
8,069
Likes
10
Points
88
#2
Salut.

Ne pas confondre annuaire Elastix et annuaire Freepbx!!!!
C'est peut-être là ton truc.

Pour info, tu peux faire de la recherche par nom en tapant 411 et les 3 premières lettre du nom.
Mais il s'appuie sur les n° abrégé de Freepbx et non Elastix. (C'est un peut idiot d'avoir 2 répertoires je sais)
 

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#3
Merci danarf mais c'est pas ce que je recherche en fait :p

En fait quand tu va sur l'interface d'Elastix , tu va dans Agenda -> Adress Book
Tu peux ensuite choisir Internal ou external , le fichier /var/www/db/address_book.db contient seulement les numéros que je rajoute à la main (external), tandis que l'autre contient toutes les extensions (ainsi que les noms) que j'ai créé et c'est cette base de donnée que j'aimerai bien trouver :lol: , ainsi chacun des téléphones aurait un répertoire commun , celui d'Elastix :cheer:

Si tu as une solution , fait moi signe

merci danarf pour ta réponse rapide en tout cas
 

danardf

Joined
Dec 3, 2007
Messages
8,069
Likes
10
Points
88
#4
Hmmmm. A part refaire le code.... Je ne vois pas.
Mais rien d'infaisable.

Si tu connais le code PHP..... :laugh:

Pour l'instant. Je ne peux pas passer de temps sur d'autre truc de ce genre, car j'ai un autre projet encours.

Il faudrait regarder comment se comporte le module avec les choix interne et externe et les rassembler.
Si j'ai le temps... why not, mais sans promesse.
 

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#5
J'ai donc trouvé pour les base de données :

Le répertoire externe d'Elastix est la base de donnée address_book.db -> table contact
Le répertoire interne ( contenant toutes les extensions attribuées ou non ) est comprise dans la base de donnée sql de Asterisk

Il y a également une base de donnée contenant toutes les extensions attribuées par le module endpoint d'Elastix : Endpoint.db -> table endpoint

j'ai donc changé un peu le script php pour les téléphones cisco pour qu'il charge la base de donnéé endpoint et le répertoire externe :

<?

header("Content-type: text/xml");
header("Connection: close");
header("Expires: -1");


$Server = $_SERVER["SERVER_ADDR"];
$url="http://".$Server."/xmlservices";


/** déclaration variable ***/
$dirname = "Repertoire Interne";
$Menu = "";
$k=0;
$p=0;


$Menu .="<CiscoIPPhoneDirectory>\n";
$Menu .="<Title>".$dirname."</Title>\n";
$Menu .="<Prompt> Selectionnez un numero</Prompt>\n";

exec("sqlite3 -separator '-' /var/www/db/endpoint.db \"select * from endpoint;\"",$Externe);
list($id,$tel,$nom,$account,$secret,$id_model,$mac,$id_vendor,$date,$comment)=explode("-",$Externe[$k]);

//

while ($k <= count($Externe)-1)
{
list($id,$tel,$nom,$account,$secret,$id_model,$mac,$id_vendor,$date,$comment)=explode("-",$Externe[$k]);
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>$nom </Name>\n";
$Menu .= "<Telephone>$account</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
$k++;

}


exec("sqlite3 -separator '*' -nullvalue 'no-mail' /var/www/db/address_book.db \"select * from contact;\"",$E_address_bookInterne);
list($idx,$nom,$prenom,$tel,$extension,$mail)=explode("*",$E_address_bookInterne[$p]);

sort($E_address_bookInterne);

while ($p <= count($E_address_bookInterne)-1)
{
list($idx,$nom,$prenom,$tel,$extension,$mail)=explode("*",$E_address_bookInterne[$p]);
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>$nom $prenom </Name>\n";
$Menu .= "<Telephone>$tel</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
$p++;
}

$Menu .= "</CiscoIPPhoneDirectory>\n";

$fp=fopen('cisco.xml',wb);
fwrite($fp,$Menu);
fclose($fp);

echo $Menu;


?>

je place ce fichier dans /var/www/html/xmlservices , il se nomme directory.php .
Lorsque je configure le service sur l'interface du téléphone (Cisco SPA504G)

XML Directory Service URL: http: //192.168.1.157/xmlservices/directory.php

192.168.1.157 est bien l'addresse de mon serveur Elastix

si j'essaye avec le fichier xml créé avec le script ça ne fonctionne pas non plus

Lorsque que j'essaye d'y accéder via le téléphone , il met request failed , alors que via un browser il me retourne bien le fichier xml :unsure:

Quelqu'un aurait une idée !?

là je bloque carrément :(
 

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#6
J'ai su créer le script php pour le yealink , le script cisco me semble correct mais je ne sais tjrs pas y accéder via le téléphone :

Request failed :dry: , si quelqu'un à une idée , elle est + que bienvenue :lol:
 

danardf

Joined
Dec 3, 2007
Messages
8,069
Likes
10
Points
88
#7
Ha tu veux y accèder via le téléphone?
J'avais compris par le web!!!

Via quels téléphone? Cisco?

Il me semble que je doit y avoir un script qui traine par là.
 

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#8
J'ai fait le script php , voir au dessus , lorsque que je met dans le browser
https:ipElastix/directory.php
il me sort bien le fichier xml :

<CiscoIPPhoneDirectory>
<Title>Repertoire Interne</Title>
<Prompt> Selectionnez un numero</Prompt>
?
<DirectoryEntry>
<Name>GrandStreamBase </Name>
<Telephone>4444</Telephone>
</DirectoryEntry>
</CiscoIPPhoneDirectory>

Mais lorsque je met dans l'interface du téléphone , il veut pas y accéder .

Le téléphone est un Cisco/linksys 504G , ce que je demande où ça bloquerai p-t c'est qu'il n'arriverait pas à y accéder à cause du protocole https .

Mon script semble pourtant correct mais je ne peux pas le certfier .

Merci danarf :p
 

danardf

Joined
Dec 3, 2007
Messages
8,069
Likes
10
Points
88
#9
Ben oui.. tu n'as rien remarqué de louche sur ton URL par rapport au poste?
 

cgill2510

Joined
Dec 1, 2009
Messages
18
Likes
0
Points
0
#10
Bonjour a tous,

Ca fonctionne bien chez moi, j'ai crée un répertoire dans /var/www/html/xml_apps/

et voici une copie de mon fichier a y mettre (phonebook_cisco.xml)

#!/usr/bin/php
<?php

set_time_limit(5);

//-----Annuaire de freepbx CID-----

system("/usr/sbin/asterisk -rx \"database show cidname\" > /tmp/asterisk_cid-list.txt");
$fd=fopen("/tmp/asterisk_cid-list.txt","r");

$Menu = "<CiscoIPPhoneDirectory>\n";
$Menu .= "<Title>Rep. General</Title>\n";
$Menu .= "<Prompt>Selection</Prompt>\n";

while ($line=fgets($fd,1000))
{
if (strpos ($line,"cidname") == true)
{
$name=trim(substr($line,strpos($line,":")+1));
$phone_number=trim(substr($line,strpos($line,"cidname")+8,strlen($line)-strpos($line,":")-1));
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>$name</Name>\n";
$Menu .= "<Telephone>$phone_number</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
}
}
fclose ($fd);


//-----Annuaire du carnet d'adresse-----

exec("sqlite3 -separator '-' -nullvalue 'no-mail' /var/www/db/address_book.db \"select * from contact;\"",$E_carnet);
$p=0;
while ( $p < count($E_carnet))
{
list($idx,$name,$last_name,$phone_number,$extension,$mail)=explode("-",$E_carnet[$p]);
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>$name $last_name </Name>\n";
$Menu .= "<Telephone>$phone_number</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
$p++;
}


//-----Annuaire base asterisk-----

$host = "localhost";
$user = "root";
$pass = "eLaStIx.2oo7";
$database = "asterisk";

$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");

$query = "SELECT user, description FROM devices ORDER BY description ASC";
$resultID = mysql_query($query, $linkID) or die("Data not found.");

for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++)
{
$row = mysql_fetch_assoc($resultID);
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>".$row['description']."</Name>\n";
$Menu .= "<Telephone>".$row['user']."</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
}

$Menu .= "</CiscoIPPhoneDirectory>\n";
echo $Menu;
?>

et ne pas oublier dans /etc/httpd/conf.d/elastix.conf

<Directory "/var/www/html">
# Redirect administration interface to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !(/xml_apps/*)
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>


Et voila
Bye
 

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#11
j'ai mis https://xx.xx.xx.xx/directory.php , mon script se trouvant dans /var/www/html

J'ai essayé également avec http , avec tftp en mettant dans /tftpboot , dans ce cas là je n'ai pas un request failed mais un requesting...
Je bloque complément là :(
 

cgill2510

Joined
Dec 1, 2009
Messages
18
Likes
0
Points
0
#12
Bonjour a tous,

Ca fonctionne bien chez moi, j'ai crée un répertoire dans /var/www/html/xml_apps/

et voici une copie de mon fichier a y mettre (phonebook_cisco.php)

#!/usr/bin/php
<?php

set_time_limit(5);

//-----Annuaire de freepbx CID-----

system("/usr/sbin/asterisk -rx \"database show cidname\" > /tmp/asterisk_cid-list.txt");
$fd=fopen("/tmp/asterisk_cid-list.txt","r");

$Menu = "<CiscoIPPhoneDirectory>\n";
$Menu .= "<Title>Rep. General</Title>\n";
$Menu .= "<Prompt>Selection</Prompt>\n";

while ($line=fgets($fd,1000))
{
if (strpos ($line,"cidname") == true)
{
$name=trim(substr($line,strpos($line,":")+1));
$phone_number=trim(substr($line,strpos($line,"cidname")+8,strlen($line)-strpos($line,":")-1));
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>$name</Name>\n";
$Menu .= "<Telephone>$phone_number</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
}
}
fclose ($fd);


//-----Annuaire du carnet d'adresse-----

exec("sqlite3 -separator '-' -nullvalue 'no-mail' /var/www/db/address_book.db \"select * from contact;\"",$E_carnet);
$p=0;
while ( $p < count($E_carnet))
{
list($idx,$name,$last_name,$phone_number,$extension,$mail)=explode("-",$E_carnet[$p]);
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>$name $last_name </Name>\n";
$Menu .= "<Telephone>$phone_number</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
$p++;
}


//-----Annuaire base asterisk-----

$host = "localhost";
$user = "root";
$pass = "eLaStIx.2oo7";
$database = "asterisk";

$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");

$query = "SELECT user, description FROM devices ORDER BY description ASC";
$resultID = mysql_query($query, $linkID) or die("Data not found.");

for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++)
{
$row = mysql_fetch_assoc($resultID);
$Menu .= "<DirectoryEntry>\n";
$Menu .= "<Name>".$row['description']."</Name>\n";
$Menu .= "<Telephone>".$row['user']."</Telephone>\n";
$Menu .= "</DirectoryEntry>\n";
}

$Menu .= "</CiscoIPPhoneDirectory>\n";
echo $Menu;
?>

et ne pas oublier dans /etc/httpd/conf.d/elastix.conf

<Directory "/var/www/html">
# Redirect administration interface to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !(/xml_apps/*)
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>


Et voila
Bye
 

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#13

cgill2510

Joined
Dec 1, 2009
Messages
18
Likes
0
Points
0
#14

danardf

Joined
Dec 3, 2007
Messages
8,069
Likes
10
Points
88
#15
Merci Christophe pour ta réponse.

Ne pas oublier de relancer le service apache
# service httpd restart

Car les modif ne servent à rien sinon. ;)

Et oui, un poste ne peut pas dialoguer en https!
donc ce sera http ;)
 

cupid1305

Joined
Feb 16, 2011
Messages
41
Likes
0
Points
0
#16
Merci 1000 fois à tous les 2 :lol: , voilà tout fonctionne à merveille , à la seule différence pour moi que si je met l'extension .xml ça ne va pas , il faut que je mette .php sinon tout va très bien , merci pour votre aide , vous m'enlevez une épine (une branche d'épine même ) du pied :woohoo:
 

cgill2510

Joined
Dec 1, 2009
Messages
18
Likes
0
Points
0
#17
Tu as raison j'ai mal écrit l'extension du fichier phonebook_cisco.php et non xml, désolé mais en ce moment ma tête est un peut absente. J'ai corrigé les autres messages.

@+
 

gpelese

Joined
Apr 17, 2012
Messages
1
Likes
0
Points
0
#18
Bonjour,

Sur les Cisco 504G la manipulation décrite ci-dessus fonctionne. Mais il se trouve que le nombre d'entrées dans un objet XML "CiscoIPPhoneDirectory" est limité à 32. Il est indiqué dans la doc Cisco qu'il suffit de faire des requêtes http supplémentaires vers d'autres fichiers xml si l'on veut voir plus de contacts.
Savez-vous quelle syntaxe utiliser pour le provisionning qui va chercher les fichiers xml sur le serveur ?

Cordialement,

Guillaume.
 

Members online

No members online now.

Latest posts

Forum statistics

Threads
30,902
Messages
130,886
Members
17,563
Latest member
dineshr
Top