yana-server icon indicating copy to clipboard operation
yana-server copied to clipboard

Developpement plugin - questions

Open lochot opened this issue 8 years ago • 4 comments

Salut Idleman, ça y est, je m'y suis mis, yana est installée, paramétrée. Elle ouvre et ferme mes volets a la demande, la lumière toussa toussa.

Je vais donc commencer a developper les petits plugin qui me conviennent, et j'en ai commencé un tout simple qui m'indique le nombre de fan de ma page facebook.

Pour le moment, j'ai créé la page de configuration (token, id de la page facebook etc...) J'interroge facebook et je reçois le nombre de fan, mais :

  • comment le faire dire à Yana ? -> ce que j'ai compris pour le moment :
  • Il faut ajouter des fonctions aux hook action_post_case et vocal_command ma fonction vocal_command defini la phrase
        function facebooklike_plugin_vocal(){
                global $conf;

                $response['commands'][] = array(
                        'command'=>$conf->get('VOCAL_ENTITY_NAME').' on a combien de fan',
                        'callback'=>'vocalinfo_give_me_fan',
                        'confidence'=>0.8);
        }

Mais j'ai vu soit un callback, soit un url qui appelle la fonction suivante

        function vocalinfo_give_me_fan($text,$confidence,$parameters){
                global $conf;
                $cli = new Client();
                $cli->connect();
                $nb_fan = get_nbfan();
                $cli->talk("Nous avons".$nb_fan."fans sur la page");
                $cli->disconnect();
        }

Si j'ajoute les hook tels que suit


Plugin::addHook("action_post_case", "vocalinfo_give_me_fan");
Plugin::addHook("vocal_command", "facebooklike_plugin_vocal");

Yana répond "Nous avons fans sur la page" quelque soit la question que je lui pose

J'ai cru comprendre qu'il fallait un fonction intermediaire de type action

        function facebooklike_action() {
                global $_,$conf;
                switch($_['action']){
                        case "plugin_facebooklike":
                                echo 1;
                        break;
                }
        }
         Plugin::addHook("action_post_case", "facebooklike_action");

Mais je ne vois pas comment envoyer l'action au préalable

J'aimerais aussi lancer une fonction dans la cron de yana pour mettre à jour le nombre de fan et lui faire dire "youpi, on a passer une tranche de 100 fans supplementaire !" d'elle meme quand c'est le cas.

Bref j'ai des question et j'en poserais probablement d'autres par la suite, mais mon pavé est déjà pas mal conséquent :)

lochot avatar Jan 03 '17 17:01 lochot

Salut Locho, et bonne année :D !!! Tu n'as pas besoin de passer par les actions si tu specifie dircet le nom de la fonction tu peux te contenter d'un

        function facebooklike_plugin_vocal(){
                global $conf;

                $response['commands'][] = array(
                        'command'=>$conf->get('VOCAL_ENTITY_NAME').' on a combien de fan',
                        'callback'=>'vocalinfo_give_me_fan',
                        'confidence'=>0.8);
        }

       function vocalinfo_give_me_fan($text,$confidence,$parameters){
                global $conf;
                $cli = new Client();
                $cli->connect();
                $nb_fan = get_nbfan();
                $cli->talk("Nous avons".$nb_fan."fans sur la page");
                $cli->disconnect();
        }

Plugin::addHook("vocal_command", "facebooklike_plugin_vocal");

En gros le callback exécute direct la fonction sans passer par une action http.

Pour lancer une action via un cron tu dois utiliser le hook cron

Plugin::addHook("cron", "mafonctionyoupi");

ldleman avatar Jan 04 '17 09:01 ldleman

Super ! Par contre pour récuperer la commande vocale côté serveur, il fallait préciser &$response,$actionUrl dans les parametres de la fonction vocale

        function facebooklike_plugin_vocal(&$response,$actionUrl){
                global $conf;

                $response['commands'][] = array(
                        'command'=>$conf->get('VOCAL_ENTITY_NAME').' on a combien de fan',
                        'callback'=>'vocalinfo_give_me_fan',
                        'confidence'=>0.8);
        }

Par contre je ne récupère pas la commande dans yana4All :(

lochot avatar Jan 04 '17 09:01 lochot

Précisions La cron ça marche super - La commande vocal n'apparait pas dans yana4all, mais elle existe bien dans le client yana windows.

Tu me dis si je n'aurais pas dû J'ai ajouté la partie concernant les hook dans la doc yana là -> http://idleman.fr/yana/doc/developper/index.php?page=hook_api Je préfère garder des notes, donc autant qu'elles servent à tous le monde.

Ah oui, je viens de m'apercevoir que je n'avais même pas répondu : MEILLEURS VŒUX !

lochot avatar Jan 04 '17 10:01 lochot

Bon j'ai pas eu énorme de temps, mais en passant, j'ai regardé yana windows, la commande vocale est bien presente, mais elle ne repond pas. Dans les logs, j'ai la commande reconnue, mais elle appelle URL qui est vide. Demain je testerais en utilisant l'autre methode vocale pour voir si yana windows repond bien, et si ça corrige le souci de yana4all android. -> il y a des chances pour que ce soit ça etant donné le retour de GET_SPEECH_COMMAND qui à l'air d'etre utilisé pour recuperer les commandes (je n'ai pas regardé les sources, seulement celles du client linux de maditnerd qui m'a l'air vraiment sympa)

lochot avatar Jan 06 '17 18:01 lochot