PDA

Voir la version complète : CID lookup appel externe



NeoPegasus
06/08/2012, 08h29
Bonjour à tous,
Novice dans le domaine de la VOIP,je suis en stage en mairie.Celle-ci dispose d'un serveur asterisk 1.8 et de freepbx.Tout marche correctement.
Mon maitre de stage voudrait cependant que lors d'un appel externe(qui vient par exemple d'un portable),il n'y ait pas seulement le numéro d'affiché mais aussi un nom.Pour cela,je me suis renseigné et j'ai trouvé que cela pourrait être possible avec le CID lookup.J'ai donc créé une base MYSQL sur leur serveur et configuré comme source du CID lookup la base sql avec la bonne requête et ensuite configurer une inbound route avec mon CID lookup.Mais cela n'a pas fonctionné.J'ai donc essayé d'ajouter l'entrée directement dans le phonebook et mettre en source du CID interne mais pareil.C'est un numéro de portable que j'essaye de faire la résolution de noms et j'ai mis un 0 avant (00692******).Même sans le 0 avant ça ne marche pas...
Pourriez-vous m'aider?
Merci d'avance

therebel23
10/08/2012, 12h02
Salut,
qu'est ce qui ne marche pas : le lookup des numéros dans ta base MySQL ?
envoie le contenu de ton fichier extensions.conf ..

Sinon voici comment changer le Caller ID :

http://www.voip-info.org/wiki/view/Setting+Callerid

NeoPegasus
10/08/2012, 13h05
Je n'ai jamais touché aux fichiers de conf,que en GUI,en effet que ce soit le lookup de la base mySQL ou du phonebook interne,rien ne fonctionne,j'ai déjà essayé la ligne de commande que tu m'as fourni dans la CLI du GUI,elle ne reconnait pas cette commande...
Je voudrai par exemple traduire le numéro 00692320670 par "Nom" par exemple,du coup quand j'appelle du portable externe,c'est mon nom qui s'affiche

qhess77
12/08/2012, 17h47
Essayes avec les AGI.
Voici un AGI CIDLookup basé sur LDAP :


#!/usr/bin/php -q
<?php
$PhoneNumber=$argv[1] ;

set_time_limit(1);

ob_implicit_flush(false);

error_reporting(0);

if (!defined('STDIN'))
{
define('STDIN', fopen('php://stdin', 'r'));
}
if (!defined('STDOUT'))
{
define('STDOUT', fopen('php://stdout', 'w'));
}
if (!defined('STDERR'))
{
define('STDERR', fopen('php://stderr', 'w'));
}

while (!feof(STDIN))
{
$temp = trim(fgets(STDIN,4096));
if (($temp == "") || ($temp == "\n"))
{
break;
}
$s = split(":",$temp);
$name = str_replace("agi_","",$s[0]);
$agi[$name] = trim($s[1]);
}

# print all AGI variables for debugging purposes
foreach($agi as $key=>$value)
{
fwrite(STDERR,"-- $key = $value\n");
fflush(STDERR);
}

if($PhoneNumber == "asterisk") {
fwrite(STDOUT,"SET CALLERID \"Inconnu <Inconnu>\"\"\n");
fflush(STDOUT);

die("Don't touch this CID !");
}

# Script Beginning
$server = "****" ;
$port = "389";
$rootdn = "****";
$rootpw = "****";

$ds = ldap_connect($server); // On suppose que le serveur LDAP est sur cet hote

if (!$ds) { die("can't connect to LDAP server"); }

$r = ldap_bind($ds,$rootdn,$rootpw);

// Annuaire
$dir_dn = "ou=***, dc=***, dc=***";

$dir_restriction = array( "displayName", "mobile", "telephoneNumber");

$PhoneNumberSearch = '0'.$PhoneNumber ;

$filtre="(|(mobile=$PhoneNumberSearch)(telephoneNumber=$Pho neNumberSearch))";

$dir_sr = ldap_search($ds, $dir_dn, $filtre, $dir_restriction);

$info = ldap_get_entries($ds, $dir_sr);

$CallerName = $info[0]["displayname"][0] ;

if($CallerName)
{
fwrite(STDOUT,"SET CALLERID \"$CallerName <$PhoneNumber>\"\"\n");
fflush(STDOUT);
} else {
fwrite(STDOUT,"SET CALLERID \"$PhoneNumber <$PhoneNumber>\"\"\n");
fflush(STDOUT);
}
?>



Et un deuxième de test qui utilisait (dans le cadre de tests uniquement !) la base reverse Infobel


