Università degli Studi di Padova

Pagina creata da Giorgio Adamo
 
CONTINUA A LEGGERE
Università degli Studi di Padova
Università degli Studi di Padova
              Dipartimento di Matematica
               Corso di Laurea in Informatica

    PastBot: un bot per la piattaforma
 Facebook Messenger per l’interazione con
                gli utenti
                      Tesi di laurea triennale

Relatore
Prof. Mauro Conti

                                                     Laureando
                                                 Davide Polonio

                    Anno Accademico 2015-2016
Università degli Studi di Padova
Davide Polonio: PastBot: un bot per la piattaforma Facebook Messenger per
l’interazione con gli utenti, Tesi di laurea triennale, c Ott 2016.
I problemi sono le uniche cose che dividono i sogni dalla realtà
Ringraziamenti
Innanzitutto, vorrei esprimere la mia gratitudine al Prof. Mauro Conti, relatore
della mia tesi, per l’aiuto e il sostegno fornitomi durante la stesura del lavoro.

Desidero ringraziare con affetto i miei genitori per il sostegno, il grande aiuto e per
essermi stati vicini in ogni momento durante gli anni di studio.

Ho desiderio di ringraziare in particolar modo Franco per essermi sempre stato
vicino anche quando non poteva e avermi sempre supportato nelle mie scelte, ma
ringrazio anche tutti i miei amici per tutto il tempo passato insieme e le avventure
vissute.

Ultimi, ma non meno importanti, desidero ringraziare i miei compagni di corso
Fabio, Andrea e Alessandro, con i quali ho avuto il piacere di condividere molte
delle esperienze universitarie.

Padova, Ott 2016                                                      Davide Polonio
Sommario
La presente tesi descrive il periodo di tirocinio, svoltosi durante il periodo di laurea
triennale e della durata di circa trecento ore, del laureando Davide Polonio presso
l’azienda PastBook, con sede ad Amsterdam, sotto la supervisione del professor
Mauro Conti.
   Gli obiettivi dello stage erano la creazione di un bot tramite un’architettura
serverless per la nuova piattaforma per bot di Facebook Messenger che permettesse
all’utenza di usufruire di alcune funzionalità presenti nel sito web dell’azienda
direttamente da una conversazione.
Indice

1 Introduzione                                                                                                    1
  1.1 L’azienda PastBook . . . . . . . . . . . . . . . .              . . . . .           .   .   .   .   .   .   1
       1.1.1 Personale . . . . . . . . . . . . . . . . .              . . . . .           .   .   .   .   .   .   1
       1.1.2 Organizzazione interna . . . . . . . . . .               . . . . .           .   .   .   .   .   .   2
       1.1.3 Organizzazione dello sviluppo nel reparto                tecnico             .   .   .   .   .   .   2
       1.1.4 Attività di sincronizzazione giornaliere .               . . . . .           .   .   .   .   .   .   2
       1.1.5 Attività settimanali . . . . . . . . . . . .             . . . . .           .   .   .   .   .   .   3

2 Il progetto                                                                                                     5
  2.1 I ricordi . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
       2.1.1 L’era dei bot . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
  2.2 PastBot . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
       2.2.1 Azioni intraprendibili dall’utente       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
       2.2.2 Implementazione tecnica . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   8

3 Analisi dei requisiti                                                        19
  3.1 Requisiti di PastBot . . . . . . . . . . . . . . . . . . . . . . . . . . 20
      3.1.1 UC0: caso d’uso generale . . . . . . . . . . . . . . . . . . . . 20
      3.1.2 UC1: inizio conversazione per la prima volta in assoluto . . 21
      3.1.3 UC2: invio richiesta di creazione di un nuovo album . . . . . 22
      3.1.4 UC2.1: risposta affermativa al messaggio di conferma Crea-
             zione nuovo album . . . . . . . . . . . . . . . . . . . . . . . 22
      3.1.5 UC2.2: risposta negativa al messaggio di conferma Creazione
             nuovo album . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
      3.1.6 UC2.3: creazione di un nuovo album . . . . . . . . . . . . . 23
      3.1.7 UC3: invio richiesta di visualizzazione foto dell’album attivo 24
      3.1.8 UC12: visualizzazione messaggio di errore album vuoto . . . 24
      3.1.9 UC3.1: cancellazione singola foto . . . . . . . . . . . . . . . 25
      3.1.10 UC3.2: visualizzazione singola foto nel browser . . . . . . . . 25
      3.1.11 UC3.3: visualizzazione messaggio di errore cancellazione foto 26
      3.1.12 UC3.4: acquisto album . . . . . . . . . . . . . . . . . . . . . 26
      3.1.13 UC3.5: visualizzazione messaggio di errore acquisto album . 26
      3.1.14 UC4: invio richiesta di informazioni sui costi . . . . . . . . . 27
      3.1.15 UC5: invio comando di aiuto . . . . . . . . . . . . . . . . . 27
      3.1.16 UC6: invio richiesta di visualizzazione album nel sito web . . 27
      3.1.17 UC7: invio di un comando non valido . . . . . . . . . . . . . 28
      3.1.18 UC8: invio di uno sticker . . . . . . . . . . . . . . . . . . . . 28

                                        ix
x                                                                                                    INDICE

        3.1.19 UC9: invio allegato . . . . . . . . . . . . . . . . . . . . . . .                             28
        3.1.20 UC10: visualizzazione messaggio di errore per tipo di allegato
               non valido . . . . . . . . . . . . . . . . . . . . . . . . . . . .                            29
        3.1.21 UC11: visualizzazione menù permanente . . . . . . . . . . .                                   30
        3.1.22 UC11.1: creazione di un nuovo album . . . . . . . . . . . . .                                 30
        3.1.23 UC11.2: visualizzazione delle foto dell’album esistente . . . .                               31

4 Progettazione e codifica                                                                                   33
  4.1 Progettazione ed implementazione delle API         .   .   .   .   .   .   .   .   .   .   .   .   .   33
      4.1.1 Descrizione dell’architettura . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   33
      4.1.2 Descrizione delle API . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   33
  4.2 Descrizione del webhook . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   33
  4.3 Descrizione delle classi . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
      4.3.1 API . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   34
      4.3.2 api::putPastBotCollectionPhoto . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   35
      4.3.3 api::getPastBotUser . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   35
      4.3.4 api::getPastBotCollection . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   35
      4.3.5 api::createPastBotUser . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   35
      4.3.6 api::deletePastBotCollectionPhoto . .        .   .   .   .   .   .   .   .   .   .   .   .   .   36
      4.3.7 api::addPastBotMessage . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   36
      4.3.8 api::createPastBotCollection . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   36
      4.3.9 Webhook . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   36

5 Verifica e Validazione                                                                                     39

6 Conclusioni                                                                                                41
  6.1 Raggiungimento degli obiettivi . . . . . . . . . . . . . . . . . . . . .                               41
  6.2 Bilancio formativo . . . . . . . . . . . . . . . . . . . . . . . . . . .                               41

