Accueil > Réalisations > Logiciels > Outils pour autocommutateurs Alcatel 4400 > Numérotation automatique depuis un Intranet (STAP/CTI) > Numéroter depuis un programme
Numéroter depuis un programme
samedi 6 avril 2013, par
Pour éviter de payer des frais prohibitifs à notre intégrateur, nous avons choisit de simuler l’utilisation de l’annuaire « Omniview » par un utilisateur. La commande « wget » permet de faire cela très simplement...
Le code ci-dessous est écrit en shell et peut facilement être converti dans un autre langage.
Il prend trois arguments :
- le numéro du poste appelant (en général 4 chiffre) ;
- le code secret du poste (par défaut c’est souvent 0000). Il ne s’agit pas du code de la messagerie vocale. Ce code peut être réinitialisé via la 4760 dans le même menu que celui utilisé pour activer le « STAP » (voir l’article précédent) ;
- le numéro appelé (numéro de poste pour un appel interne, numéro extérieur avec prefixe de sortie, le plus souvent « 0 », pour un appel externe).
Le code ci-dessous doit être adapté à votre configuration en remplaçant l’IP de « SERVER=1.2.3.4 » par l’adresse de votre 4760.
#!/bin/sh
if [ "$#" != 3 ]
then
echo "Syntax is $0 <poste> <code_secret> <no appele>"
exit 1
fi
STATION=$1
SECRET=$2
CALLING=$3
######################################################################
SERVER=1.2.3.4
COOKIES=/tmp/cookies$$.txt
OUT=/tmp/out$$
WGET=/usr/bin/wget
#######################################################################
Error()
{
echo "$1"
rm -f $COOKIES $OUT
exit 2
}
#Contact server to get association form & get a session cookie
$WGET -q --load-cookies=$COOKIES "http://$SERVER/php-bin/Webclient.php?action=station" --keep-session-cookies --save-cookies=$COOKIES -O $OUT
RES=$?
if [ "$RES" != "0" ]
then
Error "Unable to contact server $SERVER"
fi
#Get an association cookie by submitting station Id and secret code
$WGET -q --load-cookies=$COOKIES "http://$SERVER/php-bin/Webclient.php" --keep-session-cookies --save-cookies=$COOKIES -O $OUT --post-data="action=stationCheck&st%5BcallerExt%5D=$STATION&st%5BcallerCode%5D=$SECRET&validation=+Appl"
SUCCESS=`cat "$OUT" | grep "The operation completed successfully."`
if [ "$SUCCESS" = "" ]
then
Error "Unable to associate station. Invalid secret code ?"
fi
#Hangout station
$WGET -q --load-cookies=$COOKIES "http://$SERVER/php-bin/WebClient.php?action=releaseCall" --keep-session-cookies --save-cookies=$COOKIES -O $OUT
#Call number
$WGET -q --load-cookies=$COOKIES "http://$SERVER/php-bin/WebClient.php?action=makeCall&calledExt=$CALLING&calledPersonDn=uid=etst+4,o=CNOM,o=directoryRoot&calledAttr=mobile" --keep-session-cookies --save-cookies=$COOKIES -O $OUT
SUCCESS=`cat "$OUT" | grep "^$STATION->"`
if [ "$SUCCESS" = "" ]
then
Error "Unable to dial"
fi
rm -f $COOKIES $OUT
exit 0
Le principe de fonctionnement est le suivant :
- on commence par vérifier le nombre d’argument et par afficher un court rappel de la syntaxe si nécessaire ;
- on fixe ensuite un certain nombre de variables, dont l’IP du serveur et le nom de certains fichiers temporaires ;
- on fait ensuite un premier appel à l’annuaire pour vérifier qu’il est présent et disponible ainsi que pour créer une nouvelle session HTTP. Au passage on teste que la réponse est correcte et on arrête le script si tel n’est pas le cas ;
- on réalise ensuite une association avec le n° de poste appelant en utilisant le code secret. Il peut y avoir échec si le code est faux et le script s’arrête si tel est le cas. En cas de succès, un cookie est crée (valable 1 an) ;
- on raccroche le poste (hangup) au cas où il serait déjà en communication. Cette étape n’est pas forcément nécessaire ;
- enfin on lance la numérotation et on vérifie le résultat.
Ce code peut être facilement intégré dans un serveur web, par exemple dans un serveur Intranet (rubrique annuaire) pour permettre une numérotation directe dès que l’utilisateur est identifié et qu’il est donc possible de connaître son numéro de poste.
Voilà, ce n’est pas plus compliqué et surtout cela ne coûte pas les 25000 €que réclamait mon intégrateur (pour une solution en plus non garantie)....