waiaconnect

Documentazione / Completo

Stato di invio: questo numero può avviare conversazioni?

GET /v1/connections/{id}/sending-status

Markdown

Programmi con l'IA? Collegala al tuo account via MCP: controlla la tua configurazione, crea webhook e modelli con la tua conferma e scrive il codice. Scopri come →

Prima di una campagna, GET /v1/connections/{id}/sending-status ({id} = conn_… o il tuo externalId) ti dice se mettere in pausa prima di accumulare rifiuti e cosa deve sistemare il tuo cliente. Viene da ciò che abbiamo già letto da Meta: non chiama Meta.

canSend: available, limited, blocked o unknown (non ancora letto), con canSendReason. Rispondere entro le 24 h di un cliente non dipende da questo.

Perché. entities[] (account WhatsApp, portafoglio, app e numero, ognuno con il suo verdetto e i codici di Meta) e reasonCodes[] con il codice originale: 141006 metodo di pagamento, 141010 verifica dell'azienda, 131042 finché Meta continua a rifiutare gli invii per il pagamento. Inoltre businessVerification, accountReviewStatus, qualityRating, payment (ok, missing o unknown; mai dati della carta) e links alla pagina di Meta per risolvere.

Limite giornaliero. messagingLimit.tier e dailyLimit: Meta lo applica al portafoglio, condiviso da tutti i suoi numeri e fornitori. Il consumo nelle 24 h mobili e il prossimo rilascio Meta non li espone: arrivano unknown, mai stimati. Lo stesso per payment.fundingSource e payment.creditLine.

Rileggere. Quando il tuo cliente dice di aver risolto: POST /v1/connections/{id}/sending-status/refresh rilegge da Meta (sola lettura), una volta per numero ogni 10 min; prima, 429 RATE_LIMITED con Retry-After.

Avvisi. Iscrivi il webhook a connection.sending_status_changed (per nome) e ricevi ogni cambio con changed, la firma precedente e lo stato completo.

# 1) before a campaign: can this number start conversations?
curl https://api.waiaconnect.com/v1/connections/conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sending-status -H "Authorization: Bearer wc_live_YOUR_API_KEY"
# → { "sendingStatus": { "canSend": "blocked", "reasonCodes": [141006],
#       "payment": { "status": "missing", "owner": "client", … },
#       "messagingLimit": { "tier": "TIER_250", "dailyLimit": 250, "used": "unknown", … }, … } }

# 2) your customer says they fixed it: re-read from Meta (once per number every 10 min)
curl -X POST https://api.waiaconnect.com/v1/connections/conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sending-status/refresh -H "Authorization: Bearer wc_live_YOUR_API_KEY"
const H = { "Authorization": "Bearer wc_live_YOUR_API_KEY" };
const { sendingStatus: s } = await (await fetch("https://api.waiaconnect.com/v1/connections/conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sending-status", { headers: H })).json();
if (s.canSend === "blocked" || s.canSend === "limited") {
  // pause the campaign and tell your customer what to fix
  console.log(s.reasonCodes, s.payment.status, s.businessVerification.status, s.links.paymentSettings);
}
<?php
$ch = curl_init("https://api.waiaconnect.com/v1/connections/conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sending-status");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer wc_live_YOUR_API_KEY"]]);
$s = json_decode(curl_exec($ch), true)["sendingStatus"];
if (in_array($s["canSend"], ["blocked", "limited"])) {
  // pause the campaign; $s["reasonCodes"], $s["payment"]["status"], $s["links"]["paymentSettings"]
}
import requests
H = {"Authorization": "Bearer wc_live_YOUR_API_KEY"}
s = requests.get("https://api.waiaconnect.com/v1/connections/conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sending-status", headers=H).json()["sendingStatus"]
if s["canSend"] in ("blocked", "limited"):
    print(s["reasonCodes"], s["payment"]["status"], s["links"]["paymentSettings"])  # pause + guide your customer
# after your customer fixed it (once per number every 10 min):
requests.post("https://api.waiaconnect.com/v1/connections/conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sending-status/refresh", headers=H)

Un numero di un altro account riceve lo stesso 404 CONNECTION_NOT_FOUND di uno che non esiste.

readAt dice quando è stato letto; si rilegge ogni 12 h e con il refresh.

message.status porta il codice originale di Meta (errors[], con subcode in un rifiuto dell'invio), la fase (stage: send o delivery) e il pricing di Meta (billable, category, type) per la riconciliazione.