A API Rest                                                                                                   43
  A.1 Introduzione . . . . . . . . . . . . .   . . . . . . . . . . . .               . . . . . .             43
  A.2 REST . . . . . . . . . . . . . . . .     . . . . . . . . . . . .               . . . . . .             43
      A.2.1 Identificazione delle risorse .    . . . . . . . . . . . .               . . . . . .             43
      A.2.2 Utilizzo esplicito di metodi        Hypertext Transfer                   Protocol
             (HTTP) . . . . . . . . . . .      . . . . . . . . . . . .               . . . . . .             44
      A.2.3 Risorse autodescrittive . . .      . . . . . . . . . . . .               . . . . . .             44
      A.2.4 Collegamenti tra risorse . .       . . . . . . . . . . . .               . . . . . .             44
      A.2.5 Comunicazioni prive di stato       . . . . . . . . . . . .               . . . . . .             44

Glossario                                                                                                    45

Acronimi                                                                                                     47

Bibliografia                                                                                                 49
Elenco delle figure

 1.1    Logo dell’azienda PastBook . . . . . . . . . . . . . . . . . . . . . .                                         1

 2.1    Logo di PastBot . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6
 2.2    Presentazione del bot all’utenza finale   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
 2.3    Logo di Amazon AWS Lambda . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
 2.4    Tipica struttura di un progetto Apex      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
 2.5    Logo di Apex . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
 2.6    Logo di NPM . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
 2.7    Logo di APIGateway . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
 2.8    Logo di Swagger . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
 2.9    Logo di Git . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
 2.10   Logo di DynamoDB . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
 2.11   Logo di Messenger . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
 2.12   Logo di DashBot . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17

 3.1    UC0: caso d’uso generale . . . . . . . . . . . . . . . .                      . . . .         .   .   .   .   21
 3.2    UC2: invio richiesta di creazione di un nuovo album .                         . . . .         .   .   .   .   22
 3.3    UC3: invio richiesta di visualizzazione foto dell’album                       attivo          .   .   .   .   24
 3.4    UC11: visualizzazione menù permanente . . . . . . .                           . . . .         .   .   .   .   30

 4.1    Progettazione generale dell’applicazione . . . . . . . . . . . . . . . .                                      34
 4.2    Rappresentazione UML di una API . . . . . . . . . . . . . . . . . .                                           34
 4.3    Diagramma delle classi per la parte di PastBot relativa all’interazione
        con gli utenti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                   37

 5.1    Logo del framework usato per i test Mocha . . . . . . . . . . . . . .                                         40

                                          xi
Capitolo 1

Introduzione

1.1     L’azienda PastBook
PastBook viene aperta a Milano nel 2011 come un hobby. Nel 2012 il fondatore,
capo tecnico e Scrum Master di eBay Italia Stefano Cutello, sposta l’azienda
ad Amsterdam per entrare nell’acceleratore per startup Rockstart. Grazie ai
finanziamenti dell’acceleratore e alla brillante idea la startup cresce diventando nel
2016 una società a tutti gli effetti.
   L’idea di PastBook è quella di fornire un libro dei ricordi alle persone, prendendo
i momenti direttamente dai social network che ormai tutti siamo abituati ad usare.
Fornendo l’integrazione a diverse piattaforme l’applicazione permette di creare in
un unico sito il proprio album, per poi poterlo ordinare con diverse grandezze e
ottenere così una copia stampata.

                       figura 1.1: Logo dell’azienda PastBook

1.1.1     Personale
All’interno di PastBook il lavoro è suddiviso in diversi ruoli: servizio clienti,
programmatori e lato marketing.
   Il servizio clienti si occupa di processare eventuali richieste dei clienti, come per
esempio modificare un libro dopo aver eseguito il pagamento, ottenere un rimborso
o avere più semplicemente informazioni riguardo al prodotto.
   I programmatori si occupano della parte più tecnica del servizio: è importante
infatti mantenere aggiornata la piattaforma, aggiungendo funzionalità per attirare
continuamente nuovi clienti e rendere il sito il più appetibile possibile.
   Il reparto marketing è legato al reparto tecnico. Ogni nuova funzionalità viene
infatti annunciata tramite i social network dell’azienda, per ottenere una massima
diffusione. Vengono anche pensate a strategie di mercato, come offerte speciali o
prezzi per nuovi prodotti.

                                           1
2                                                 CAPITOLO 1. INTRODUZIONE

1.1.2     Organizzazione interna
L’azienda, essendo comunque non di grosse dimensioni e avendo molta dinamicità
al suo interno aderisce alla tecnica Agile, in particolar modo Scrum.

1.1.3     Organizzazione dello sviluppo nel reparto tecnico
All’interno del reparto tecnico dove avviene lo sviluppo del codice sono state adottate
varie convenzioni riguardo all’organizzazione del sistema di versionamento e allo
stile di scrittura del codice.

Sistema di versionamento
Il sistema di versionamento, presenta diversi branch specifici per i vari ambienti di
lavoro:

    ∗ develop in questo ramo è presente il codice ancora in fase di sviluppo, che
      deve essere sottoposto a revisione;

    ∗ qa qui è presente il codice attualmente sotto uno stato di revisione e testing,
      in cui ci si vuole assicurare che tutte le attività implementate siano prive di
      errori e rispondano come dovuto;

    ∗ prod in questo ramo è presente il codice attualmente impiegato nell’ambiente
      di produzione, che viene ritenuto stabile e che ha passato i test di qualità.

   Quando è necessario aggiungere nuove funzionalità i programmatori sono obbligati
a creare un nuovo ramo a partire da develop, che abbia come suffisso la scritta
feature/. Dopo questo suffisso, è necessario dare al ramo un nome esplicativo che
però non risulti troppo lungo.

Progettazione
Le funzionalità prima di essere implementate attraversano una fase di progettazione,
in cui il capo tecnico e il capo dell’azienda ne discutono, valutando il tempo a
disposizione e i costi in termini di risorse umane e di tempo. Se la funzionalità
viene ritenuta interessante, si passa a una progettazione di tipo tecnico, in cui il
capo tecnico decide le tecnologie migliori da utilizzare e le caratteristiche tecniche
che la funzionalità dovrà avere.
   Viene adottata una progettazione volta a all’estensione: in questa maniera sarà
sempre facile poter aggiungere altre funzionalità a quelle già esistenti, per ottenere
quindi un prodotto che sia facilmente estendibile e che necessiti di meno tempo in
futuro per lo sviluppo, richiedendo di conseguenza anche meno risorse.

1.1.4     Attività di sincronizzazione giornaliere
Ogni sezione dell’azienda, ogni mattina, è tenuta ad aggiornarsi prendendo posto
nella sala apposita all’interno dell’ufficio. Qui i vari membri discutono e si aggiornano
riguardo alla situazione dei vari compiti da svolgere.
1.1. L’AZIENDA PASTBOOK                                                                3

1.1.5     Attività settimanali
Ogni lunedì di ogni settimana il reparto tecnico è chiamato all’attività di deploy
delle nuove funzionalità sviluppate la settimana prima. L’attività di deploy si
suddivide nei seguenti passi:

   1. Fusione dei vari branch della nuova funzionalità sviluppata nel ramo denomi-
      nato develop;

   2. Caricamento del ramo develop in un ambiente di test;

   3. Testing delle varie funzionalità per assicurarsi che tutto funzioni senza
      problemi;

   4. Una volta accertato che il tutto funzioni, fusione del ramo develop nel ramo
      qa;

   5. Ottenuta l’approvazione del capo tecnico, avviene il deploy della nuova funzio-
      nalità nell’ambiente di produzione e il ramo qa viene fuso nel ramo prod, in
      cui viene conservato tutto il codice che è attualmente eseguito nell’ambiente
      di produzione.

    Se la nuova funzionalità prodotta non viene ritenuta ancora matura per poterla
