Realizziamo la nostra prima Skill per Alexa

Dal primo di novembre 2018 è stata presentata anche in Italia Alexa.

Si tratta di un assistente personale intelligente sviluppato da Amazon ed utilizzato per la prima volta nei dispositivi Amazon Echo e Amazon Echo Dot .

Alexa è in grado di interagire con la voce, creare elenchi di cose da fare e liste della spesa, riprodurre brani musicali, impostare sveglie, fornire previsioni meteorologiche e notizie, e tanto altro ancora.

Alexa può anche controllare dispositivi intelligenti come smart TV, prese wireless, lampadine, termostati, espletando la funzione di “concentratore” per la gestione di dispositivi domotici.

Ma come riesce a fare tutto ciò? Alcune funzioni sono integrate direttamente in Alexa, altre possono essere aggiunte grazie all’utilizzo delle cosiddette Skill.
Prendendo spunto dalla documentazione e da alcuni esempi presenti sul Developer Portal di Amazon ho realizzato anche io la mia prima Skill:

Si tratta di una Skill che giornalmente mi informa su quale tipo di rifiuto viene raccolto nella mia città. Provatela e fatemi sapere cosa ne pensate!

In questo articolo vedremo invece come realizzare una semplice Skill che quando viene richiamata fornisce delle curiosità relative ad i più famosi monumenti del mondo.
Per prima cosa, per poter realizzare una Skill dovremo registrarci sull’Amazon Developer Portal .
Una volta registrati dovremo loggarci e dal menu Your Alexa Consoles in alto a destra cliccare sul link Skills.

Dalla console Skills di Alexa clicchiamo sul pulsante Create Skill. Procediamo poi con l’assegnare un nome alla nostra Skill: nel nostro caso la chiamieremo Monumenti del Mondo. Sarà questo il nome mostrato nello Skill Store di Alexa, poniamo quindi attenzione a scriverlo correttamente.
Se necessario modifichiamo le impostazioni internazionali. Come modello scegliamo Custom, cliccando poi su Create Skill in alto a destra.

Dopo qualche secondo verrà creato il modello da cui iniziare e saremo reindirizzati nell’editor della Skill che presenta sulla destra la Skill builder checklist, una sorta di wizard che ci guida progressivamente nella realizzazione della Skill.

Come prima cosa dovremo impostare l’Invocation Name. In pratica diremo ad Alexa quale sarà il nome che dovremo invocare per avviare la Skill. Dovrà essere formato da 2 o più lettere fino ad un massimo di 50. Si possono utilizzare solo lettere minuscole, aprostrofi, virgole e spazi. Nel nostro caso metteremo “monumenti del mondo” e poi cliccheremo su Save Model.

Fatto questo, tornando indietro tramite il pulsante CUSTOM vedremo spuntata la prima voce della checklist.

Ora dovremo occuparci di creare le Interazioni per far eseguire alla Skill ciò che vogliamo. Clicchiamo quindi su Intent, Samples and Slots si aprirà la schermata che ci permetterà di creare una nuova chiamata. Inseriamo  quindi il testo “nuova_curiosita” e clicchiamo su Create custom intent. A questo punto dovremo aggiungere il testo da pronunciare per eseguire la funzione, inseriamo perciò nel campo Sample Utterances il testo dimmi una curiosita” e clicchiamo sul simbolo +.

A questo punto clicchiamo su Save Model per salvare le modifiche. In pratica abbiamo definito una chiamata alla funzione “nuova_curiosita” (che implementeremo più tardi lato server) che viene richiamata ogni volta che pronunceremo il testo “dimmi una curiosità”.  Per migliorarne l’iterazione con l’utente aggiungeremo delle frasi alternative a quella già inserita, ma questa volta lo faremo dall’editor JSON. Aggiungiamo tutte le frasi alternative che l’utente potrà utilizzare per eseguire la funzione “nuova_curiosità” e poi clicchiamo su Save Model.

A questo punto possiamo ritenere concluso lo sviluppo dell’interfaccia della Skill. Ci manca però la parte del back-end, la parte cioè che si occuperà di fornirci appunto, ad ogni chiamata “nuova_curiosita”, un testo estratto a caso da un elenco preimpostato.

Per implementare la parte server ci affideremo ad i servizi di Amazon Web Services: registriamoci sul sito e facciamo l’accesso portandoci poi sulla Management Console. Per prima cosa dobbiamo definire la regione, andremo quindi a settare “EU (Ireland)” dal menù a tendina presente in alto a destra vicino al menù dell’utente. Questo passaggio è fondamentale per riuscire poi a connettere la Skill al server.
Fatto questo nel campo di ricerca inseriamo il testo “Lambda” che è il tipo di servizio serverless che andremo ad utilizzare. Si aprirà così la pagina per gestire le funzioni già realizzate o per crearne nuove. Noi cliccheremo su Crea funzione per crearne una nuova, lo faremo però partendo da una funzione di esempio presente nei repository AWS per risparmiare del tempo. In particolare utilizzeremo l’esempio “alexa-skills-kit-nodejs-factskill”.

