Page 2 sur 4 PremièrePremière 1234 DernièreDernière
Affichage des résultats 11 à 20 sur 35

Discussion: Changement du CALLERID en fonction du champ From dans l'entête SIP

  1. #11
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    Hum 2500 lignes bonjour l'angoisse :-)
    Je te propose plutôt de faire une simple agi dans ce cas ci avec un petit fichier de configuration pour gérer ce que tu veux.
    Découvrez Wazo sous licence GPLv3 et accessible pour tous : http://www.wazo.community
    Blog Wazo : http://blog.wazo.community
    Wazo est un fork de XiVO.
    Suivez moi sur Twitter !

  2. #12
    Membre Junior
    Date d'inscription
    novembre 2015
    Messages
    16
    Downloads
    0
    Uploads
    0
    Bon bah le weekend va être fun
    Je pense que je vais faire un script en perl pour l'agi du coup.
    Sur le principe, ce qui vient d'asterisk est interpréter en STDIN et ce qui vient du script en STDOUT, c'est ça ?
    Je simplifie mais l'idée est la je pense.

    J'insiste un bout, mais ça, ça marche ou pas ?

    Code:
    [exten-raccourcie]
    
    CALLER_ID=${IF($["${var}"="4000"]?"0450555555:${CALLERID(num)})
    CALLER_ID=${IF($["${var}"="4100"]?"0450666666:${CALLERID(num)})
    CALLER_ID=${IF($["${var}"="4200"]?"0450777777:${CALLERID(num)})
    
    exten => 8500,1,Answer()
    same => n,Set(CALLERID(num)=${CALLER_ID})
    same => n,Dial(SIP/trunk-sip/06xxxxxxxx,100,tT)
    same => n,Hangup()
    Je vous tiendrai au courant de mes avancées.
    A+

    Cordialement,

  3. #13
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    heu ... j'ai jamais testé, mais j'ai un gros doute ! En plus il faut déclarer tes variables globals dans globals sinon je ne suis même pas sûr que ça marche.
    Découvrez Wazo sous licence GPLv3 et accessible pour tous : http://www.wazo.community
    Blog Wazo : http://blog.wazo.community
    Wazo est un fork de XiVO.
    Suivez moi sur Twitter !

  4. #14
    Membre Senior
    Date d'inscription
    septembre 2010
    Localisation
    Where the sun shines
    Messages
    1 418
    Downloads
    0
    Uploads
    0
    pour l'agi: asterisk envoie ses infos via stdin, et le programme envoie des commandes via stdout, et recupere la réponse via stdin - à noter qu'il y a des commandes différentes en AGI que en dialplan - mais pas tellement et qu'il est possible d'utiliser les commandes dialplan en faisant un EXEC cmddp
    au début, tu recois tout un contexte via stdin, tu fais ton script et à la fin, tu postes ta variable callerid

    pour le dialplan je ferais un truc du genre

    Code:
    exten => _8500,1,Gosub(s,setcid)
    exten => _8500,n,Dial(SIP/${EXTEN})
    exten => _8500,3,Congestion
    
    exten => _8501,1,Gosub(s,setcid)
    exten => _8501,n,Dial(SIP/${EXTEN})
    exten => _8501,3,Congestion
    
    
    
    exten => s,1(setcid),Set(CALLERID(all)=My Company <2345678901>)
    ;; ou la serie de IF
    exten => s,n,Return

  5. #15
    Membre Junior
    Date d'inscription
    novembre 2015
    Messages
    16
    Downloads
    0
    Uploads
    0
    Je crois que j'ai ce qu'il me faut, je test tout ça ce weekend et je vous tient au courant.
    Un gros merci à vous deux.

  6. #16
    Membre Senior
    Date d'inscription
    janvier 2011
    Localisation
    Villejuif 94
    Messages
    337
    Downloads
    0
    Uploads
    0
    tes lignes sortantes correspondent à des comptes sip ?
    Si oui tu peux utiliser des variables personnalisées dans la définitions des comptes.
    Genre setvar=idSiteDistant=cidDésiré

  7. #17
    Membre Junior
    Date d'inscription
    novembre 2015
    Messages
    16
    Downloads
    0
    Uploads
    0
    Hello,

    Ce truc me rend dingue, j'ai besoin d'un coup de main supplémentaire.
    Voici ou j'en suis :

    Fichier de conf personnalisé dans XiVO :
    Code:
    [sda-speed-dial]
    
    exten => 8500,1,Answer()
    	same => n,Noop(Recuperation du compte SIP a partir du champ FROM de l'entete SIP)
    	same => n,Set(comptesip=${SIP_HEADER(From)})
    	same => n,Set(comptesip=${CUT(comptesip,@,1)})
    	same => n,Set(comptesip=${CUT(comptesip,:,2)})
    	same => n,Noop(Le numero interne est : ${comptesip})
    	same => n,agi(callerid.agi,${comptesip})
    Il n'y a pas encore de Dial ou autre pour l'instant.

    Script AGI :

    Je récupère le compte SIP envoyé par Asterisk et le match sur le numéro interne du compte sip via le hash.

    Code:
    #!/usr/bin/perl
    use strict;
    
    my $sip_user_in = undef;
    my $exten_in = undef;
    my $caller_id = undef;
    
    $sip_user_in = <STDIN>;
    
    my %h;
    my %h = ( "elfjwz" => "4000",
              "vta462" => "4120",);
    
    $exten_in = "$h{$sip_user_in}\n";
    
    if ($exten_in >= 4000 & $exten_in <= 4099) {
    	$caller_id = "0450556677";
    	print STDOUT $caller_id;
    	}
    
    if ($exten_in >= 4100 & $exten_in <= 4199) {
    	$caller_id = "0450778899";
    	print STDOUT $caller_id;
    	}

    J'ai rempli mon hash à la main pour les tests. Comment je fais pour récupérer la valeur renvoyée par mon script sur le STDOUT et l'exploiter dans mon dial plan ?

    PS :

    J'ai aussi essayer avec l'agi suivante :

    Code:
    #!/usr/bin/perl
    use strict;
    use Asterisk::AGI;
    
    my $agi = new Asterisk::AGI;
    my $sip_user_in = undef;
    my $exten_in = undef;
    my $caller_id = undef;
    
    $sip_user_in = <STDIN>;
    
    my %h;
    my %h = ( "elfjwz" => "4000",
              "vta462" => "4120",);
    
    $exten_in = "$h{$sip_user_in}\n";
    
    if ($exten_in >= 4000 & $exten_in <= 4099) {
    	$AGI->set_callerid('0450556677');
    	}
    	
    if ($exten_in >= 4100 & $exten_in <= 4199) {
    	$AGI->set_callerid('0450557788');
    	}
    J'ai rajouté une ligne pour afficher la valeur de la variable CallerID dans le Dial plan.
    Le CallerID ne change pas. Est-ce que je loupe un truc ?

    Merci beaucoup.
    A+

    Cordialement,

  8. #18
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    Je viens de tester ton dialplan :

    Code PHP:
    [Nov 29 16:32:31]     -- Executing [8500@default:1Answer("SIP/9smmmi-00000001"""in new stack
    [Nov 29 16:32:32]        > 0x9ba38b0 -- Probation passed setting RTP source address to 192.168.1.193:5004
    [Nov 29 16:32:32]     -- Executing [8500@default:2NoOp("SIP/9smmmi-00000001""Recuperation du compte SIP a partir du champ FROM de l'entete SIP"in new stack
    [Nov 29 16:32:32]     -- Executing [8500@default:3Set("SIP/9smmmi-00000001""comptesip="Sylvain dev" <sip:9smmmi@192.168.1.124>;tag=534037455"in new stack
    [Nov 29 16:32:32]     -- Executing [8500@default:4Set("SIP/9smmmi-00000001""comptesip="Sylvain dev" <sip:9smmmi"in new stack
    [Nov 29 16:32:32]     -- Executing [8500@default:5Set("SIP/9smmmi-00000001""comptesip=9smmmi"in new stack
    [Nov 29 16:32:32]     -- Executing [8500@default:6NoOp("SIP/9smmmi-00000001""Le numero interne est : 9smmmi"in new stack 
    J'ai pas de numéro mais c'est un appel depuis mon poste interne.
    Sinon je vais te la faire en python car y a tout dans xivo pour le faire simple et je ne suis pas fun de perl, ça fait longtemps que j'en ai pas fait.
    je te reviens.
    Dernière modification par quintana ; 29/11/2015 à 23h48.
    Découvrez Wazo sous licence GPLv3 et accessible pour tous : http://www.wazo.community
    Blog Wazo : http://blog.wazo.community
    Wazo est un fork de XiVO.
    Suivez moi sur Twitter !

  9. #19
    Membre Association Avatar de quintana
    Date d'inscription
    août 2010
    Localisation
    Québec
    Messages
    1 084
    Downloads
    0
    Uploads
    0
    Donc si tu veux tester :

    Code PHP:
    #!/usr/bin/env python

    import sys
    from xivo import agi

    caller 
    sys.argv[1]
    agi agi.AGI()

    if 
    caller == "54321":
        
    agi.set_callerid("12345")

    sys.exit() 

    Mon dialplan qu est le même que toi mais je check juste le résultat :

    Code PHP:
    exten 8500,1,Answer()
    same =         n,Noop(Recuperation du compte SIP a partir du champ FROM de l'entete SIP)
    same =         n,Set(comptesip=${SIP_HEADER(From)})
    same =         n,Set(comptesip=${CUT(comptesip,@,1)})
    same =         n,Set(comptesip=${CUT(comptesip,:,2)})
    same =         n,Noop(Le numero interne est : ${comptesip})
    same =         n,agi(callerid.agi,${comptesip})
    same =         n,NoOp(${CALLERID(all)}) 
    Mon callerid change bien.

    ++
    Découvrez Wazo sous licence GPLv3 et accessible pour tous : http://www.wazo.community
    Blog Wazo : http://blog.wazo.community
    Wazo est un fork de XiVO.
    Suivez moi sur Twitter !

  10. #20
    Membre Junior
    Date d'inscription
    novembre 2015
    Messages
    16
    Downloads
    0
    Uploads
    0
    Hello,

    Oui, pour la récupération des informations à partir du champ From, je me suis rendu compte que c'était l'identifiant sip et non le numéro.
    Le plus simple que j'ai trouvé pour les tests, c'était de remplir un hash pour faire la correspondance et utiliser les données pour les if.

    Je suis parti sur le perl car je maîtrise plutôt bien mais je ne suis pas contre apprendre un petit peu le python.
    Demain soir, je reprend ton code et je test ça.

    Je te remercie d'y avoir passé du temps.

    Par contre, par rapport a une autre de mes questions, comment on récupère la sortie de l'AGI pour l'exploiter dans le dial plan d'asterisk ?
    Si par exemple on veut mettre le retour de l'AGI (par la j'entends le STDOUT généré) en variable dans le dial plan d'asterisk, on s'y prend comment ?

    Encore merci

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
  •