PDA

Voir la version complète : Allopass



xxx31fr
30/07/2014, 17h03
Bonjour,

Je suis nouveau sur asterisk.

Je souhaiterai créer un système similaire à allopass avec asterisk.

j'ai réussi à faire dialplan, mais, je ne sais pas comment faire en sorte que lorsque j'appelle mon service, celui-ci me génère un code automatiquement.
Si qqun sait comment faire, je suis très intéressé.

Cordialement.

tanguyd
30/07/2014, 17h49
Bonjour

Recherche du coté de AGI. Tu pourra créer un code php ou perl qui dialogera avec l'asterisk

xxx31fr
30/07/2014, 17h56
oula oula,

peux-tu m'en dire un peu plus, , et des liens, si possible, car, je ne sais malheureusement pas ce que veut dire AGI.

Désolé, je suis nouveau, et je débute ^^

tanguyd
30/07/2014, 19h17
Bonjour

Déjà, il faut maitriser un langage, du genre php. Si tu veux faire comme allopass, j'imagine que tu a un site web, donc ça devrais aller. Pour l'explication détaillée d'agi, tu peux chercher sur internet, je vais cependant te montrer un exemple minimal pour voir le principe


Dans mon dialplan asterisk j'ai



[ext-did-custom]
exten => 0524573708,1,Macro(user-callerid,)
exten => 0524573708,n,AGI(random.php) ;


Quand quelqu'un appelle le 0524573708 ( tu peux appeler si tu veux voir ), ça va exécuter mon code php random.php.

Si tu regarde mon exemple,
Ligne 37/38 on déclare l'agi est on décroche.
Ligne 41 on récupère le numéro de l’appelant.
Ligne 18/19 on prononce des numéros.
Ligne 46 on lit un fichier audio
Ligne 54 ça raccroche


Le reste c'est du php classique



1 #!/usr/bin/php -q
2 <?php
3
4 function lire_numero( $agi, $numero ) {
5 $longeur_numero=strlen( $numero ) ;
6 $i = 0 ;
7
8 while ( $i < $longeur_numero )
9 {
10 // si numero les deux chiffres sont 05, l'asterisk doit dire zero cinq
11 $sub2chiffres=substr( $numero, $i , 2 ) ;
12 $sub1chiffre=substr( $numero, $i , 1 ) ;
13 $sub1chiffresuivant=substr( $numero, $i + 1 , 1 ) ;
14
15 if ( $sub1chiffre == "0" )
16 {
17 $agi->say_number(intval($sub1chiffre));
18 $agi->say_number(intval($sub1chiffresuivant));
19 }
20 else {
21 $agi->say_number(intval($sub2chiffres));
22 }
23
24 $i = $i + 2 ;
25
26 usleep(600000);
27
28 }
29
30 }
31
32
33 // fin des fonctions
34
35 require("phpagi.php" );
36
37 $agi = new AGI() ;
38 $agi->answer();
39
40
41 $numero = $agi->request[agi_callerid];
42 $code = rand(100000,999999);
43
44 sleep(1);
45
46 $agi -> stream_file('welcome' );
47 lire_numero( $agi, $numero ) ;
48
49 $agi -> stream_file('vm-password');
50 lire_numero( $agi, $code ) ;
51
52
53 $agi -> stream_file('goodbye') ;
54 $agi->hangup();
55 ?>





Pour les fonctions ( identique en php qu'en perl ) http://search.cpan.org/~jamesgol/asterisk-perl/lib/Asterisk/AGI.pm

benasse
30/07/2014, 19h59
hello,

Même pas besoin d'agi : tu peux utiliser la fonction RAND.

Exemple :

exten = 7,1,Set(magic=${RAND(00,99)})

Pour plus d'info :


https://wiki.asterisk.org/wiki/display/AST/Function_RAND
asterisk*CLI> core show function RAND

tanguyd
30/07/2014, 20h13
Il est possible de faire quelques trucs via asterisk directement, je pense cependant que ce n'est pas adapté dés que l'on veut faire un algorithme un peu évolué avec des conditionnelles et boucles imbriquées, un lien avec une base mysql etc...

xxx31fr
30/07/2014, 20h56
Ok,

merci beaucoup.

Je vais testé tout cela ce soir et demain matin.

par contre, après, comment se fait la validation du code généré?

cordialement.

benasse
30/07/2014, 21h00
Pas faux, tout depend ce ce que tu veux/sais faire.

Ce qui est sur c'est que lancer une agi prend plus de resource que du dialplan.
Pour de meilleurs performances, il vaux mieux utiliser FastAGI.

tanguyd
30/07/2014, 22h50
J'ai donné une piste pas une solution finie.

On peut imaginer que les codes générées soient envoyés dans une base mysql.Le site payant serait lié a cette même base, l'utilisateur du site entre le code qu'il a eu par téléphone, tu vérifie si le code est bien dans la base, Mais là c'est une question de développement pure, ça n'a plus rien avoir avec asterisk

xxx31fr
09/08/2014, 14h01
Bonjour,

Merci pour toutes vos réponses, je viens d'avoir du temps pour m'y mettre....

désolé donc, ne pas vous avoir tous remercier plus tôt, j'en suis vraiment navré.

juste une question tanguyd, le code PHP, je mets à quel endroits :gratgrat::confused:

Encore merci pour vos réponses!

YBDOMO
09/08/2014, 14h38
Bonjour,


Déjà, il faut maitriser un langage, du genre php. Si tu veux faire comme allopass, j'imagine que tu a un site web, donc ça devrais aller. Pour l'explication détaillée d'agi, tu peux chercher sur internet, je vais cependant te montrer un exemple minimal pour voir le principe

je crois que Tanguyd vous a indique la marche a suivre. Ensuite AGI veut dire "Asterisk Gateway Interface" donc il faut peut etre 'googler' ou
voir http://www.voip-info.org/wiki/view/Asterisk+AGI.

le repertoire par defaut est /var/lib/asteris/agi-bin repertoire ou se trouvera le script PHP ou autre.....

A+