Overblog
Suivre ce blog Administration + Créer mon blog
Le blog du CRRIAM
Articles récents

Et toi ? ou comment recuperer une expression ou variable javascript

17 Avril 2014 , Rédigé par crriam Publié dans #Rivescript

// Attention, bug d'écriture des accents quand on utilise l'editeur en ligne !

Il arrive souvent que le robot doivent répondre a une question qu'il viens de poser à son utilisateur. Exemple :

Robot : - Tu es marié ?

User: - oui et toi ?

Vous allez me dire pas de soucis, on utilise <reply> (la balise qui permet de renvoyer ce que le robot venais de dire) et le tour est joué.

Ben, oui, mais non ! Car <reply> ne fonctionne que pour une expression formaté, c'est a dire minuscule, pas de ponctuation et pas d'accent, il aurait donc fallut que le robot demande :

tu es marie

Mais ça change un peu les choses.

Il nous faut donc trouver une façon de formater le texte envoyer par le robot. On ne peut pas renvoyer une expression directement car @ est "parser" avant la balise <call>

Pour celà, on donc va réutiliser la méthode trouvée pour enregistrer les variables dans les variables du style @ mots *

voici la solution :

// debut test desacsentuation pour utiliser dans la fonction et toi
// quand le robot marque des phrases avec accents


+ test
- éssé


+ test 2
- {@test 3 <set age=<reply>> <call>desacentuation <id></call>}

+ test 3 *
@<star>


+ [*] esse [*]
- test ok


> object desacentuation javascript
var id = args[0];
var age = rs.getUservar(id, "age");
var age = age.replace(/[éèêë]/gi, "e");
return age;
< object

// fin desacsentuation ca marche.

Je pense, sans l'avoir encore teste, qu'avec cette méthode on pourra récuperer des variables javascript et les enregistrer dans une variables rivescript.

Pourquoi faire ? Ben pour recuperer une id stocker dans un cookie par exemple ou tout autre valeur, comme la date, l'heure etc.

Donc, à tester :)

Lire la suite

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
<< < 1 2 3 4 5 6 7 8 9 10 20 30 > >>