UC-015 — Upload e Gestione Media
| Campo | Valore |
|---|---|
| ID | UC-015 |
| Obiettivo | Caricare, elencare e rimuovere file media dalla libreria |
| Canale | RCS, WhatsApp |
| Complessità | Base |
| Tempo stimato | 10 minuti |
| API coinvolte | POST /api/partner-gateway/v1/media, GET /api/partner-gateway/v1/media, DELETE /api/partner-gateway/v1/media |
Scenari reali
- Caricare immagine per RCS: L'azienda FashionOutlet carica le immagini della nuova collezione per inviarle tramite Rich Card RCS.
- Gestire libreria media: Il team marketing di TravelDream organizza la propria libreria di immagini promozionali, verificando quali sono ancora in uso.
- Eliminare media obsoleti: A fine campagna, il team rimuove le immagini stagionali per mantenere la libreria ordinata.
Flusso di gestione media
Il diagramma mostra il ciclo di vita di un file media: upload, consultazione e rimozione.
Prerequisiti
- API Key attiva con permessi di gestione media
- File immagine in formato supportato (JPEG, PNG, GIF — max 5 MB)
- Per RCS: dimensioni consigliate 1440x1440 px (immagini quadrate) o 1440x720 px (landscape)
Step 1 — Carica un file media
Invia il file tramite multipart form-data.
curl -X POST https://lora-api.agiletelecom.com/api/partner-gateway/v1/media \
-H "X-Api-Key: YOUR_API_KEY" \
-F "file=@/path/to/promo-estate-2026.jpg" \
-F "name=promo-estate-2026" \
-F "description=Banner promozione estate 2026 - Collezione mare"
Response — Media caricato
{
"mediaId": "med_7f3a2b1c4d5e",
"name": "promo-estate-2026",
"description": "Banner promozione estate 2026 - Collezione mare",
"url": "https://media.qlara.com/v1/med_7f3a2b1c4d5e/promo-estate-2026.jpg",
"mimeType": "image/jpeg",
"size": 245760,
"width": 1440,
"height": 720,
"createdAt": "2026-04-09T11:00:00+02:00"
}
:::tip Usa l'URL nei messaggi RCS
Il campo url e l'indirizzo pubblico da inserire nel campo mediaUrl delle Rich Card RCS. Salvalo nel tuo CMS associato alla campagna.
:::
Dietro le quinte — Elaborazione del file
- Validazione: Il gateway verifica tipo MIME, dimensioni del file e risoluzione dell'immagine.
- Ottimizzazione: L'immagine viene compressa mantenendo la qualita visiva (JPEG quality 85%) e convertita in formati ottimali per ogni canale.
- CDN Distribution: Il file viene replicato su più nodi CDN per garantire bassa latenza nella consegna.
- Thumbnail: Viene generata automaticamente una versione ridotta (300x300 px) per le anteprime nella dashboard.
- Scansione: Il file viene analizzato per verificare l'assenza di contenuti malevoli (malware scan).
Step 2 — Elenca i media caricati
Recupera la lista dei file presenti nella tua libreria media.
curl -X GET https://lora-api.agiletelecom.com/api/partner-gateway/v1/media \
-H "X-Api-Key: YOUR_API_KEY"
Response — Lista media
{
"media": [
{
"mediaId": "med_7f3a2b1c4d5e",
"name": "promo-estate-2026",
"mimeType": "image/jpeg",
"size": 245760,
"url": "https://media.qlara.com/v1/med_7f3a2b1c4d5e/promo-estate-2026.jpg",
"createdAt": "2026-04-09T11:00:00+02:00"
},
{
"mediaId": "med_1a2b3c4d5e6f",
"name": "logo-brand-2026",
"mimeType": "image/png",
"size": 52480,
"url": "https://media.qlara.com/v1/med_1a2b3c4d5e6f/logo-brand-2026.png",
"createdAt": "2026-03-15T09:30:00+01:00"
}
],
"total": 2
}
Step 3 — Elimina un media obsoleto
Rimuovi un file dalla libreria quando non e più necessario.
curl -X DELETE https://lora-api.agiletelecom.com/api/partner-gateway/v1/media \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"mediaId": "med_1a2b3c4d5e6f"
}'
Response — Media eliminato
{
"mediaId": "med_1a2b3c4d5e6f",
"status": "DELETED",
"deletedAt": "2026-04-09T16:00:00+02:00"
}
Dietro le quinte — Eliminazione e cache
- Soft delete: Il file viene marcato come eliminato nel database, ma resta nel CDN per 24 ore per gestire messaggi già in coda.
- Purge CDN: Dopo 24 ore, il file viene rimosso da tutti i nodi CDN.
- Messaggi in coda: Se un messaggio in coda fa riferimento a un media eliminato, il gateway sostituisce l'immagine con un placeholder generico.
- Audit: L'evento di eliminazione viene registrato nel log con il
mediaIde l'utente che ha eseguito l'operazione.
Risultato atteso
| Step | Azione | Risultato |
|---|---|---|
| 1 | POST /media | File caricato, mediaId e url restituiti |
| 2 | GET /media | Lista completa dei media con metadati |
| 3 | DELETE /media | Media rimosso, status: "DELETED" |
Esempio completo end-to-end
Scenario FashionOutlet: carica immagine e usala in una Rich Card RCS.
# 1. Carica l'immagine promozionale
MEDIA_URL=$(curl -s -X POST https://lora-api.agiletelecom.com/api/partner-gateway/v1/media \
-H "X-Api-Key: YOUR_API_KEY" \
-F "file=@./summer-collection.jpg" \
-F "name=summer-collection-2026" | jq -r '.url')
echo "Media URL: $MEDIA_URL"
# 2. Verifica che sia nella libreria
curl -s -X GET https://lora-api.agiletelecom.com/api/partner-gateway/v1/media \
-H "X-Api-Key: YOUR_API_KEY" | jq '.media[] | select(.name == "summer-collection-2026")'
# 3. Usa l'URL nella Rich Card RCS (vedi UC-002)
echo "Pronto per l'invio RCS con mediaUrl: $MEDIA_URL"
Varianti
Upload di un video
Per i canali che supportano video (RCS), carica file MP4 (max 10 MB):
curl -X POST https://lora-api.agiletelecom.com/api/partner-gateway/v1/media \
-H "X-Api-Key: YOUR_API_KEY" \
-F "file=@/path/to/promo-video.mp4" \
-F "name=promo-video-estate" \
-F "description=Video promozionale 15 secondi"
Errori comuni
413 Payload Too Large — File troppo grande
{
"status": "fail",
"data": {
"file": "File size exceeds maximum allowed (5 MB for images, 10 MB for videos)"
}
}
Soluzione: Comprimi l'immagine o riducine la risoluzione. Per le Rich Card RCS, 1440px di larghezza e sufficiente.
415 Unsupported Media Type — Formato non supportato
{
"status": "fail",
"data": {
"file": "Unsupported media type. Allowed: image/jpeg, image/png, image/gif, video/mp4"
}
}
Soluzione: Converti il file in uno dei formati supportati prima dell'upload.
Prossimi passi
- UC-002 — Invio RCS Rich Card: Usa il media caricato in una Rich Card RCS
- UC-003 — Invio WhatsApp Template: Associa media a template WhatsApp
- UC-014 — API Key Management: Gestisci le chiavi di accesso