Tel: 06 68 39 83 22 | afid.benayad@gmail.com

Messages récents

Pages: [1] 2 3 4
1
Genesys: Développement / Composer : SCXML State
« Dernier message par Afid BENAYAD le 17 avril 2019, 10:41:09 »
Nous allons voir ici comment récupérer la configuration d'un objet (ici l'agent JB Jane Baldwin) ainsi que les options ce trouvant dans l'annex de l'agent.

Sous composer

Ajouter au projet une variable utilisateur
varContexte_Agent=""


Nous allons utiliser le bloc SCXML State, au préalable il faut ajouter l'option a l'agent, éditer l'agent IA puis sous l'onglet Annex ajouter une section
TServer
sous cette section ajouter une option
gsm=0607080910


Nous utiliserons aussi la function log au lieu de __Log, (voir le poste dédié)

A présent ajouter un bloc SCXML State avec les paramètres suivant

Name: GetAgentInfos
Block Notes: Une decription courte ex: "Recuperation des options de configuration de l'agent"
Exeptions: ajouter une exeption
Name: error
Event: error.session.fetch
Condition: _event.data.requestid == GetAgentInfos
Target: true
Body:
<script>
   log("Error"," Impossible de récupérer les infos de l'agent Appelant");
</script>


SCXML Details>Body

<onentry>
   <script>
      var GetAgentInfos;
      var Agent = "JB"
      var Valeurs = 'employeeid:' +Agent;
      var vLocalParms = [3, Valeurs];
      var ursFunc = 'urs/call/' + _genesys.ixn.interactions[system.InteractionID].voice.connid +  '/func/FindConfigObject';
   </script>
   <session:fetch requestid="GetAgentInfos" srcexpr="ursFunc" method="'urs'">
      <param name= "params" expr="uneval(vLocalParms)" />
   </session:fetch>
</onentry>
<onexit>

</onexit>


Transitions: ajouter une transition
Name: Transition
Event: session.fetch.done
Condition: _event.data.requestid == GetAgentInfos
Target: true
Body:
<script>
   var vEventData = _event.data.content.toString();
   vEventData = vEventData.replace(/[.]/g, &quot;,&quot;);
   vEventData = vEventData.replace(/\\u000a/g,&quot;&quot;);
   _data.varContexte_Agent = JSON.parse(vEventData);
   
   log('info','Réponse URS: ' +JSON.stringify(_data.varContexte_Agent));
</script>



Le retour sera de ce type:
LOGS INFO : ########## Réponse URS: {
"dbid":105,
"employeeid":"JB",
"firstname":"Jane",
"lastname":"Baldwin",
"username":"JB",
"email":"jb@localhost.com",
"tenantdbid":1,
"tenant":"Environment",
"placedbid":105,
"skills":{"Chicago":5},
"logins":{"1604":"SwitchChicago"},
"folders":{"Chicago":185,"Persons":105},
"annex":{"TServer":{"gsm":"0607080910"}}
} »  ########## » ' label='info' level='1' />


Nous pouvons à présent récupérer l'information que nous souhaitons depuis la variable via un bloc ECMA Script
Ici le nom et le prénom
try {
      log("Info", "Agent Infos : "+_data.varContexte_Appelant.firstname+ " "+_data.varContexte_Appelant.lastname);
}

Retournera
LOGS INFO : ########## Agent Infos : Jane Baldwin »  ########## » ' label='Info' level='1' />


Ici le N° de gsm ce trouvant sous l'annex TServer option gsm
try {
      log("Info", "N° de GSM agent : "+_data.varContexte_Appelant.annex.TServer.gsm);
}

Retournera
LOGS INFO : ########## N° de GSM agent : 0607080910 »  ########## » ' label='Info' level='1' />


Il est possible d'utiliser d'autre fonction urs au même  titre que FindConfigObject, par exemple: TargetState pour connaitre le status de la cible "IA@statserver.a"

Dans cet exemple nous voulons connaitre le status de l'agent IA pour le cannal voice

Ajouter au projet une variable utilisateur
varCibleStatus


Ajouter une function Javascript


/*****************************************************************************************
  *  Function permettant de Récupérer  le nom du status d'un agent selon son code Status
  * 
  *  Prend en entrée
  * @param status [STRING] : N° du status
  *
  ******************************************************************************************/
 function getStatusName(status){
      switch(status) {
         case 0 :
            return "Inconnu";
         break;
         case 4 :
            return "WaitForNextCall";
         break;
         case 5 :
            return "Off Hook";
         break;
         case 6 :
            return "Call Dialing";
         break;
         case 7 :
            return "Call Ringing";
         break;
         case 8 :
            return "NotReadyForNextCall";
         break;
         case 9 :
            return"After Call work";
         break;
         case 13 :
            return "Call on Hold";
         break;
         case 18 :
            return "Call Unknow";
         break;
         case 19 :
            return "Call Consult";
         break;
         case 20 :
            return "Call Internal";
         break;
         case 21 :
            return "Call Outbound";
         break;
         case 22 :
            return "Call Inbound";
         break;
         case 23 :
            return "LoggedOut";
         break;
         default :
            return "Inconnu";
      }
   }


Ajouter un bloc SCXML State

Name: GetCibleStatus
Block Notes: Une description courte ex: "Récuperation du status de l'agent cible"
Exeptions: ajouter une exeption
Name: error
Event: error.session.fetch
Condition: _event.data.requestid == GetCibleStatus
Target: true
Body:
<script>
   log("Error"," Impossible de récupérer le status de l'agent Appelant");
</script>


SCXML Details>Body

<onentry>
   <script>
      var GetCibleStatus;
      var Valeurs = 'IA@statserver.a';
      var vLocalParms = Valeurs;
      var ursFunc = 'urs/call/' + _genesys.ixn.interactions[system.InteractionID].voice.connid +  '/func/TargetState';
   </script>
   <session:fetch requestid="GetCibleStatus" srcexpr="ursFunc" method="'urs'">
      <param name= "params" expr="uneval(vLocalParms)" />
   </session:fetch>
</onentry>
<onexit>

</onexit>


Transitions: ajouter une transition
Name: TransitionStatusCible
Event: session.fetch.done
Condition: _event.data.requestid == GetCibleStatus
Target: true
Body:
<script>
   _data.varCibleStatus = JSON.parse(_event.data.content);
   log("Info","Etat Agent Cible: "+JSON.stringify(_data.varCibleStatus));
</script>


Ajouter un bloc ECMA Script

try {
   var nb=0;

   for (var i in _data.varCibleStatus.dn){
      nb++;
      //log ("info", "Media "+_data.varCibleStatus.dn["medianame"]+", Status Agent:" +_data.varCibleStatus.dn["status"]);
      if    (_data.varCibleStatus.dn["medianame"]=="voice"){
         var StatusNum=_data.varCibleStatus.dn["status"];
         _data.varCibleStatus=getStatusName(StatusNum);
         log("info","Agent dans le Status: "+_data.varCibleStatus+" Numéro: "+StatusNum+ " pour le media Voice");
      }
   }

} catch (error) {
   // error handling code
}


Le résultat sera:
LOGS INFO : ########## Agent dans le Status: NotReadyForNextCall Numéro: 8 pour le media Voice »  ########## » ' label='info' level='1' />/pre]



@+
2
Genesys: Développement / Composer : Javascript > function log
« Dernier message par Afid BENAYAD le 17 avril 2019, 09:22:14 »
Une facon un peux plus propre pour loguer les messages
5 Niveau de log (INFO, ERROR, WARNING, DEBUG et ALARM), a vous d'en rajouter si besoin
Le résultat obtenue est sous la forme:

LOGS INFO : ##########  Date: 2019-04-17T07:05:31.915Z »  ########## » ' label='info' level='1' />
Voici la source du code js
/*****************************************************************************************
*  Function pour l'ecriture des logs

*  Ecrit les logs dans le fichier de log Ors
*  \n = retour à la ligne, afin d'avoir le log en debut de ligne
*  level = INFO, ERROR, WARNING, DEBUG et ALARM
*  msg = message a loguer
******************************************************************************************/

function log(label, msg){
var level = "";
var prefixe="\nLOGS";
var suffixe="";

    if((label==="INFO") || (label==="Info") || (label==="info")){
    level=1;
    } else if((label==="ERROR") || (label==="Error") || (label==="error")){
    level=2;
    } else if((label==="WARNING") || (label==="Warning") || (label==="warning")){
    level=3;
    } else if((label==="DEBUG") || (label==="Debug") || (label==="debug")){
    level=4;
    } else if((label==="ALARM") || (label==="Alarm") || (label==="alarm")){
    level=5;
    }
return __Log(prefixe+" "+label.toUpperCase()+ " : ########## " +msg+ " » " +suffixe+ " ########## » ", label, level);
}

Il suffit ensuite via un bloc ECMA Script d'utiliser la function log au lieu de __Log
Example:
log("info", "Résulta: "+_data.resultat);
3
Genesys: Développement / Composer : EcmaScript > TimeFullToString
« Dernier message par Afid BENAYAD le 17 avril 2019, 09:14:38 »
Un petit code afin d'afficher la date au format 2019-04-17T07:05:31.915Z

try {
var d = new Date;
var Start=TimeFullToString(d.getTime());
__Log(" Date: "+Start);
} catch(err) {
__Log('###The error >' + err.name + ':' + err.message + '< was reported! ###');
__Log('###The line number>' + err.lineNumber + '<###');
__Log('###The error stack>' + err.stack + '<###');
}
4
Genesys: Discussion Général / Un petit nouveau
« Dernier message par Afid BENAYAD le 01 avril 2019, 14:21:59 »
Bonjour a tous et a toute
Un petit nouveau dans le monde très étroit de Genesys en français, je s’appelle Grutt by Fabien.


N’hésitez pas a aller voir ce site https://www.grutt.org/
5
Genesys: Outils / Récupérer son N° de série Windows
« Dernier message par Afid BENAYAD le 26 février 2019, 11:26:20 »
Vous souhaitez réinstaller votre serveur et n'avez plus le n° de série, voici un petit script en vbs.


Dim WS : Set WS = CreateObject("WScript.Shell")
Dim CurEd, CurSerial
 
CurEd = WS.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")
CurSerial = WS.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")

MsgBox "Edition : " + CurEd +Chr(13)+ ConvertToKey(CurSerial)



Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

Set WS = Nothing

WScript.Quit
6
Pense-bête / Les packages
« Dernier message par Afid BENAYAD le 23 février 2019, 08:47:49 »
Pour l'auto-completition
yum install bash-completion bash-completion-extras
Java JDK
yum install java-1.8.0-openjdk-devel
Htop
yum install htop
7
Genesys: Discussion Général / Re : Configuration SIPPROXY
« Dernier message par Afid BENAYAD le 18 février 2019, 09:34:45 »
Bonjour, personne n'a apporté de réponse alors je me lance
et pour répondre a ta question :

faut t-il configurer un DN par sipproxy ?
il te faut un DN par switch

comment configurer le DN de type sip-outbound-proxy?
voici la configuration que tu doit avoir sur ton DN
sous Options>TServer
Ajouter contact=Sip Proxy FQDN
external-contact=host:port (sip proxy)
oos-check= frequence en seconde de recherche du SIP Proxy HS
oos-force= Intervalle en seconde, attente apres quoi le server SIP considere que le sip proxy est HS, si l'option oos-check est activée.
service-type=sip-outbound-proxy



