PDA

Voir la version complète : Déconnecter tous les utilisateurs à une heure spécifique



stilobix
23/09/2010, 06h59
Bonjour,

Je cherche un moyen de pouvoir déconnecter tout les utilisateurs présent sur les postes IP tout les soirs à 20h par exemple.

J'utilise asterisk 1.6 avec freePBX 2.8 et je suis en mode AMPEXTENSIONS=deviceanduser afin de permettre à mes utilisateur de pouvoir se logger / délogger sur différents postes.

Pour palier à l'oubli de déloggage par mes utilisateurs je souhaiterai pouvoir lancer une commande afin de tous les délogger chaque jour à 20h.

J'ai fais des essais en modifiant la base de donnée à l'aide d'un script:


asterisk -rx "database del AMPUSER [user]/device"
asterisk -rx "database del DEVICE [default_user]/user
asterisk -rx "database put DEVICE [default_user]/user [default_user]Chaque poste à un utilisateur par défaut afin de pouvoir quand meme joindre le poste physique meme si personne n'est loggé dessus.

Dans l'exemple si dessus j'ai l'utilisateur "43" loggé sur le poste "443"

je supprime l'association 43 - 443:

asterisk -rx "database del AMPUSER [user]/device"je supprime l'association du poste et de l'utilisateur:

asterisk -rx "database del DEVICE [default_user]/userje créé une association entre le poste et son utilisateur par défaut:

asterisk -rx "database put DEVICE [default_user]/user [default_user]Jusque la ca va à peu pret sauf que le poste 'nest plus joignable et l'état de l'utilisateur ne remote pas sur le BLF de mon téléphone. Il me manque les modification des états.

Si vous avez une autre méthode qui fonctionne je suis preneur,

Merci d'avance pour votre aide

stilobix
23/09/2010, 08h12
Serait il possible d’exécuter le script user_login_out.agi avec les paramètres "logout" et "NuméroDePoste" manuellement en passant par la console?

Cela me permettrai d'automatiser son exécution et donc de déconnecter mes utilisateurs à une heure donnée.

stilobix
28/09/2010, 02h43
Personne n'aurait une solution miracle? ou une petit piste pour moi? :ear:

quintana
28/09/2010, 03h31
Essais la poudre verte, c'est magique :).

stilobix
28/09/2010, 04h32
Déjà testé mais sans succès! j'ai même dansé en tournant autour mais rien...

Donc je compte sur vous je sur sûr que quelqu'un a une solution!! je trouverai étonnant le fait que personne n'ai déjà cherché à déconnecter tout les utilisateur loggé sur des postes! :peace:

Enfin je l'éspère en tout cas! :rolleyes:

fastm3
28/09/2010, 08h47
Personne n'aurait une solution miracle? ou une petit piste pour moi? :ear:
D'abord , tu ecris un petit bout de dialplan qui fait ce que tu veux. Avec freepbx, tu peux l'inserer dans le contexte [from-internal-custom], ou creer un contexte particulier et de maniere facultative, l'associer a un features code dans l'interface.

Donc tu pourras tester facilement ton dialplan en composant le numero choisi pour executer ce bout de code. Effectivement, tu devras appeler les macro de login et logout, tu peux t'en inspirer dans /etc/asterisk. Et les etats seront gérés correctement. Bref, tu auras alors un bout de dialplan faisant ce que tu veux.

Exemple juste pour l'idée et non testé...


[monloginlogoutautomatique]
exten => *99,1,Macro(user-logoff,100)
exten => *99,n,Macro(user-logoff,101)
exten => *99,n,Macro(user-logoff,102)
exten => *99,n,HangupIl suffit ensuite de le faire executer de maniere automatique à une heure precise.
Il y a plusieurs moyens: Les call files, un cron avec la commande dial eventuellement si tu as chan_oss pour lancer a partir d'un asterisk -rx dial , la commande originate qui est apparu avec la 1.6 ou 1.8...

Voila une piste. Au boulot. ;)
Fastm3.

