Faire un ASK avec Alexa sans plugin

Bonjour à tous

En règle générale nous posons des questions à Alexa et elle y répond ou s’exécute s’il s’agit d’ordres.
Dans certains cas il peut s’avérer intéressant/amusant que ce soit Alexa qui vous pose la question en fonction de tel événement ou situation, et qu’en fonction de votre réponse elle agisse.
Un exemple simple, la luminosité baisse et Alexa pourrait vous demander si vous souhaitez allumer la lumière.
C’est ce que fait le ASK au niveau du plugin mobile par le biais d’une notification. Le mobile va avoir l’avantage de patienter un certain temps avant que vous ne donniez votre réponse. Avec Alexa, il vous faudra lui répondre dans la foulée. C’est ce que nous allons voir au travers de l’exploitation des Flows de la skill Voice Monkey.
Les Flows sont des scénarios très simples du type IFTTT, mais suffiront pour traiter des ASK.
:pushpin: Il est primordial que vous ayez lu et mis en œuvre toute la première partie du tuto Faire parler Alexa sans plugin, ne serait-ce que pour avoir configuré et créé vos devices dans l’application.

En admettant que ce soit chose faite, rendez vous sur votre Console Voice Monkey et dans la partie gauche cliquer sur Flows puis New flow.

Nous allons prendre l’exemple où Alexa nous demandera si nous voulons allumer une lumière. Pour cet exemple simple, nous supposons que votre lampe est intégrée à Jeedom, avec 2 commandes (actions) On et Off.

Donnez un nom à votre Flow, par exemple "Ask lumière salon".
image

image

De sorte à ce qu’Alexa nous interroge, nous allons rédiger la question. Sélectionner "Question prompt" puis "Add action"

image

Précisez le device qui devra parler, rédigez votre question et choisissez le type de réponse attendue. Dans notre exemple ce sera de type Yes/No

image

Après validation, vous aurez un aperçu de votre flow, avec sa question en entête et les 2 possibilités de réponse.

image

Restent à dérouler les actions que vous souhaitez faire en fonction de chaque réponse fournie.
Answer Yes + : si réponse= oui, alors allume
Answer No + si réponse= non, alors confirmation vocale (optionnel, peut être vide).

En face de Answer Yes, cliquez sur le +
Cela vous fait retourner sur la liste des actions, où cette fois ci vous choisissez "Web Request", puis "Add action".

image
image

Le champ URL correspond à l’URL qui va lancer l’action Jeedom Lampe On.
Vous trouverez cette URL dans votre équipement Jeedom, sur l’onglet configuration de la commande, puis informations et enfin URL directe.

Copiez-collez cette URL et validez par Add action.

De retour sur la configuration de votre flow, en face de Answer No, cliquez sur le +
choisissez "Speech" puis "Add action"

image

Sélectionner le device qui devra parler, rédigez votre message et validez.

image

Votre flow est désormais opérationnel et vous pouvez le tester directement depuis la console Voice Monkey avec Trigger Flow.

Si vous avez bien fait les choses, Alexa devrait vous poser la question et en fonction de votre réponse, allumer ou non votre équipement.
A savoir que faute de réponse, Alexa se limitera à poser 2 fois la question.

Jusqu’à présent nous avons vu comment créer un flow et l’exécuter depuis la console Voice Monkey.(La doc VM annonce 3 flows gratuits dans l’offre de base, mais j’en suis à plus de 10 sans abonnement.)
Ce qui va nous interesser, c’est de lancer directement ces flows depuis Jeedom.
Tout comme pour "Faire parler Alexa", Voice Monkey propose une API qui va générer les URLs permettant de lancer ces flows

On peut voir que cette URL est composée de 2 éléments principaux, votre token et l’ID du flow (1010 dans mon exemple)

https://api-v2.voicemonkey.io/flows?token=30xxxCECI_EST_MON_TOKENxxxxx0f2e&flow=1010

Votre premier flow portera le numéro 1000 et ce numéro s’incrementera à chaque nouvelle création.
C’est cette URL que nous allons exploiter dans Jeedom pour faire nos ASK. Tout comme pour "Faire parler Alexa" un petit scénario intégrant un bloc code rédigera automatiquement cette URL. Il vous suffira de connaître le numéro de votre flow pour le lancer.