#!/usr/bin/php -q
<?php
$DirectoryURL="http://www.infobel.com/fr/france/Inverse.aspx?q=France&qPhone=" ;
$PhoneNumber=$argv[1] ;
set_time_limit(60);

error_reporting(0);

if (!defined('STDIN'))
{
define('STDIN', fopen('php://stdin', 'r'));
}
if (!defined('STDOUT'))
{
define('STDOUT', fopen('php://stdout', 'w'));
}
if (!defined('STDERR'))
{
define('STDERR', fopen('php://stderr', 'w'));
}
$DirectoryPage=file_get_contents($DirectoryURL.$Ph oneNumber) ;

if(preg_match("/<div class=\"result-item\"><h2>1. (.*)<!--/i",$DirectoryPage,$matches))
{
$currentTemp=$matches[1];
}
if($currentTemp)
{
echo "SET CALLERID \"$currentTemp <$PhoneNumber>\"" ;
}
?>

N'hesites pas à faire des logs dans tes AGI qui contiennent le format du numéro reçu.

fastm3
13/08/2012, 00h35
Ce que tu as fait et que tu decris pour le cid externe mysql semble correct avec freepbx. Essaie deja de diagnostiquer ce qui ne va pas avant de partir vers d'autres solutions.
Soit ta connection ne se fait pas correctement soit le sql n'est pas correct.
Verifie deja ca à la main avec mysql.
Si ok, lance asterisk en cli.
asterisk -rvvvvvvvvvddddddddd
Et regarde les traces quand tu fais un appel entrant. N'oublie pas pour la inbound route de bien specifier le callerid mysql que tu as defini.
Fastm3.
PS: En vacances avec tethering...

NeoPegasus
13/08/2012, 06h57
Au niveau de la base mySQL,tout devrait être normal,j'ai essayé la requête directement sur la base,ca a marché.C'est peut-être au niveau de la inbound route qu'il pourrait avoir un problème,j'ai juste créé une inbound route en ne spécifiant que la source du CID lookup,rien d'autre,pas même le DID number ou CID number ou destination,ai-je bien fait?

fastm3
13/08/2012, 10h42
C'est un catch all , c'est ok donc.
regarde les logs /var/log/asterisk/full ou dans la console.
Tu dois avoir quelques chose comme cela apres l'appel entrant.


[Aug 13 10:33:43] VERBOSE[23879] logger.c: -- Executing [s@ext-did:2] Gosub("DAHDI/1-1", "cidlookup|cidlookup_1|1") in new stack
[Aug 13 10:33:43] VERBOSE[23879] logger.c: -- Executing [cidlookup_1@cidlookup:1] MYSQL("DAHDI/1-1", "Connect connid localhost asteriskuser password asterisk") in new stack
[Aug 13 10:33:43] VERBOSE[23879] logger.c: -- Executing [cidlookup_1@cidlookup:2] MYSQL("DAHDI/1-1", "Query resultid 1 SELECT name FROM pbook WHERE calld LIKE '0627083770'") in new stack
[Aug 13 10:33:43] VERBOSE[23879] logger.c: -- Executing [cidlookup_1@cidlookup:3] MYSQL("DAHDI/1-1", "Fetch fetchid 2 CALLERID(name)") in new stack
[Aug 13 10:33:43] VERBOSE[23879] logger.c: -- Executing [cidlookup_1@cidlookup:4] MYSQL("DAHDI/1-1", "Clear 2") in new stack
[Aug 13 10:33:43] VERBOSE[23879] logger.c: -- Executing [cidlookup_1@cidlookup:5] MYSQL("DAHDI/1-1", "Disconnect 1") in new stack
[Aug 13 10:33:43] VERBOSE[23879] logger.c: -- Executing [cidlookup_1@cidlookup:6] Return("DAHDI/1-1", "") in new stack
Si ta base n'est pas locale, verifie que tu peux te connecter du serveur asterisk.
Ton sql doit etre de ce type dans ton cid lookup source:
SELECT name FROM pbook WHERE calld LIKE '[NUMBER]'

Fastm3.

NeoPegasus
13/08/2012, 11h38
A priori,il ne prend même pas en compte mon CID lookup,voici la requête que j'ai entré:
SELECT name FROM callerid WHERE number LIKE '%[NUMBER]%'
J'ai une base sur le 10.2.100.31 avec la table callerid et les colonnes number et name dedans.
J'ai émis un appel depuis le 00692320670(le numéro que je veux résoudre)et executer la commande
asterisk -rvvvvvvvvvddddddddd | grep 320670
Voici ce que j'obtiens


