REGIONE TOSCANA RT MESSENGER - DOCUMENTO TECNICO

Pagina creata da Paolo Mariani
 
CONTINUA A LEGGERE
REGIONE TOSCANA

SPECIFICHE TECNICHE SISTEMA NOTIFICHE
          RT MESSENGER

        DOCUMENTO TECNICO
SPECIFICHE TECNICHE RT MESSENGER

Controllo del Documento
Numero di Versione     1.5
Data del Documento     19/02/2020
Autori                 Redatto da       C.Simonelli, A. Di Maria, F.Fornasari, M.
                                        Basile (TAI)
                       Revisionato da   F.Fornasari (TAI)
                       Approvato da
Stato                  Proposto per approvazione

Storia del documento
    Versione          Data                           Descrizione
      1.0          22/01/2019                       Prima Versione
      1.1          25/02/2019                       Modificate API
      1.2          09/05/2019                 Aggiunti Parametro App
      1.3          11/12/2019             Aggiunto capitolo Client Rest API
      1.4          05/02/2020        Aggiornati gli endpoint e le info sugli scope
      1.5          19/02/2020       Aggiornati gli endpoint di Staging (Gateway)

                                                                                     2
SPECIFICHE TECNICHE RT MESSENGER

Indice del documento
Controllo del Documento ................................................................................................ 2
Storia del documento ...................................................................................................... 2
1.    Introduzione ............................................................................................................ 5
2.    Applicazione Server ............................................................................................... 5
2.1.    Ciclo di vita del messaggio ..................................................................................................................... 6
3.      Utilizzo delle Admin REST API .............................................................................. 7
3.1.    Autorizzazione ....................................................................................................................................... 7
3.2.    Paginazione............................................................................................................................................ 8
3.3.    Servizi per la gestione dei messaggi ...................................................................................................... 8
   3.3.1.      Creazione di un nuovo messaggio ........................................................................................................... 8
   3.3.2.      Dettaglio messaggio ................................................................................................................................ 10
   3.3.3.      Dettaglio destinatario di un messaggio.................................................................................................. 11
   3.3.4.      Lista destinatari di un messaggio ............................................................................................................ 12
4.      Utilizzo delle Client REST API ............................................................................. 14
4.1.    Enrollment ........................................................................................................................................... 14
4.2.    Gestione Messaggi............................................................................................................................... 15
   4.2.1.      Recupero lista messaggi .......................................................................................................................... 15
   4.2.2.      Recupero dettaglio del messaggio ........................................................................................................ 17
   4.2.3.      Statistiche messaggi ................................................................................................................................. 18

                                                                                                                                                                      3
SPECIFICHE TECNICHE RT MESSENGER

Indice delle tabelle
Tabella 1: Codici di errore.................................................................................................................................. 7
Tabella 2: Parametri creazione di un nuovo messaggio .................................................................................... 9
Tabella 3: Possibili codici di risposta per il servizio di creazione di un nuovo messaggio ............................... 10
Tabella 4: Parametri servizio di recupero dettaglio di un messaggio ............................................................. 10
Tabella 5: Possibili codici di risposta per il servizio di recupero del dettaglio di un messaggio...................... 11
Tabella 6: parametri per il servizio di recupero dettaglio di un destinatario .................................................. 11
Tabella 7: attribuiti presenti nello schema JSON con la lista dei destinatari di un messaggio. ...................... 12
Tabella 8: possibili codici di risposta per il servizio di recupero dettaglio di un destinatario ......................... 12
Tabella 9: parametri per la chiamata al servizio di recupero lista dei destinatari di un messaggio ............... 12
Tabella 10: parametri servizio di recupero lista dei destinatari di un messaggio in caso di paginazione. ...... 13
Tabella 11: attribuiti presenti nello schema JSON con la lista dei destinatari di un messaggio. .................... 13
Tabella 12: possibili codici di risposta per il servizio lista dei destinatari di un messaggio............................. 14

                                                                                                                                                             4
SPECIFICHE TECNICHE RT MESSENGER

1. Introduzione
L’obiettivo del documento è fornire le specifiche tecniche per l’utilizzo del sistema di notifiche, realizzato in
ambito del progetto App OpenToscana, da parte di sistemi terzi.

Nel documento verranno inoltre descritti i servizi REST esposti con cui le applicazioni client potranno
integrarsi per le operazioni di gestione ed invio di messaggi verso i destinatari desiderati. Le immagini
mostrate nel documento sono d’esempio e potrebbero differire dal sistema finale.

2. Applicazione Server
Message Service è una Web application J2EE che permette la gestione del ciclo di vita dei messaggi e il routing
ai client registrati.

Il sistema mette a disposizione tre interfacce di accesso entrambe basate su Rest:

    1. Admin Rest Api – Per permettere la creazione di messaggi e la visualizzazione dello stato di ricezione
       degli stessi da parte del client registrati
    2. Client Rest Api – Consente la registrazione dei Client e la sincronizzazione bidirezionale dei messaggi
       e relative azioni
    3. Oauth2 Rest Api – Consente la generazione di token oauth2 utilizzabili per l’invocazione delle Admin
       e Client Rest Api

                                                                                                               5
SPECIFICHE TECNICHE RT MESSENGER

         Applicazioni di          Console di amministrazione e operatore            Mobile Clients Apps
           terze parti
                                              Web-Application                          Android, iOS

        Message Service              Admin Rest Api         Oauth2 Rest Api              Client Rest Api

                                                      Domain & Permission Service

                                      Repository Service             Mobile Notification Service

                           Figura 1: Architettura logica del sistema Message Service

Internamente il sistema Message Service utilizza un database relazionale per la memorizzazione dei
messaggi, utenti, token accesso ed eventi; inoltre si interfaccia al Mobile Notification Service per segnalare
ai client registrati la presenza di nuovi messaggi oppure eventi. Il Permission Service si occupa di generare e
verificare i token oauth2.

2.1. Ciclo di vita del messaggio
Ogni messaggio inviato contiene almeno le seguenti informazioni:

    -    body: Il testo del messaggio
    -    recipients: I destinatari del messaggio
    -    validUntil: La data entro la quale il messaggio è da considerarsi valido

Un messaggio viene recapitato ad un utente registrato se è presente nella lista dei recipients dello stesso,
se non è mai stato ricevuto e validUntil è successivo o uguale alla data della richiesta.

                                                                                                               6
SPECIFICHE TECNICHE RT MESSENGER

L’amministratore che cancella un messaggio è come se impostasse il validUntil all’ora attuale. Il risultato è
che tutti gli utenti che hanno già ricevuto il messaggio continueranno a vederlo mentre gli altri non lo
riceveranno mai.

3. Utilizzo delle Admin REST API
Di seguito sono disponibili le Api che permettono, ad una applicazione terza, la creazione, eliminazione di
messaggi e la visualizzazione degli eventi nei confronti dei client. Per convenzione i parametri indicati in
grassetto sono da considerarsi obbligatori.

Per tutti i servizi elencati di seguito vengono utilizzati i seguenti codici di errore:

                Codice                                               Descrizione

        404                          Servizio o messaggio non trovato.

        401 / 403                    Accesso non autorizzato o consentito.

        500                          Errore interno.

                                            Tabella 1: Codici di errore

3.1. Autorizzazione
L’autorizzazione deve avvenire attraverso clientId e secret ricevuti da Arpa ed utilizzando client credential
con due scope specifici: uno dei due è sempre “open-toscana-rs/client”, l’altro è uno tra “rtmessenger-
device/audience” e “rtmessenger-device/audience” in base al sub-set di API che si ha intenzione di
utilizzare (rispettivamente endpoint che rispondono a api/device/* e api/sender/*). Questa procedura
genera un access token attraverso il quale invocare le API.

Le API sono attualmente protette dall’API-GATEWAY, quindi per ottenere le credenziali necessarie per
fruire dei servizi descritti in questo documento, la richiesta deve essere inviata sia al supporto ARPA sia al
supporto CART.

L’attuale base URL per le API di STAGING è:

    •    Device API base URL: https://apistage.regione.toscana.it/C02/rtmessenger-device/v1

    •    Sender API base URL: https://apistage.regione.toscana.it/C01/rtmessenger-sender/v1

                                                                                                                 7
SPECIFICHE TECNICHE RT MESSENGER

L’attuale base URL per le API di PRODUZIONE è:

    •    Device API base URL: https://api.regione.toscana.it/C02/rtmessenger-device/v1

    •    Sender API base URL: https://api.regione.toscana.it/C01/rtmessenger-sender/v1

3.2. Paginazione
Le richieste che restituiscono più risultati vengono paginate (con default = 100). E’ possibile modificare tale
parametro aggiungendo nella query string dell’url il parametro size.

        $ curl 'https://host:port/context/api?page=2&size=100'

Se il parametro page viene omesso viene restituita la prima pagina.

3.3. Servizi per la gestione dei messaggi
Di seguito verranno definite in dettaglio le specifiche per ciascuno dei servizi per la gestione completa dei
messaggi del sistema di messaggistica istantanea.

   3.3.1.Creazione di un nuovo messaggio
   È possibile creare un nuovo messaggio attraverso la chiamata al seguente servizio:

        /api/sender/messages

   Il servizio può esser invocato passato i seguenti parametri obbligatori tramite il metodo POST:

               Parametro           Obbligatorio                              Descrizione

        body                              SI       Corpo del messaggio che verrà visualizzato

        subject                           SI       Il titolo del messaggio

                                         NO        Body da visualizzare nella notifica. Se non indicato verrà
                                                    utilizzato il campo body. Da utilizzare quando ci sono
        altBody
                                                    informazioni di privacy che non devono essere
                                                    visualizzate nel campo notifica.

        altSubject                       NO        Subject da visualizzare nella notifica. Se non indicato
                                                    verrà utilizzato il campo subject. Da utilizzare quando ci

                                                                                                                 8
SPECIFICHE TECNICHE RT MESSENGER

                                                 sono informazioni di privacy che non devono essere
                                                 visualizzate nel campo notifica.

                                      NO       È la modalità attraverso la quale visualizzare la notifica
                                                 all’interno dell’applicazione. Se non indicata verrà
     template
                                                 utilizzata quella standard. I template devono essere
                                                 concordati tra mittente e destinatario

                                      SI       È la modalità di invio della notifica. Valori ammessi:
     mode
                                                 ByTopic, ByIdentity, ByRole

     recipients                       SI       La lista dei destinatari in base al mode selezionato

                                      NO       Data ed ora, in formato UTC, entro la quale il messaggio
     expiration
                                                risulterà essere valido. Se non indicato il sistema

                                      NO       Data ed ora, in formato UTC, dopo il quale inviare il
     notBefore                                  messaggio. Se non indicato il messaggio verrà
                                                notificato immediatamente.

     meta                             NO       Attributi opzionali

                                      SI       Nome della App a cui inviare il messaggio, per esempio
     app
                                                “open-toscana”

                         Tabella 2: Parametri creazione di un nuovo messaggio

Di seguito un esempio di modello JSON di creazione di un nuovo messaggio:

     {

         "body": "Prima prova di messaggio",

         "subject": "L’oggetto del messaggio",

         "expiration": "2019-01-16T22:00:00Z",

         "app": "open-toscana",

         "mode": "ByIdentity",

         "recipients": [

             " TINIT-cf1"," TINIT-cf2"

         ]

     }

                                                                                                            9
SPECIFICHE TECNICHE RT MESSENGER

  I possibili codici di risposta per questa chiamata sono i seguenti:

                Codice                                             Descrizione

     201                           Messaggio creato con successo.

           Tabella 3: Possibili codici di risposta per il servizio di creazione di un nuovo messaggio

 Il tracciato JSON di risposta assume la seguente forma:

     {

         "messageId": 100

     }

  3.3.2.Dettaglio messaggio
Attraverso la seguente chiamata è possibile ottenere il dettaglio di uno specifico messaggio:

     /api/sender/messages/{messageId}

  Il servizio può esser invocato utilizzando il metodo GET secondo la seguente codifica del path:

             Parametro                                             Descrizione

     messageId                     Identificativo del messaggio.

                     Tabella 4: Parametri servizio di recupero dettaglio di un messaggio

  Il tracciato JSON è lo stesso dell’invio del messaggio

  I possibili codici di risposta per questa chiamata sono i seguenti:

                Codice                                             Descrizione

     404                           Messaggio non trovato

     403                           Messaggio non visibile per mancanza di diritti

                                                                                                        10
SPECIFICHE TECNICHE RT MESSENGER

    200                              Ok.

        Tabella 5: Possibili codici di risposta per il servizio di recupero del dettaglio di un messaggio

 3.3.3.Dettaglio destinatario di un messaggio
Attraverso la seguente chiamata è possibile ottenere il dettaglio di uno specifico destinatario per
un determinato messaggio:

    /api/sender/messages/{messageId}/recipients/{login}

Il servizio può esser invocato utilizzando il metodo GET secondo la seguente codifica del path:

                 Parametro                                          Descrizione

    messageId                       Identificativo del messaggio.

    login                           Codice del fiscale del destinatario.

                   Tabella 6: parametri per il servizio di recupero dettaglio di un destinatario

Il tracciato JSON di risposta assume la seguente forma:

    {

             "recipientId": "TINIT-cf1",

             "read": {

                  "eventTime": "2015-03-12T14:57:50Z"

             },

             "received": {

                  "eventTime": "2015-03-05T14:57:50Z"

             }

         }

Gli attributi presenti per ciascun destinatario restituito sono i seguenti:

                                                                                                            11
SPECIFICHE TECNICHE RT MESSENGER

             Attributo                                               Descrizione

     recipientId                  Identificativo del destinatario.

                                  Contiene data di lettura del messaggio e l’identificativo del device
     read                          destinatario. Se il messaggio non è ancora stato letto l’attribuito
                                   assume valore null oppure non presente.

                                  Contiene data di ricezione del messaggio e l’identificativo del device
     received                      destinatario. Se il messaggio non è stato ancora ricevuto l’attribuito
                                   assume valore null oppure non presente.

       Tabella 7: attribuiti presenti nello schema JSON con la lista dei destinatari di un messaggio.

 I possibili codici di risposta per questa chiamata sono i seguenti:

               Codice                                             Descrizione

     200                           Ok.

        Tabella 8: possibili codici di risposta per il servizio di recupero dettaglio di un destinatario

   3.3.4.Lista destinatari di un messaggio
 Dato un codice identificativo di un messaggio, la seguente chiamata restituisce la lista dei relativi
 destinatari paginata ed il dettaglio dello stato per ciascuno di essi in merito allo specifico
 messaggio:

     /api/sender/messages/{messageId}/recipients

 Il servizio può esser invocato utilizzando il metodo GET secondo la seguente codifica del path:

             Parametro                                               Descrizione

     messageId                    Identificativo del messaggio.

     Tabella 9: parametri per la chiamata al servizio di recupero lista dei destinatari di un messaggio

I seguenti parametri opzionali, necessari in caso di paginazione, possono essere inviati alla chiamata
utilizzando il metodo GET:

             Parametro                                               Descrizione

                                                                                                            12
SPECIFICHE TECNICHE RT MESSENGER

    size                         Numero di elementi per pagina (default 100).

    page                         Numero di pagina (default 0).

Tabella 10: parametri servizio di recupero lista dei destinatari di un messaggio in caso di paginazione.

Il tracciato JSON di risposta assume la seguente forma:

    [{

              "recipientId": "TINIT-cf1",

              "read": {

                    "eventTime": "2015-03-12T14:57:50Z"

              },

              "received": {

                    "eventTime": "2015-03-05T14:57:50Z"

              }

         }]

Gli attributi presenti per ciascun destinatario restituito sono i seguenti:

                   Attributo                                        Descrizione

    recipientId                  Identificativo del destinatario.

                                 Contiene data di lettura del messaggio e l’identificativo del device
    read                          destinatario. Se il messaggio non è ancora stato letto l’attribuito
                                  assume valore null oppure non presente.

                                 Contiene data di cancellazione del messaggio e l’identificativo del device
    deleted                       destinatario. Se il messaggio non è stato cancellato l’attribuito assume
                                  valore null oppure non presente.

                                 Contiene data di ricezione del messaggio e l’identificativo del device
    received                      destinatario. Se il messaggio non è stato ancora ricevuto l’attribuito
                                  assume valore null oppure non presente.

     Tabella 11: attribuiti presenti nello schema JSON con la lista dei destinatari di un messaggio.

                                                                                                           13
SPECIFICHE TECNICHE RT MESSENGER

 I possibili codici di risposta per questa chiamata sono i seguenti:

                Codice                                             Descrizione

        200                        Ok.

          Tabella 12: possibili codici di risposta per il servizio lista dei destinatari di un messaggio

4. Utilizzo delle Client REST API
Di seguito è riportata la lista delle API che permettono ad un’app (client) di interagire con il sistema di notifica
per le seguenti operazioni:

    •    Enrollment: ovvero la fase di registrazione del device fisico dell’utente.

    •    Gestione Messaggi: la gestione va vista in termini di recupero della lista messaggi per l’utente, lo
         stato del messaggio (letto o non letto), la visualizzazione del messaggio.

Per l’autorizzazione dovrà essere creato sul sistema ARPA un client OAuth2.0 di tipo public e con scope
assegnato open-toscana-rs/app.

4.1. Enrollment
Per la fase di registrazione, il sistema prevede l’esecuzione di una PUT all’API seguente:

        /api/device/register

Il body strutturato in formato application/json dovrà contenere i seguenti parametri:

              Parametro                                             Descrizione

                                    Package ID dell’applicativo, ovvero l’identificativo di package sugli store
        appId
                                     Apple o Google; per esempio it.toscana.regione.opentoscana

                                    Identificativo dell’applicazione, ovvero deve essere corrispondente al
        appName
                                      nome configurato sul sistema di notifica che è multi applicazione.

        appVersion                  Versione dell’applicazione

        deviceKind                  Piattaforma di riferimento: Android o IOs

        messagingKind               Canale di distribuzione: FirebaseFCM o AppleAPNS

                                                                                                                  14
SPECIFICHE TECNICHE RT MESSENGER

                                  Token di autenticazione sul canale di distribuzione della piattaforma di
     messagingToken                riferimento per il device, generato nel momento in cui l’app viene
                                   installata.

     name                         Modello del device

     osVersion                    Versione del sistema operativo

Questa fase prevede una prima chiamata senza gli Headers Secret e Authentication di cui al punto ma con il
campo messaggingToken popolato con il token Firebase o APNS. L'RT Messenger risponde con il valore Secret
che dovrà essere utilizzato nelle successive registrazioni (con o senza accessToken) e nelle chiamate agli altri
endpoint. È importante utilizzare sempre il Secret più recente.

Nel caso in cui l'RT Messenger risponda con 401 a una delle chiamate effettuate con l'ultimo Secret posseduto
dal device, è necessario che esso rieffettui la registrazione per ottenere un nuovo Secret.

4.2. Gestione Messaggi
Le API client per la gestione messaggi sono le seguenti.

   4.2.1.Recupero lista messaggi
Per recuperare la lista messaggi specifica per il device registrato, il sistema prevede una GET all’API
seguente:

     /api/device/messages

Con i seguenti parametri:

               Parametro                                          Descrizione

     count                        Numero di messaggi richiesti

                                  Data fino alla quale si richiedono i messaggi. Se non viene passato, verrà
     to
                                   presa la data attuale.

Il tracciato JSON di risposta ha la seguente forma:

     [

           {

                 "id": 336,

                                                                                                             15
SPECIFICHE TECNICHE RT MESSENGER

             "body": "app background token scaduto\n",

             "subject": "monica 2222",

             "creation": "2019-11-15T18:02:29.302Z",

             "expiration": "2029-11-12T18:02:29.302Z",

             "updated": "2019-11-15T18:02:29.302Z",

             "template": "default",

             "topic": {

                  "id": 1,

                  "name": "default",

                  "description": "Topic di default",

                  "subscribed": false

             },

             "status": "Received",

             "meta": {},

             "new": true

        },

        {

             "id": 335,

             "body": "app aperta token scaduto",

             "subject": "test monica 3333",

             "creation": "2019-11-15T17:55:05.995Z",

             "expiration": "2029-11-12T17:55:05.995Z",

             "updated": "2019-11-15T17:55:05.995Z",

             "template": "default",

             "topic": {

                  "id": 1,

                  "name": "default",

                  "description": "Topic di default",

                                                         16
SPECIFICHE TECNICHE RT MESSENGER

                         "subscribed": false

                    },

                    "status": "Received",

                    "meta": {},

                    "new": true

           },

           {

                    "id": 334,

                    "body": "app non accesa",

                    "subject": "Test monica",

                    "creation": "2019-11-15T17:49:31.397Z",

                    "expiration": "2029-11-12T17:49:31.397Z",

                    "updated": "2019-11-15T17:49:31.397Z",

                    "template": "default",

                    "topic": {

                         "id": 1,

                         "name": "default",

                         "description": "Topic di default",

                         "subscribed": false

                    },

                    "status": "Viewed",

                    "meta": {},

                    "new": false

                }

           ]

   4.2.2.Recupero dettaglio del messaggio
Per leggere il messaggio, è necessario effettuare una GET alla seguente API:

                                                                               17
SPECIFICHE TECNICHE RT MESSENGER

     /api/device/messages/viewd/{messageId}

Il formato JSON di risposta ha la forma seguente:

     [

           {

                 "id": 43,

                 "body": "test test test",

                 "subject": "test pubblico 3",

                 "creation": "2019-10-03T13:58:52.823Z",

                 "expiration": "2029-09-30T13:58:52.823Z",

                 "updated": "2019-10-03T13:58:52.823Z",

                 "template": "default",

                 "topic": {

                        "id": 1,

                        "name": "default",

                        "description": "Topic di default",

                        "subscribed": false

                 },

                 "status": "Viewed",

                 "meta": {},

                 "new": false

           }

     ]

   4.2.3. Statistiche messaggi
Il sistema espone un API in GET per estrarre informazioni, per lo specific device, riguardo:

                                                                                               18
SPECIFICHE TECNICHE RT MESSENGER

    •       numero di tutti i messaggi a cui l’utente ha diritto di accesso

    •       numero messaggi da leggere

    •       data dell’ultimo messaggio inviato che l’utente può leggere

        /api/device/messages/stat

Il formato JSON di risposta ha la forma seguente:

        {

               "globalCount": 17,

               "newCount": 10,

               "lastReceivedOn": "2019-11-15T18:02:29.351Z"

        }

                                                                              19
Puoi anche leggere