PDA

Voir la version complète : Changement du CALLERID en fonction du champ From dans l'entête SIP



usmc
24/11/2015, 13h55
Bonjour à tous,

Je voudrais pouvoir modifier le CALLERID en fonction du champ From de l'entête SIP.
Est-ce que c'est faisable avec un IF ?
Pour le traitement du chanp From et récupération du numéro dans l'entête, je sais faire, pas de soucis

Il faudrait faire un truc du genre :
Si le numéro interne qui appel (contenu dans le champ From) est 4000, le CALLERID sera 04 50 55 55 55
Si le numéro interne qui appel (contenu dans le champ From) est 4100, le CALLERID sera 04 50 66 66 66

Voila ce que j'ai actuellement :

exten => 8500,1,Answer()
same => n,Set(CALLERID(num)=0450555555)
same => n,Dial(SIP/trunk-sip/06xxxxxxxx,100,tT)
same => n,Hangup()

Il faudrait pouvoir changer le CALLERID en fonction du poste qui appel l'extension 8500.

Merci à tous.

fastm3
24/11/2015, 21h06
En gros , tu veux faire un transfert vers ton portable mais tu voudrais savoir sur quelle ligne on t'a appelé sur l'asterisk ? C'est ca ?

La modification du callerid est possible au niveau d'asterisk mais ca ne sera pas forcement honoré/respecté par ton trunk sip.
Ca depends en fait de ton operateur, pas d'asterisk. L'operateur peut te demander de valider que les numeros sont bien à toi par exemple ou il ne présentera que les numeros que tu possedes chez lui.
Les operateurs pros le permettent souvent avec leurs clients bien identifiés, les operateurs grand public bcp moins souvent pour des raisons evidentes que l'affichage de "faux" numeros pourrait etre utilisé comme outil de fraude.
Sur certaines destinations exotiques, ca ne sera pas forcement respecté non plus.

Sur numeris , en fonction de la config de la TNR, on peut generalement presenter n'importe quel numero meme si l'operateur agira a posteriori si on s'amuse a presenter n'importe quoi.

A titre perso , j'ai le probleme puisque mes transferts se font par la ligne d'une box. La seule solution pratique que j'ai trouvé est d'envoyer un sms avec le nom de l'appelant et le DID de destination. Ca me permet d'avoir l'info avant de décrocher. Voir tuto la par exemple: http://www.asterisk-france.org/content/73-Tuto-Custom-destination-et-freepbx

Fastm3.

usmc
24/11/2015, 22h54
Bonjour fastm3,

Pour la raison, ça va un plus loin.
J'aurais environ 50 extensions pointant vers des numéros différent en 04 ou 06.
Demande de ma hiérarchie, il faut des raccourci pour joindre les sites distants.
En gros, 8500 joint le site distant 1, 8501 le site distant 2.
J'ai testé à la main de changer le CALLERID, ça fonctionne, l'opérateur (pro en passant) présente bien le numéro.

Donc ce qu'il me manque, c'est juste la logique du IF.
Comment on fait un IF sur les fichiers de conf asterisk ?
Si tu as un site qui explique bien, je suis preneur.

Merci beaucoup :)

jean
25/11/2015, 14h48
ben, c'est un truc comme ca que tu recherches ?

