PDA

Voir la version complète : Redirection d'appel choisi par l'utilisateur



Dany68
01/02/2011, 14h36
Je voudrais juste faire un transfer d'appel choisi par l'utilisateur depuis son poste interne vers un numéro externe. Je pense que l'asterisk de base devrait savoir faire mais je n'ai pas rouvé de solution qui corresponde à mes besoins.

J'ai trouvé des infos diverses sur des followme en dure mais je voudrais que les clients puissent faire le choix de la destination sur leur poste (si possible uniquement les postes internes pour éviter le piratage).

Sur les autocoms standards, il existe des codes type "*72 xxxxxx" pour mettre et "*73" pour enlever le renvoi. ça existe également sur asterisk ou il faut passer par des programations diverses de conf sur chaque ligne?

Merci d'avance pour votre aide.

ffossard
01/02/2011, 18h46
Ça peut se faire de différentes manières:
- sur le poste, via la fonction de renvoi intégrée au téléphone, l'avantage est qu'il n'y a pas grand travail à fournir puisque la fonction existe déjà, avec parfois une touche dédiée, mais vous perdez le contrôle de l'appel que vous auriez en paramétrant le renvoi dans l'ipbx.
- sur l'ipbx, là ça peut se paramétrer d'autant de manières que vous voulez: par un code sur le téléphone, par une fonction xml sur le téléphone, par une interface web, par une interaction entre un logiciel (ou tout autre système) et l'ipbx. Ça demande un petit peu de travail, mais tout est centralisé et vous gardez le contrôle et la visibilité sur les renvois.

Dany68
02/02/2011, 11h29
J'ai donc réussi à faire la redirection depuis le poste client mais dans le Master.csv j'ai ce qui suit pour

Le tél extérieur AAAA appelle le poste interne astérisk BBBB qui est transféré sur le CCCC avec transfer inconditionnel imédiat:

"","AAAA","CCCC","interne","AAAA","Local/CCCC@interne-feab,2","SIP/GWKbleu-08c96dd8","Dial","SIP/CCCC@GWKbleu","2011-02-02 09:35:40","2011-02-02 09:35:46","2011-02-02 09:35:46",6,0,"ANSWERED","DOCUMENTATION","asterisk-1296639340.1096",""
"","AAAA","BBBB","entrant-kbleu-vg","AAAA","SIP/195.191.134.2-b6f61a78","Local/BBBB@interne-feab,1","Dial","SIP/BBBB|30","2011-02-02 09:35:40","2011-02-02 09:35:46","2011-02-02 09:35:51",11,5,"ANSWERED","DOCUMENTATION","asterisk-1296639340.1093",""

le renvoi est en premier et ne référence en rien apparemment le poste à facturer en interne. Comment faire le lien entre ces deux appels lors du traitement du fichier Master.csv ?
Comme l'appelant est le numéro externe qui est redirigé je vais me retrouver avec des souces/dest qui ne sont pas connues dans le système.

Si ce n'est que possible avec un script local dans l'astérisk pour avoir le contrôle des actions, quelqu'un aurait un exemple de script?

Sinon, si je vois bien, c'est bien l'appel qui identifie l'appel redirigé qui a des secondes à facturer, mais en cas de reconstruction d'appel (cas de réclamation/litige,etc...) que ça devient pratiquement ingérable. Il suffit que des messages d'autres utilisateurs viennent s'intercaller pour que je ne retrouve plus les infos.

Reaper
03/02/2011, 15h45
Bonjour, pourquoi facturer les appels en interne ? Il faut plutôt regarder les appels coté fournisseur, leur traces cdr ne prennent pas en compte les transferts en interne.

ffossard
03/02/2011, 18h45
J'ai donc réussi à faire la redirection depuis le poste client mais dans le Master.csv j'ai ce qui suit pour

Le tél extérieur AAAA appelle le poste interne astérisk BBBB qui est transféré sur le CCCC avec transfer inconditionnel imédiat:

"","AAAA","CCCC","interne","AAAA","Local/CCCC@interne-feab,2","SIP/GWKbleu-08c96dd8","Dial","SIP/CCCC@GWKbleu","2011-02-02 09:35:40","2011-02-02 09:35:46","2011-02-02 09:35:46",6,0,"ANSWERED","DOCUMENTATION","asterisk-1296639340.1096",""
"","AAAA","BBBB","entrant-kbleu-vg","AAAA","SIP/195.191.134.2-b6f61a78","Local/BBBB@interne-feab,1","Dial","SIP/BBBB|30","2011-02-02 09:35:40","2011-02-02 09:35:46","2011-02-02 09:35:51",11,5,"ANSWERED","DOCUMENTATION","asterisk-1296639340.1093",""

le renvoi est en premier et ne référence en rien apparemment le poste à facturer en interne. Comment faire le lien entre ces deux appels lors du traitement du fichier Master.csv ?
Comme l'appelant est le numéro externe qui est redirigé je vais me retrouver avec des souces/dest qui ne sont pas connues dans le système.

Si ce n'est que possible avec un script local dans l'astérisk pour avoir le contrôle des actions, quelqu'un aurait un exemple de script?

Sinon, si je vois bien, c'est bien l'appel qui identifie l'appel redirigé qui a des secondes à facturer, mais en cas de reconstruction d'appel (cas de réclamation/litige,etc...) que ça devient pratiquement ingérable. Il suffit que des messages d'autres utilisateurs viennent s'intercaller pour que je ne retrouve plus les infos.

Je vois que vous avez retiré les numéros réels des téléphones, c'est mieux pour la confidentialité et plus lisible pour comprendre le déroulement des appels :jap:
Le cdr ne peut pas faire ressortir ce renvoi provoqué par le téléphone, si vous regardez la CLI pendant un renvoi, il doit y'avoir un message "302 redirect" qui indique que le téléphone appelé dit à Asterisk d'envoyer l'appel ailleurs, d'où l'appel direct AAAA vers CCCC.
En règle général, le cdr est difficilement utilisable tel quel pour les renvois et transferts, je n'ai jamais réussi à l'exploiter de manière "lisible" sans le personnaliser dans le plan d'appel avec les fonctions dédiées à ça.

Pour les renvois, j'ai une fonction qui vérifie avant un appel sur un téléphone si il y'a un renvoi paramétré pour celui-ci (enregistré dans la bdd astdb), auquel cas l'appel est re-routé: là j'ai la visibilité dessus, je peux enregistrer un cdr différent, et ces renvois sont visibles et modifiables par une interface web (et une appli xml sur le téléphone)
Attention aux boucles aussi, il faut que la fonction gère le cas où deux téléphones ont pas un renvoi l'un vers l'autre, auquel cas on ne drope pas l'appel, on en fait quelque chose :wink:

Dany68
16/02/2011, 19h21
J'ai fait dans l'extension.conf les entrées suivantes:

; redirection d'appels
; L'utilisateur appel le 777 et entre un code 8 ou 9
exten => 777,1,Set(TIMEOUT(digit)=1)
; lecture du message d'instruction presser le 8 suivi du numéro vers lequel renvoyer vos appels ou le 9 pour ...
exten => _777,n,Background(followme)
; lecture du numéro ou transferer
exten => 8,1,Read(digit,,10,1)
; set des variables à utiliser pour que la destination soit en cas d'appel entrant de numéro de destination
exten => 8,2,Set(DB(${CALLERID(num)}/CF-status)="Forward")
exten => 8,3,Set(DB(${CALLERID(num)}/CF-NUM)=${digit})
exten => 8,4,Wait(3)
; diction du numéro
exten => 8,5,SayDigits(${digit})
; problème s'il racroche avant la diction le numero devient occupe et part direct sur messagerie (renvoi messagerie pas indiqué ici...)
exten => 9,1,Set(DB(${CALLERID(num)}/CF-status)="none")
exten => 9,2,Set(DB(${CALLERID(num)}/CF-NUM)=/${CALLERID(num)})
exten => 777,n,Wait(1)
exten => 777,n,Hangup()

Et en première ligne de mes définitions des numéros:

exten => _AAAAAAAAAA,1,Macro(controle-entrant,${EXTEN},${CALLERID(NUM)})

La macro étant:

[macro-controle-entrant]
exten => s,1,Set(CDR(accountcode)=${MACRO_EXTEN})
exten => s,2,Set(CF-status=${DB(${MACRO_EXTEN}/CF-status)})
exten => s,3,GotoIf($["${DB(${MACRO_EXTEN}/CF-status)}" = "Forward"]?30)
exten => s,4,Dial(SIP/${MACRO_EXTEN},30)
exten => s,6,Hangup()
exten => s,7,MacroExit
; Partie redirection d'appel
exten => s,30,Set(${CALLERID(num)}=${MACRO_EXTEN})
exten => s,31,Set(CF-NUM=${DB(${MACRO_EXTEN}/CF-NUM)})
exten => s,32,dial(SIP/${CF-NUM}@GW-Cisco)
exten => s,34,Hangup()
exten => s,35,NoOp(****** FIN DU RENVOI ******)

ça doit surement être faisable plus propre, mais ça marche et j'ai toujours le bon numéro dans le premier champ de mes cdr dans Master.csv.

Il me reste un gros problème, si la personne raccroche avant la lecture du numéro, le téléphone est toujours occupé.

Une solution? car je ne vois pas comment l'en sortir ou éviter d'aller dans la position occupée....