Code, Learn

Alexa skill from scratch: dalla definizione allo sviluppo

4 Febbraio 2020 - 6 minuti di lettura

Alzi la mano chi di recente non ha mai sentito parlare di Google Assistant ed Amazon Alexa.

Tramite questi assistenti intelligenti è possibile dialogare con i dispositivi di Google ed Amazon per riprodurre brani musicali, organizzare il proprio calendario e molto altro.

In particolare per Alexa queste funzionalità prendono il nome di skill, alcune già disponibili e pronte all’uso e altre sviluppate e messe a disposizione.

Nell’articolo curato da Marco Ranica verrà spiegato il significato della parola skill, quali sono le sue caratteristiche e soprattutto come svilupparne una da zero.

Nel paragrafo Riferimenti troverete tutti i link di approfondimento.

Buona lettura!

Alexa, dimmi chi sei.

Alexa è un assistente personale intelligente creato da Amazon che ascolta, risponde ed agisce in base agli ordini che l’utente impartisce.

Le possibilità d’uso sono molteplici:

  • Permettere all’utente di ottenere informazioni.
  • Gestire la riproduzione della musica.
  • Controllare i dispositivi intelligenti presenti all’interno dell’abitazione.
  • Utilizzare le skill per facilitare i compiti quotidiani.

Per poter utilizzare Alexa è necessario un supporto fisico, chiamato Echo, presente sul mercato in diversi modelli (l’ultimo è la terza generazione).

Nello specifico, Alexa rappresenta la parte software mentre Echo è l’hardware.

Alexa, che cos’è una skill?

Una skill altro non è che un’applicazione, realizzata da sviluppatori, che permette di personalizzare il comportamento di Alexa aggiungendo una nuova funzionalità.

Attraverso l’applicazione Alexa dello smartphone l’utente può scaricare dal market la skill desiderata e provarla direttamente sul proprio dispositivo Echo.

Amazon, nel tentativo di incrementare il numero di questo tipo di applicazioni, ha realizzato una suite gratuita che permette agli sviluppatori di implementarne e pubblicarne di nuove.

Inoltre vengono anche dati degli incentivi sotto forma di premio in base al numero di skill pubblicate e di download effettuati degli utenti.

Alexa, che cosa serve per realizzare una skill?

Il primo requisito è possedere una minima competenza nella programmazione.
Amazon Web Services (AWS) permette l’utilizzo di vari linguaggi di programmazione quindi non serve una conoscenza specifica.

Amazon fornisce tutto l’occorrente per lo sviluppo di una skill:

  • Alexa Developer Console: la suite offerta che permette lo sviluppo lato front-end. Il login è lo stesso di Amazon ed è gratuita.
  • Amazon Web Services: la piattaforma di Amazon che permette di sviluppare l’applicazione lato back-end. Necessità di un’iscrizione a parte, è gratuita per un anno e non oltre certe soglie di utilizzo risorse. (ad oggi, Febbraio 2020).
  • IDE per lo sviluppo: è consigliato l’utilizzo di un IDE per lavorare sul codice. Intellij è un’ottima soluzione, ma anche altri vanno bene.

Alexa, quali sono gli elementi che caratterizzano una skill?

Invocazione

Con il termine Invocation Name si indica l’espressione con la quale l’utente si rivolge al dispositivo Echo per avviare la skill desiderata.
Per semplicità l’invocation name dovrebbe coincidere con la descrizione della skill, ma può anche differire da questa.

Ad esempio, per una applicazione che gestisce la raccolta dei rifiuti del comune di Milano avremmo:

  • descrizione: Skill che gestisce i rifiuti del paese di Milano
  • invocation name: <Rifiuti Milano>

Per avviare la skill si devono sempre pronunciare le parole Alexa, apri seguito dall’invocation name.

Riprendendo l’esempio: Alexa, apri <Rifiuti Milano>

Intento

Gli intenti sono le azioni che una skill esegue nel momento in cui un utente adopera un determinato schema linguistico.

Per ogni intento, va definito:

  • Che cosa un utente potrebbe dire alla skill.
  • Con quale intenzione viene pronunciata la frase.
  • Come reagisce l’applicazione, l’output in formato vocale che Alexa dovrà fornire all’utente.

Tornando all’esempio della applicazione per la gestione dei rifiuti a Milano:

  • Che cosa?: Sapere quando viene ritirata la plastica a Milano.
  • Con quale intenzione? <Quando devo ritirare la plastica>
  • Come reagisce? <La plastica verrà ritirata il 3 febbraio>

Per ogni intento è possibile definire più frasi di esempio (ad esempio <Quando la plastica>, <plastica>) di modo tale da avere a disposizione un database abbastanza ricco per il modello di interazione.

Alexa, che strumenti occorrono per realizzare una skill?

