Overblog Suivre ce blog
Administration Créer mon blog
Le blog du CRRIAM

Articles avec #interface tag

Rivescript gérer l'inactivité

12 Avril 2014 , Rédigé par crriam Publié dans #interface

Une des choses importante pour rendre l'interaction avec un robot plus réel, c'est relancer une conversation. En effet, quand vous parlez avec quelqu'un, il arrive que vous n'ayez plus rien a dire, et un blanc s'installe. en principe, l'autre réagit et lance un nouveau sujet de conversation, ou rebondit sur celui en cour. Et bien là, c'est pareil, le robot doit être capable de se rendre compte que l'utilisateur ne parle plus, et le relancer sur un sujet ou continuer sur le même. Et détecter bien sur, si l'utilisateur avait juste un blanc ou s'il est partit de devant son écran en laissant son ordi tourner tout seul. Il faut donc comme le ferait une personne réel, qu'aprés quelques questions sans réponse, le robot se déconnecte.

 

Comment faire ?

Avec en gros le même systeme que pour l'aiml avec pandrabot. En aiml, la page était rechargée a chaque nouvelle réponse, il sufisais donc de mettre un actionneur régler sur un temps écouler et le tour etait jouer.

Ici, la fenetre de tchat n'ai pas rechargé, donc impossible de faire pareil. Par contre, on peut créer une nouvelle page qu'on ouvrira dans une nouvelle frame et qui sera recharger a chaque réponse. Elle sera blanche (vide), pour ne pas perdre de temps de chargement, et comportera un simple script javascript qui enverra la commande sleeping dans la fenetre de tchat au bout d'un certain temps.

Pour ça:

il faut modifier une fois de plus le fichier chat.html

et ajouter


 // debut fonction sleeping
   
  setTimeout(function(){parent.gauchemilieux.location="blank1.html"},200);
 
 // fin fonction sleeping

 

juste ici :

 

       // caracteres avec php lors de l'enregistrement de nouveau fichiers cerveau

        //fin code remplacement des accents
         
    //var text = $("#message").val(); // ligne d'origine du programe
        
    $("#message").val("");
        $("#dialogue").empty(); // a annuler si l'on veut afficher le suivit du dialogue mais il bug s il y a trop de ligne
    $("#dialogue").append("<div><span class='user'>You:</span> " + text + "</div>");
    try {
    var reply = rs.reply("soandso", text);
    reply = reply.replace(/\n/g, "<br>");
       
    $("#dialogue").append("<div><span class='bot'>Bot:</span> " + reply + "</div>");
    $("#dialogue").animate({ scrollTop: $("#dialogue").height() }, 1000);
 
 // debut fonction sleeping
   
  setTimeout(function(){parent.gauchemilieux.location="blank1.html"},200);
 
 // fin fonction sleeping
       

// debut parle

// on remplace les accents par ai pour le son é du tts qui ne reconait pas les caracteres speciaux français (text to speech) valable que pour mespeak pas pour l'api google translate
// reply = reply.replace(/[éèêë]/gi, "ai");


var txt=reply; // on mets la réponse dans une variable, txt
var affichage=txt.length; // on compte le nombre de caractères de la variable et on mets le resultat dans affichage
if (affichage<9) {affichage = 12}; // avec le temps de latence due au calcule du javascript, pour que les levres bouge, il faut qu'il y est plus de 9 caractere

 

Ensuite,

il faut modifier le fichier index.html pour qu'il intégre la nouvelle page de frame qui gérera le seelping

 

voici le code complet :

 

<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<FRAMESET COLS="35%,65%" framespacing=0 frameborder=0 border=0>
<FRAMESET ROWS="50%, 25%, 25%">
<FRAME SRC="webcam.html" NAME="gauche" >
<FRAME SRC="blank1.html" NAME="gauchemilieux" >
<FRAME SRC="blank.html" NAME="gauchebas" >
</frameset>
<FRAME SRC="chat.html" NAME="droite">

</FRAMESET>

<NOFRAMES>
<BODY>
Cette page HTML nécessite un navigateur supportant les frames,
veuillez nous en excuser.
</BODY>
</NOFRAMES>

</html>


Aprés

Il faut créer une page blank1.html qui contiendra le script javascript qui envera l'instruction sleeping a la fenetre de tchat.

Voici le code complet de la page :

 

<html>
<head>


<script language="JavaScript">
function submitform()
{
if(parent.droite.document.form1.onsubmit())
{
parent.droite.document.form1.submit();
}
}
</script>


 <script language="JavaScript">

setTimeout(function(){parent.droite.document.form1.message.value="sleeping";javascript:submitform();},20000);

</script>

 

<BODY>
blank du sleeping
</BODY>


</html>

 

Il faut ensuite inserer un code rivescript dans un des fichier rs qui gére le dialogue le renvois sur des sujet et eventuellement une déconnection. Moi je l'ai mis dans le fichier connection.rs

voila le code complet :

+ sleep
- la varibale sleeping est a <get sleeping>

+ [*] sleeping [*]
* <get sleeping> == undefined => {@depart <get sujet>} <set sleeping=1>
* <get sleeping> == 0 => {@depart <get sujet>} <set sleeping=1>
* <get sleeping> == 1 =>  {@depart <get sujet>} <set sleeping=2>
* <get sleeping> == 2 =>  t es plus la ? <set sleeping=3> {@sleep 4}
- heu probleme

+ sleep 4
- {topic=sleep}

> topic sleep

    + sleeping
    - bon ben si t'es pas la, je me casse, ciao {topic=deconnection} <call> botdeconnection </call>

    + *
    - ha, t'es la, je croyais que tu etais partit.{topic=random} <set sleeping=0>


< topic

> topic deconnection

+ *
- connection interompue

+ 1234
- haaaaaa, je reviens {topic=random} <call> botnormal </call>

< topic


> topic deconnectionaurevoir
 + *
 - connection interompue

 + [*] (@bonjour) [*]
 - {topic=random}{@bonjour}

< topic

 

 

 

Voila, vous avez un robot qui géer l'inactivité de l'utilisateur.

 

 

 

 

 

 

Lire la suite