stilobix
28/09/2010, 14h28
Merci beaucoup pour ces pistes intéressantes, je vais regarder comment fonctionne la fonction Dial pour voir si elle pourrait me convenir.

J'avais déjà tenté quelque chose avec orginate mais le soucis c'est qu'il faut que je décroche le combiné pour que l'appel se passe correctement. Je ne sais pas comment faire pour lancer un appel sur une extension précise de mon dialplan automatiquement sans qu'il y ai besoin d'une action de ma part pour terminer l'action en cours.

stilobix
29/09/2010, 10h24
J'ai regardé la piste de la commande "originate" mais il reste toujours un soucis, il faut quelqu'un pour déccrocher le poste afin de pouvoir éxécuter l'appel.

Je suis en train de m'orienter vers un client SIP en ligne de commande pour pouvoir passer un appel qui déloggera mes utilisateurs. Je ne sais pas si ca va fonctionner mais meme si ca fonctionne je trouve cette solution vraiment bancale!

Je suis vraiment étonné / déçu de voir que personne n'ai déjà cherché à délogger ses utilisateur automatiquement le soir aprés l'heure de fermeture!

quintana
29/09/2010, 13h24
En tout cas jamais fait avec FreePBX et comme je ne connais pas, j'en ai aucune idée. C'est deloggué en SIP que tu veux faire, moi j'ai pas compris ce que tu voulais faire exactement. Sinon tu peux faire auto décrocher ton téléphone en passant, cela est possible avec des header sip sur la majorité des téléphones. Cherche autoanswer SIP.

stilobix
29/09/2010, 14h00
Oui en effet j'utilise FreePBX et sa gestion des Device User (trés particulier mais ca fonctionne!).

Pour la précision! ce que je souhaite faire:
Mes utilisateurs et mes téléphones sont dissocié, ce qui me permet de leur donner une certaine mobilité. Un utilisateur peu venir sur n'importe quel poste (téléphone) de l'entreprise et s'y connecter avec son numéro d'extension et ainsi etre joignable.
Mon soucis est que certains utilisateurs vont oublier de se déconnecter du téléphone en partant. Il seront donc loggé sur un poste et dispo alors qu'en réalité l'employé n'est peut etre pas la et donc indisponible, boite vocale.
Pour palier à ce genre de situation je voulais déconnecter tout le monde chaque soir pour etre sur de repartir sur une situation clean le lendemain matin.

Je vais voir si je peux trouver un soft phone en ligne de commande pour bidouiller quelque chose sinon je mettrai un de mes postes polycom en autoanswer.

En tout cas merci pour votre aide, je posterai les infos utiles si j'avance! ;)

cedricscha
29/09/2010, 14h25
en ligne de commande :


asterisk -rx "restart now"

Bon ok, un peu brut..... mais cela devrait fonctionner.....


Bon je me planque pour ne pas recevoir les tomates ..... :peep:

stilobix
29/09/2010, 14h33
FAIL!

ca va redémarrer mais les utilisateurs resteront comme ils sont!

quintana
29/09/2010, 14h44
Mais elle est faite ou l'association en fait ? Sur le poste SIP directement ? C'est genre un login/logout du téléphone ?

quintana
29/09/2010, 14h44
sinon tu as linphone comme softphone qui sait faire juste de la ligne de commande.

quintana
29/09/2010, 14h47
Bon je me planque pour ne pas recevoir les tomates

http://www.youtube.com/watch?v=U7EQubyrLD0 ;)

stilobix
29/09/2010, 14h58
Mais elle est faite ou l'association en fait ? Sur le poste SIP directement ? C'est genre un login/logout du téléphone ?

En fait lorsque je fais le feature code de freepbx pour logger un utilisateur sur un poste (*11) ca exécute un script agi qui va créer l'association du post et de l'utilisateur dans la base de donnée Astdb. Le script remplace le "default user" du poste par l'utilisateur qui se connecte sur ce poste et change les états comme il faut.
Pour se déconnecter l'utilisateur tape le code *12 qui va supprimer, avec le fameux script agi, l'association dans la base pour remettre le "default user" sur le poste et ca rechange les états du poste et de l'utilisateur.

