Controlla lo stato del messaggio
Tieni traccia dello stato di consegna dei tuoi messaggi utilizzando l'endpoint di controllo dello stato.
Punto finale
Richiesta
Parametri URL
| Parametro | Digitare | Obbligatorio | Descrizione |
|---|---|---|---|
messaggioId |
stringa | Sì | Identificatore univoco del messaggio dalla risposta all'invio |
Autenticazione
Utilizza uno dei tre metodi di autenticazione:
Risposta
Risposta di base
{
"messagelistId": 123456,
"messageId": "abc123def456",
"deliverystatus": "delivered",
"partscount": 1,
"cost": 0.05
}
Campi di risposta
| Campo | Digitare | Descrizione |
|---|---|---|
messagelistId |
intero | Identificatore del lotto |
messaggioId |
stringa | Identificatore univoco del messaggio |
stato di consegna |
stringa | Stato di consegna attuale |
contapezzi |
intero | Numero di parti del messaggio |
costo |
numero | Costo del messaggio in unità monetarie |
Risposta estesa (con fallback)
Quando è configurato il fallback, la risposta include campi aggiuntivi:
CODICE_BLOCCO_5
Valori dello stato di consegna
| Stato | Descrizione |
|---|---|
programmato |
In coda per l'invio |
| "elaborazione" | Attualmente in fase di invio |
consegnato |
Consegnato con successo |
non consegnabile |
Consegna fallita, messaggio rifiutato |
errorepermanente |
Rimosso dalla coda a causa di un errore persistente |
Ciclo di vita dello stato
CODICE_BLOCCO_6
Programmato
Il messaggio viene accettato e messo in coda per la consegna:
CODICE_BLOCCO_7
Elaborazione
Il messaggio è attualmente inviato al destinatario:
Consegnato
Messaggio consegnato con successo al destinatario:
Non consegnabile
Impossibile consegnare il messaggio (numero non valido, errore di rete):
Errore permanente
Messaggio rimosso dalla coda a causa di problemi di consegna persistenti:
Controlla più messaggi
Controlla lo stato di più messaggi nella tua applicazione:
CODICE_BLOCCO_12
Interrogazione per aggiornamenti di stato
Interrogare l'endpoint di stato per monitorare la consegna:
// Poll every 5 seconds until delivered
async function waitForDelivery(messageId, maxAttempts = 12) {
for (let i = 0; i < maxAttempts; i++) {
const response = await fetch(
`https://restapi.smsbat.com/bat/message/${messageId}`,
{
headers: { 'X-Authorization-Key': 'your-api-key' }
}
);
const status = await response.json();
if (status.deliverystatus === 'delivered') {
return { success: true, status };
}
if (status.deliverystatus === 'undeliverable' ||
status.deliverystatus === 'permanenterror') {
return { success: false, status };
}
// Wait 5 seconds before next check
await new Promise(resolve => setTimeout(resolve, 5000));
}
// Timeout after 60 seconds
return { success: false, timeout: true };
}
Alternativa al webhook
Invece del polling, utilizza i webhook per gli aggiornamenti di stato in tempo reale:
CODICE_BLOCCO_14
Contatta il tuo account manager per configurare l'URL del webhook.
Esempi di implementazione
Pitone
CODICE_BLOCCO_15
PHP
<?php
function checkStatus($messageId, $apiKey) {
$url = "https://restapi.smsbat.com/bat/message/" . $messageId;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"X-Authorization-Key: " . $apiKey
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
function waitForDelivery($messageId, $apiKey, $timeout = 60) {
$startTime = time();
while (time() - $startTime < $timeout) {
$status = checkStatus($messageId, $apiKey);
if ($status['deliverystatus'] === 'delivered') {
return ['success' => true, 'status' => $status];
}
if (in_array($status['deliverystatus'],
['undeliverable', 'permanenterror'])) {
return ['success' => false, 'status' => $status];
}
sleep(5);
}
return ['success' => false, 'timeout' => true];
}
// Usage
$messageId = "abc123def456";
$result = waitForDelivery($messageId, "your-api-key");
if ($result['success']) {
echo "Message delivered! Cost: " . $result['status']['cost'];
} else {
echo "Message delivery failed or timeout";
}
Node.js
CODICE_BLOCCO_17
Migliori pratiche
Frequenza di polling
- ✅ Sondaggio ogni 5-10 secondi
- ✅ Implementa il backoff esponenziale
- ✅ Imposta un timeout ragionevole (60-120 secondi)
- ❌Non effettuare sondaggi più di una volta al secondo
- ❌Non fare sondaggi a tempo indeterminato
Gestione degli errori
CODICE_BLOCCO_18
Memorizzazione nella cache
Risultati dello stato della cache per ridurre le chiamate API:
CODICE_BLOCCO_19
Elaborazione batch
Quando si controllano molti messaggi, le richieste batch:
CODICE_BLOCCO_20
Casi d'uso
Conferma dell'ordine
Tieni traccia della consegna dei messaggi di conferma dell'ordine:
const orderMessage = await sendMessage({
to: customer.phone,
text: `Order #${orderId} confirmed`
});
// Wait for delivery
const result = await waitForDelivery(orderMessage.messageId, apiKey);
if (result.success) {
await updateOrder(orderId, { notificationSent: true });
} else {
await scheduleRetry(orderId);
}
Autenticazione a due fattori
Verifica la consegna OTP prima del timeout:
CODICE_BLOCCO_22
Campagne di marketing
Tieni traccia delle tariffe di consegna dei messaggi della campagna:
const messageIds = await sendCampaign(recipientList);
// Check all statuses after 5 minutes
setTimeout(async () => {
const statuses = await checkBatchStatus(messageIds, apiKey);
const delivered = statuses.filter(s =>
s.deliverystatus === 'delivered'
).length;
console.log(`Delivery rate: ${delivered / statuses.length * 100}%`);
}, 5 * 60 * 1000);
Passaggi successivi
- Invia messaggio - Scopri come inviare messaggi
- Guida allo stato di consegna - Informazioni sugli stati di consegna
- Strategie di fallback - Configura i fallback