rilasciare in un ambiente di produzione si decide di rimandare la sua distribuzione
alla prossima successiva, avendo così il tempo di risolvere eventuali difetti riscontrati
nel periodo di testing.
Capitolo 2

Il progetto

2.1     I ricordi
La vita di ogni persona è composta da ricordi. Sempre più oggigiorno la gente salva
i propri istanti tramite i social network, come ad esempio Facebook o Instagram.
Ma questi momenti tendono a svanire col tempo o possono perdersi nella vastità
di internet. Quello che PastBook offre è la possibilità di renderli permanenti in
un album fotografico prendendo i momenti salvati nei social network. Questa
operazione è resa ancora più semplice se il tutto è assistito da un bot, che rende il
processo più user-friendly.

2.1.1    L’era dei bot
Dal lancio iniziale sulla piattaforma di messaggistica di Telegram dei bot, si è
potuto notare come ci sia stato un maggior interessamento verso questa tecnologia.
L’entrata di Facebook tramite la sua applicazione di messaggistica Messenger ha
segnato un importante passo anche nel modo in cui le aziende possono interagire
con i propri clienti. È ora possibile scrivere direttamente alle pagine dei servizi
a cui si è interessati per ottenere aiuto o informazioni in pochi secondi, facendo
risparmiare agli utenti la fatica di andarsele a cercare nel sito della compagnia.
   Questo ha fatto spingere i grandi colossi come Microsoft e Facebook stessa a
investire verso la branchia dell’intelligenza artificiale, per poter dare alle macchine
la possibilità di interpretare al meglio il linguaggio naturale degli esseri umani.

                                          5
6                                                   CAPITOLO 2. IL PROGETTO

2.2      PastBot
Appena uscita la possibilità di creare bot su Facebook e collegarli alle pagine delle
aziende PastBook si è subito attivata per creare il suo bot che aiuti le persone
nella creazione degli album in maniera interattiva rendendo facile il loro acquisto
in seguito. Questo permette anche agli utenti la creazione e l’acquisto di album
comodamente e direttamente da Facebook.
   Una volta arrivato nella pagina della società, l’utente non deve far altro che
scrivergli un messaggio. Al primo messaggio si attiverà il bot che gli risponderà cor-
tesemente illustrandogli le sue funzionalità e comandi. L’utente potrà chiedere aiuto
al bot, che lo guiderà nei passi necessari per creare un album. Quando finalmente
l’utente ha inviato il numero minimo delle foto necessarie per creare l’album, verrà
informato da PastBot che gli offrirà la possibilità di acquistarlo. Questo porterà
l’utente in una procedura automatica di acquisto, in cui gli unici campi richiesti
saranno solamente selezionare il tipo di pagamento, la località dove spedire il libro
dei ricordi appena creato e in che formato lo si desidera.

                             figura 2.1: Logo di PastBot

   Essendo l’utente un essere umano si è dovuto considerare dei possibili errori che
esso può commettere:

    ∗ errori in fase di digitazione;

    ∗ errori nell’invio delle immagini;

    ∗ errori nell’interpretazione dei messaggi del bot.

Errori di digitazione Per gli errori di digitazione il bot segnalerà all’utente
l’eventuale errore (se l’errore si trova nella parola chiave del comando), chiedendogli
di effettuare di nuovo l’operazione richiesta.

Errori nell’invio delle immagini Durante l’invio delle immagini, è possibile
che l’utente possa commettere un errore nella selezione e possa inviare anche altri
contenuti, come file generici o video. In questo caso, il bot ignorerà i contenti diversi
da immagini che sono stati inviati, senza lanciare un messaggio di errore o fermare
l’operazione di caricamento. Questa scelta è stata presa in quando è possibile che
questo tipo di errore avvenga maggiormente quando l’utente vuole inviare un gran
numero di foto nella conversazione, ed eseguire azioni come segnalare l’errore o
fermare il processo di salvataggio delle immagini potrebbe portare a reazioni come
frustrazione e fastidio.
2.2. PASTBOT                                                                           7

Errori di interpretazione È anche possibile che le persone commettano degli
errori nell’interpretare il senso della frase che il bot manda loro. Questo potrebbe
portare a un errore nella procedura richiesta dal bot. Un tipico esempio potrebbe
essere richiedere la lista delle foto di un album che è attualmente vuoto. In questo
caso il bot segnalerà all’utente che l’azione non è disponibile, e provvederà a fornirgli
una lista di azioni che può intraprendere. In questa maniera si inviterà a continuare
attivamente la conversazione.

                   figura 2.2: Presentazione del bot all’utenza finale

2.2.1     Azioni intraprendibili dall’utente
L’utente può intraprendere con PastBot diversi tipi di azioni. Di seguito si elencano
le possibili:

   ∗ richiedere informazioni riguardo al funzionamento del bot;

   ∗ richiedere informazioni riguardo ai costi di spedizione e ai formati degli album;

   ∗ creare un nuovo album;

   ∗ inviare foto al bot tramite la chat utente;

   ∗ vedere la lista delle foto inviate e attualmente presenti all’interno dell’album;

   ∗ richiedere di vedere, a grandezza originale e senza alcuna riduzione di risolu-
     zione, un’immagine presente nella lista dell’album che si sta creando;

   ∗ richiedere di cancellare una specifica foto dall’album che si sta creando;

   ∗ procedere con l’acquisto dell’album.
8                                                   CAPITOLO 2. IL PROGETTO

2.2.2     Implementazione tecnica
Amazon AWS Lambda

PastBook basa i suoi servizi nel cloud grazie a Amazon AWS Services. Per realizzare
il bot è quindi stato deciso di pensarlo utilizzando un’architettura serverless con
database non relazionali (ovvero di tipo NoSQL). Un’architettura di questo tipo
porta a diversi vantaggi:

    ∗ nessun costo di amministrazione dei server in cui il programma viene eseguito;

    ∗ l’applicazione ha la possibilità di scalare in automatico in base alle richieste
      in arrivo, per offrire un servizio all’utenza senza interruzioni;

    ∗ i costi sono legati solamente al tempo di esecuzione effettivo del programma
      nel cloud;

    ∗ risorse automaticamente gestite;

    ∗ reigstrazione automatica degli eventi dell’applicazione;

    ∗ raccolta automatica di metriche e statistiche sull’utilizzo delle risorse;

    ∗ tutto l’ambiente è all’interno dello stesso cloud, permettendo una comuni-
      cazione interna molto rapida e riducendo i tempi di chiamate delle varie
      API.

   Questo tipo di vantaggi ha permesso anche durante il tirocinio di focalizzarsi preva-
lentemente nella stesura del codice senza preoccuparsi della parte di amministrazione
del sistema.
   Il servizio cloud utilizzato nello specifico si chiama Amazon AWS Lambda, e