cedricscha
29/09/2010, 16h56
Bon ben tu ne peux pas executer ton agi manuellement depuis la ligne de commande ?

Et si cela fonctionne tu fais un script que tu balance dans ton cron

fastm3
29/09/2010, 22h07
Mais elle est faite ou l'association en fait ? Sur le poste SIP directement ? C'est genre un login/logout du téléphone ?
Oui, c'est exactement ca. Apres c'est le dialplan qui va faire sonner le "device" , la ou est loggué le "user".

stilobix, la commande dial sous cli et chan_oss, c'est pour 1.4 . J'ai vu que tu es en 1.6.
En 1.6, si tu as installé ce qu'il faut, tu peux faire la meme chose avec un originate et console/dsp comme channel.
Fastm3.

stilobix
29/09/2010, 22h41
Bon ben tu ne peux pas executer ton agi manuellement depuis la ligne de commande ?

Et si cela fonctionne tu fais un script que tu balance dans ton cron

Justement c'est ce que je cherche désespérément à faire! J'ai essayé par le CLI mais je n'ai jamais réussi et en ligne de commande directement par ce que c'est un script agi mais c'est du php. Donc je sais quels argument il faut lui passer mais ca ne fonctionne pas. Je pense qu'il attend quand meme des réponses de l'asterisk pour s'éxécuter.


En 1.6, si tu as installé ce qu'il faut, tu peux faire la meme chose avec un originate et console/dsp comme channel.

Merci fastm3 je vais explorer cette piste. Pourrais tu etre un peu plus clair au cas ou je n'y arrive pas!

Merci à tous je sens qu'on avance!! tous ensembleeee tous ensembleee HEY, HEY :peace:

qhess77
29/09/2010, 22h48
Je connais la commande
*CLI> sip unregister SIP_ID
qui force la deconnexion d'un poste SIP.

stilobix
29/09/2010, 23h38
Je connais la commande
*CLI> sip unregister SIP_ID
qui force la deconnexion d'un poste SIP.

Nice try! mais non je ne cherche pas a "unregister" un poste SIP mais seulement à déconnecter l'utilisateur qui est actuellement connecté dessus pour remettre l'utilisateur par défaut associé au poste.

Mes utilisateurs ne sont pas des compte SIP je n'ai donc pas accés a leur numéro d'extension avec cette commande. Ce sont juste des associations géré par freePBX qui les associe ou non dans la base astdb.

fastm3
30/09/2010, 09h03
Nice try! mais non je ne cherche pas a "unregister" un poste SIP mais seulement à déconnecter l'utilisateur qui est actuellement connecté dessus pour remettre l'utilisateur par défaut associé au poste.

Mes utilisateurs ne sont pas des compte SIP je n'ai donc pas accés a leur numéro d'extension avec cette commande. Ce sont juste des associations géré par freePBX qui les associe ou non dans la base astdb.

Je comprends pas ton pb. Les piste ont ete données. Il y a originate, console/dsp pour 1 coté ou tu crées un channel. Pfff, voila une solution...

Rajoute le code ci-dessus dans extensions_custom.conf en specifiant les users que tu veux deconnectés automatiquement.

[monloginlogoutautomatique]
exten => *99,1,Macro(user-logoff,100)
exten => *99,n,Macro(user-logoff,101)
exten => *99,n,Macro(user-logoff,102)
exten => *99,n,Hangup


[originateanswer]
exten => 1,1,Answer()
exten => 2,n,Wait(3)

Faire un reload.

Puis asterisk -rx " originate Local/1@originateanswer extension *99@monloginlogoutautomatique"
dans un cron fera ce que tu veux ou tu peux tester bien sur sous cli.

Je n'ai pas testé mais ca DOIT marcher.
Fastm3.