UC-006 — Campagna SMS Bulk a Migliaia di Destinatari
| Campo | Valore |
|---|---|
| ID | UC-006 |
| Obiettivo | Creare e inviare una campagna SMS bulk con stima dei costi e monitoraggio |
| Canale | SMS |
| Complessità | ⭐⭐ Intermedio |
| Tempo stimato | 20 minuti |
| API coinvolte | POST /api/partner-gateway/v1/campaigns, PUT /campaigns/{id}, POST /campaigns/{id}/calculateGoal, GET /campaigns/{id}/price, PUT /campaigns/{id}/confirm, GET /campaigns/{id} |
Scenari reali
- ShopItalia — Black Friday: Promozione flash a 10.000 clienti con codice sconto personalizzato e scadenza a 48 ore. Invio immediato il venerdi mattina alle 08:00.
- Studio Dentistico Bianchi — Reminder settimanali: Ogni lunedi il sistema invia un promemoria degli appuntamenti della settimana a tutti i pazienti prenotati.
- AcquaLuce Energia — Scadenza bolletta: Avviso di pagamento in scadenza a tutti i clienti con fattura non saldata, con link al portale di pagamento.
Ciclo di vita della campagna
Il diagramma illustra le transizioni di stato: dalla creazione (Draft) alla configurazione, stima costo, conferma e infine invio.
Step 1 — Crea la campagna (Draft)
Crea una nuova campagna in stato bozza specificando nome, descrizione, canale (sendingMode) e come vengono scelti i destinatari (destinationType: 0, dalle liste contatti).
curl -X POST https://api.qlara.ai/api/partner-gateway/v1/campaigns \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"name": "Black Friday 2026",
"description": "Promozione Black Friday - sconto 30% su tutto il catalogo",
"sendingMode": "SMS",
"destinationType": 0
}'
Response — Campagna creata
{
"id": 1542,
"name": "Black Friday 2026",
"description": "Promozione Black Friday - sconto 30% su tutto il catalogo",
"status": "DRAFT",
"sendingMode": "SMS",
"destinationType": 0,
"readyToSend": false,
"creationDate": "2026-04-09 09:00:00.000+0000"
}
Il campo id e l'identificativo che userai in tutti gli step successivi. Salvalo per tracciare la campagna.
Step 2 — Configura messaggio e destinatari (Configured)
Associa la lista contatti, il mittente e il testo del messaggio alla campagna. readyToSend: true segna la configurazione come definitiva, così la campagna può essere confermata.
curl -X PUT https://api.qlara.ai/api/partner-gateway/v1/campaigns/1542 \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"sendingMode": "SMS",
"smsSender": "ShopItalia",
"smsBody": "Black Friday! Solo per te: -30% su tutto con il codice BF2026. Valido fino al 30/11. Scopri di più: https://shop.example.it/bf",
"contactListIds": [87],
"readyToSend": true
}'
Response — Campagna configurata
{
"id": 1542,
"name": "Black Friday 2026",
"status": "READY_TO_SEND",
"sendingMode": "SMS",
"smsSender": "ShopItalia",
"smsBody": "Black Friday! Solo per te: -30% su tutto con il codice BF2026. Valido fino al 30/11. Scopri di più: https://shop.example.it/bf",
"destinationType": 0,
"contactListIds": [87],
"readyToSend": true,
"lastUpdateDate": "2026-04-09 09:02:00.000+0000"
}
Gli ID in contactListIds devono riferirsi a liste già create. Vedi UC-007 — Gestione Contatti e Liste per creare e popolare le liste.
Step 3 — Calcola il costo (CostCalculated)
Prima di confermare, ricalcola destinatari e costo a partire dalla configurazione attuale della campagna. La risposta è la campagna aggiornata; il prezzo si legge nello Step 4.
curl -X POST https://api.qlara.ai/api/partner-gateway/v1/campaigns/1542/calculateGoal \
-H "X-Api-Key: YOUR_API_KEY"
Response — Costo calcolato
{
"id": 1542,
"name": "Black Friday 2026",
"status": "READY_TO_SEND",
"sendingMode": "SMS",
"smsSender": "ShopItalia",
"destinationType": 0,
"contactListIds": [87],
"readyToSend": true
}
Dietro le quinte — Destinatari e prezzo
Il calcolo parte dalla configurazione attuale della campagna:
- Deduplicazione: Le liste selezionate vengono unite e ogni numero viene contato una sola volta (
numOfDistinctContactnello Step 4). - Tariffa: Il prezzo dipende dal
sendingMode, dal numero di destinatari e dalla tariffa per messaggio del tuo account. - Parti SMS: Un testo entro 160 caratteri GSM-7 (70 UCS-2) è un solo SMS; uno più lungo viene inviato in più parti concatenate, fino a 1530 caratteri.
- Valori non aggiornati: Richiama
calculateGoaldopo aver cambiato liste, testo osendingMode, altrimenti il prezzo può risultare zero o non aggiornato.
Step 4 — Verifica il prezzo
Controlla il prezzo totale prima di procedere con la conferma.
curl -X GET https://api.qlara.ai/api/partner-gateway/v1/campaigns/1542/price \
-H "X-Api-Key: YOUR_API_KEY"
Response — Prezzo stimato
{
"id": 1542,
"name": "Black Friday 2026",
"status": "READY_TO_SEND",
"sendingMode": "SMS",
"contactListIds": [87],
"totalPrice": 34408500000,
"numOfDistinctContact": 9831,
"readyToSend": true
}
numOfDistinctContact è il numero di destinatari distinti (9.831) e totalPrice il prezzo totale della campagna.
Se il tuo credito non copre totalPrice, la conferma fallirà con 400. Ricarica il credito prima di procedere.
Step 5 — Conferma e avvia l'invio
Conferma la campagna per avviare l'invio immediato. La richiesta non ha body.
curl -X PUT https://api.qlara.ai/api/partner-gateway/v1/campaigns/1542/confirm \
-H "X-Api-Key: YOUR_API_KEY"
Response — Campagna confermata
202 Accepted, senza body: la campagna è in coda e, non avendo una scheduledDate, l'invio parte subito.
Variante — Invio schedulato
Per programmare l'invio in una data futura, imposta scheduledDate (formato yyyy-MM-dd HH:mm:ss.SSSZ) sulla campagna prima di confermarla:
curl -X PUT https://api.qlara.ai/api/partner-gateway/v1/campaigns/1542 \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"sendingMode": "SMS",
"scheduledDate": "2026-11-29 08:00:00.000+0000",
"readyToSend": true
}'
Poi confermala con PUT /campaigns/1542/confirm come sopra: la campagna viene inviata alla data programmata.
Step 6 — Monitora l'avanzamento
Controlla i contatori di delivery della campagna durante e dopo l'invio.
curl -X GET "https://api.qlara.ai/api/partner-gateway/v1/campaigns/1542" \
-H "X-Api-Key: YOUR_API_KEY"
Response — Campagna completata
{
"id": 1542,
"name": "Black Friday 2026",
"status": "ENDED",
"sendingMode": "SMS",
"startDate": "2026-04-09 09:05:02.000+0000",
"endDate": "2026-04-09 09:47:00.000+0000",
"totalDestinations": 9831,
"totalPrice": 34408500000,
"totalSent": 9831,
"totalSuccess": 9542,
"totalFailed": 289,
"smsSent": 9831,
"smsPending": 0,
"smsSuccess": 9542,
"smsFailed": 289
}
Risultato finale: 9.542 messaggi consegnati (totalSuccess) su 9.831 inviati (totalSent), un tasso di consegna del 97,06%. Per l'esito di ogni singolo messaggio, esporta i delivery report della campagna (vedi UC-029).
Errori comuni
400 Bad Request — Lista contatti non configurata
{
"status": "fail",
"data": {
"contactListIds": "At least one contact list is required to confirm the campaign"
}
}
Soluzione: Assicurati di aver completato lo Step 2 (configurazione) prima di calcolare il costo e confermare.
400 Bad Request — Credito insufficiente
{
"status": "fail",
"data": {
"credit": "Insufficient credit to cover the campaign totalPrice"
}
}
Soluzione: Ricarica il credito dal pannello della piattaforma prima di confermare la campagna.
Risultato atteso
| Step | Azione | Risultato |
|---|---|---|
| 1 | POST /campaigns | Campagna in stato DRAFT, id restituito |
| 2 | PUT /campaigns/{id} | Stato READY_TO_SEND, testo e lista associati |
| 3 | POST /campaigns/{id}/calculateGoal | Destinatari e costo ricalcolati |
| 4 | GET /campaigns/{id}/price | totalPrice e numOfDistinctContact |
| 5 | PUT /campaigns/{id}/confirm | 202 Accepted, l'invio parte |
| 6 | GET /campaigns/{id} | Stato ENDED, contatori di delivery |
Prossimi passi
- UC-007 — Gestione Contatti e Liste: Crea e popola le liste contatti per le tue campagne
- UC-008 — Tracking Consegna con Webhooks: Ricevi notifiche di delivery in tempo reale
- Guida Campagne: Approfondisci scheduling, filtri e gestione avanzata