permette di configurare quante risorse per quanto tempo il programma potrà avere.
AWS Lambda permette di caricare il codice sotto forma di funzioni. Queste funzioni
non sono altro che porzioni di codice (che possono essere composte da più file).
Nella configurazione sarà poi necessario definire il metodo della funzione da invocare
al sopraggiungere di una richiesta. A questa funzione verrà passato un evento sotto
forma di oggetto JSON. I campi per l’oggetto sono definibili e personalizzabili
nella configurazione della funzione, oppure si può scegliere di ricevere tutti i campi
dell’evento. Per poter automatizzare anche questa configurazione, creando quindi
un sistema completamente automatizzato per la distribuzione del codice, si è deciso
di utilizzare lo strumento liberamente disponibile Apex.
2.2. PASTBOT                                                                        9

                     figura 2.3: Logo di Amazon AWS Lambda

Apex
Apex è uno strumento che permette di automatizzare la fase di distribuzione del
codice sorgente con configurazioni personalizzabili in base all’ambiente in cui si
distribuisce il programma. Oltre a queste funzionalità, permette anche di:

   ∗ eseguire la funzione direttamente da linea di comando (il codice verrà comun-
     que eseguito in remoto);

   ∗ visualizzazione di metriche sull’utilizzo del programma;

   ∗ visualizzazione dei registri di esecuzione.

   Per utilizzare questo strumento è stato necessario creare la struttura del progetto
secondo quanto specificato dalla documentazione del programma.

                  figura 2.4: Tipica struttura di un progetto Apex

Struttura di un progetto Apex Come è possibile notare nella figura, sono
presenti diversi file di configurazione di tipo JSON. Prima dell’estensione del file è
possibile notare come siano appuntati i vari tipi di environment, per cui è possibile
creare una configurazione diversa. All’interno del file project..json è
possibile inserire i seguenti campi:
10                                                     CAPITOLO 2. IL PROGETTO

     ∗ name: il nome del progetto;

     ∗ description: una descrizione del progetto (questo campo può essere opziona-
       le);

     ∗ runtime: specifica ad Apex il tipo di linguaggio e la versione dell’interprete
       per il linguaggio scelto che è necessario utilizzare. Le versioni attualmente
       supportate dallo strumento sono maggiori di quelle che permette il servizio
       Amazon Lambda, che è limitato solamente ai linguaggi come JavaScript,
       Python e Java. Le opzioni disponibili per questo campo sono:

          – java (utilizzo di Java versione 8)
          – python (versione 2.7)
          – nodejs (versione 0.10)
          – nodejs4.3 (versione 4.3)
          – golang (qualsiasi versione)

     ∗ memory: la memoria che le varie macchine Lambda disporranno. La memoria
       utilizzabile varia da un minimo di 128 MB di Random Access Memory (RAM)
       fino a un massimo di 1536MB di RAM. Questo campo richiede l’inserimento
       di un valore intero;

     ∗ timeout: indica il tempo massimo di esecuzione della singola funzione Lamb-
       da: infatti è possibile che la macchina abbia dei periodi di esecuzione più
       lunghi di quelli desiderati. Se l’esecuzione supera il limite impostato verrà
       interrotta. Questo valore attualmente può essere impostato a un massimo di
       5 minuti;

     ∗ role: all’interno dell’ambiente Amazon AWS sono presenti i ruoli, che danno la
       possibilità di definire i permessi delle varie risorse all’interno del servizio, siano
       essi utenti della compagnia o servizi in esecuzione. Ogni permesso è identificato
       tramite un Amazon Resource Name (ARN), che segue la definizione:

          arn:partition:service:region:account-id:resource

       dove:

          – arn identifica che si tratta di un ruolo;
          – partition indica il tipo di luogo in cui si trova la risorsa. Attualmente
            è solamente disponibile il valore aws;
          – service indica il servizio. Nel caso della configurazione necessaria per il
            tirocinio, il valore è stato impostato a lambda;
          – region indica la regione dove questa risorsa è allocata. Amazon AWS
            Services è un servizio presente in più regioni del mondo, e ogni regione
            permette di avere una propria configurazione;
          – account-id indica l’id dell’account con cui si sta assegnando il permesso;
2.2. PASTBOT                                                                        11

        – resource è il nome della risorsa, che è univoco per quel determinato
          servizio nella regione selezionata.

      L’assegnazione di un ruolo è obbligatorio e se non correttamente configura-
      to durante l’esecuzione del codice si potrebbero riscontrare problemi con i
      permessi.

   ∗ name-template: questo campo indica il nome che la funzione avrà quando
     sarà caricata nel servizio Amazon Lambda. Questo nome infatti può essere
     personalizzato usando delle sequenze predefinite. Seguendo le convenzioni
     stabilite all’interno di PastBook, il nome è stato definito in questa maniera:

        {{.Project.Environment}}-{{.Function.Name}}

      Dove nella prima parte sarà il tipo di ambiente (environment) in cui verrà
      caricata la funzione (ovvero o dev o qa o prod ) mentre nella seconda si avrà il
      nome della cartella che ospita il codice della funzione;

   ∗ handler: questo parametro indica il nome del metodo della funzione che
     Amazon Lambda chiamerà quando ne sarà richiesta l’esecuzione.

   Una volta definito il file di configurazione per il progetto è possibile cominciare
a lavorare sulle funzioni che poi verranno caricate nel servizio Amazon Lambda.
Queste funzioni devono trovarsi all’interno di una propria cartella all’interno di
function. Il nome della cartella indicherà anche il nome della funzione: per ogni
funzione è poi possibile scrivere il codice che verrà eseguito.

Personalizzazione delle configurazioni Apex è uno strumento flessibile che
permette di definire in maniera dettagliata ulteriori configurazioni per ogni funzione,
tramite la definizione di un file function..json. Anche questo file è
un oggetto di tipo JSON, con gli stessi campi del file project..json:
ciò permette una ridefinizione dei valori dei campi che si vuole personalizzare per
quella funzione, consentendo quindi la creazione di una configurazione globale per
tutto il progetto e una personalizzata per ogni funzionalità. Come convenzione
interna della compagnia è stato deciso di nominare tutti i file principali che vengono
poi eseguiti dal servizio Lambda con il nome di index.js.

                              figura 2.5: Logo di Apex
12                                                   CAPITOLO 2. IL PROGETTO

NPM
Il bot durante lo sviluppo ha richiesto la necessità di dipendenze di terze parti, e
per questo è stato deciso di integrarle tramite il gestore di moduli JavaScript Node
Package Manager (NPM).
    NPM provvede a fornire una serie di moduli creati da altri utenti. Questi moduli
possono instaurare dipendenze tra di loro, creando un sistema in cui il riutilizzo
gioca un ruolo chiave. Questa cooperazione di pacchetti permette la creazione di
altro software in maniera più semplice. NPM offre anche la possibilità di rendere
i pacchetti privati e non condivisibili pubblicamente, consentendo ad aziende di
sviluppare codice proprietario in moduli per riutilizzarlo per diversi progetti interni.
    All’azione di caricamento, Apex riconosce la dipendenza da altri moduli Java-
