Geeek - Le blog Geek & High-tech

Vous souhaitez créer votre propre chatbot pour pouvoir piloter votre domotique par la voix ? C'est possible très facilement grâce à Google Home et la plateforme de développement de chatbot Dialogflow !
Dialogflow est l'outil de chatbot API.AI racheté par Google en 2016 et qui permet en quelques clics de créer un chatbot intégrable avec Google Home, Alexa, Facebook et bien d'autres outils en ligne.

dialogflow-intents.png

Pour permettre à Dialogflow de communiquer avec votre solution domotique pour piloter votre maison, Google a mis en place la notion de "fullfillment".

dialogflow-google-home-architecture.png

Dialogflow réalise un appel HTTP au service que vous lui avez défini (dans la partie paramètre du chatbot) à chaque intention configurée pour répondre un "fullfillment". Dans mon cas, le webservice répondant au "fullfillment" est hébergé sur un serveur Node-Red assurant la gestion de l'ensemble de ma domotique et hébergé sur un Raspberry Pi localisé derrière ma Freebox.

dialogflow-fullfillment-config.png

dialogflow-fullfillment.png

Afin de simplifier l'intégration de votre domotique avec cette API Dialogflow obligatoire pour permettre de recevoir des requêtes et y répondre, il existe un module Node-Red permettant d'exposer très facilement une API compatible. Ce module se prénomme node-red-contrib-google-action-dialogflow-http, il existe en version HTTPS : node-red-contrib-google-action-dialogflow comme en version HTTP.

Pour que ce service Node-Red puisse être appelé par les serveurs de Dialogflow, il est nécessaire :

  • D'utiliser soit d'une IP fixe sur Internet, soit d'un serveur dynamique DNS comme Dyndns par exemple.
  • Que le service soit accessible sur Internet en HTTPS avec un certificat signé par une autorité publique.
  • De configurer votre routeur Internet (freebox, livebox ...) pour qu'il transmette les requêtes HTTPS reçues vers votre serveur NGINX assurant la terminaison SSL.

Après avoir testé que votre service Nginx est correctement accessible depuis Internet, il vous faut un certificat SSL afin que Dialogflow accepte de transmettre les requêtes de "fullfillment". Le plus simple est de configurer un certificat gratuit obtenu auprès de Letsencrypt. Vous trouverez de nombreuses documentations en ligne détaillant la procédure de configuration d'un reverse-proxy NGINX sur un Raspberry Pi.

Une fois le reverse proxy fonctionnel, vous devez maintenant installer au sein de votre installation Node-Red le module node-red-contrib-google-action-dialogflow-http pour permettre à votre serveur Node-Red de recevoir les requêtes de fullfillment transmises par DialogFlow.


$ npm install node-red-contrib-google-action-dialogflow-http

Dès le module installé et le noeud Node-Red "Google Action Dialogflow Http" déployé, vous observerez que ce module possède une configuration si vous cliquez dessus. Par défaut ce nœud démarre un mini service Web écoutant sur le port 8089. C'est justement sur ce port qu'il faut que Nginx transmettre l'ensemble des requêtes en mode reverse proxy SSL.

dialogflow-node-red-config.png

Voici un exemple de configuration de vhost NGINX intégrant les certificats SSL générés par Letsencrypt.


server {
        listen 80 default_server;
        server_name mondomaine.com;

        root /var/www/html/;

        location ~ /.well-known {
                allow all;
        }
}

server {
      listen 443 ssl default_server;
       server_name mondomaine.com;

       root /var/www/html/;

       ssl_certificate          /etc/letsencrypt/live/mondomaine.com/fullchain.pem;
       ssl_certificate_key      /etc/letsencrypt/live/mondomaine.com/privkey.pem;
       ssl_trusted_certificate /etc/letsencrypt/live/mondomaine.com/fullchain.pem;

       location / {
                proxy_pass    https://localhost:8089;
                auth_basic "Restricted Content";
                auth_basic_user_file /etc/nginx/.htpasswd;
       }
}

Vous remarquerez l'utilisation d'une authentification de type basic auth pour protéger le service d'appel illicites par des hackers.

Une fois le service configurez, essayez de positionner un composant de type "Switch" capable de router chaque intention reçue vers des actions Node-Red. Dans mon cas j'utilise principalement des requêtes REST de type GET pour ouvrir et fermer mes volets et stores.

dialogflow-node-red-config-switch.png

Vous noterez que l'intention reçue transmise par Dialogflow se cache dans l'objet ci-dessous et que le switch utilise cet objet pour réaliser les bonnes actions en fonction de l'intention reçue.

msg.body_.result.metadata.intentName

Pour tester que vous recevez bien les requêtes de "fullfillment", assurez-vous que votre Google Home soit configuré avec votre compte Google et assurez vous que votre chatbot Dialogflow ait bien le service d'intégration Google Home actif depuis l'onglet intégration du portail Dialogflow.

dialogflow-integration.png

google-action-config.png

Un point d'attention dans Google Actions est de ne pas publier votre bot, sinon il risque d'être visible par tous les utilisateurs de Google Home si il passe les étapes de validation de Google ...

Si tout est OK, essayez de solliciter votre chatbot sur votre Google Home en précisant à votre Google Home :

OK Google, parler avec 'le nom de votre bot'

Le nom de votre bot est le nom que vous avez précisé dans la page de configuration de Google Actions lorsque vous avez activé l'intégration Google Home depuis le portail de DialogFlow.
Par défaut, c'est l'intention d'accueil de votre chatbot qui vous accueillera.

Le seul point noir de cette intégration est qu'il semble être aujourd’hui impossible de solliciter un chatbot Google Home en version de développement directement sans la phase de confirmation de Google indiquant que vous allez parler à un robot de test. Dialogflow a été conçu pour construire de chatbots diffusés à grande échelle et n'est pas tout à fait adapté à la construction de chatbots personnels comme c'est le cas dans cet exemple.


Vous êtes correctement abonné à Geeek
Bienvenue ! Vous êtes correctement connecté.
Parfait ! Vous êtes correctement inscrit.
Votre lien a expiré
Vérifiez vos emails et utiliser le lien magique pour vous connecter à ce site