10 août 2018

Portage d'applications Google Assistant sur Alexa

Dans le cadre de la sortie d'Alexa en France courant mai 2018, Amazon fait le forcing pour récupérer le retard de commercialisation de ses enceintes Echo par rapport à celles de Google arrivées sur le marché un an plus tôt. Pour ce faire, elle invite les développeurs à réaliser des Skills et pour cela, Amazon offre un Echo Dot à toute personne réalisant une skill sur des thèmes fixés par Amazon entre le 1er juillet et le 31 août 2018. De plus, si 200 personnes téléchargent cette skill dans son contexte Web Alexa, le développeur recevra en plus, une enceinte Echo. Ayant déjà réalisé 2 applications Nodejs pour Google Assistant, je vais porter ces deux applications sur AWS pour essayer d'avoir, à minima, une enceinte Echo Dot. Les détails de l'offre ponctuelle d'Amazon sont données (ici). A priori, l'application Google Assistant nommée "Calendrier des citations" ne rentre pas dans celles pouvant obtenir l'enceinte Echo, mais seulement une enceinte Echo Dot. Seule l'application Google Assistant nommée "Calendriers historique " rentre dans la catégorie des jeux de connaissance et peut prétendre à concourir pour obtenir l'enceinte Echo.


Après un mail envoyé au support développeur Alexa, j'ai obtenu le lien (formulaire web) pour enregistrer la skill réalisée afin d'obtenir, si elle est validée, un périphérique Echo Dot 2, voire un Echo, si ma skill est téléchargée plus de 200 fois. A vrai dire, il ne s'agit pas d'une demande spécifique à effectuer via un formulaire quelconque, mais le fait de publier une skill entre début juillet et fin août, permet si l'application (skill) est certifiée d'obtenir un Echo Dot. Si de plus, cette skill appartient à l'une des catégories de jeux cités (ex: connaissance) et qu'il est sélectionné 200 fois dans les 30 jours suivants sa certification, une enceinte Echo sera fournie gratuitement.

Pour rappel, l'architecture technique pour les assistants vocaux d'Amazon est la suivante (semblable à celle de Google et inversement).


Rappel de la logique d'ensemble relative aux échanges avec un assistant vocal.


En dehors de la console développeur (dernière version mai 2018) propre aux skills Alexa pour la partie déclarative des intentions, des utterances, des slots, des interfaces, etc. Une réelle évolution de la console rend maintenant nettement plus facile la réalisation de la partie amont de la skill (équivalent, voire meilleur que la console Dialogflow liée à Google Assistant)  Il est important de lire la documentation, voir à minimum, savoir naviguer dedans (ici). Toutes les informations nécessaires y sont.


Pour la partie Webhook sous Nodejs, le SDK v2.0 sera utilisé. Ce dernier a été officiellement publié en avril 2018 et facilite grandement les développements. Bien que la logique globale soit identique entre les 2 environnements (Google Assistant et Alexa), il y a quelques différences. Elles sont les suivantes :
  • La couverture des items de type Date est différente entre GA et Alexa,
  • La notion de prompt de Google Assistant n'existe pas sous Alexa, mais la notion de Hint pour les périphériques avec écran fait à peu près la même chose (à vérifier, toutefois, car il semble que ne peut pas cliquer dessus),
  • Avec Alexa, il est possible de gérer des médias avec Display (Echo Spot et Show),
  • La librairie SSML sous Nodejs pour Google Assistant et Alexa est différente,
  • L'Intent system "LaunchRequest" n'a pas de nom et est un type de request,
  • Avec les devices avec display, il y a plusieurs Intents System à gérer. Les affichages sont à gérer à l'aide de BodyTemplate et ListTemplate,
  • Les variables de session ne sont pas durables (non persistantes) durant toute la durée de session, comme avec Google Assistant. Il faut impérativement les gérer dans chaque Intent,
  • L'interaction sans nom de skill permet aux clients d'interagir avec Alexa sans appeler une compétence (skill) spécifique par nom, ce qui facilite une plus grande interaction avec Alexa, car les clients ne savent pas toujours quelle compétence (skill) est appropriée. Lorsque Alexa reçoit une demande d'un client sans nom de compétence (skill), par exemple "Alexa, jouez des sons relaxants avec des grillons", Alexa recherche des compétences susceptibles de répondre à la demande. Alexa détermine le meilleur choix parmi les compétences éligibles et transmet la demande à la compétence. Cette fonctionnalité est disponible en beta pour les USA seulement.
  • Impossible de récupérer sous forme de texte le "raw data" de l'expression utilisateur avec le SDK Alexa. Il y a l'Intent SearchQuery qui pourrait s'y apparenter, voire Intent FallBack ne sont pas (encore) disponibles pour la langue française,
  • En raison du nombre de devices possibles (audio, Echo display + smartphone), il est important de bien distinguer chaque chaîne de caractères, avec par exemple:
          - Audio: speechTextSSML et speechPromptSSML (Prompt signifiant; relance) pour tout type d'enceintes Echo et smartphone,

          - Display: Entête avec rTextT et un ensemble richText avec rText1, rText2 et rText3 (r = riche) pour les enceintes avec écran. Cela permet de mettre des instructions HTML (réduites) associées aux textes,

           - Smartphone: Entête avec pTextT et plusieurs textes avec pText1, pText2 et pText3 (p = plain) pour les smartphones. Il est possible d'ajouter des caractères à la ligne "\n" dans les textes.

Les textes des parties display sont les suivants (détails : ici):
  • Spot et Show, les textes affichés sur l'écran sont liés au template retenu avec 7 pour les bodyTemplate et 2 ou 3 pour les listTemplate. Le logo affiché est directement pris en compte par Alexa.


  • Smartphone (les libellés de texte donnés sont des exemples, sachant que le nom du skill est affiché par Alexa et pas par la programmation du skill. De plus, il n'y a pas d'images affichées dans ce cas de figure). 


  • Comme sur Google Assistant, avec Alexa il y a 2 modes d'appel (direct et conversationnel), exemples:
          - (direct): Alexa ouvre | lance  < nom skill > et | pour action (propre au skill)

          - (conversationnel): Alexa ouvre | lance < nom skill >

Le portage sous Alexa des 2 applications réalisées en 2017 sous Google Assistant a été réalisé assez facilement. La première application nommée "Calendrier des citations" a été certifiée et publiée sur le store (fr) des Skills Alexa (ici) et la seconde nommée "Calendrier historique" est en cours de certification.

save image

Aucun commentaire:

Enregistrer un commentaire