Script, provvedendo quindi a generare un file compresso che li contenga tutti e a
caricarli nel servizio.

                               figura 2.6: Logo di NPM

Progettazione della struttura serverless
La progettazione di un’architettura di tipo serverless ha portato alla creazione di
due parti principali del bot, ovvero una parte dedicata solamente alla ricezione dei
messaggi e all’interazione con l’utente e la rimanente per eseguire le operazioni
sui database non relazionali. La parte riguardante le operazioni sui database non
relazionali è stata suddivisa ulteriormente, e ogni funzionalità è stata posta in
una funzione AWS Lambda apposita, in maniera tale da aver una miglior gestione
delle risorse. Si è deciso di chiamare questa parte API. Le API decise in fase di
progettazione sono state le seguenti:
     ∗ addPastBotMessage: aggiunge i messaggi ricevuti nel database ai fini di
       raccolta dati;

     ∗ createPastBotCollection: questa API si occupa della creazione di nuovi
       album;

     ∗ createPastBotUser: si occupa della creazione dei nuovi utenti che scrive-
       ranno a PastBot;

     ∗ deletePastBotCollectionPhoto: si occupa della cancellazione di una sin-
       gola foto da una determinata collezione;

     ∗ getPastBotCollection: ritorna la collezione attualmente attiva dato un id
       di un utente iscritto;

     ∗ getPastBotUser: ritorna tutte le informazioni attualmente presenti su
       quell’utente, come la lista delle collezioni create e la lista attualmente attiva;
2.2. PASTBOT                                                                         13

   ∗ putPastBotCollectionPhoto: dato un URL di un’immagine valido, prov-
     vede ad aggiungere quell’immagine nel database di PastBot assegnandola
     all’ultima collezione di foto attiva.

   Questa suddivisione tra API e il bot che ha il compito di ricevere i messaggi è
stata determinata anche grazie al servizio Amazon AWS APIGateway.

APIGateway
APIGateway è uno dei molti servizi presenti all’interno di Amazon AWS Services
e serve per la gestione e l’instradamento delle richieste. Oltre a permettere la
definizione e la gestione di API in maniera semplice mette anche a disposizione:

   ∗ integrazione nativa di con tutti gli altri servizi offerti da Amazon AWS;

   ∗ gestione integrata dei permessi e controllo degli accessi;

   ∗ monitoraggio del volume di richieste;

   ∗ versionamento delle API;

   ∗ grazie alla distribuzione del servizio in varie parti del mondo viene assicurata
     una bassa latenza per prestazioni maggiori.

La definizione di un determinato URL permette di configurare l’evento ad esso
associato in base al tipo di richiesta CRUD. Al momento della definizione, è
necessario selezionare quale servizio gestirà la richiesta. Ai fini del progetto, a ogni
URL è stata associato una chiamata a una specifica funzione Lambda.
   In questa maniera, tramite l’utilizzo di un gestore di API si è potuto definire un
servizio serverless ben incapsulato: infatti chi andrà a effettuare le chiamate alle
varie API non sarà a conoscenza di come esse sono strutturate internamente e di
come esse verranno gestite. Le API hanno richiesto una loro definizione e una loro
progettazione prima di essere implementate su APIGateway, e per compiere questo
passo si è ricorsi allo strumento Swagger.

                           figura 2.7: Logo di APIGateway
14                                                     CAPITOLO 2. IL PROGETTO

Swagger
Swagger è uno strumento potente che permette la rappresentazione di API per il
web con relativa documentazione. È utilizzabile tramite la definizione di un file
di configurazione di tipo YAML: in questa maniera si vengono a definire i punti
d’accesso all’applicazione e se ne compie anche una loro descrizione. È possibile
definire il file di tipo YAML tramite l’aiuto di un apposito editor di testo.
   La decisione di usare questo strumento per definire i punti d’accesso all’appli-
cazione è stata presa in merito al supporto nativo che il servizio Amazon AWS
APIGateway fornisce a Swagger. Si è proceduti quindi nella seguente maniera:

     1. progettazione dei punti d’accesso all’applicazione;

     2. definizione dei punti d’accesso in un file Swagger;

     3. configurazione del servizio APIGateway tramite il caricamento del file Swagger.

   L’utilizzo di un file di configurazione porta alla possibilità di tenere il file sotto uno
strumento di versionamento, e quindi di poterne avere sempre una storia associata
al progetto, inoltre, in caso ci siano problemi o errori sarà più facile individuali
essendo la definizione tutta in un unico file, e non distribuita nell’interfaccia grafica
dello strumento di comando di APIGateway. Il sistema di versionamento utilizzato
durante il tirocinio è stato Git.

                               figura 2.8: Logo di Swagger
2.2. PASTBOT                                                                       15

Git

Git è un sistema di versionamento, ovvero uno strumento che aiuta i programmatori
a tenere traccia delle modifiche che un file o una porzione di codice ricevono.
Utilizzare questo sistema di versionamento ha diversi vantaggi anche a livello
organizzativo, e ha permesso durante la codifica di sperimentare diverse soluzioni
ai problemi incontrati tramite l’utilizzo di diversi rami di sviluppo. Grazie a tale
strumento, si è anche potuto evitare casi di sovrascrittura del codice, ovvero quando
due programmatori vanno a modificare una medesima porzione del programma.
   A ogni versione stabile del software raggiunta nel ramo prod, si è deciso di
rilasciare un tag, ovvero un’etichetta che identifica in maniera univoca quella
determinata versione del codice. Così facendo, si può avere uno storico delle versioni
stabili.

                               figura 2.9: Logo di Git

DynamoDB

DynamoDB è un altro dei servizi che Amazon AWS mette a disposizione. Questo
offre un database flessibile di tipo NoSQL, per tutti quei servizi che necessitano di
poca latenza e debbano scalare in un futuro. AWS DynamoDB è totalmente gestito
da Amazon, ed è consigliato per le applicazioni legate al mondo del web. Ai fini
di PastBot, DynamoDB è stato essenziale per salvare i messaggi, gli utenti e gli
album con gli indirizzi alle relative foto. Il trasferimento dei dati è stato eseguito
inviando direttamente oggetti di tipo JSON al database.

                          figura 2.10: Logo di DynamoDB
16                                                         CAPITOLO 2. IL PROGETTO

Messenger e Facebook
PastBot è nato per essere integrato con le API della piattaforma di messaggistica
istantanea Facebook Messenger. Prima di poter cominciare a sviluppare un bot per
la piattaforma Messenger è necessario creare un’applicazione dalla sezione dedicata
agli sviluppatori per Facebook. Una volta creata l’applicazione, è stato possibile
creare un codice identificativo univoco utilizzabile dal bot per inviare e ricevere
contenuti.
   Messenger mette a disposizione una lista selezionabile di eventi che si desidera
inviare al bot, dove gli eventi sono:

         ∗ ricezione di un messaggio;

         ∗ pressione di un bottone o di un link dal menù permanente;

         ∗ ricezione di un messaggio dal bottone Invia a Messenger;

         ∗ ricezione della notifica di ricezione del messaggio da parte dell’utente;

         ∗ ricezione del messaggio inviato all’utente (anche detto echo).

   Le azioni eseguibili dal bot sono la notifica all’utente che si otterrà a breve una