Le scénario que j’ai nommé "Voice Monkey Flow API" contient ce bloc code :

$tags = $scenario->getTags();
$Flow_Number = $tags['#Flow_Number#'];

$scenario->setLog('DEBUG CODE: '.$Flow_Number);

$url_VM = 'https://api-v2.voicemonkey.io/flows?token=METTRE-ICI-VOTRE-TOKEN&flow=' .$Flow_Number;
$scenario->setLog('DEBUG URL: '.$url_VM);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_VM);
$response = curl_exec($ch);
curl_close($ch);

$scenario->setLog('DEBUG RETOUR : '.$response);

:pushpin: Ne pas oublier de saisir votre token

Pour être exécuté correctement, ce scénario a besoin d’un tag: Flow_Number
C’est le numéro identifiant votre flow sur la console Voice Monkey.
Dans le scénario Jeedom où vous souhaitez "Faire votre ASK", ajoutez une action de type scénario, scroller pour sélectionner le scénario Voice Monkey Flow API, et choisir Démarrer (sync)
Dans la partie Tags du scénario, ajouter:
Flow_Number=1000
Exemple d’un scénario ayant pour déclencheur une présence dans la pièce et comme condition un seuil de luminosité.

Ce n’est qu’un exemple basique afin de montrer la faisabilité. Libre à vous d’étoffer, les possibilités sont nombreuses.
Si par la suite vous créez d’autres Flows sur la console, pour les appeler depuis Jeedom, il vous suffira d’appeler le scénario avec pour tag le numéro du flow concerné.

Amusez vous bien :wink:

2 « J'aime »

Salut Dan_73,
P’tit retour suite à l’utilisation de ton tuto : :ok_hand: :blush: tout fonctionne parfaitement !
Encore un grand merci pour ton partage.

J’ai une question. J’ai crée un scénario pour qu’Alexa me demande si je souhaite fermer certains volets de ma maison. Comment fais-tu de ton coté pour récupérer l’info d’une action effectué par Alexa via VoiceMonkey sans passer par le plugin AlexiAPI ? Dans mon cas la commande info « Dernier dialogue avec Alexa » d’un plugin (version 1/free dans mon cas) ?

Salut :wink:

Merci pour ton retour.

Récupérer l’info dans Jeedom ?
Si tu n’as pas de retour d’état sur ton équipement, il faut créer un virtuel d’état binaire qui passera de 0 à 1 (ou inversement suivant le besoin) et ce virtuel tu le gères par un Web Request au niveau de Voice Monkey.
En tout cas c’est comme ça que je procèderai :

  1. Ton premier Web Request fait ton action (fermer les volets)
  2. Ton second Web Request change l’état de ton virtuel binaire

Cela répond à ton interrogation ?

Oui pour récupérer l’info dans Jeedom.
C’est pour connaître ce qui a été réalisé en début de scénario afin de déclencher la suite en fonction de celui-ci.
Voici grosso modo le scenario :
→ Il fait bientôt Nuit.
→ déclenchement du scénario qui exécute le WebRequest vers VoiceMonkey.
→ je suis présent dans la maison, j’entends donc le ASK Alexa alors :

  • si réponse « Oui » les volets se ferment et je reçois la confirmation via Telegram après avoir vérifié dans le scénario l’état des différents volets. Le scénario est stoppé !
  • Si réponse « Non » Alexa me dit qu’elle me laisse le soin de fermer les volets. Le scénario est stoppé !

→ je suis dehors à bricoler par exemple, je n’entends pas le ASK :

  • si « Pas de réponse » je souhaite que la suite du scenario m’envoie le ASK via Telegram ou je pourrais répondre Oui/Non

Donc pour dérouler la suite du scénario si je réponds « Non » ou s’il n’y a pas de réponse au ASK d’Alexa tu me préconise de créer un virtuel qui sera incrémenté (0 ou 1) en fonction de la réponse et que je pourrais utiliser pour la suite du scénario ?
C’est là ou je bloque car le scénario coté Jeedom ne sait pas si une réponse ou pas a été faite.

