Faire parler Alexa sans plugin

Préambule :

Si comme moi vous utilisez essentiellement la fonction Faire parler Alexa et que vous souhaitez vous affranchir d’un plugin et de cookies récalcitrants, alors cette alternative pourra peut être vous intéresser/dépanner.

Primo, j’ignore si cette proposition durera dans le temps, puisque dépendante d’un éditeur tiers.
Deuxio, elle n’est pas faite pour vous détourner travail fait par les devs sur les plugins gravitant autour d’Alexa.

Je ne suis pas développeur, ni codeur, je me suis basé sur des exemples simples pour rédiger ces quelques lignes, autrement dit, c’est à prendre en l’état :wink:

Les grandes lignes sont :

  • La skill Voice Monkey
  • La console Voice Monkey
  • Le côté Jeedom

La version gratuite est suffisante pour les besoins de "faire parler, parler à, et lancer des routines" Je n’ai d’ailleurs exploré que ces possibilités, mais vous verrez que bon nombre d’autres options sont disponibles.

Avant de pouvoir commencer à utiliser Voice Monkey, vous devez effectuer les étapes suivantes :

  1. Activez la Skill Voice Monkey en allant sur https://www.amazon.fr/dp/B08C6Z4C3R
  2. Acceptez de lier la Skill à votre compte Amazon et acceptez les autorisations pour les notifications.
  3. Connectez vous sur Voice Monkey - Sign In
  4. Terminez la configuration et créez vos "Monkeys", des sonnettes connectées virtuelles, chacune munie d’une URL d’API que vous pouvez utiliser pour déclencher des routines.
  5. Créez une routine et utilisez le "Monkey" que vous venez de créer en tant que déclencheur.

Astuce: Pour éviter l’annonce, sur l’application Alexa ne pas oublier de désactiver les "Notifications de coup de sonnette" sur votre appareil.

Vous devez créer autant de devices/routines que vous avez de Echo. Cette opération ne sera à faire qu’une seule fois.
Assurez-vous de leur bon fonctionnement en agissant sur le bouton TEST depuis la console Voice Monkey.

Ceci étant fait, vous pourrez créer des Flows (espèces de scénarios succincts*), des Triggers (déclencheurs pour routines) et faire parler Alexa, ce que nous allons voir dans ce sujet.

* J’ai d’ailleurs détourné leur utilisation pour en faire des "Ask", puisqu’au travers de ces Flows, Alexa peut vous poser des questions. (Ça pourra faire l’objet d’un autre sujet)

Pour faire parler Alexa depuis la console Voice Monkey, il faut se rendre dans le menu APIv2 puis Announcement API

Après avoir choisi votre device et saisi le texte à prononcer, cliquer sur Send request

Si vous entendez parler votre device, c’est ok :+1:

Consultez cette même page et vous verrez l’URL qui a été utilisée sous la forme :

https://api-v2.voicemonkey.io/announcement?token=xxxxxxxxxx&device=monkey-salon&text=Ceci%20est%20un%20test

Où sont affichés votre token, le device vers lequel est envoyé le message et pour finir le message
En utilisant cette API on peut donc envoyer un message de notre choix sur un device désigné.

Reste à demander à Jeedom de rédiger la syntaxe de cette URL pour faire parler notre device à notre convenance en faisant varier le texte du message et accessoirement le device de destination.

J’ai décidé de procéder ainsi :

  • Le message sera saisi dans un tag
  • Un scénario récupérera ce tag et l’intégrera dans un bloc code où sera déjà écrit en dur votre token*.
  • Le démarrage du scénario rédigera l’URL correspondant et l’exécutera, faisant ainsi parler Alexa.

* Votre token peut également être copié depuis Voice Monkey - Sign In

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

$tags = $scenario->getTags();
$Voice_Message = $tags['#Voice_Message#'];
# Si le message est vide ou omis
if (empty($Voice_Message)) {
	$Voice_Message = "Désolé je n'ai rien à dire";
}
# Si le device est vide ou omis, envoi sur le device par défaut
$Voice_Device = $tags['#Voice_Device#'];
if (empty($Voice_Device)) {
	$Voice_Device = "monkey-salon";
}
$scenario->setLog('DEBUG DEVICE: '.$Voice_Device);
$Encode_Message = urlencode($Voice_Message);
$scenario->setLog('DEBUG ENCODE: '.$Encode_Message);

