Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 10 sur 11

Discussion: Annuaire inverse Suisse

  1. #1
    Membre Association Avatar de cedricscha
    Date d'inscription
    août 2010
    Localisation
    Geneve/Suisse
    Messages
    578
    Downloads
    1
    Uploads
    0

    Discussion pour Annuaire inverse Suisse

    Cédric
    ---------------------------------------------------------------
    Rejoignez l'Association Asterisk France : http://www.asterisk-france.org

    Envie de mettre des étoiles dans les yeux de vos clients : EasyPyro.ch

    On a pas inventé l'électricité en cherchant à améliorer la bougie...
    ---------------------------------------------------------------

  2. #2
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    C'est fun ça, mais y a pas de limitation de search.ch ?

  3. #3
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 302
    Downloads
    1
    Uploads
    1
    Meme reflexion que toi et c'est d'ailleurs pour ca que personne ne publie l'equivalent pour pasgesjaunes ou autre annuaire francais meme si perso, je me permets d'aller chercher les infos a partir des cdrs d'un clic mais manuel.
    Ils sont un peu plus ouverts chez search et autorise cela automatiquement si tu suis le lien dans l'article de Cedric pour obtenir une clé "officielle" et donc legale.
    Neanmoins les conditions et limites sont super vague:
    search.ch SA se réserve le droit de bloquer l'accès API d'un utilisateur à tout moment sans préavis, par exemple si celui enfreint les présentes conditions d'utilisation ou en cas de dépassement d'un nombre d'accès fixé par search.ch SA.
    Mais ils le permettent...
    Fastm3.

  4. #4
    Membre Association Avatar de cedricscha
    Date d'inscription
    août 2010
    Localisation
    Geneve/Suisse
    Messages
    578
    Downloads
    1
    Uploads
    0
    Oui, y sont ouvert, mais pas trop.....

    ils se limitent pour éviter qu'un centre de télémarketing sortant utilise leur données.....

    je suis en contact avec 118000 chez vous pour le même système.

    on verra bien la reponse finale même si je me fais pas trop d'illusion....
    Cédric
    ---------------------------------------------------------------
    Rejoignez l'Association Asterisk France : http://www.asterisk-france.org

    Envie de mettre des étoiles dans les yeux de vos clients : EasyPyro.ch

    On a pas inventé l'électricité en cherchant à améliorer la bougie...
    ---------------------------------------------------------------

  5. #5
    Membre Junior
    Date d'inscription
    novembre 2011
    Messages
    14
    Downloads
    0
    Uploads
    0
    J'ai découvert ce post ce matin, et j'ai tenté l'opération. Comme je suis sous FreePBX, inutile de vouloir modifier les fichiers à la main. J'ai donc fait un petit screen de ma config qui semble fonctionner.
    http://imageshack.us/photo/my-images...nuinverse.jpg/
    Aprés un rapide check dans la config, il semble que FreePBX ajoute cette ligne
    Code:
    exten => cidlookup_1,n,Set(CALLERID(name)=${CURL(http://tel.search.ch:80/api/??was=${CALLERID(num)}&key=6xxxxxxx
    Et je m'en vais de ce pas suprimer le ? superflu..
    dans extensions_additional.conf.

  6. #6
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 302
    Downloads
    1
    Uploads
    1
    Citation Envoyé par remy74 Voir le message
    J'ai découvert ce post ce matin, et j'ai tenté l'opération. Comme je suis sous FreePBX, inutile de vouloir modifier les fichiers à la main.
    Raccourci faux. Il faut juste comprendre comprendre comment les inclusions de contexte marchent.
    J'ai donc fait un petit screen de ma config qui semble fonctionner.
    http://imageshack.us/photo/my-images...nuinverse.jpg/
    Aprés un rapide check dans la config, il semble que FreePBX ajoute cette ligne
    Code:
    exten => cidlookup_1,n,Set(CALLERID(name)=${CURL(http://tel.search.ch:80/api/??was=${CALLERID(num)}&key=6xxxxxxx
    Et je m'en vais de ce pas suprimer le ? superflu..
    dans extensions_additional.conf.
    Pas trés bon !
    C'est fait pour pointer sur une adresse locale avec ton code ou en tout cas , du code, ou tu maitrises le temps de réponse. Un systeme de cache, timeout, verif du format callerid , gestion en arriere plan est nécessaire si tu veux faire les choses bien. En appelant en direct le web service dans le dialplan de freepbx , tu auras de fort delais et perturbations lors de certains appels.
    Si le site est down, tes appels chez toi risquent tout simplement de ne pas arriver par exemple en fonction du timeout.
    Fastm3.

  7. #7
    Membre Association
    Date d'inscription
    septembre 2010
    Localisation
    Isle sur la Sorgue 84800
    Messages
    369
    Downloads
    0
    Uploads
    0
    J'adore toujours ces fonction, qui même si pas autorisée, peuvent être utilisées
    sur une ligne recevant pas beaucoup d'appels.

    Et j'ai construit plein d'applis basées la dessus, qui même si elles ne sont pas légalement vendables, font réaliser au client lors de démos toute la puissance
    d'* et en général le spectateur est plutôt impressioné !

    A ce propos infoblel a largement simplifié la requête puisque l'ensemble des datas
    est maintenant dans le titre :-)

    exemple d'une popup avec présentation de l'appelant nom, adresse et proposition d'ajouter dans une appli locale de gestion de contacts + proposition de géoloc

    Code:
    			if( ($prefix != 06) && ($prefix != 07) )
    			{
    			if (strlen($num) == 10){ $numi= substr($num, -9); $num= '33'.$numi; }
    			echo "<div align=\"center\">0".$numi."</p></div>";
    			$url = file_get_contents("http://www.infobel.com/fr/france/Inverse.aspx?inphCoordType=EPSG&qphone=".$num, NULL, NULL, 0, 500);
    				if (ereg("<title>(.*)(,)(.*)( - Infobel Fran.*)</title>", $url, $regs))
    				{
    				echo "<div align=\"center\">".$regs[1]."</p>".$regs[3]."</div>";
    				echo'<div align="center">
    				<a href="http://'.$_SERVER['HTTP_HOST'].'/contact/add_contact.php?telephone=0'.$numi.'&nom='.$regs[1].'&adresse='.$regs[3].'">
    				cliquez ici pour ajouter au repertoire</div><div align="center">
    				<a href="http://maps.google.fr/maps?f=q&hl=fr&geocode=&q='.$regs[3].'" target="_blank">Geolocaliser</a></div>';
    				unset($url, $result, $num, $toto, $regs);
    				}

  8. #8
    Membre Junior
    Date d'inscription
    novembre 2011
    Messages
    14
    Downloads
    0
    Uploads
    0
    Citation Envoyé par fastm3 Voir le message
    Raccourci faux. Il faut juste comprendre comprendre comment les inclusions de contexte marchent.
    Pas trés bon !
    C'est fait pour pointer sur une adresse locale avec ton code ou en tout cas , du code, ou tu maitrises le temps de réponse. Un systeme de cache, timeout, verif du format callerid , gestion en arriere plan est nécessaire si tu veux faire les choses bien. En appelant en direct le web service dans le dialplan de freepbx , tu auras de fort delais et perturbations lors de certains appels.
    Si le site est down, tes appels chez toi risquent tout simplement de ne pas arriver par exemple en fonction du timeout.
    Fastm3.
    Juste, qu'est-ce qui est faux ? L'image s'affiche bien chez moi..Je comprends que si le site web de search est down, je risque de ne pas recevoir les appels. J'imagine qu'avec "Résultats du cache" actif, je met en cache (quelque part) les requetes.
    En fait, il faut donc prévoir un timeout < 1sec pour l'interrogation du webservice avec un retour "Inconnu" ou un texte au choix.. J'imagine que c'est possible quelque part sous FreePBX / Asterisk. Sinon toute les fonctions "externe" sont dangereuses..

  9. #9
    Asterisk Fan Avatar de fastm3
    Date d'inscription
    août 2010
    Localisation
    Corbeil Essonnes (91)
    Messages
    1 302
    Downloads
    1
    Uploads
    1
    Citation Envoyé par remy74 Voir le message
    Juste, qu'est-ce qui est faux ?
    Je reponds en dessous de qui est "quoté". Donc le contexte de ma reponse est lié a ce qui est juste au dessus. Tu y indiques qu'il est inutile de modifier les fichiers parce que tu utilises freepbx. Je corrige. On peut integrer avec Freepbx n'importe quel dialplan. Les include des contextes _custom sont la pour ca. Il y a d'autres moyens mais ca n'est pas le sujet du thread. Fin du HS.
    Fastm3.

  10. #10
    Membre Junior
    Date d'inscription
    novembre 2011
    Messages
    14
    Downloads
    0
    Uploads
    0
    J'avais quelques heures de libre, alors je me suis lancé dans le script, en ajoutant quelques fonctionnalitées.
    - Le script utilise une base de données, pour s'afranchir du possible "dowtime" du site web.
    - Si l'enregistrement n'existe pas dans la DB, il lance un process qui va va faire la recherche sur le net, mais retourne inconnu. (c'est un process non bloquant) Le second appel aura donc son nom dans la base de données renseigné.
    - ajout de code pour debugguer.

    Code:
    #!/usr/bin/perl -w
    #
    # Utilisation du script : inverse.pl <téléphone> 1
    # 
    # ex :    inverse.pl 022010101 1
    #
    # Si le modules Perl n'existe pas, pour l'installer :
    #     perl -MCPAN -we 'install "Net::HTTP"'
    #
    #
    # Création de la table Mysql  : inverse.pl 3 
    #
    ########################################################
    use DBI;
    use Net::HTTP::NB;
    use Cwd qw(abs_path);
    my $host 		= "localhost"; 
    my $user		= "";  
    my $pass 		= ""; 
    my $database 		= "asteriskcdrdb";
    my $engine_db		= "mysql";
    my $contact_name	= "";
    my $APIKEY		= "";
    my $phone		= "00"; 
    my $cmd			= undef;
    my $dbtable		= "inverse_contact";
    my $threads		= undef;
    my $deb			= 0;
    my $result		= "SET CALLERID ";
    my $message		= "";
    my $prog  		= abs_path($0);
    my $host_url	= "tel.search.ch";
    
    #################################################################
    # Ne rien modifier sous cette ligne.
    #################################################################
    $phone			= $ARGV[0] if $ARGV[0];
    $cmd			= $ARGV[1] if $ARGV[1];
    $deb			= $ARGV[2] if $ARGV[2];
    # respecter l'ordre de gestion des variables (inter-dépendance)
    
    my $dir_url			= "/api/?was=$phone&key=$APIKEY";
    
    if ( $cmd == 1 ) { &dbquery();	}
    if ( $cmd == 3 ) { &dbcreate() ; }
    if ( $cmd == 2 ) { &search() ;   }
    if ( $cmd = undef) { 
    	$message = "<Option Error";
    	&quit();
    	}	
    if (($phone < 1  )and ($cmd != 3)) {die "$result <error phone number>"};
    	
    sub search {
    	# recherche du contact via le numéro de tél, 
    	if ($deb >= 1 )
    	{
    		print " Search in progress..\n"
    	}
     my $s = Net::HTTP->new(Host => $host_url) or $err=1;
     push @ERRORS, "$host_url Failed\n" if $err;
      myerr() if $err;
      print "Failed url\n"  if $err;
     $s->write_request(GET => $dir_url);
     
     my($code, $mess, %h) = $s->read_response_headers;
     my $content = undef;
     while (1) {
        my $buf;
        my $n = $s->read_entity_body($buf, 1024) ;
        die "read failed: $!" unless defined $n;
        last unless $n;
        $content = $content . $buf;
        if ($deb >1 )	{ print $content;}
     }
    # recherche le texte contenu entre les 2 balises suivante:
    my $searchStart = '<tel:name>';
    my $searchEnd = '</tel:name>';
    
    if($content =~ m/$searchStart(.*)$searchEnd/i) {
    		$contact_name = $1;
    			if ($deb >= 1 ){ print "Go to db insert\n";}
    		&dbinsert();	
    	}
    	else
    	{
    		# retourne inconnu si la recherche est infructueuse.
    		$contact_name="inconnu";
    		if ($deb >= 1 ){ print "inconnu => exit \n";}
    	
    	}
    $message= $contact_name . " <$phone> (Net)";
    if ($deb >= 1 ){ print "$message\n";}
    &quit();
    } 
    
    sub dbquery {	
    	# recherche du contact dans la DB, retourne inconnu si n'existe pas.
    	$query= "select case WHEN (select count(*) from " . $dbtable . " where phone_number ='" . $phone . "' and archive='0') =1 THEN (select contact_name from " . $dbtable ." where phone_number ='" . $phone . "') ELSE ( select 'inconnu') 	END AS Contact_name;";
    	my $dbh= DBI->connect("DBI:$engine_db:database=$database;host=$host;", $user, $pass, {'RaiseError' => 0});
    	my $sth = $dbh->prepare($query);
    	$sth->execute() or $err=1;
    	push @ERRORS, "DB errors" if $err;
    	myerr() if $err;
    	while (my $ref = $sth->fetchrow_hashref() ) {
    		
    		$contact_name= $ref->{'Contact_name'} ;
    		}
    		if ($contact_name eq "inconnu" )
    			{
    				#lance la recherche sur internet par un appel externe OS.
    				if ($deb==1) { print "Start search";}
    				system "perl $prog 2 $phone &";
    			}
    			
    	$sth->finish();
    	$dbh->disconnect();
    	$message= $contact_name . " <$phone>";
    	&quit();
    	}	  
    		
    sub dbinsert {
    	# insertion dans la DB du résultat de la recherche
    	$query= "insert into " . $dbtable . "  (contact_name,phone_number,create_date) values ( '" . $contact_name . "','" . $phone . "', now());";
    	if ($deb >= 1 ){ print "$query\n";}
    	my $dbh= DBI->connect("DBI:$engine_db:database=$database;host=$host;", $user, $pass, {'RaiseError' => 0});
    	my $sth = $dbh->prepare($query);
    	$sth->execute();
    	$sth->finish();
    	$dbh->disconnect();
    	}	  
    	
    sub dbcreate {
    	# creation de la table dans la DB
    	$query="CREATE TABLE `" . $dbtable . "` (`contact_name` varchar(250) default NULL,`phone_number` varchar(20) NOT NULL, `archive` char(1) default '0',`Create_date` DATETIME,PRIMARY KEY  (`phone_number`) );";
    	my $dbh= DBI->connect("DBI:$engine_db:database=$database;host=$host;", $user, $pass, {'RaiseError' => 0});
    	my $sth = $dbh->prepare($query);
    	$sth->execute();
    	$sth->finish();
    	$dbh->disconnect();
    	
    }
    
    sub quit{
    	
    	if ($cmd!=2) {print "$result \"$message\"";}
    	if ($deb >= 1) {
    		print "\nEndofScript\n" ;
    	}
    	exit 0;
    }
    
    sub myerr {
      $message= @ERRORS . " <$phone>";
      &quit();
    }
     
    
    __END__
    L'utilisation se fait par l'appel du script : nom_du_script 1 téléphone .
    exemple : inverse.pl 022010101 1
    Le "1" correspond à une utilisation normale. Si on met 2 à la place, il fait la recherche directement sur le net, et enregistre le résultat dans la DB (si résultat il y a..).
    Si on met 3, le script créer la table dans la base de données. Ce qui est obligatoire, à moins d'utiliser une table existante (il faudrat donc , dans ce cas la , changer quelques valeurs dans le script, comme les noms des champs, et le nom de la table).

    N'oubliez pas de renseigner les variables du script..

    Tester le script, pour être sur qu'il fonctionne comme bon vous semble.

    N'hesitez pas à me faire part de vos commentaires, adaptation, etc..
    Dernière modification par remy74 ; 15/11/2011 à 13h23.

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •