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

Auteur Sujet: Composer : SCXML State  (Lu 17 fois)

Hors ligne Afid BENAYAD

  • Administrator
  • Newbie
  • *****
  • Messages: 29
  • Karma: +0/-0
    • Voir le profil
    • Benayad
Composer : SCXML State
« 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]



@+
« Modifié: 17 avril 2019, 14:39:06 par Afid BENAYAD »