risposta e l’invio di messaggi, che possono essere di diverso tipo:

         ∗ messaggi di testo;

         ∗ immagini;

         ∗ video;

         ∗ messaggi di testo con risposte rapide1 ;

         ∗ messaggi composti da titolo, sottotitolo, un’immagine e dei bottoni opzionali;

         ∗ invio di ricevute d’acquisto.

   Durante lo sviluppo del bot avere a disposizione diversi tipi di messaggi da poter
inviare si è rivelato molto utile al fine di poter creare una maggiore interazione con
l’utente e ottenere in generale un risultato migliore e più appetibile.
   L’applicazione creata è poi stata associata a una pagina di Facebook. In questa
maniera gli utenti, scrivendo alla pagina, mandano il messaggio direttamente al bot
che provvederà poi a rispondergli nella maniera adeguata.
     1
    Le risposte rapide sono dei bottoni presenti subito sotto il messaggio del bot, che possono
aiutare l’utente perché non è necessario digitare testo per rispondergli, ma è possibile selezionare
una risposta in maniera rapida.
2.2. PASTBOT                                                                        17

                            figura 2.11: Logo di Messenger

DashBot
La compagnia ha ritenuto importante raccogliere dati sull’utilizzo del bot per poter
offrire un servizio migliore all’utenza in futuro. Per adempiere a questo obiettivo è
stato deciso di utilizzare la piattaforma web dashbot.io. DashBot è un servizio web
gratuito che mette a disposizione delle API ai programmatori dove poter inviare i
messaggi ricevuti e i messaggi che si ha intenzione di inviare. Una volta inviato il
contenuto del messaggio, il servizio si preoccuperà di analizzarne il contenuto ed
estrapolarne le informazioni sull’utente (nazionalità, sesso, lingua madre) e sul tipo
di contenuto inviato (testo o allegato). In base a questi fattori, è in grado di creare
statistiche riguardo a:

   ∗ livello di intrattenimento;

   ∗ ritorno dell’utenza;

   ∗ numero di messaggi scambiati per utente;

   ∗ conteggio dei messaggi ricevuti e inviati;

   ∗ tipo di testo ricevuto;

   ∗ lunghezza delle sessioni di chat per utente.

I dati vengono poi mostrati tramite diversi tipi di grafici e permette di avere una
visione generale sull’utilizzo del bot e sul suo gradimento.

                            figura 2.12: Logo di DashBot
Capitolo 3

Analisi dei requisiti

PastBot nasce da un insieme di nuove tecnologie e dalla necessità di ampliare i
metodi a disposizione per l’acquisito di prodotti da PastBook. La prima attività
del progetto è stata dunque la consultazione del parere del servizio marketing e del
Chief Executive Officer (CEO) riguardo la creazione di un nuovo modo per interagire
con gli utenti. Dopo che la creazione di un bot per la piattaforma Facebook è stata
accolta, si è passati a valutare l’opinione di una parte dell’utenza di PastBook.
L’utenza ascoltata fa parte del gruppo di tester di PastBook, che ha deciso di avere
un accesso anticipato ai nuovi prodotti in cambio di una loro valutazione. L’azienda
si è rivolta a loro anche per valutare l’interessamento nell’utilizzo di un futuro bot
per Facebook, idea che è stata accolta favorevolmente in buona parte.
   Si è quindi passati all’interazione con il reparto di codifica, che ha dovuto eseguire
un’analisi dei requisiti per estrapolare i casi d’uso prima di poter cominciare a
progettare il prodotto.

                                           19
20                                      CAPITOLO 3. ANALISI DEI REQUISITI

3.1      Requisiti di PastBot
PastBot suddivide l’utenza in due categorie principali: l’utenza non registrata,
ovvero che non ha mai scritto al bot e l’utenza registrata, cioè che ha almeno una
volta scritto al bot.

3.1.1      UC0: caso d’uso generale
     ∗ Attori: Utente Non Autenticato, Utente Autenticato;

     ∗ Descrizione: un utente innanzitutto deve iniziare la conversazione con il
       bot. Dopo di che avrà a disposizione il sistema di conversazione in cui poter
       mandare messaggi al bot;

     ∗ Precondizione: l’utente deve aver un account Messenger e deve averci
       effettuato la connessione;

     ∗ Postcondizione: il sistema ha erogato le funzionalità richieste dall’utente;

     ∗ Flusso principale:

         1. L’Utente Non Autenticato può iniziare una conversazione per la prima
            volta in assoluto (UC1)

         2. L’Utente Autenticato può inviare una richiesta di creare nuovo album
            (UC2)

         3. L’Utente Autenticato può inviare una richiesta di visualizzare l’album
            esistente (UC3)

         4. L’Utente Autenticato può inviare una richiesta riguardante le informa-
            zioni sui costi (UC4)

         5. L’Utente Autenticato può inviare un comando per ricevere aiuto (UC5)

         6. L’Utente Autenticato può inviare una richiesta di visualizzazione dell’al-
            bum nel sito web (UC6)

         7. L’Utente Autenticato può inviare un comando non valido (UC7)

         8. L’Utente Autenticato può inviare uno sticker (UC8)

         9. L’Utente Autenticato può inviare un allegato (UC9)

        10. L’Utente Autenticato può visualizzare il menù permanente. (UC11)
3.1. REQUISITI DI PASTBOT                                                 21

                     figura 3.1: UC0: caso d’uso generale

3.1.2   UC1: inizio conversazione per la prima volta in asso-
        luto
  ∗ Attori: Utente Non Autenticato;

  ∗ Descrizione: l’Utente Non Autenticato vuole scrivere al bot per la prima
    volta in assoluto. Per fare questa azione dovrà premere il bottone Inizia
    presente in Messenger;

  ∗ Precondizione: l’Utente Non Autenticato è iscritto alla piattaforma di
    messaggistica Facebook Messenger;

  ∗ Postcondizione: l’Utente Non Autenticato ha inviato con successo il suo
    primo messaggio al bot;

  ∗ Flusso principale:
22                                      CAPITOLO 3. ANALISI DEI REQUISITI

         1. L’Utente Non Autenticato clicca sul bottone apposito per iniziare la
            conversazione

3.1.3     UC2: invio richiesta di creazione di un nuovo album
     ∗ Attori: Utente Autenticato;
     ∗ Descrizione: l’Utente Autenticato procede alla richiesta di creazione di un
       nuovo album di foto. Gli verrà posta una domanda per avere conferma della
       creazione, alla quale potrà rispondere in maniera affermativa o negativa;
     ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
       bot;
     ∗ Postcondizione: l’Utente Autenticato ha gestito con successo il proprio
       album;
     ∗ Flusso principale:
         1. L’Utente Autenticato può confermare la creazione di un nuovo album
            (UC2.1)
         2. L’Utente Autenticato può non confermare la creazione di un nuovo album
            (UC2.2)

            figura 3.2: UC2: invio richiesta di creazione di un nuovo album

