Repertoire interne d'Elastix

Discussion in 'Elastix 2.x' started by cupid1305, Mar 31, 2011.

  1. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
    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:
     
  2. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    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)
     
  3. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
    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
     
  4. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    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.
     
  5. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
    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 :(
     
  6. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
    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:
     
  7. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    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à.
     
  8. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
    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
     
  9. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    Ben oui.. tu n'as rien remarqué de louche sur ton URL par rapport au poste?
     
  10. cgill2510

    Joined:
    Dec 1, 2009
    Messages:
    18
    Likes Received:
    0
    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
     
  11. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
    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à :(
     
  12. cgill2510

    Joined:
    Dec 1, 2009
    Messages:
    18
    Likes Received:
    0
    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
     
  13. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
  14. cgill2510

    Joined:
    Dec 1, 2009
    Messages:
    18
    Likes Received:
    0
  15. danardf

    Joined:
    Dec 3, 2007
    Messages:
    8,069
    Likes Received:
    12
    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 ;)
     
  16. cupid1305

    Joined:
    Feb 16, 2011
    Messages:
    41
    Likes Received:
    0
    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:
     
  17. cgill2510

    Joined:
    Dec 1, 2009
    Messages:
    18
    Likes Received:
    0
    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.

    @+
     
  18. gpelese

    Joined:
    Apr 17, 2012
    Messages:
    1
    Likes Received:
    0
    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.
     

Share This Page