-- Executing [8682@from-trunk:4] Set("SIP/5060-b757e910", "CALLERID(name)=00692320670") in new stack
-- Executing [8682@from-trunk:5] NoOp("SIP/5060-b757e910", "CallerID is "00692320670" <00692320670>") in new stack
-- Executing [s@macro-user-callerid:1] NoOp("SIP/5060-b757e910", "user-callerid: 00692320670 00692320670") in new stack
-- Executing [s@macro-user-callerid:2] Set("SIP/5060-b757e910", "AMPUSER=00692320670") in new stack
-- Executing [s@macro-user-callerid:5] Set("SIP/5060-b757e910", "REALCALLERIDNUM=00692320670") in new stack
-- Executing [s@macro-user-callerid:6] NoOp("SIP/5060-b757e910", "REALCALLERIDNUM is 00692320670") in new stack
-- Executing [s@macro-user-callerid:23] NoOp("SIP/5060-b757e910", "Using CallerID "00692320670" <00692320670>") in new stack
-- Executing [8682@ext-queues:13] NoOp("SIP/5060-b757e910", "CALLERID(name) is 00692320670") in new stack
-- Executing [8682@ext-queues:15] Set("SIP/5060-b757e910", "CALLERID(name)=Hotline:00692320670") in new stack
-- Executing [s@macro-user-callerid:1] NoOp("Local/8448@from-internal-fe00,2", "user-callerid: Hotline:00692320670 00692320670") in new stack
-- Executing [s@macro-user-callerid:2] Set("Local/8448@from-internal-fe00,2", "AMPUSER=00692320670") in new stack
-- Executing [s@macro-user-callerid:23] NoOp("Local/8448@from-internal-fe00,2", "Using CallerID "Hotline:00692320670" <00692320670>") in new stack
-- Executing [s@macro-user-callerid:1] NoOp("Local/8505@from-internal-4edd,2", "user-callerid: Hotline:00692320670 00692320670") in new stack
-- Executing [s@macro-user-callerid:2] Set("Local/8505@from-internal-4edd,2", "AMPUSER=00692320670") in new stack
-- Executing [s@macro-user-callerid:23] NoOp("Local/8505@from-internal-4edd,2", "Using CallerID "Hotline:00692320670" <00692320670>") in new stack
-- Executing [s@macro-user-callerid:1] NoOp("Local/8506@from-internal-9522,2", "user-callerid: Hotline:00692320670 00692320670") in new stack
-- Executing [s@macro-user-callerid:2] Set("Local/8506@from-internal-9522,2", "AMPUSER=00692320670") in new stack
-- Executing [s@macro-user-callerid:23] NoOp("Local/8506@from-internal-9522,2", "Using CallerID "Hotline:00692320670" <00692320670>") in new stack
-- Executing [s@macro-user-callerid:1] NoOp("Local/8530@from-internal-5137,2", "user-callerid: Hotline:00692320670 00692320670") in new stack
-- Executing [s@macro-user-callerid:2] Set("Local/8530@from-internal-5137,2", "AMPUSER=00692320670") in new stack
-- Executing [s@macro-user-callerid:23] NoOp("Local/8530@from-internal-5137,2", "Using CallerID "Hotline:00692320670" <00692320670>") in new stack
dialparties.agi: Caller ID name is 'Hotline:00692320670' number is '00692320670'
-- dialparties.agi: dbset CALLTRACE/8505 to 00692320670
dialparties.agi: Caller ID name is 'Hotline:00692320670' number is '00692320670'
-- dialparties.agi: dbset CALLTRACE/8506 to 00692320670
dialparties.agi: Caller ID name is 'Hotline:00692320670' number is '00692320670'
-- dialparties.agi: dbset CALLTRACE/8448 to 00692320670
dialparties.agi: Caller ID name is 'Hotline:00692320670' number is '00692320670'
-- dialparties.agi: dbset CALLTRACE/8530 to 00692320670

J'ai tout vérifié que ce soit la inbound route ou autre,j'avais meme fait une autre lookup source avec cette fois ci l'option "internal" et ajouter mon numéro dans le phonebook de freepbx,mais toujours rien.

fastm3
13/08/2012, 23h35
Il n'y a pas d'appel SQL dans les traces, ta caller id source mysql n'est pas appelée. Regarde les traces pourquoi si tu as verifié qu'elle est bien definie au niveau du trunk.
Fastm3.