3.1.4     UC2.1: risposta affermativa al messaggio di conferma
          Creazione nuovo album
     ∗ Attori: Utente Autenticato;
     ∗ Descrizione: l’Utente Autenticato conferma la decisione di voler creare un
       nuovo album;
     ∗ Precondizione: l’Utente Autenticato ha richiesto la creazione di un nuovo
       album;
     ∗ Postcondizione: l’Utente Autenticato ha confermato con successo la volontà
       di creare un nuovo album;
3.1. REQUISITI DI PASTBOT                                                   23

  ∗ Flusso principale:

        1. L’Utente Autenticato conferma positivamente la creazione di un nuovo
           album

3.1.5    UC2.2: risposta negativa al messaggio di conferma
         Creazione nuovo album
  ∗ Attori: Utente Autenticato;

  ∗ Descrizione: l’Utente Autenticato decide di non voler più creare un nuovo
    album;

  ∗ Precondizione: l’Utente Autenticato ha richiesto la creazione di un nuovo
    album;

  ∗ Postcondizione: l’Utente Autenticato ha confermato con successo la volontà
    di non procedere alla creazione di un nuovo album;

  ∗ Flusso principale:

        1. L’Utente Autenticato conferma negativamente la creazione di un nuovo
           album

3.1.6    UC2.3: creazione di un nuovo album
  ∗ Attori: Utente Autenticato;

  ∗ Descrizione: si ottiene un nuovo album vuoto in cui sarà possibile inserire
    nuove foto;

  ∗ Precondizione: l’Utente Autenticato ha confermato positivamente la volontà
    di creare un nuovo album;

  ∗ Postcondizione: l’Utente Autenticato dispone di un nuovo album;

  ∗ Flusso principale:

        1. L’Utente Autenticato ha confermato positivamente la creazione di un
           nuovo album
24                                       CAPITOLO 3. ANALISI DEI REQUISITI

3.1.7      UC3: invio richiesta di visualizzazione foto dell’album
           attivo
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: l’Utente può richiedere la visualizzazione della lista delle foto
       attualmente caricate, su cui può decidere di cancellarne alcune, di visualizzarle
       senza perdita di risoluzione o di acquistarle in un album;

     ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
       bot;

     ∗ Postcondizione: l’Utente Autenticato ha visualizzato con successo la lista
       delle foto presenti nel proprio album;

     ∗ Flusso principale:

         1. L’Utente Autenticato può cancellare una singola foto dall’album (UC3.1)
         2. L’Utente Autenticato può visualizzare una singola foto dell’album alla
            massima risoluzione disponibile (UC3.2)
         3. L’Utente Autenticato può richiedere l’acquisto dell’album (UC3.4)

     ∗ Scenari alternativi:

         1. L’Utente Autenticato richiede la visualizzazione di un album vuoto
            (UC12)

        figura 3.3: UC3: invio richiesta di visualizzazione foto dell’album attivo

3.1.8      UC12: visualizzazione messaggio di errore album vuo-
           to
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: questa situazione avviene quando non sono presenti foto
       all’interno dell’album;
3.1. REQUISITI DI PASTBOT                                                        25

  ∗ Precondizione: l’Utente Autenticato ha richiesto la visualizzazione dell’al-
    bum vuoto;

  ∗ Postcondizione: l’Utente Autenticato ha visualizzato con successo il mes-
    saggio di errore;

  ∗ Flusso principale:

        1. L’Utente Autenticato richiede la visualizzazione dell’album senza foto-
           grafie

3.1.9    UC3.1: cancellazione singola foto
  ∗ Attori: Utente Autenticato;

  ∗ Descrizione: l’Utente Autenticato richiede la cancellazione di una foto
    dall’album;

  ∗ Precondizione: l’Utente Autenticato ha la lista delle foto presenti nell’al-
    bum;

  ∗ Postcondizione: l’Utente Autenticato ha rimosso con successo una foto
    dall’album;

  ∗ Flusso principale:

        1. L’Utente Autenticato invia la richiesta per rimuovere una foto dall’album

  ∗ Scenari alternativi:

        1. L’Utente Autenticato riceve un messaggio di errore nella cancellazione
           della foto (UC3.3)

3.1.10     UC3.2: visualizzazione singola foto nel browser
  ∗ Attori: Utente Autenticato;

  ∗ Descrizione: l’Utente Autenticato vuole visualizzare in maniera dettagliata
    e con la massima qualità disponibile una foto presente nell’album;

  ∗ Precondizione: l’Utente Autenticato ha la lista delle foto presenti nell’al-
    bum;

  ∗ Postcondizione: l’Utente Autenticato ha visualizzato con successo una foto
    dall’album;

  ∗ Flusso principale:

        1. L’Utente Autenticato visualizza la foto dall’album
26                                      CAPITOLO 3. ANALISI DEI REQUISITI

3.1.11      UC3.3: visualizzazione messaggio di errore cancella-
            zione foto
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: questo caso si verifica quando l’Utente Autenticato ordina la
       cancellazione di una foto già cancellata o ordina la cancellazione di una foto
       di un album non più esistente;

     ∗ Precondizione: l’Utente Autenticato ha ordinato la cancellazione di una
       foto non esistente o già cancellata;

     ∗ Postcondizione: l’Utente Autenticato ha visualizzato il messaggio di errore
       con successo;

     ∗ Flusso principale:

         1. L’Utente Autenticato riceve un messaggio di errore nel tentativo di
            cancellare una specifica foto

3.1.12      UC3.4: acquisto album
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: l’utente è soddisfatto dell’album creato e vuole procederne
       all’acquisto;

     ∗ Precondizione: l’Utente Autenticato ha la lista delle foto presenti nell’album
       e in quell’album ci sono almeno venti foto;

     ∗ Postcondizione: l’Utente Autenticato ha acquistato con successo l’album;

     ∗ Flusso principale:

         1. L’Utente Autenticato acquista l’album

     ∗ Scenari alternativi:

         1. L’Utente Autenticato ottiene un messaggio di errore di acquisto album
            (UC3.5)

3.1.13      UC3.5: visualizzazione messaggio di errore acquisto
            album
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: questo errore avviene quando l’Utente Autenticato tenta di
       acquistare un album con meno di venti fotografie;

     ∗ Precondizione: l’Utente Autenticato ha richiesto l’acquisto dell’album;

     ∗ Postcondizione: l’Utente Autenticato ha visualizzato il messaggio di errore;
3.1. REQUISITI DI PASTBOT                                                      27

  ∗ Flusso principale:
      1. L’Utente Autenticato riceve un messaggio di errore relativo all’impossi-
         bilità di effettuare l’acquisto per mancanza di foto

3.1.14   UC4: invio richiesta di informazioni sui costi
  ∗ Attori: Utente Autenticato;
  ∗ Descrizione: permette all’Utente Autenticato di avere informazioni riguardo
    ai costi degli album e ai relativi costi di spedizione;
  ∗ Precondizione: L’Utente Autenticato ha cominciato la conversazione con il
    bot;
  ∗ Postcondizione: L’Utente Autenticato ha visualizzato con successo le
    informazioni sui costi;
  ∗ Flusso principale:
      1. L’Utente Autenticato richiede le informazioni relative ai costi

3.1.15   UC5: invio comando di aiuto
  ∗ Attori: Utente Autenticato;
  ∗ Descrizione: in caso l’Utente Autenticato si trovi in una situazione di
    difficoltà e non sappia quale operazione intraprendere, ha la possibilità di
    chiedere aiuto per ricevedere delle istruzioni su come utilizzare PastBot;
  ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
    bot;
  ∗ Postcondizione: l’Utente Autenticato ha visualizzato con successo le istru-
    zioni sull’utilizzo di PastBot;
  ∗ Flusso principale:
      1. L’Utente Autenticato richiede le informazioni sull’utilizzo di PastBot

3.1.16   UC6: invio richiesta di visualizzazione album nel sito
         web
  ∗ Attori: Utente Autenticato;
  ∗ Descrizione: è possibile visualizzare l’album nel sito web dell’azienda;
  ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
    bot;
  ∗ Postcondizione: l’Utente Autenticato viene reindirizzato al sito della com-
    pagnia con successo;
28                                     CAPITOLO 3. ANALISI DEI REQUISITI

     ∗ Flusso principale:

         1. l’Utente Autenticato invia la richiesta di visualizzare l’album nel sito
            della compagnia

3.1.17      UC7: invio di un comando non valido
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: è possibile che venga inviato un comando non interpretabile
       da parte di PastBot. Questo farà mandare a PastBot un messaggio con le
       istruzioni e il suo utilizzo;

     ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
       bot;

     ∗ Postcondizione: l’Utente Autenticato riceve con successo un messaggio di
       aiuto;

     ∗ Flusso principale:

         1. l’Utente Autenticato invia un comando non valido per PastBot

3.1.18      UC8: invio di uno sticker
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: è possibile da parte degli utenti che utilizzano la piattaforma
       di messaggistica Messenger inviare anche degli stickers a PastBot;

     ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
       bot;

     ∗ Postcondizione: l’Utente Autenticato visualizza con successo la risposta di
       PastBot;

     ∗ Flusso principale:

         1. L’Utente Autenticato invia uno sticker

3.1.19      UC9: invio allegato
     ∗ Attori: Utente Autenticato;

     ∗ Descrizione: si ha la possibilità di inviare degli allegati a PastBot, per
       esempio per poter popolare il proprio album con delle immagini;

     ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
       bot;

     ∗ Postcondizione: l’Utente Autenticato visualizza un messaggio di successo
       di salvataggio dell’allegato;
3.1. REQUISITI DI PASTBOT                                                       29

  ∗ Flusso principale:

      1. L’Utente Autenticato invia un allegato a PastBot

  ∗ Scenari alternativi:

      1. Visualizzazione messaggio di errore per tipo di allegato non valido (UC10)

3.1.20   UC10: visualizzazione messaggio di errore per tipo
         di allegato non valido
  ∗ Attori: Utente Autenticato;

  ∗ Descrizione: questo messaggio di errore viene visualizzato quando viene
    inviato un tipo di allegato che non sia una immagine a PastBot;

  ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
    bot;

  ∗ Postcondizione: l’Utente Autenticato visualizza un messaggio di errore con
    successo;

  ∗ Flusso principale:

      1. L’Utente Autenticato invia un allegato che non è un’immagine supportata
30                                      CAPITOLO 3. ANALISI DEI REQUISITI

3.1.21      UC11: visualizzazione menù permanente
     ∗ Attori: Utente Autenticato;
     ∗ Descrizione: l’Utente Autenticato ha accesso al menù permanente con il
       quale può inviare comandi al bot senza doverli inserire tramite la tastiera;
     ∗ Precondizione: l’Utente Autenticato ha cominciato la conversazione con il
       bot;
     ∗ Postcondizione: l’Utente Autenticato esegue le operazioni desiderate con
       successo;
     ∗ Flusso principale:
         1. L’Utente Autenticato può effettuare la richiesta di creazione di un nuovo
            album (UC11.1)
         2. L’Utente Autenticato può richiedere la visualizzazione delle foto esistenti
            nell’ultimo album creato (UC11.2)
         3. L’Utente Autenticato può richiedere le informazioni sui prezzi (UC11.4)
         4. L’Utente Autenticato può richiedere la visualizzazione del messaggio di
            aiuto (UC11.4)

                 figura 3.4: UC11: visualizzazione menù permanente

3.1.22      UC11.1: creazione di un nuovo album
     ∗ Attori: Utente Autenticato;
     ∗ Descrizione: ciò permette all’Utente Autenticato di creare un nuovo album
       semplicemente cliccando un bottone;
     ∗ Precondizione: l’Utente Autenticato ha aperto il menù permanente;
     ∗ Postcondizione: l’Utente Autenticato ha inviato la richiesta di creazione di
       un nuovo album con successo;
     ∗ Flusso principale:
         1. L’Utente Autenticato richiede la creazione di un nuovo album
3.1. REQUISITI DI PASTBOT                                                     31

3.1.23   UC11.2: visualizzazione delle foto dell’album esisten-
         te
  ∗ Attori: Utente Autenticato;

  ∗ Descrizione: tramite questa funzionalità sarà possibile per l’Utente Autenti-
    cato visualizzare le foto presenti nell’album in maniera semplice;

  ∗ Precondizione: l’Utente Autenticato ha aperto il menù permanente;

  ∗ Postcondizione: l’Utente Autenticato ha inviato la richiesta di visualizza-
    zione delle foto di un album esistente con successo;

  ∗ Flusso principale:

      1. L’Utente Autenticato richiede la visualizzazione delle foto di un album
Capitolo 4

Progettazione e codifica

4.1       Progettazione ed implementazione delle API
4.1.1       Descrizione dell’architettura
Dato l’utilizzo dell’architettura serverless, non si è applicato nella scrittura delle
API alcun tipo particolare di pattern. L’architettura di tipo serverless infatti
definisce in modo chiaro la delegazione delle varie responsabilità a componenti
molto piccoli e ben definiti. Questo ha permesso di ottenere tempi di risposta molto
brevi. La parte dedicata alla interazione con gli utenti è stata chiamata webhook a
livello progettuale, per distinguerla dalle API.

4.1.2       Descrizione delle API
Come già accennato nella sezione 2.2.2, le funzionalità più importanti sono state
suddivise in differenti API, ognuna delle quali risiede in una propria istanza di AWS
Lambda.
   Comparando questa architettura con un classico pattern MVC1 , queste API
corrisponderebbero al Model, che si occupa di gestire parti della logica della appli-
cazione. Essendo queste parti costituite da una sola responsabilità e con un solo
compito, la loro implementazione si è concretizzata nella realizzazione di una sola
classe per API.

4.2       Descrizione del webhook
La parte dedicata all’interazione con gli utenti è stata realizzata sempre usando
l’architettura serverless, ma essendo la sua complessità maggiore la strutturazione a
classi è stata necessaria al fine di mantenere una facile comprensione del programma
e una buona estendibilità. Tuttavia, per la natura del servizio che PastBot ricopre,
si è scelto di usare una modellazione ad eventi per gestire le richieste provenienti
dalla piattaforma Facebook Messenger. In base agli eventi che vengono gestiti
PastBot si occupa di fare le chiamate alle API corrette. Comparandolo con il
pattern di tipo MVC, webhook si occupa di ricoprire la View e il Controller.
  1
      Model View Controller

                                         33
Puoi anche leggere