Amazon Developer Console

All’interno di Amazon Developer Console è possibile creare la skill.

E’ uno strumento facente parte della suite di strumenti e servizi che consente a uno sviluppatore di creare, testare e vendere applicazioni e giochi in Amazon Appstore. Amazon Developer Services include kit di sviluppo software per la creazione di app per dispositivi mobili Android o iOS, motori multipiattaforma, tablet Fire, Fire TV, PC, Mac e dispositivi abilitati Alexa appunto.

Per accedere alla suite, bisogna registrare un account sviluppatore Amazon e accedere ai servizi per sviluppatori Amazon tramite il portale Web (link nel paragrafo Riferimenti -> Sviluppo di una skill).

Una volta loggati, è possibile accedere alla piattaforma che permette di gestire in toto il front-end. E’ una sorta di IDE web suddiviso in diverse sezioni:

  1. Build: dove si creano l’invocation name e gli intenti.
    Per l’esempio considerato, sono state create le possibili frasi utili per chiamare l’intento <SpecificTrashIntent>.
    E’ inoltre possibile creare degli slot custom <SlotTrash> che contengono delle parole per rendere dinamico l’intento.  La parola dello slot pronunciata dall’utente può essere poi essere utilizzata nel back-end per logica di programmazione.
    Di seguito l’immagine che mostra come configurare un intento:
  2. Test: sezione dedicata al test, simula l’utilizzo della skill con Alexa.
  3. Distribuzione: gestione della pubblicazione della propria skill compilando un form con tutte i dati necessari.
  4. Certificazione: in seguito al tentativo di pubblicazione della skill, Amazon esegue un check del codice e della struttura per controllare che siano rispettate le convenzioni. In questa sezione vengono mostrate tutte le segnalazioni di Amazon.
  5. Analytics: vengono visualizzati report dell’utilizzo della skill in seguito alla pubblicazione.

Locale/AWS

Una volta implementato il front-end, è necessario creare la vera e propria logica del back-end.

Come primo passo è necessario collegare il proprio pc ad un account AWS.

  1. Creazione dell’utente: Collegarsi a questa pagina e creare le chiavi di accesso. E’ consigliabile in seguito scaricarle per conservarle.
  2. Installare il programma AWS scaricabile da questo link.
  3. Aprire una shell ed eseguire il comando aws configure da terminale e inserire la KEY ID e ACCESS KEY presenti sul file appena scaricato.
    Per maggiori informazioni potete consultare la documentazione.
  4. Scaricare il plugin ask-cli che permette di creare la skill e deployarla su AWS.
    Comando da terminale: npm i ask-cli -g e in seguito collegare il proprio ask-cli con aws con il comando ask-init
    Per ulteriori dettagli su ask-cli potete consultare la documentazione.

Una volta terminato il setup è possibile iniziare a sviluppare la propria skill.

Sempre da terminale con il comando ask-new Amazon fornisce dei template di skill per avere una base per lavorare.
Ogni volta che viene implementata una modifica e la si vuole testare, occorre rilasciare, o in gergo deployare, la skill su AWS tramite il comando ask-deploy; una volta effettuato il deploy è possibile testare la propria skill in ogni dispositivo Echo collegato al proprio account, sul proprio smartphone (tramite l’app di Alexa) e su Alexa Developer Console.

Alexa, dimmi qualche consiglio tecnico per sviluppare la skill.

Intento, com’è formato:

  • canHandle(handlerInput)
    Questo metodo serve per capire quale intento è stato richiesto dall’utente.
    Un esempio:

    canHandle(handlerInput) {
      return handlerInput.requestEnvelope.request.type === 'IntentRequest' AND
      handlerInput.requestEnvelope.request.intent.name === '<NomeIntento>';
    },
  • handle(handlerInput)
    Una volta che la skill ha capito in quale intento entrare, esegue i comandi veri e propri che sono contenuti in questo metodo.
    Il risultato della chiamata al metodo handle è la risposta vocale del dispositivo Echo.

Come far parlare Alexa:

All’interno del metodo handle l’obiettivo è far rispondere Echo in seguito alla richiesta di un utente.
Qui di seguito un esempio:

handlerInput.responseBuilder
    .speak('<Messaggio di risposta di alexa>')
    .withShouldEndSession('<Flag che decide se chiudere la propria skill in seguito alla risposta di alexa>')
    .getResponse();

Un esempio di Skill!

Nel paragrafo Riferimenti trovate il repository con il codice di una skill realizzata ed utilizzata per un workshop interno presso Intré.
Il progetto è suddiviso in branch ognuno dei quali ha degli obbiettivi da raggiungere.

Fate come Marco e i suoi colleghi e mettetevi alla prova, Alexa vi sta aspettando. 

Buona fortuna!

Articolo scritto da