$url_VM = 'https://api-v2.voicemonkey.io/announcement?token=METTRE-ICI-VOTRE-TOKEN&device=' .$Voice_Device .'&text=' . urlencode($Voice_Message);
$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);

Pour être exécuté correctement, ce scénario a besoin de 2 tags:

  • Le premier Voice_Message est le message désiré
  • Le second Voice_Device est le nom du device de destination

Dans votre scénario où vous faisiez appel à la commande "Faire parler Alexa", remplacez la par une commande de type scénario. Scroller pour sélectionner le scénario Voice Monkey Announcement API, et choisir Démarrer (sync)

Dans la partie Tags du scénario, ajouter:
Voice_Message="mon message de test" Voice_Device=nom-de-votre-monkey

Pour des raisons pratiques, plutôt que de saisir:
Voice_Message="mon message de test" ce qui n’est pas forcément pratique dans la zone Tags du scénario, on peut au préalable créer un tag supplémentaire qui contiendra votre texte.
Tag → MonMessage → mon message de test de ce #sjour#
La syntaxe sera alors:
Voice_Message="tag(MonMessage)" Device=nom-de-votre-monkey

C’est d’autant plus conseillé si le message contient des calculs ou infos.
Si vous entendez Alexa vous dire "Désolée je n’ai rien à dire", c’est que votre Tag Voice_Message était vide.

J’admets que c’est plus contraignant car il faut saisir 2 actions pour faire parler Alexa (le tag + le lancement du scénario), mais on ne dépend plus d’un plugin couplé à Alexa, mais d’Alexa liée à une skill tierce. A voir ce que vous jugerez le plus pertinent.

Je fonctionne ainsi depuis les dernières pannes du plugin Alexa-api et même si il semble être de nouveau opérationnel, pour l’heure je vais rester sur cette alternative qui répond à mon besoin.

12 « J'aime »

Top nickel merci pour le partage, je ne m’en sortais plus du plugin alexa api ces derniers jours.

J’étais passé à côté d’un élément.

Il faudrait indiquer que la création de devices dans la console Monkey crée des appareils de type autres dans l’appli Alexa

Et lorsque tu ouvres l’appareil dans l’appli Alexa, il faut effectivement décocher les notifications du coup de sonnette

Donc si on crée un device Salon dans Monkey, on aura un appareil Salon dans Alexa,

ÉDIT : cocher les appareils pour les annonces n’a aucun effet, je pensais pouvoir annoncer sur plusieurs appareils

Pour faire une annonce simultanée sur plusieurs appareils, il faut faire autant de routine que d’appareils cibles.
On peut créer par exemple un device MonkeyUrgence dans la console qui sera vu en tant qu’appareil, dans la routine le choisir dans Quand, et dans Écouter Alexa depuis choisir l’appareil cible. On peut aussi mettre le volume

Et dans un scénario jeedom, choisir le device MonkeyUrgence



Etc.

Sinon comment gères tu le volume ? Dans la routine ?

C’est bien possible :wink:
Depuis que j’ai mis ça en place, je n’ai pas retouché le plugin Alexaapi et vu que mon utilisation de ce plugin est très limitée, je ne risquais pas de le voir. Surtout s’il faut relancer un scan pour les faire apparaître.

Edit: j’avais mal lu :wink:
Dans l’application en effet ça crée un appareil où c’est là qu’on désactive la notification.

Pour le volume, en effet rien ne permet de le gérer depuis Voice Monkey, il faut passer par des routines dans l’application. Mais là encore, c’est un truc que je ne touche quasi jamais, alors ça ne me dérange pas.
Je me contente de basculer mes messages en mode normal ou chuchotement en fonction de l’heure.

J’ai laissé tous mes échos de sélectionnés et ça ne gêne en rien puisque dans mon scénario je choisis quel device je fais parler.

Merci pour ton retour.
Au pire je crée x device de type :
salon_low
salon_medium
salon_high

Comme ça je paramètre dans la routine le volume du device concerné.
Et comme c’est rapide à faire, ça me permettra de lancer mes scénarios avec le bon volume attendu (une annonce standard vs une alerte domestique …)

