IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[langage] Problème avec Asterisk et PERL


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 15
    Points
    15
    Par défaut [langage] Problème avec Asterisk et PERL
    Bonjour à tous

    Je vous écris dans l'espoir que quelqu'un puisse me venir en aide, si quelqu'un manipule Asterisk avec PERL
    Voial le souci : je ne parviens pas à récupérer le numéro de l'appelant de façcon correcte.
    Je m'explique. En fait, mon provider SIP est Direct Centrex, et le champ 'callerid' qui fait référence au numéro de l'appelant est de la forme 'numero_de_tel <numero_de_tel>'. Or, pour mes manipulations, je n'ai besoin que de la premiere partie, c'est à dire 'numero_de_tel'.
    J'ai donc utilisé substr pour cela, de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $number = $input{'callerid'};
    my $numero = substr($number,0,10);
    Ainsi je pensais récupéré un numéro à 10 chiffres, commencant par '0'
    Mais non, je récupère un numéro à 9 chiffres seulement, le dernier n'étant pas pris en compte (pourtant un length($numero) renvoie bien 10)
    Voila donc mon souci. Il doit y avoir un caractère caché, mais je ne sais pas comment le traiter. En fait par la suite, je dois faire une vérification sur ce '$numero', a savoir vérifier qu'il est bien au format d'un numero de portable (donc commencant par 06 et avec 8 chiffres derrière), ce que je fais de la façcon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($numero =~ /^06(\d{8})/)
    Voila, je ne suis pas sûr d'avoir été bien clair, mais si quelqu'un a réussi à comprendre et qu'il peut m'aider, je lui en serais reconnaissant, voire même très reconnaissant.

    Merci si vous avez déjà eu le courage d'aller jusqu'au bout

  2. #2
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    le problème c'est qu'a priori je ne voois pas de problème dans ton code,
    tu n'es juste pas obligé de mettre les parentheses
    if ($numero =~ /^06\d{8}/)
    peut marcher aussi.

    tu n'as pas un exemple de chaine en entrée et de résultat pour voir ce qui cloche?
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut Quelques remarques
    Bonjour,

    _ Il est probable que tu est des numeros qui arrivent sans le premier 0 et d'autre avec 33 devant donc attention dans ton expression
    _ Que donne $agi->get_variable('callerid'); (cépend de l'implémentation des AGI)
    _ Pourquoi utiliser un script perl pour identifier le numero (ça se fait tres bien dans extensions.conf) ?

    Ceci dit si tu résoud ton problème, ça m'interesse bien.

    A+
    Joris

  4. #4
    Membre habitué Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 170
    Points
    170
    Par défaut
    après relecture de ton messsage, si ton numéro de téléphone est de la forme
    numero <numero>
    tu peux essayer de faire d'abord un split grace au caractere "<"
    ($num, $trash) = split (/</, $numero);
    ensuite à toi de gérer si le code internationnal est présent ou non (+33_) etc.., la suppression des éventuels espace présents, ...
    Si un ricard vaut un steak, j'ai bien bouffé une vache hier soir !
    L'art de poser les bonnes questions dans les forums afin de ne pas passer pour un

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous, et merci pour vos réponses.
    En fait, j'ai réussi à arranger mon problème de façon assez simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $number = $input{'callerid'};
    my $debut = '1';
    my $long = 10;
    my $numero = substr($number,$debut,$long);
    En fait j'ai juste modifié l'indice de départ de mon 'substr', alors je ne sais pas trop comment cela fonctionne du coup, vu que je pensais qu'il fallait entrer le caractère à partir duquel on voulait commencer la sélection. Toujours est-il que comme cela, ca fonctionne très bien, à savoir que je récupère bien un numéro de 10 chiffres commencant par 06. Quant au problème des numéros internationaux (+33) ce n'est pas un souci car ces appels ne sont pas traités par le serveur. Donc tout va bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. [Info]developper un PBX avec asterisk et java
    Par fopie dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 17/08/2005, 20h49
  3. Réponses: 3
    Dernier message: 24/12/2004, 17h22
  4. [langage] Pb de syntaxe avec GOTO
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2004, 16h02
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo