Voir la version complète : Facilitées d'appels
Bonjour,
Je suis actuellement étudiant en reseau et télécomunnication à mont de marsan et donc actuellement j'éffectue un stage de 3mois dans une entreprise sur asterisk.
Connaissant les bases principal du systeme je recherche à me perfectionné un peu plus.
J'aimerais effectuer des "facilitées d'appel". Je m'explique:
Je voudrais par exemple que
-dès que je tape " *21 + numero de poste " mon poste en question se mette en occupe et renvoit les appels vers le numéro choisi.
-" *22 + numero de poste " Renvoi de l'appel si je ne réponds pas.
-" *23 + numero de poste " Renvoi de l'appel si je suis déja en communication.
-" *25 " tout appels rentrant partent directement sur la messagerie.
-" *27 " renvoi les appels si je suis entrant de consulter ma messagerie.
-" 5 " Rappel automatique sur occupation.
-" 8440 " Numéro rapide du 005565723.. par exemple.
Je pense avoir fais le tour, je vous remercie d'avance pour votre aide qui me sera bien précieuse.
Cordialement,
Clepic :)
Enfin un bon post avec des bonnes questions.
--" *22 + numero de poste " Renvoi de l'appel si je ne réponds pas.
-" *23 + numero de poste " Renvoi de l'appel si je suis déja en communication.
-" *25 " tout appels rentrant partent directement sur la messagerie.
-" *27 " renvoi les appels si je suis entrant de consulter ma messagerie.
En manuel le plus simple c'est d’implémenter une série de données dans la bdd de l'asterisk astdb. Elle se présent comme suit:
Family/Key=Valeur.
Imaginons que nous avons une extension 300, chaque fois quand cette extension est appelé nous allons vérifier les données de ces clés et faire une action si nécessaire.(gotoif(DB/KEY/FAMILY)=X) Chaque clé peut prendre soit une valeur de 0 soit la valeur de numéro de renvoie.
Nous allons définir les clés comme suit:
300/renvoie_appel=0 OU numéro destination (Renvoie simple)
300/renvoie_appel_mess=0 OU numéro destination (renvoie sur messagerie)
300/renvoie_appel_comm=0 OU numéro destination(renvoie en communication)
Donc il te suffit de créer un script de modification de ces valeurs dans l'astdb avec un menu interactif et de vérifier ces valeurs avant de contacter cette extension. Pour implémenter le renvoi en communication c'est pareil, il suffit de modifier une variable secondaire qui indiquera que tu es en communication pendant que 300 sort. (pas oublier de l’enlever après)
Pour le renvoie sur occupé c'est la même chose,
1: Appel arrive sur 300
2: 300 envoie BUSY
3: Goto 300-BUSY (ou ${CALLERID}-BUSY
4: Check DB
5: Exit
Il faut que je te présente une méthode alternative pour vérifier si la personne est en ligne, asterisk possède les fonctions de GROUP() et GROUP_COUNT()
C'est simple chaque fois que 300 appelle tu le place dans une groupe=300 et su tu as un client qui tente de contacter 300 tu peux faire un group_count se qui te rendra la quantité d'appels sortantes de 300.
-" 8440 " Numéro rapide du 005565723.. par exemple.
Ça passe par la bdd également.
-" 5 " Rappel automatique sur occupation.
Explique plus le scénario.
Renseigne toi sur les fonctions / applications Gotoif DB Group et Group_count.
Je vais pas te cacher que j'ai pas tout tout compris dans ta réponse. Donc j'ai fouillé et je suis tombé sur un ancien poste ou tu avais répondu ça :
Alors voila, imagine que tu es capable de modifier les valeurs de astdb, peu importe par quel moyen, (manager en telnet, script ..)
Le but est en fonction de données dans l'astdb de forwarder l'appelant.
Nous devons penser à 3 choses:
1: Permettre au utilisateurs de modifier leur statut
2: Répertorier l'ensemble de varialbles pour coder chaque etat
3: Créer un script utilise pour l'ensemble d'utilisateurs qui route l'appel en fonctionne de leur état.
Nous allons partir sur l'exemple ultra simple. On imagine que chaque utilisateur à le droit d'activer ou désactiver le renvois vers sa messagerie immédiatement.
Pour ça il nous fait:
1: Un mini script qui modifier cette variable pour les utilisateurs
2: Une variable, avec l'état 0 (messagerie immédiate désactive) et 1 messagerie immédiate activé. Nous allons utiliser une clé simple, une pour chaque utilisateur.
Le format de clé est le suivant:
Family/key = VALEUR
Nous avons utilisateur Toto et Tata, et pour eux les clé seront
Toto/Messagerie = 0 Ou 1
Tata/Messagerie = 0 Ou 1
Je te le conseille de les nommer tous de cette maniere, c'est plus faciler a gérer quand tu as pas mal de clefs, on voit directement la liste plus humainement. (choix perso a toi de voir) Sache que on peur les regrouper par service également du type
Messagerie/toto =0/1
Messagerie/tata =0/1
Nous allons prendre le premier. Les mini scripts que je vais te monter c'est pour asterisk 1.4, asterisk 1.6 à une manière différente de travailler avec les clefs, je te laisse adapter si tu es en 1.6.
Script pour entrer la variable par utilisateur, nous allons dire a tata et titi les truc suivant:
Votre préfixe pour activer la messagerie est 501
Votre préfixe pour désactiver la messagerie est 500
exten => _50[01],1,Set(DB(${CALLERID(name)}/messagerie)=${EXTEN:2})
exten => _50[01],2,NoOp(La variable de messagerie est ${EXTEN:2})
Il faut bien nommer toto et tata dans sip.conf avec le nom correct pour récupérer la variable. callerid=toto <7000> callerid=tata <7001>
On imagine que la messagerie de toto est désactivé et de tata est activé, les variables sont:
toto/messagerie=0
tata/messagerie=1
Dont avant appeler toto ou tata il nous faut vérifier cette variable.
extensions.conf
[bureau]
exten => 7000,1,GotoIf($[${DB(toto/messagerie)}=1]?2:3)
exten => 7000,2,Voicemailman()
exten => 7000,3,Dial(Sip/toto)
exten => 7001,1,GotoIf($[${DB(tata/messagerie)}=1]?2:3)
exten => 7001,2,Voicemailman()
exten => 7001,3,Dial(Sip/tata)
Note que nous avons vérifié pour chaque utilisateur ses variables, c'est loin d'être parfait si tu as 36 options, le but est de créer un macro qui récupère le nom d'utilisateur de la personne qui est appelé est vérifier ces variables, et router l'appel en fonction de ses choix. Mais ça je te laisse de découvrir, c'est relativement simple.
Autre chose, ce n'est pas un luxe de créer un menu interactif pour l'utilisateur vocal, avec les confirmation des ses choix.
Citation:
- Si l'usager est présent son statut est : Answer (Disponible)
- Si l'usager est occupé son statut est : Busy (Occupé au téléphone ou réunion, du coup transfert vers boite vocale par exemple ou téléphone portable).
- Si l'usager est absent de son poste son statut est : NoAnwser (indisponible, donc transfert vers son portable par exemple).
Pour ton but il te faut pas plus de 3 variables.
Courage.
P.S Pour les plus amples informations je te conseille http://astbook.asteriskdocs.org/en/2...-6-SECT-6.html
J'imagine que c'est ce qu'il faut faire. Je comprends mieu par contre tu dis que si on utilise la version 1.6 d'asterisk le script est different. Pourrais tu m'éclaisir ce point ou me donné un exemple pour cette version ?
Merci
Cordialement;
Bonjour, un vieux post, oui. Pour savoir comment faire fonctionner l'ensemble des applications / fonctions il suffit dans l'asterisk CLI de taper:
core show application Name
core show function Name
Ou name est le nom de la fonctions ou application, pour les voir tous il faut:
core show applications
core show functions
De cette façon tu est a 100% certain d'avoir la bonne syntaxe.
Teste avec core show application Dial()
Reaper
Merci bien, je me plonge dedans et je vous tien au courant des avancées ;
Bonjour,
Alors j'ai enfin reussi à envoyer un apel entrant directement sur la messagerie en l'activant ou le désactivant en fesant "901(act) & 900(desactiv)"
A présent j'aimerais reussir à faire ça :
-" *21 + numero de poste " mon poste en question se mette en occupe et renvoit les appels vers le numéro choisi.
-" *22 + numero de poste " Renvoi de l'appel si je ne réponds pas.
-" *23 + numero de poste " Renvoi de l'appel si je suis déja en communication.
J'ai fais en fonction de se que tu m'as dit reaper mais je ne comprends pas tout, j'ai bien déclaré "renvoi_appel,renvoi_appel_mess et renvoie_appel_comm"
Quand je fais un show database voilà ce que ça me donne:
sdis-laptop*CLI> database show
/SIP/Registry/patron : 192.168.1.6:5060:3600:patron:sip:patron@192.168.1. 6
/SIP/Registry/standard : 192.168.1.9:5060:180:standard:sip:standard@192.168 .1.9:5060;transport=udp
/SIP/Registry/technicien : 192.168.1.7:5060:180:technicien:sip:technicien@192 .168.1.7:5060;transport=udp
/dundi/secret : rJDqS6TZWgEf2t0PP+p+Rg==;my99ML+CBRyydPYjACQ7OQ==
/dundi/secretexpiry : 1303810808
/standard/messagerie : 0
/standard/renvoi_appel : 0/1
/standard/renvoi_appel_comm : 0/1
/standard/renvoi_appel_mess : 0/1
/technicien/messagerie : 0
/technicien/renvoi_appel : 0/1
/technicien/renvoi_appel_comm : 0/1
/technicien/renvoi_appel_mess : 0/1
13 results found.
Je pense que jusqu'a présent je suis bon mais c'est maintenant que je coince.
Il faut faire des script de quel type ?
Comment gère ton le statu du poste (ANSWER,BUSY,NO ANSWER) ?
La gestion GROUP() et GROUP_COUNT() se fais dans extension.conf ?
300/renvoie_appel=0 OU numéro destination (Renvoie simple)
300/renvoie_appel_mess=0 OU numéro destination (renvoie sur messagerie)
300/renvoie_appel_comm=0 OU numéro destination(renvoie en communication)
Donc il te suffit de créer un script de modification de ces valeurs dans l'astdb avec un menu interactif et de vérifier ces valeurs avant de contacter cette extension. Pour implémenter le renvoi en communication c'est pareil, il suffit de modifier une variable secondaire qui indiquera que tu es en communication pendant que 300 sort. (pas oublier de l’enlever après)
Pour le renvoie sur occupé c'est la même chose,
1: Appel arrive sur 300
2: 300 envoie BUSY
3: Goto 300-BUSY (ou ${CALLERID}-BUSY
4: Check DB
5: Exit
Il faut que je te présente une méthode alternative pour vérifier si la personne est en ligne, asterisk possède les fonctions de GROUP() et GROUP_COUNT()
C'est simple chaque fois que 300 appelle tu le place dans une groupe=300 et su tu as un client qui tente de contacter 300 tu peux faire un group_count se qui te rendra la quantité d'appels sortantes de 300.
/technicien/renvoi_appel : 0/1
Salut j'ai mis 0/1 c.a.d 0 Ou 1 pas deux valeurs ni slash en même temps.
Il faut faire des script de quel type ?
Les scripts de dialplan sont suffisants largement.
Comment gère ton le statu du poste (ANSWER,BUSY,NO ANSWER) ?
Avec le dialplan, exemple:
exten => 300,1,Dial(Sip/300)
exten => 300,n,Goto(${EXTEN}-${DIALSTATUS})
exten => _XXX-BUSY,1, ICI check if la valeur DB Renvoie sur BUSY est 1, si oui renvoie > si non go to messagerie ou autre.
Il y a des tonnes de façons, meilleures ou pires; moi je ferais un grand script qui en entrée prendra l'utilisateur concerné et testera ensemble des valeurs DB pour l'utilisateur avec Gotoif et DB.
Ou Dialstatus sera ANSWER ou BUSY ou NOANSWER.
Ou Exten sera 300
La gestion GROUP() et GROUP_COUNT() se fais dans extension.conf ?
Oui, regarde comment les utiliser avec Gotoif.
core show application GotoIf
core show function GROUP_COUNT
core show function GROUP
Bonjour,
Voilà ce que j'ai fais mais ça ne marche tourjours pas. Je pense etre sur la bonne voie.
Je fouille partout mais je trouve rien d'interessant... Donc je tatonne :gratgrat:
Je pense qu'il manque quelque chose pour que ça mette BUSY à 1 dans la BD! Mais faut il faire un " database put technicien BUSY 0 " et " database put technicien BUSY 1 " dans la BD ?
merci bien.
[internal]
include => PICKUP
include => HINTS
#exten => 100,Dial(SIP/secretaire)
#exten => 200,Dial(SIP/patron)
#exten => 300,Dial(SIP/technicien)
#exten => 500,Dial(SIP/standard)
exten => _XXX,1,Dial(SIP/${EXTEN})
exten => _XXX,2,Goto(_XXX-${DIALSTATUS},1)
exten => _XXX-BUSY,1,Goto(postes,888,1)
exten => _XXX-NOANSWER,1,Goto(postes,888,1)
exten => _XXX-ANSWER,1,Goto(postes,XXX,1)
[postes]
exten => 100,Dial(SIP/secretaire)
exten => 200,Dial(SIP/patron)
exten => 300,Dial(SIP/technicien)
exten => 500,Dial(SIP/standard)
exten => 100,1,Answer()
exten => 100,2,DIAL(SIP/secretaire,20)
exten => 100,3,voiceMail(1)
exten => 100,4,HangUp()
exten => 200,1,Answer()
exten => 200,2,DIAL(SIP/patron,20)
exten => 200,3,voiceMail(2)
exten => 200,4,HangUp()
exten => 300,1,Answer()
exten => 300,2,GotoIf($[${DB(technicien/messagerie)}=1]?5:4)
exten => 300,3,DIAL(SIP/technicien,20)
exten => 300,5,voiceMail(3)
exten => 300,6,HangUp()
exten => 500,1,Answer()
exten => 500,2,GotoIf($[${DB(standard/messagerie)}=1]?4:3)
exten => 500,3,DIAL(SIP/standard,20)
exten => 500,4,voiceMail(5)
exten => 500,5,HangUp()
exten => 888,1,voiceMailMain()
Utilise Set + DB pour modifier la variable.
Oui mais à quel endroit ?
Comme ça ?
exten => _XXX,1,Dial(SIP/${EXTEN})
exten => _XXX,2,Goto(_XXX-${DIALSTATUS},1)
exten => _XXX-BUSY,1,Set(${CALLERID(name)}/renvoi_appel_comm)=${EXTEN)
exten => _XXX-NOANSWER,1,Set(${CALLERID(name)}/renvoi_appel_comm)=${EXTEN)
exten => _XXX-ANSWER,1,GotoSet(${CALLERID(name)}/renvoi_appel_comm)=${EXTEN)
Je suis bien plus que noyé :mouais:
Bon j'ai approfondis le sujet et je suis plutot proche du résultat voulu.
Alors, quand je fais " *23 + numero du poste " ça met le numero du poste à appeler quand mon poste est BUSY dans la database. Pour cela j'ai utilise Set et DB :
exten => _*23.,1,Set(DB(${CALLERID(name)}/renvoi_dejaencomm)=${EXTEN:3})
Une foie activé database show me met bien :
/secretaire/renvoi_dejaencomm : 300
Puis ensuite dans le extention.conf j'ai fais ça pour le poste secretaire <100> :
exten => 100,1,Answer()
exten => 100,2,DIAL(SIP/secretaire,5)
exten => 100,n,Goto(${EXTEN}-${DIALSTATUS},1)
exten => 100-BUSY,1,GotoIf($[${DB(secretaire/renvoi_dejaencomm)}=0]?4:3)
exten => 100-BUSY,3,Goto(${DB(secretaire/renvoi_dejaencomm)},1)
exten => 100-BUSY,4,voiceMail(1)
exten => 100,5,HangUp()
Quand le secretaire est BUSY ça renvoi bien au poste choisi ( technicien <300> )
Mais si il faut faire tout ça pour chaque postes... Si j'en ai 400 j'y suis pour 1ans :ouch: !!!
J'ai donc pensé que l'on peux faire un script global pour tous les postes. Je me suis lancé et j'ai fais ça. Ca ma l'air bon mais ça ne fonctionne pas.
exten => _XXX,1,Answer()
exten => _XXX,2,DIAL(SIP/${CALLERID(name)},20)
exten => _XXX,n,Goto(${EXTEN}-${DIALSTATUS},1)
exten => _XXX-BUSY,1,GotoIf($[${DB(${CALLERID(name)}/renvoi_dejaencomm)}=0]?4:3)
exten => _XXX-BUSY,3,Goto(${DB(${CALLERID(name)}/renvoi_dejaencomm)},1)
exten => _XXX-BUSY,4,voiceMail(${EXTEN})
exten => _XXX-NOANSWER,1,voiceMail(${EXTEN})
exten => _XXX-ANSWER,1,Goto(postes,${EXTEN},1)
Là ou ça bug c'est que quand je fais le 300 (technicien) avec le poste 100 (secretaire) ça appel la seretaire en double appel. Car enfaite à cette ligne :
exten => _XXX,2,DIAL(SIP/${CALLERID(name)},20)
Le ${CALLERID(name) prend celui du poste avec lequel j'appel (secretaire) alors que je voudrais qu'il prenne le poste que je cherche a joindre (technicien).
Voici ce que me met le CLI :
Executing [300@internal:2] Dail("SIP/secretaire-0000010b", "SIP/secretaire") in new stack
Et moi je voudrais qu'il me mette :
Executing [300@internal:2] Dail("SIP/secretaire-0000010b", "SIP/technicien") in new stack
Suis-je sur la bonne voie ? Ou ce trouve l'erreur ? Une idée pour me dépanné ?
Merci d'avance
Mais si il faut faire tout ça pour chaque postes... Si j'en ai 400 j'y suis pour 1ans !!!
Il faut éditer un manuel d'utilisation pour chaque utilisateur.
Suis-je sur la bonne voie ? Ou ce trouve l'erreur ? Une idée pour me dépanné ?
Merci d'avance
C'est pour cette raison il est plus facile d'utiliser ${EXTEN} qui est numero appelé ET numéro de SIP
Autre chose fais gaffe au looping, 100 renvoie vers 200, 200 vers 100. Implémente un check de loop avec un compteur.
Encore un moment je te conseille vivement de travailler le script 23 + Numéro au lieu de raccroché direct il faut faire un petit menu interactif:
1: Décroche
2: Merci de mettre vers qui il faut renvoyer, terminer par #(IVR)
3: Votre numéro est 1234325, est ce ok ? 1 pour ok 2 pour re-essayer.
Travaille ces menus, perce que c'est moins de questions de d’utilisateurs après.
C'est pour cette raison il est plus facile d'utiliser ${EXTEN} qui est numero appelé ET numéro de SIP
Oui mais si j'utilise ${EXTEN} ça veut dire que dans mon sip.conf je dois mettre :
callerid= 300 <300> ???
Au lieu de :
callerid= technicien <300>
C'est beaucoup moin pratique pour si retrouvé après ...
Encore un moment je te conseille vivement de travailler le script 23 + Numéro au lieu de raccroché direct il faut faire un petit menu interactif:
1: Décroche
2: Merci de mettre vers qui il faut renvoyer, terminer par #(IVR)
3: Votre numéro est 1234325, est ce ok ? 1 pour ok 2 pour re-essayer.
Travaille ces menus, perce que c'est moins de questions de d’utilisateurs après.
Ne t'en fais pas c'est prevu mais je le ferais une fois que ça fonctionnera. Pour le moment ce n'est pas primordial ;)
ffossard
29/04/2011, 18h20
C'est pour cette raison il est plus facile d'utiliser ${EXTEN} qui est numero appelé ET numéro de SIP
Plus facile mais déconseillé :kaola:
Aucun souci avec le serveur bien protégé.
ffossard
30/04/2011, 12h44
Aucun souci avec le serveur bien protégé.
C'est pas seulement pour la sécurité, j'avais lu un article de Digium là-dessus, faudrait que je le retrouve ...
Dans ce cas je suis interesse aussi.
Es que quelqu'un aurait un exemple de son extension.conf avec l'utilisation de BUSY,ANSWER & NO ANSWER car je patoge totalement là.
Merci d'avance
Es que quelqu'un aurait un exemple de son extension.conf avec l'utilisation de BUSY,ANSWER & NO ANSWER car je patoge totalement là.
Merci d'avance
Bonjour,
Voici un exemple
....
exten => s,n,DIAL(${Pappel},40,rt);
exten => s,n,NoOp( Dial Status: ${DIALSTATUS});
exten => s,n,Macro(Status_Dial,${DIALSTATUS},${Pappel});
exten => s,n,Hangup
[macro-Status_Dial]
exten => s,1,Set(P_appel=${ARG2})
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Playback(vm-theperson)
exten => s-NOANSWER,n,SayNumber(${P_appel},c)
;exten => s-NOANSWER,n,SayDigits(${P_appel})
exten => s-NOANSWER,n,Playback(vm-isunavail&to-record-call&press-2)
exten => s-NOANSWER,n,Read(Digits,,1,,,2)
exten => s-NOANSWER,n,GotoIf($["${Digits}" = "2"]?:Following_No_Answer)
exten => s-NOANSWER,n,VoiceMail(${P_appel},u)
exten => s-NOANSWER,n,MacroExit()
exten => s-NOANSWER,n(Following_No_Answer),Playback(please-hang-up-and-try-again)
exten => s-NOANSWER,n,MacroExit()
Etc .... pour BUSY, CONGESTION......
A+
Petit bilan de là ou j'en suis.
Alors voici se qui marche :
" *21 + numero de poste " renvoi immédiat, renvoit les appels vers le numéro choisi.
-" *22 + numero de poste " Renvoi de l'appel si je ne réponds pas aprés 20sec.
-" *25 " tout appels rentrant partent directement sur la messagerie.
-" *8 " interception d'appel dans le groupe prédéfini
-" ** + numero " interception d'appel hors groupe
Et voici se que j'arrive toujours pas à faire.
-" *23 + numero de poste " Renvoi de l'appel si je suis déja en communication.
J'ai tout esseyé avec le BUSY mais rien à faire. Je ne m'en sors pas dutout. Es qu'il y aurait pas un autre moyen ?
Pour ce qui est du :
-" 5 " Rappel automatique sur occupation.
Je m'explique un peu plus. Imaginons que j'appel un poste (Mr dupont) et qu'il est occupé il me suffit de composer le " 5 " et dès que Mr dupont raccroche mon poste sonne et dès que je décroche il rappel automatiquement Mr dupont.
Es possible ?
-" *23 + numero de poste " Renvoi de l'appel si je suis déja en communication.
Ok, pour celui la il faut définir les cas quand tu est dans l’état "en communication"
Je suppose pendant l'appel sortant, et pendant l'appel entrant ver on poste.
Nous allons utiliser la même chose, Group et Group_COUNT.
Une variable de plus, le nim de la groupe perso:
Utilisateur 1 = DB(USER1/Group)=USER1G
1: Nous allons mettre l'utilisateur dans cette groupe lorsque il sort vers l’extérieur
2: Nous allons mettre la personne qui tente de le joindre dans cette groupe lorsque il est est appelé
3: Nous llons faire un GROUP_COUNT chaque fois avant de le contacter, et si >= 1 > BYE BYE
Pour rappel automatique laisse tomber, ça sonne comme une demande de personne (ton boss ?) qui veux un truc, mais sera jamais l'utiliser. Tu sais pourquoi ? Les gens préfèrent de rappeler eux mêmes.
Merci beaucoup, je vais me pencher desuite dessus .
1: Nous allons mettre l'utilisateur dans cette groupe lorsque il sort vers l’extérieur
Le problème est que l'utilisateur ne sort pas vers l'exterieur. C'est que du interne pour le moment.
Le problème est que l'utilisateur ne sort pas vers l'exterieur. C'est que du interne pour le moment.
Et Alors ?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. Tous droits réservés