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.
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 !
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 ?
Je vous tiendrai au courant de mes avancées.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()
A+
Cordialement,
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 !
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
Sécurisez votre asterisk, lisez ce post du forum: http://www.asterisk-france.org/showt...-recapitulatif et votre patton: http://www.asterisk-france.org/threa...tage-via-tiers - comprenez le nat : http://www.asterisk-france.org/threa...dio-pas-de-son
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.
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é
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 :
Il n'y a pas encore de Dial ou autre pour l'instant.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})
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 :
J'ai rajouté une ligne pour afficher la valeur de la variable CallerID dans le Dial plan.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'); }
Le CallerID ne change pas. Est-ce que je loupe un truc ?
Merci beaucoup.
A+
Cordialement,
Je viens de tester ton dialplan :
J'ai pas de numéro mais c'est un appel depuis mon poste interne.Code PHP:
[Nov 29 16:32:31] -- Executing [8500@default:1] Answer("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:2] NoOp("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:3] Set("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:4] Set("SIP/9smmmi-00000001", "comptesip="Sylvain dev" <sip:9smmmi") in new stack
[Nov 29 16:32:32] -- Executing [8500@default:5] Set("SIP/9smmmi-00000001", "comptesip=9smmmi") in new stack
[Nov 29 16:32:32] -- Executing [8500@default:6] NoOp("SIP/9smmmi-00000001", "Le numero interne est : 9smmmi") in new stack
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 !
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 :
Mon callerid change bien.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)})
++
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 !
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![]()