Je ne sais pas si je suis très clair :wink:

Ok je comprends.
Malheureusement si pas de réponse, pas de suite au déroulement du flow. Du moins c’est ce qu’il me semble.
Il y a une action si oui, ou si non, mais pas si pas de réponse.
Où alors je n’ai pas vu.
Ce que tu peux envisager, c’est le lancement d’un scénario qui ferait le test sur ton état, après X minutes et au besoin relance le flow.
Car le Web Request peut être une commande, mais aussi un scénario.

1 « J'aime »

En s’appuyant sur LastScenarioExecution, tu peux savoir si ton scénario de fermeture a été exécuté, sinon tu relances ton flow

1 « J'aime »

J’en profite pour préciser que dans le cas d’un Web Request devant lancer un scénario, la syntaxe est :

https://xxxxxxxx.fr/core/api/jeeApi.php?apikey=VOTRE-API-KEY&type=scenario&id=ID-DU-SCENARIO2&action=start

Celle relative à l’exécution d’une commande est :

https://xxxxxxxx.fr/core/api/jeeApi.php?apikey=VOTRE-API-KEY&type=cmd&id=ID-COMMANDE

Et votre clé API est disponible dans Réglages → Système → Configuration → API

1 « J'aime »

Merci pour ce complément :slight_smile: `
Sinon as-tu une astuce pour définir le volume de la voix d’Alexa dans Voice Monkey car je n’ai pas trouvé dans le paramètre du Flow ?

Non il n’est pas possible de gérer le volume depuis Voice Monkey.
Sur la FAQ de VM , la question a été posée et la réponse est que ce dernier doit être réglé au niveau d’Alexa, donc de l’application.
Et la seule possibilité via VM, c’est de passer par leur Routine Trigger API.
Au même titre que les Flows, ça te permet de lancer des routines définies dans Alexa.
Tout ça pour dire, qu’il préconisent de créer une routine qui gère le volume et ensuite d’appeler cette routine via leur Routine Trigger.
Ça fait un peu compliqué pour ne gérer que le volume, c’est pour ça que j’ai rajouté le mode Whisper dans faire parler Alexa.
Mais sinon ces Triggers sont bien pratiques pour appeler d’autres routines plus poussées, là aussi sans passer par un plugin.

1 « J'aime »

Salut

J’ai réfléchi à ton besoin en cas de non réponse

Je pense qu’il y a moyen de faire quelque chose de plus précis que de se baser sur LastScenarioExecution.
Ma première suggestion d’un binaire était sur la bonne voie, mais il manquait une condition.
Answer Yes = 1
Answer No = 0
Il suffit de rajouter Answer None = -1 (par exemple) et on a un virtuel de ce type :

Qui permettra de gérer l’état des réponses données dans le ASK.

Dans ton ASK tu as aujoud’hui :

  • Answer Yes → Web Request fermer les volets
  • Answer No → Alexa te laisse le soin de les fermer

Ce que je te propose c’est :

  • Answer Yes → Web Request fermer les volets + Web request Answer Yes (du virtuel)
  • Answer No → Alexa te laisse le soin de les fermer + Web Request No (du virtuel)
  • Pas de réponse → l’état du virtuel restera à Answer None (= -1) et relancera le scénario après X minutes.

Ce qui pourrait donner :

1 « J'aime »

Super merci pour ton aide :index_pointing_at_the_viewer: Je viens de tester le principe du Virtuel qui est incrémenté par un Web Request reçu de VoiceMonkey et fonction d’un Oui ou d’un Non et c’est parfait pour dérouler le scénario en fonction des réponses faites à Alexa :+1: :clap:

1 « J'aime »

Parfait si ça colle à ton besoin :+1:
Concernant ton interrogation sur le volume, dans le sujet Faire parler Alexa, @networks514 avait proposé une solution en créant plusieurs devices

A voir si cela pourrait le faire.

1 « J'aime »

Merci pour cette info, je l’avais survolé mais sans plus…