En tout cas merci pour le partage, j’adopte dans l’attente de voir les évolutions d’Alexa-API (V1/V2) et la galère des cookies …
À+

1 « J'aime »

ÉDIT : j’ai corrigé mon post sur les annonces simultanées, j’avais faux…

1 « J'aime »

J’ai vu que pour faire parler Alexa sur plusieurs devices, il faut créer un Monkey de type Groupe

Je l’ai baptisé Monkey Partout

Ensuite au niveau de l’appareil sur Alexa, désactiver la notification

Et enfin créer autant de routines que d’Echo, toutes ayant pour même déclencheur Monkey Partout


Au niveau de l’appel via l’API cela ne fera qu’un device à sélectionner, mais le message vocal sera bien diffusé sur toutes les enceintes du groupe.

2 « J'aime »

J’ai un probleme, la routine ne se lance pas automatiquement dans alexa. Si je le fais manuellement dans alexa la bonne annonce de jeedom est lancée. J’ai du oublié un paramètrage ! mais où ?
Merci pour votre aide.

Bonjour :wink:

Je ne comprends pas ta demande !
As-tu fait le test depuis la console Voice Monkey comme évoqué ? Cela fonctionne-t’il ?

Dans l’application Alexa, il n’y a que 2 choses :

  • l’appareil (là où on coupe la sonnette de notification)
  • La routine qui lance la skill Voice Monkey lorque "quelqu’un" appuie sur cette pseudo sonnette.

Depuis l’application Alexa on ne lance pas d’annonce, on ne fait qu’exéctuer une routine

Justement jeedom va bien ecrire le texte mais ne lance pas la routine.(enfin je pense !)

le test depuis voice monkey fonctionne bien

Lorsque tu as recopié le bloc code pour le mettre dans ton scénario, as-tu pensé à y mettre ton token en lieu et place de:

$url_VM = 'https://api-v2.voicemonkey.io/announcement?token=METTRE-ICI-VOTRE-TOKEN&device=' .$Voice_Device .'&text=' . urlencode($Voice_Message);

Oui le bloc code a été modifié avec le bon token. J’ai bien le bon texte dans le message. Il manque l’activation de la lecture du message coté alexa. C’est fait comment ?

Tu peux poster le log de ton scénario qui est supposé poster le message ?

Depuis la console Voice Monkey, dans APIV2 → Announcement API, si tu saisis un message et que tu sélectionnes ton ECHO de destination, cela fonctionne ?

log du scenario :

$tags = $scenario->getTags();
$Voice_Message = $tags['#Voice_Message#'];
# Si le message est vide ou omis
if (empty($Voice_Message)) {
	$Voice_Message = "Désolé je n'ai rien à dire";
}
# Si le device est vide ou omis, envoi sur le device par défaut
$Voice_Device = $tags['#Voice_Device#'];
if (empty($Voice_Device)) {
	$Voice_Device = "monkeycheminee";
}
$scenario->setLog('DEBUG DEVICE: '.$Voice_Device);
$Encode_Message = urlencode($Voice_Message);
$scenario->setLog('DEBUG ENCODE: '.$Encode_Message);

$url_VM = 'https://api-v2.voicemonkey.io/announcement?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&device=monkeycheminee' .$Voice_Device .'&text=' . urlencode($Voice_Message);
$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);

Sur la console Voice monkey si je saisi un message, il est bien lu par mon ECHO.

Ce n’est pas le log du scénario, mais le code qui est supposé être contenu dans un bloc code du scénario !

PS: efface ton token de ton précédent message :wink:

Côté application Alexa, tu as bien précisé ton Écho dans ta routine ?

Tu as rajouté des infos dans le code qui n’ont pas lieu d’être là, en l’occurence &device=monkeycheminee

La ligne de code doit être :

$url_VM = 'https://api-v2.voicemonkey.io/announcement?token=METTRE-ICI-VOTRE-TOKEN&device=' .$Voice_Device .'&text=' . urlencode($Voice_Message);

Il n’y a pas à préciser le device à la suite du token. Cette information sera renseignée directement par la variable $Voice_Device

Effectivement en enlevant le nom du device à la suite du token ça fonctionne.

Merci pour votre aide … très précieuse.

2 « J'aime »