8
Genesys: Outils / Coloration syntaxique notepad++
« Dernier message par Afid BENAYAD le 14 février 2019, 14:35:07 »
Vous éditez souvent des logs Genesys avec Notepad++ et la lecture de ces dernier vous semble incompréhensible, je vous propose une coloration pour Notepad++

Sous notepad++ et via le menu parametres  => Configuration de la coloration syntaxique selectionnez le theme Monokai
Copier le fichier joint sous %APPDATA%\Notepad++

Editez le fichier de log de votre TServer et solectionnez language puis Logs TServer



9
Pense-bête / Commandes Utiles
« Dernier message par Afid BENAYAD le 13 février 2019, 15:28:22 »
Pas grand chose pour le moment mais j'étofferais au fur et a mesure.

pwd
print working directory, Cette commande affiche tout simplement le chemin absolu du dossier dans lequel on se trouve.


cat
Lire le contenu d’un fichier texte cat fichier.txt

tail
Cette commande affiche la fin d'un fichier, suivi de -f permet de mettre a jour en temps reel l'affichage, appréciable pour lire les logs.

touch
Cette commande permet de créer un fichier

ln
Permet de créer un lien entre deux fichiers suivi de -s pour créer un lien symbolique.
ln -s fichier lien_vers_fichier1

tar
Compression de dossier
-cvf = create, verbose, file
tar -cvf nouvelle_archive.tar mon_dossier_a_archiver

Décompression
-xvf = eXtract, verbose, file
tar -xvf mon_archive.tar mondossier/

locate
Cette commande permet de localiser un fichier sur le disque dur
locate fichier.txt

>
Redirige le resultat d'une commande dans un fichier avec écrasement du contenu du fichier

>>
Redirige le résultat d'une commande dans un fichier, ajoute le résultat a la fin du fichier

&
A la fin d'une commande ajouter & redonne immédiatement accès au shell, sans attendre la fin de la commande.

nohup
Lance le programme et le maintient lancé même en fermant la console.

sudo
Exécuter une commande en mode root

sudo su
Passer en root

chmod
changer les droits sur un fichier, suivi de -R pour la récursivité dans les sous dossier

chown
Changer le propriétaire d'un fichier ou dossier, suivi de -R pour la récursivité dans les sous dossier


10
Pense-bête / Centos
« Dernier message par Afid BENAYAD le 13 février 2019, 14:50:53 »
Configuration IP statique

Sous CentOS, la configuration de l'interface réseau avec une adresse IP statique diffère de celle sous Debian ou Ubuntu.

Pour identifier les cartes réseaux:
# nmcli d
Pour une configuration avec un assistant:
# nmtui
Redémarrer le service réseau:
# systemctl restart network
Contenu du fichier /etc/sysconfig/network-scripts/ifcfg-eth0 :
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="A0:B0:C2:D2:E3:C3"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
# BOOTPROTO=dhcp
IPADDR=192.168.0.31
NETMASK=255.255.255.0
#
#   the GATEWAY is sometimes in: /etc/sysconfig/network
GATEWAY=192.168.0.254

Modifier aussi le fichier /etc/sysconfig/network
# cat /etc/sysconfig/network
NETWORKING="yes"
DNS1=192.168.0.254
DNS2=1.1.1.1
SEARCH=mondomaine.fr

Reste à exécuter la commande suivante afin d'initialiser les différents scripts.
# rpm -qd initscripts
Redemarrer le serveur

La commande ifconfig n'est pas disponible :
# yum install net-tools.x86_64

Liste des paquet a installer via yum install
net-tools.x86_64
gcc.x86_64
htop


Localtime
Pour configurer le bon fuseau horaire sur CentOS, il faut indiquer les bons paramètres dans le fichier /etc/localtime

On trouve dans le dossier /usr/share/zoneinfo tous les fichiers pour toutes les zones de la planète.

Il suffit donc de faire un lien entre le bon fichier fichier correspondant à la zone souhaitée et le fichier /etc/localtime.
# unlink /etc/localtime
# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime


Pages: [1] 2 3 4