Si tu n'utilises pas de lib, mais je te conseil d'en utiliser pour aller plus vite, c'est un simple print avec les commandes et variables qui vont bien.
https://wiki.asterisk.org/wiki/displ...d_set+variable
Si tu n'utilises pas de lib, mais je te conseil d'en utiliser pour aller plus vite, c'est un simple print avec les commandes et variables qui vont bien.
https://wiki.asterisk.org/wiki/displ...d_set+variable
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 !
Si j'ai bien compris le besoin, pour moi il ne semble pas nécessaire de faire appel à l'agi. Si Xivo permet d'ajouter des variables personnalisées aux comptes sip.
J'ajoute 4 variables à mes comptes sip pour gérer les droits d'accès vers l'extérieur.
sip.conf :
que je récupère et teste dans le dialplan (en ael)Code:[8362-aaaaaaaaaaaaa](aastra) secret=qqsfddddddddddddqsd callerid="John John" <8362> subscribecontext=blf_serv mailbox=8362@default allowsubscribe=yes accountcode=sarl/serv setvar=INTERNATIONAL=0 setvar=HUIT=0 setvar=MOBILE=1 setvar=NATIONAL=1
Code:Set(_MOBILE=${SIPPEER(${soft:4},chanvar[MOBILE])}); Set(_NATIONAL=${SIPPEER(${soft:4},chanvar[NATIONAL])}); Set(_HUIT=${SIPPEER(${soft:4:17},chanvar[_HUIT])}); Set(_INTERNATIONAL=${SIPPEER(${soft:4},chanvar[INTERNATIONAL])});je préfère limiter les appels à des ressources externes au dialplanCode:_00. => { switch(${INTERNATIONAL}) { case 0: Playback(unavailable); Hangup(); break; case 1:
Sylvain,
En reprenant ton code et en relisant quelque truc sur Internet, j'ai vu que l'argument à utiliser est le deuxième.
Je pense que le problème vient de la pour mon script, le premier argument étant le chemin du script.
Ça doit faire planter la logique derrière vu que la variable ne contient pas les bonnes informations.
Je test ça ce soir.
Bonjour olppp,
Je te remercie pour ta participation. En fait le but est juste de changer le CallerID pour les différentes personnes qui vont appeler.
Les postes du site 1 sortent avec tel SDA, les postes du site 2 sortent avec tel SDA et ils ont les extensions raccourcies en commun.
Je ne vois pas trop comment réutiliser ton code pour l'adapter à mes besoins par contre.
Aussi tu me fais réfléchir par rapport à l'utilisation de l'ael, plus évolué, je pense que je pourrais faire l'équivalent de l'agi directement en ael.
Ce sera pour le weekend prochain
A+
Cordialement,
L'ael ne fait pas plus que l'extension.conf. Asterisk génère en interne un dialplan type extension.conf à partir d'extension.ael. J'ai adopté ael car je trouve la syntaxe plus lisible et facile à documenter. Elle dépayse moins mes collègues sysadmin quand je suis en vacances et qu'il doivent intervenir.
exemple de code produit
Pour chaque poste/extension interne , tu as un compte sip et tu connais sa sda de sortie.Code:toip1% asterisk -x 'dialplan show service' /etc/asterisk [ Context 'service' created by 'pbx_ael' ] '7004' => 1. Set(CDR(amaflags)=DOCUMENTATION) [pbx_ael] 2. Goto(ivr_system,s,1) [pbx_ael] '7009' => 1. Set(CDR(amaflags)=DOCUMENTATION) [pbx_ael] 2. Answer() [pbx_ael] 3. Playback(vm-nobodyavail) [pbx_ael] 4. Hangup() [pbx_ael] '7010' => hint: SIP/accueil&SIP/7010-00085d10a3fc&SIP7010-00264430ae29 [pbx_ael] 1. Noop() [pbx_ael] '7019' => 1. Set(CDR(amaflags)=DOCUMENTATION) [pbx_ael] 2. Answer() [pbx_ael] 3. SetMusicOnHold(default) [pbx_ael] 4. Queue(dfi,,,,55) [pbx_ael] 5. Voicemail(${EXTEN}) [pbx_ael] '7022' => 1. Set(CDR(amaflags)=DOCUMENTATION) [pbx_ael] 2. Answer() [pbx_ael] 3. Playback(urgence_dsi) [pbx_ael] 4. GotoIf($["${CALLERID(name)}" =~ "SALLE.*" | "${CALLERID(name)}" =~ "AMPHI.*"]?5:10) [pbx_ael]
dans sip.conf :
dans extensions.ael:Code:setvar=SDA=0123456789
mais pas testéCode:_12345. => { Set(CALLERID(num)=${CHANNEL(SDA)}) DIAL(...
pour une base utilisateur realtime, tu peux ajouter une colonne au nom de la variable dans le schéma sql.
A+
Dernière modification par olppp ; 30/11/2015 à 17h34.
Hello,
J'ai entre-aperçu la fonction switch/case dans l'ael, on peut le faire dans un fichier de conf normal ?
Autrement Sylvain, j'ai repris ton code, un gros merci car ça marche nickel.
Voila le code pour mes tests :
Me reste plus qu'a trouver comment remplir le hash à partir d'un fichier ou csv et je suis au top.Code:#!/usr/bin/env python import sys from xivo import agi sipacc = sys.argv[1] agi = agi.AGI() hashnum = { "elfjwz":4000, "vta462":4120 } numint = hashnum.get(sipacc) if 4000 <= numint <= 4099: agi.set_callerid('0450667788') if 4100 <= numint <= 4199: agi.set_callerid('0450778899') sys.exit()
Python adopté
Hello,
Le case d'ael génère des If dans le dialplan et n'a pas d'équivalent dans extensions.conf. switch dans extensions.conf sert à diriger les appels vers un autre serveur Asterisk.
python dispose d'un module csv lecture, écriture
A+
Pourquoi tu ne passes pas tout simplement le callerid comme argument au lieu de te faire un dict avec les peer sip ? A mon avis cela serait plus simple ...
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 !
Re moi, en galère...
Quelle est la bonne syntaxe pour récupérer la variable callerid envoyée par asterisk ?
calleridin = agi.env['agi_callerid'] ou calleridin = agi.get_variable('callerid') ou calleridin = agi.env['callerid'] ?
J'ai essayé avec les trois, pas moyen.
Le code suivant n'a pas l'air de marcher :
le Dial Plan associé pour test :Code PHP:
#!/usr/bin/env python
import sys
from xivo import agi
agi = agi.AGI()
callerIdIn = agi.env['callerid']
if 4000 <= callerIdIn <= 4099:
agi.set_callerid('0450667788')
if 4100 <= callerIdIn <= 4199:
agi.set_callerid('0450778899')
sys.exit()
la sortie en console avec le debug agi :Code PHP:
exten => 8500,1,Answer()
same => n,agi(callerid.agi)
same => n,Noop(le callerid est ${CALLERID(num)})
HelppppppCode:[Dec 1 21:51:02] == Using SIP RTP CoS mark 5 [Dec 1 21:51:02] -- Executing [8500@default:1] Answer("SIP/elfjwz-0000001a", "") in new stack [Dec 1 21:51:02] > 0x9e7a100 -- Probation passed - setting RTP source address to 10.250.250.10:4052 [Dec 1 21:51:02] -- Executing [8500@default:2] AGI("SIP/elfjwz-0000001a", "callerid.agi") in new stack [Dec 1 21:51:02] -- Launched AGI Script /usr/share/asterisk/agi-bin/callerid.agi [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_request: callerid.agi [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_channel: SIP/elfjwz-0000001a [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_language: fr_FR [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_type: SIP [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_uniqueid: 1449003062.26 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_version: 13.5.0 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_callerid: 4000 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_calleridname: TEST EOL [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_callingpres: 0 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_callingani2: 0 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_callington: 0 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_callingtns: 0 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_dnid: 8500 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_rdnis: unknown [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_context: default [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_extension: 8500 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_priority: 2 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_enhanced: 0.0 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_accountcode: [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> agi_threadid: -1226732688 [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Rx << GET VARIABLE "agi_callerid" [Dec 1 21:51:02] <SIP/elfjwz-0000001a>AGI Tx >> 200 result=0 [Dec 1 21:51:02] -- <SIP/elfjwz-0000001a>AGI Script callerid.agi completed, returning 0 [Dec 1 21:51:03] -- Executing [8500@default:3] NoOp("SIP/elfjwz-0000001a", "le callerid est 4000") in new stack
Hello,
Je n'utilise pas la librairie python_xivo, mais il me semble que tu devrais passer le ${CALLERID(num)} dans ton appel à l'agi
agi(callerid.agi,callerIdNum:${CALLERID(num)})
A+