Clicchiamo sull’esempio e si aprirà una schermata che ci farà creare la nostra nuova funzione: scendiamo in fondo alla pagina e nel campo “Application name” inseriamo il testo “monumenti-del-mondo”, clicchiamo quindi su Deploy. Attendiamo qualche istante e quando apparirà il messaggio “Application successfully deployed” avremo il nostro back-end configurato!!
A questo punto dovremo aprire la risorsa “alexaskillskitnodejsfactskill” appena creata per poter modificare il codice.

Così facendo si aprirà una schermata contenente l’end-point per collegare la Skill alla funzione e più in basso il codice che sarà eseguito lato server.
Modifichiamo ora il codice del file index.js come segue:

Fatto ciò salviamo tramite il pulsante Salva presente in alto sulla destra e ci copieremo il link presente ad inizio pagina che inizia per “arn:aws:lambda..”, ci servirà per collegarlo alla Skill. Nel codice di esempio sopra riportato l’array “data” contiene due sole righe, una per ogni curiosità, ovviamente dobbiamo aggiungerne molte altre per rendere valida la Skill.

Torniamo sul portale developer di Amazon e selezioniamo dalla Skill builder checklist la quarta voce: Endpoint.
Si aprirà una pagina dove inserire, nel campo “Default Region” l’end-point copiato nel passo precedente. Procediamo a salvare le modifiche cliccando sul pulsante Save Endpoints posto in alto.

A questo punto abbiamo quasi terminato, dobbiamo solo fare il Build della Skill cliccando sul terzo pulsante della Skill builder checklist. Terminata questa fase avremo completato i passaggi obbligatori per la realizzazione della Skill, potremo passare a fare i nostri test.
Possiamo subito provare la nostra Skill direttamente dalla developer console semplicemente cliccando sul tab Test presente in alto.
Come prima cosa dobbiamo abilitare la funzione di test e poi possiamo procedere ad impartire i comandi digitando il testo o pronunciandoli direttamente tramite il microfono del PC.

A questo punto non ci resta altro che procedere con la “Distribution” cliccando sul relativo tab presente in alto, compilare tutti i campi obbligatori e procedere con il salvataggio.

Seguirà un wizard che verificherà la correttezza di tutti i requisiti necessari e ci comunicherà eventuali correzioni da apportare. Quando tutto sarà corretto saremo indirizzati alla pagina Certification dalla quale potremo sottomettere la Skill al team che si occuperà della verifica e dell’approvazione semplicemente cliccando sul pulsante Submit for review.

Dopo qualche istante vedremo, nella nostra console, la Skill in review, in attesa cioè che venga accettata e pubblicata sullo store. Non ci resta che incrociare le dita ed attendere pazientemente qualche giorno…

Spero che l’articolo sia stato di vostro gradimento e che vi torni utile per realizzare la vostra Skill.
A proposito della Skill “Monumenti del Mondo”, la trovate già sullo store, scaricatela e provatela!!