Set(CALLERID(num)=${IF($["${var}"="1000"]?"1234:${CALLERID(num)})})

si var vaut 1000, callerid est mis à 1234 sinon inchangé

usmc
25/11/2015, 18h21
ben, c'est un truc comme ca que tu recherches ?

Set(CALLERID(num)=${IF($["${var}"="1000"]?"1234:${CALLERID(num)})})

si var vaut 1000, callerid est mis à 1234 sinon inchangé

Bonjour Jean,

Bah ça me semble bien être ce que je recherche oui.
J'ai regardé sur quelque site et je ne comprenais pas la logique du IF.
Avec ton explication, ça va bien.

Est-ce que je peux par contre, en mettre plusieurs à la suite ? Genre :

exten => 8500,1,Answer()
same => n,Set(CALLERID(num)=${IF($["${var}"="1000"]?"1234:${CALLERID(num)})})
same => n,Set(CALLERID(num)=${IF($["${var}"="1100"]?"5678:${CALLERID(num)})})
same => n,Dial(SIP/trunk-sip/06xxxxxxxx,100,tT)
same => n,Hangup()

En ayant bien-sur, mis une valeur par défaut sur la variable CALLERID avant l'exten.
Ça marcherait ? Est-ce qu'il a moyen d'optimiser ? Peut-être mettre les IF en dehors de l'exten ?

Merci beaucoup pour votre aide.
Cordialement,

jean
25/11/2015, 21h23
tu peux utiliser une macro (https://wiki.asterisk.org/wiki/display/AST/Application_Macro ou sur voip-info)
tu peux évidemment en mettre plusiurs à la suite, ca devient de la logique programmatique....

quintana
25/11/2015, 22h37
Évitez d'utiliser MACRO et utiliser plutôt GOSUB. Macro a des soucis quand on en empile trop.

jean
25/11/2015, 23h00
tu as raison, j'ai été feignant sur le coup, macro est en plus déprécié...

https://wiki.asterisk.org/wiki/display/AST/app_macro+Deprecation
https://wiki.asterisk.org/wiki/display/AST/Macros

quintana
25/11/2015, 23h01
Y a un truc qui existe aussi dans Asterisk.

Genre :


exten = 667,1,Answer()
exten = 667/8001,2,Set(CALLERID(num)=0000)
exten = 667/8000,2,Set(CALLERID(num)=9999)
exten = 667,2,NoOP(OK)
exten = 667,n,NoOP(${CALLERID(num)})
exten = 667,n,Hangup()

usmc
26/11/2015, 00h30
Bonjour Sylvain, Re Jean,

Merci à vous deux pour vos propositions et liens que je ne manquerai pas d'aller visiter.
Donc, si je résume, on peut mettre plusieurs IF les un à la suite des autres.
Chaque ligne est traité et le CALLERID est changé en fonction de la valeur de la variable matché.

La dernière proposition est aussi très intéressante et semble convenir mais un truc me titille par rapport à l'optimisation.
Si je comprend bien la logique, pour chaque extension, je vais devoir mettre potentiellement un nombre de ligne égal au nombre de sites sur mon asterisk ?
Ce qui donnerait pour trois sites qui appellent cette extension raccourci :



exten = 8500,1,Answer()
exten = 8500/4000,2,Set(CALLERID(num)=0450555555)
exten = 8500/4100,2,Set(CALLERID(num)=0450666666)
exten = 8500/4200,2,Set(CALLERID(num)=0450777777)
exten = 8500,2,NoOP(OK)
exten = 8500,n,NoOP(${CALLERID(num)})
exten = 8500,n,Dial(SIP/trunk-sip/06xxxxxxxx,100,tT)
exten = 8500,n,Hangup()


Ça fait que si dans le futur, j'arrive à 50 sites sur mon asterisk, ça va me faire 50 lignes rien que pour le changement du CALLERID. Ça ne me choque pas, c'est normal.
Par contre si je dois faire 50 extension raccourcie et gérer les 50 sites, ça va me faire 2500 lignes pour la gestion du CALLERID, chaud quand même.

C'est pas mieux si je fout 50 IF à la suite ?
Ce qui donnerait :



[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()


J'ai surement faux, mais vous voyez ou je veux en venir ?
Bonne soirée.

Cordialement,

quintana
26/11/2015, 02h05
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.

usmc
26/11/2015, 16h07
Bon bah le weekend va être fun :lol:
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 ?



[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,

quintana
26/11/2015, 16h11
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.

jean
26/11/2015, 16h23
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


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

usmc
26/11/2015, 17h02
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.

olppp
26/11/2015, 18h05
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é

usmc
29/11/2015, 22h06
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 :


[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.



#!/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 :



#!/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,

quintana
29/11/2015, 23h34
Je viens de tester ton dialplan :



[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

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.

quintana
29/11/2015, 23h47
Donc si tu veux tester :


#!/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 :


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.

++

usmc
30/11/2015, 00h34
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 :wahoo:

quintana
30/11/2015, 02h05
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/display/AST/AGICommand_set+variable

olppp
30/11/2015, 12h04
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 :

[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


que je récupère et teste dans le dialplan (en ael)


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])});



_00. => {
switch(${INTERNATIONAL}) {
case 0:
Playback(unavailable);
Hangup();
break;
case 1:


je préfère limiter les appels à des ressources externes au dialplan

usmc
30/11/2015, 14h19
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,

olppp
30/11/2015, 15h40
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

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]


Pour chaque poste/extension interne , tu as un compte sip et tu connais sa sda de sortie.

dans sip.conf :


setvar=SDA=0123456789


dans extensions.ael:


_12345. => {
Set(CALLERID(num)=${CHANNEL(SDA)})
DIAL(...


mais pas testé
pour une base utilisateur realtime, tu peux ajouter une colonne au nom de la variable dans le schéma sql.

A+

usmc
30/11/2015, 22h00
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 :



#!/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()


Me reste plus qu'a trouver comment remplir le hash à partir d'un fichier ou csv et je suis au top.
Python adopté :ouimaitre:

olppp
30/11/2015, 23h19
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+

quintana
01/12/2015, 04h47
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 ...

usmc
01/12/2015, 14h12
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 ...

Hello,

Je me sent con sérieux... Bah ouai ce sera beaucoup plus simple.
Plus de cerveau en ce moment..
Je fait les modifs ce soir.

Merci :)

usmc
01/12/2015, 22h52
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 :



#!/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()


le Dial Plan associé pour test :



exten => 8500,1,Answer()
same => n,agi(callerid.agi)
same => n,Noop(le callerid est ${CALLERID(num)})


la sortie en console avec le debug agi :



[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


Helpppppp :whistle:

olppp
02/12/2015, 12h26
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+

jean
02/12/2015, 14h15
je l'obtient en envoyant depuis mon agi:
GET FULL VARIABLE ${CALLERID(num)}

olppp
02/12/2015, 15h16
peux-être un problème de type de variable ?

quintana
02/12/2015, 15h36
Faut que tu fasses :


callerIdIn = agi.env['agi_callerid']

++

usmc
02/12/2015, 15h43
Je refais des tests ce soir pour voir tout ça.
Ca me rend fou :D

Merci à vous trois.
@ ce soir pour de nouvelles aventures

usmc
02/12/2015, 23h08
Sylvain, merci beaucoup, c'est bien la bonne syntaxe ^^


peux-être un problème de type de variable ?

olppp :ouimaitre:

J'ai converti en int et ça roule maintenant.

Le code final, si ça peut servir à quelqu'un :



#!/usr/bin/env python

import sys
from xivo import agi

agi = agi.AGI()
agi.verbose("### AGI Beginning ###")

caller = agi.env['agi_callerid']
agi.verbose("### CallerID is = %s ###" % caller)
agi.verbose("### type of callerID is = %s ###" % type(caller))

callerin = int(caller)
agi.verbose("### CallerIN is = %s ###" % callerin)
agi.verbose("### type of callerIn is = %s ###" % type(callerin))

if 4000 <= callerin <= 4099:
agi.set_callerid('0450667788')

if 4100 <= callerin <= 4199:
agi.set_callerid('0450778899')

sys.exit()


Une bonne chose de faite, merci à tous.
A+
Cordialement,