Alexa e Google Home
basi per una loro integrazione
Anche in Netfarm è nata la necessità di studiare ed integrare i servizi Alexa e Google Home, è un mondo interessante che apre sicuramente le porte a tantissimi servizi e a tante possibilità nel prossimo futuro.
Rispetto ad altri mondi dell'informatica dove si sono già definiti degli standard, qui l'evoluzione degli algoritmi fa si che le funzionalità implementate vadano sempre riviste e mantenute seguendo le direttive dei due leader di settore.
Quanto scritto in questo articolo è valido per lo stato attuale della situazione, se nel prossimo futuro dovessero cambiare le cose, sarà mia cura mantenere questo articolo aggiornato. I due servizi, anche se simili, necessitano inevitabilmente di essere analizzati separatamente per poi poter fare una comparazione finale.
Alexa
Quando parliamo di integrare Alexa quello che si fa effettivamente è creare una Skill. Le skills permettono di dare comandi ai dispositivi, la tipologia di comandi dipende dal tipo di Skill integrata. Le tipologie sono:
CUSTOM SKILL
Permettono la comunicazione con i propri servizi mappando determinate frasi per dare delle riposte pertinenti, non sono appropriate per comunicare con un singolo dispositivo perchè non c'è la possibilità di associare un identificativo per dare comandi o saperne lo stato.
VIDEO SKILL API
Per gestire la visione di un servizio video sulla propria TV, con la possibilità di dare comandi come mettere in pausa, cambiare canale, etc...
FLASH BRIEFING API
Per dare news rapide, altamente specifica e poco customizzabile.
MUSIC SKILL API
Analoga alle Video Skill API, queste skill sono utili per la gestione di servizi audio.
SMART HOME SKILL API
E' il tipo di skill necessaria se si vuole comunicare con device fisici.
Integrazione delle Smart Home Skill
Per la maggior parte dei servizi da voler dare all'utente, le due tipologie di skills utili sono le CUSTOM SKILL e le SMART HOME SKILL. Ho avuto modo di andare nel dettaglio dell'utilizzo sopratutto di quest'ultima e di seguito illustro la mia esperienza.
Prima di tutto, per l'integrazione delle SMART HOME SKILL, consiglio a chi è interessato di andare a leggere nel dettaglio quanto scritto a questa pagina da cui ho preso il seguente flusso:
Questa immagine spiega il flusso di un comando dato per la gestione di un dispositivo, spieghiamo i tre attuatori in esso presenti:
Alexa Cloud
Si occupa di acquisire i comandi vocali o da tastiera dati dagli utenti, di passarli alla Lambda definita dal singolo produttore e, una volta avuto una risposta di ritorno da quest'ultima, di dare un esito del comando iniziale al dispositivo Alexa che lo aveva scatenato. Per sfruttare il servizio il produttore dovrà creare un account Amazon Developer (da questo link) e creare una skill di tipo Smart Home Skill
AWS Lambda
Tra i tanti servizi di Amazon AWS, è necessario abilitare e poi configurare quella che viene definita una "Lambda" ovvero del codice che se richiamato viene eseguito per la gestione di un servizio. Quindi ogni produttore deve creare un proprio account AWS ( da questo link), creare una Lambda (sul server irlandese per l'Europa) e configurarla affinché gestisca la comunicazione tra Alexa Cloud e il backend del produttore.
Smart Device Manufacturer Cloud
E' il backend del produttore che si occupa di comunicare con i dispositivi da lui gestiti e di tornare una risposta di successo o meno alla Lambda.
E' da notare che il flusso sopra descritto è in tutte le sue fasi autenticato e porta con se dietro l'informazione data dal token di accesso per l'utente e dall'id del dispositivo dato dal produttore per un determinato device.
L'attivazione di una Skill prevede quindi che ci sia una pagina di autenticazione creata dal produttore che fornisca un token di accesso per l'utente. Per gestirla si deve entrare nella pagina di impostazioni della propria Skill ed impostare un Authorization URL che porti ad una pagina di autenticazione impostata dal produttore seguendo le indicazioni qui fornite.
Una volta collegato l'account viene effettuata in automatico da Alexa Cloud una discovery verso la Lambda che serve a fornire tutte le informazioni sui singoli dispositivi, comprese le capabilities ad esso associate.
Le capabilities sono proprio le azioni che un utente può dire di compiere ad un singolo device, la lista completa la si può trovare qui, ma ci sono delle limitazioni date dalla lingua ed altre date dalla mia esperienza diretta che troverete nei paragrafi successivi di questo articolo.
Da notare che essendo la Lambda un servizio di AWS, ci sono dei costi, bassi ma molto variabili, che dipendono dal numero degli utenti previsti e principalmente dalla velocità da parte del server del produttore di rispondere alle richieste (la Lambda più rimane attiva in attesa, più costa).
Google Home
L'integrazione di Google Home ha parecchie analogie con Alexa, ma non richiede un middleware come Lambda AWS, il servizio prevede solo una comunicazione tra Google Assistant e il backend del produttore. La pagina da cui avere informazioni più dettagliate è questa.
L'immagine chiarisce bene il flusso. Da notare che il flusso continua all'inverso per notificare all'utente l'avvenuta esecuzione o meno del comando richiesto.
Creazione di una Action
Per la creazione di una Action (l'equivalente di una Skill di Alexa) si deve avere prima di tutto un account Google e quindi creare un nuovo progetto dalla Actions Console e dato un nome di deve selezionare come tipologia: Smart Home.
Allo stesso modo di Alexa, anche in questo caso è necessario impostare una pagina che permetta all'utente di fare il collegamento tra l'account del produttore e l'account Google Assistant dell'utente.
Sarà da impostare anche un Fullfilment URL che punterà al backend del produttore, il backend dovrà aver integrato le API di Google Home relative al proprio tipo di backend per poter gestire le tre tipologie di chiamate che arriveranno da Google Assistant:
SYNC
Richiesta equivalente alla discovery di Alexa, permette di conoscere i dispositivi controllabili dall'utente.
Query
Richiesta per ottenere lo stato di uno o più devices.
Execute
Richiesta per l'esecuzione conemporanea di uno o più comandi su uno o più device differenti ( questo anche se previsto dalle API, nella realtà attuale del servizio, almeno in Italia, funziona solo per un singolo device e un singolo comando.
Una visione più dettagliata dei comandi e come essi vengano gestiti la trovate qui, E Un esempio di come impostare il vostro backend NodeJS lo trovate a questo link.
L'equivalente delle capabilities di Alexa sono in questo caso i Traits che definiscono i comandi eseguibili da un singolo device.
Limiti dei servizi e considerazioni
Devo dire che la configurazione del servizio Alexa richiede più passaggi, questo principalmente perché richiede di collegare tra loro tre servizi, di creare 2 account e la sequenza di azioni da fare non è lineare. Inoltre il codice da gestire è separato tra la Lambda e il backend del produttore.
Google d'altro canto velocizza tanto la creazione di una Action di test, creata la Action e dato Fullfilment URL e pagina di autenticazione, la gestione lato codice è tutta gestibile da backend.
Sempre lato codice è bene far notare come le due piattaforme stiano man mano convergendo verso un unico standard, questo è stato dichiarato anche ufficialmente ( un link su un articolo riguardo l'argomento) e si può notare già da come è gestita l'autenticazione iniziale dell'utente: per entrambe le piattaforme, a meno del nome dato ad un paio di parametri, è identica.
Le principali problematiche riscontrate sono due e sono legate tra loro a stretto giro:
limiti al tipo di device supportati
limiti di comprensione delle frasi per determinati comandi
Chi ha un dispositivo di questi in casa ragionandoci un attimo se ne renderà conto, normalmente i comandi dati sono legati all'accensione/spegnimento di interruttori, alla gestione della temperatura di casa, al cambio del canale sulla propria televisione. Se si esce fuori da questi ambiti e si vogliono dare dei comandi più custom sui propri dispositivi (o se il proprio device non è tra le categorie principali quali interruttori, termostati, TV e pochi altri) si scopre un'altra realtà, spesso i comandi non vengono recepiti a dovere e determinate parole non sono utilizzabili.Anche la rappresentazione del proprio dispositivo, nel caso di Google, è limitata ad una lista definita e se il proprio device appartiene ad una categoria non mappata la sua rappresentazione non sarà adeguata.
I problemi di comprensione invece sono legati anche alla lingua, la parte Cloud (di Amazon e Google) che li gestisce è aggiornata giornalmente e questo fa si che la qualità del servizio non sia costante, questi problemi li ho riscontrati sopratutto in italiano. Lavorando più giornate a distanza di tempo su questi servizi ho potuto testare come certe frasi utilizzate smettano di funzionare da un giorno all'altro. Ad onor del vero c'è da dire anche che comandi standard come azione/spegnimento di un interruttore funzionano adeguatamente.
Conclusioni
Anche se entrambi i servizi sono ampiamente utilizzati e certe funzionalità non danno particolari problemi, quando si hanno necessità o idee fuori dagli standard, questi risultano poco maturi e limitati.
Do però per scontato che questi problemi saranno risolti in un prossimo futuro perché il parco di utenti e gli interessi sono tali da far puntare tanto le grandi aziende sul mondo Smart Home.
Alexa e Google Home, API per la gestione dei devices
c