27 risposte a “Realizziamo la nostra prima Skill per Alexa”

  1. Ciao Massimo, grazie per la guida. Ma vorrei sapere quando ti richiedono il link per i Termini e Condizioni e la Privacy Policy cosa ci hai messo? Noi cosa ci possiamo mettere?
    Grazie

    1. Ciao Andrea, se vedi bene nella form il campo non è obbligatorio, lo sono solo quelli contrassegnati con l’asterisco. Io personalmente l’ho lasciato vuoto.
      Facci sapere poi la Skill che pubblichi!!

    1. Ciao Michele, sono contento che ti sia piaciuto l’articolo.
      Per quanto riguarda l’icona bisogna realizzarne due versioni da 108×108 pixel e da 512×512 pixel in formato jpeg o png.
      Basta poi andare nel tab “Distribution” per caricarle (rispettivamente Small Skill Icon e Large Skill Icon).

  2. Un altra cosa. Io vorrei creare una skill che interroga un archivio. Io mantengo un sito che elenca manifestazioni podistiche (www.corritrentino.info). Questo sito interroga un archivio MS Access. Sai da dove posso iniziare? Grazie

    1. Ciao Michele, sicuramente c’è la possibilità di interagire con un db (non so nello specifico per access). Sul sito AWS, nei servizi lambda, ci sono diversi esempi anche riguardanti i database.
      Probabilmente sarebbe più facile, tramite una funzione lambda, effettuare una chiamata api/rest verso il tuo sito, ma devi studiarci un po’, sinceramente io non l’ho mai fatto.

  3. ciao, sai se c’è la possibilità di creare e pubblicare skill non passando per AWS che dopo 12 mesi o tante interazioni diventa a pagamento?
    Grazie e complimenti

    1. Ciao Enzo,
      c’è sicuramente la possibilità di utilizzare dei servizi diversi da AWS tipo un server proprietario ma credo che sia meglio e sicuramente più economico utilizzare AWS.
      Nelle condizioni di utilizzo di AWS c’è scritto che se non si supera un certo numero di chiamate l’anno (e anche se non ricordo quante sono davvero tante) il servizio resta gratuito anche dopo il primo anno.
      Inoltre dalla “alexa developer console” ora è possibile scegliere la modalità “Alexa-Hosted” che attualmente è in versione beta ed offre anche funzionalità di storage.
      Non l’ho ancora provato ma appena lo farò vi aggiornerò.

  4. Ciao e complimenti per il tuo esempio, sto sbattendo la testa per creare una semplice skill che faccia partire la mia radio, hai per caso un esempio di come poter crearla? grazie mille.

    1. Ciao Francesco,
      non ho ben capito, vorresti realizzare una skill che riproduce le emissioni di una webradio?
      Non ho mai fatto niente del genere ma credo vi siano dei componenti dedicati allo scopo.
      Se è questo che ti interessa provare a dare un’occhiata agli esempi, questo ad esempio è il link a degli esempi su come riprodurre musica a partire da un catalogo multimediale e quindi on-demand: https://developer.amazon.com/alexa-skills-kit/music

  5. Ciao, ma nel caso di una serie di audio da riprodurre come aggiungo un controllo che nel caso non chiedo l’effetto sonoro giusto (tutti mp3 presenti su aws S3) mi dia una frase di errore del tipo “non conosco questo effetto sonoro”. Grazie

  6. Complimenti per i dettagli della tua guida….
    Avrei la necessità di connettermi ad un database SQL in localhost per inviare delle query, per poi essere gestite dal server localhost; Il db è raggiungibile anche da internet perchè ho realizzato un piccolo serverweb in c#, e vorrei passare da questo con ALEXA.
    E’ possibile?
    C’è qualche servizio per potrebbe fare al caso mio?

    Grazie

  7. Grande Massimo! Una guida eccezionale! Potresti fare la stessa cosa però usando PHP ed un tuo spazio hosting? Perchè io vorrei hostare il codice su uno spazio hosting free o su un mio server usando questo linguaggio di programmazione.

    Grazie in anticipo.

    1. Ciao Andrew,
      sinceramente non ho mai provato perché ritengo di gran lunga più conveniente utilizzare un servizio serverless piuttosto che doversi occupare anche della parte server. Senza contare il fatto che il livello di servizio AWS è difficilmente eguagliabile.
      Comunque, tempo permettendo, mi riprometto di fare qualche prova in questo senso.

  8. Buongiorno e grazie per la splendida guida.
    Se si volesse creare una skill per una web radio come si può adattare?

  9. Ciao Massimo, in primis complimenti per l’ottimo tutorial.
    Per caso potresti spiegarmi come funziona la tua raccolta differenziata? vorrei farne una simile anche per il paesino in cui vivo 🙂

    1. Ciao Ilario,
      scusami se ti rispondo con tanto ritardo. Comunque se non hai ancora risolto ti dico che è molto semplice e puoi realizzarla seguendo la mia guida.
      La differenza sta nel back-end che anziché restituire un messaggio casuale (riga 18: const curiositaIndex = Math.floor(Math.random() * curiositaArray.length);) deve calcolare il giorno attuale e pescare il relativo messaggio.

  10. ciao massimo, sto provando a sviluppare una skill per un mio dispositivo che si comporta come un server web https per cui ho usato la prima parte del tuo tutorial, inserendo nell’endpoint l’indirizzo web del mio dispositivo (e’ un indirizzo web internte https://xxxx.xxxx.com/yyyy.php.
    Ho creato il mio skill ma quando provo ad eseguire il test ottengo come risultato:”Non ho trovato nessun dispositivo per Casa Intelligente nell’account di alberto. Per iniziare, vai alla sezione Casa Intelligente dell’App Alexa.”

    1. Ciao Alberto,
      sinceramente non ho mai provato un endpoint diverso da aws.
      Comunque l’errore sembra relativo al tipo di Skill che hai selezionato, sembra che si aspetti un dispositivo intelligente.
      Rivedi i primi passaggi, devo selezionare Custom e non Smart Home

    1. Ciao Davide, nella mia skill sulla raccolta differenziata verifico il giorno della settimana e poi recupero la risposta da un array:

      const giorniArray= data;
      var oggi = new Date;
      var dayOfWeek = oggi.getDay();
      const messaggio = giorniArray[dayOfWeek];

      const data = [
      ‘Messaggio 1’,
      ‘Messaggio 2’,
      ‘Messaggio 3’,
      …..
      ];

  11. Ciao, complimenti per l’articolo, due domande 🙂
    1. come si possono aggiungere effetti alla voce nel caso, come il tuo esempio che le frasi sono dentro un array?

    é complicato fare un random di file mp3 ?

    Grazie ancora
    Maurizio

    1. Buongiorno Maurizio,
      per quanto riguarda gli effetti non mi risulta sia possibile farlo dato che la voce è sintetizzata ed utilizza il TTS di Alexa.
      Per quanto riguarda il random di file mp3 è invece semplice, potresti ad esempio dargli un nome numerico (1.mp3, 2.mp3, 3.mp3, …)

Rispondi a Lorenzo Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi