OpenAPI endpoint di recupero dei contenuti remotizzati

Leggi questa pagina per saperne di più sui messaggi a contenuto remoto.

Prima di poter inviare messaggi a contenuto remoto è necessario seguire la procedura illustrata in Condivisione configurazione remota

Nello scenario di invio tradizionale di un messaggio su IO, l'Ente richiama l'API esposta per la creazione del messaggio e IO procede alla sua gestione completa in app:

Nel diagramma che segue ti mostriamo la sequenza di eventi che vede coinvolti il suo sistema e quello di IO nello scambio di informazioni col destinatario di un messaggio a contenuto remoto:

Diagramma dettagliato

Segue, con maggiore livello di dettaglio, la sequenza degli eventi che costituiscono il ciclo di vita di un messaggio a contenuto remoto:

Nei capitoli successivi troverai le sequenze di dettaglio di ciascuna fase.

Endpoint di recupero delle precondizioni all'apertura del messaggio

  • l'id di correlazione remota che avevi indicato nel blocco third_party_data in fase di invio del messaggio;

  • il codice fiscale del destinatario (come header).

Il tuo sistema potrà quindi recuperare e trasmettere a IO il contenuto delle precondizioni verificando al contempo che la richiesta pervenuta sia relativa proprio a quel destinatario.

IO utilizzerà la base_url, che avevi comunicato in fase di impostazione delle informazioni di configurazione remota, e l'identificativo di correlazione, che avevi specificato nel blocco third_party_data in fase di invio del messaggio, per comporre una chiamata GET nella forma {base_url}/messages/{id}/precondition:

Per maggiori informazioni sul significato dei singoli campi , fai riferimento a Inviare un messaggio a contenuto remoto.

Endpoint di recupero dei dettagli del messaggio

  • l'id di correlazione remota che avevi indicato nel blocco third_party_data in fase di invio del messaggio;

  • il codice fiscale del destinatario (come header).

Il tuo sistema potrà quindi recuperare il contenuto del messaggio verificando al contempo che la richiesta pervenuta sia relativa proprio a quel destinatario.

IO utilizzerà la base_url, che avevi comunicato al team di IO in fase di impostazione delle informazioni di configurazione remota, e l'identificativo di correlazione, che avevi specificato nel blocco third_party_data in fase di invio del messaggio, per comporre una chiamata GET nella forma {base_url}/messages/{id}:

Per maggiori informazioni sul significato dei singoli campi, fai riferimento a Inviare un messaggio a contenuto remoto.

Esempio di risposta attesa da IO

Se [flag]=trueStruttura da inserireCos'è

has_remote_content

details

Il messaggio ha contenuti remoti (titolo e corpo)

has_attachments

attachments

Solo per Enti Premium: il messaggio contiene allegati

Fai attenzione a rispettare i flag che dichiari: IO effettua un controllo di coerenza tra i flag che avevi indicato alla creazione del messaggio e le strutture presenti nella risposta dell'API di dettaglio al momento della sua fruizione in app

Struttura details: titolo e corpo del messaggio

Di seguito, un esempio di cosa puoi tornare nella struttura details in caso di messaggio a contenuto remoto se avevi specificato has_remote_content=true:

{
  "details":
  {
    "subject": "Questo è il titolo del messaggio",
    "markdown": "Questo è il corpo del messaggio in formato **markdown**"
  }
}

Ecco come apparirà in app il messaggio così impostato:

Il titolo mostrato nel messaggio con contenuto remoto può essere differente da quello che avevi indicato al momento della sua creazione (il campo subject in Submit a Message passing the user fiscal_code in the request body): quest'ultimo, infatti, è utilizzato come titolo nell'elenco dei messaggi in app ed è statico.

⚠️Ti ricordiamo che ai sensi delle Linee Guida IO non deve includere informazioni sensibili nel titolo del messaggio, e ove necessarie nel corpo dovranno rispettare il principio di minimizzazione.

Quando componi e trasmetti il testo del messaggio in formato markdown ricorda di impostare il charset UTF-8 (per garantire la corretta visualizzazione dei caratteri accentati) e utilizza la sequenza "\n\n" per mandare a capo il testo creando un nuovo paragrafo.

Puoi usare i seguenti tag di formattazione del testo:

  • #, ## (seguiti da uno spazio) per le intestazioni

  • * per il corsivo

  • ** per il grassetto

  • [Lorem Ipsum](https://mio.sito) per i link

Struttura attachments: allegati PDF

Se la tua organizzazione ha sottoscritto l'accordo Premium, ecco un esempio di cosa puoi indicare se nella struttura details avevi specificato has_remote_content=true:

{
  "attachments": [
    {
      "id": "410034f7-6cfd-43ef-b58b-2da1375ee218",
      "content_type": "application/pdf",
      "name": "Allegato 1.pdf",
      "url": "/io_attachments/410034f7-6cfd-43ef-b58b-2da1375ee218",
      "category": "DOCUMENT"
    },
    {
      "id": "0004b1f5-7414-4db8-b9e0-1e38a7730fca",
      "content_type": "application/pdf",
      "name": "Allegato 2.pdf",
      "url": "/io_attachments/0004b1f5-7414-4db8-b9e0-1e38a7730fca",
      "category": "DOCUMENT"
    }
  ]
}

Nella tabella puoi trovare il significato di ciascun campo:

CampoFormato ammessoNote

id

stringa

IO richiede che il campo id debba contenere un identificativo del singolo allegato che sia univoco all'interno del messaggio: è tua responsabilità definire questo campo e garantirne l'univocità presso i tuoi sistemi.

L'esempio riporta, a titolo esemplificativo, l'utilizzo di una GUID.

content_type

stringa enumerata

Deve contenere il valore "application/pdf" in quanto IO accetta unicamente allegati in formato PDF conformi allo standard PDF/A-2a.

name

stringa (terminata in ".pdf")

url

stringa (in formato URL parziale)

Deve contenere il percorso relativo per il download dell’allegato. Questo perché IO scarica gli allegati tramite una richiesta GET all'indirizzo {baseUrl}/messages/{id}/{url}, dove:

  • baseUrl è la parte comune comune (iniziale) degli endpoint che hai comunicato al team di IO in fase di condivisione delle informazioni di configurazione remota;

category

stringa enumerata

Deve contenere il valore "DOCUMENT"

Endpoint di recupero dei byte del singolo allegato

Se hai sottoscritto l'Accordo Premium e nella risposta all'API di dettaglio illustrata nel capitolo precedente hai incluso i metadati di uno o più allegati, quando il destinatario del messaggio vorrà visualizzarli, IO recuperà il contenuto presso i tuoi sistemi componendo la URL di una chiamata GET nel formato {baseUrl}/{id}/{url}, dove:

  • baseUrl è la parte comune (iniziale) degli endpoint che hai comunicato al team di IO in fase di impostazione delle informazioni di configurazione remota;

  • {id} è l'identificativo che avevi specificato nel blocco third_party_data in fase di invio del messaggio;

  • {url} è il completamento della baseUrl specifico per l'allegato in questione, come restituito nei metadati con l'API di dettaglio.

Fai attenzione: in questo caso l'identificativo univoco è l'id di correlazione remota che avevi indicato in third_party_data in occasione dell'invio del messaggio.

L'API deve restituire lo stream di byte del file allegato in formato application/octet-stream binario.

Autorizzazioni

API Key

IO garantisce che il codice fiscale nella request corrisponda a quello dell'utente che sta provando a recuperare i dati del messaggio. Il codice fiscale viene inviato attraverso l'header fiscal_code.

È responsabilità dell'Ente individuare correttamente il codice fiscale dell'utente.

Nota sugli header "Lollipop"

Tutte le API qui descritte prevedono opzionalmente una serie di header denominati "x-pagopa-lollipop-..." e due header di "signature": tali header sono riservati per l'utilizzo di un sistema di certificazione del dispositivo del destinatario di prossima introduzione, per il quale riceverai opportuna comunicazione e documentazione.

Per il momento, puoi ignorarne la presenza nelle specifiche ma ti raccomandiamo di non impedirne esplicitamente la ricezione da parte di IO.