Soppressioni
Una soppressione è un indirizzo che il tuo spazio di lavoro non contatterà, registrato con un ambito. Bird blocca un invio verso un indirizzo soppresso prima che raggiunga WhatsApp.
Apri la pagina Suppressions per gestire la lista, oppure usa l'API qui sotto. I record dichiarati dal destinatario si trovano nella scheda Preferences della stessa pagina e seguono regole diverse.

Sopprimere un account business
Dalla scheda Suppressions, crea una soppressione per un numero di telefono e scegli l'account business a cui si applica. Bird blocca i messaggi da quell'account, e gli altri account possono ancora contattare il numero. La colonna Business account della lista indica l'account a cui la soppressione è associata, oppure mostra All accounts se copre l'intero spazio di lavoro.
POST /v1/whatsapp/suppressions registra la stessa cosa da codice. waba è l'account a cui associare l'ambito; omettilo per bloccare l'indirizzo per l'intero spazio di lavoro, compresi gli account che collegherai in seguito:
// Omit waba to block the address for the whole workspace, whichever account
// sends. With it, your other accounts keep reaching them, and the same
// address for two accounts is two records.
const suppression = await bird.whatsapp.suppressions.add({
address: "+15550001234",
waba: "102290129340398",
});
console.log(suppression.id, suppression.applies_to);# Omit waba to block the address for the whole workspace, whichever account
# sends. With it, your other accounts keep reaching them, and the same
# address for two accounts is two records.
suppression = client.whatsapp.suppressions.add(
address="+15550001234",
waba="102290129340398",
)
print(suppression.id, suppression.applies_to)suppression, err := client.Whatsapp.Suppressions.Add(context.Background(), bird.WhatsappSuppressionsAddParams{
Address: "+15550001234",
// Omit Waba to block the address for the whole workspace, whichever account
// sends. With it, your other accounts keep reaching them, and the same
// address for two accounts is two records.
Waba: &waba,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(suppression.Id, suppression.AppliesTo)// Omit setWaba to block the address for the whole workspace, whichever account
// sends. With it, your other accounts keep reaching them, and the same address
// for two accounts is two records.
$suppression = $bird->whatsapp->suppressions->add(
(new WhatsAppSuppressionCreate())
->setAddress('+15550001234')
->setWaba('102290129340398'),
);
echo $suppression->getId(), ' ', $suppression->getAppliesTo();bird whatsapp suppressions add --address +5511977670804curl -X POST https://us1.platform.bird.com/v1/whatsapp/suppressions \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"+15550001234","waba":"102290129340398"}'
Un ambito, un record
Una soppressione ha un solo ambito, quindi lo stesso indirizzo bloccato per due account corrisponde a due record e non a uno. Per coprire l'intero spazio di lavoro, effettua una sola chiamata senza waba.
Aggiungere un indirizzo già soppresso per quell'ambito restituisce 200 con il record esistente, anziché crearne un secondo. Un nuovo record restituisce 201.
Una soppressione usa come chiave l'indirizzo registrato. Un destinatario raggiunto tramite numero di telefono e lo stesso destinatario raggiunto tramite un ID utente con ambito business sono due chiavi, quindi sopprimere uno non sopprime l'altro. Registra entrambi se contatti la stessa persona in entrambi i modi.
Leggere la lista delle soppressioni
GET /v1/whatsapp/suppressions restituisce le soppressioni in vigore, dalla più recente, come pagina a cursore. address filtra per prefisso e ignora maiuscole e minuscole: un valore parziale corrisponde a ogni indirizzo sotto di esso, e un valore completo corrisponde solo a quell'indirizzo. reason restringe a una categoria, ad esempio manual per quelle aggiunte da te:
// address is a prefix, so a partial value matches every address under it.
const suppressions = await bird.whatsapp.suppressions.list({ address: "+1555" });
for (const suppression of suppressions.data ?? []) {
console.log(suppression.address, suppression.waba ?? "every account");
}# address is a prefix, so a partial value matches every address under it.
suppressions = client.whatsapp.suppressions.list(address="+1555")
for suppression in suppressions.data or []:
print(suppression.address, suppression.waba or "every account")for suppression, err := range client.Whatsapp.Suppressions.List(context.Background(), bird.WhatsappSuppressionsListParams{
Address: "+1555", // a prefix, so a partial value matches every address under it
}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(suppression.Address, suppression.Reason)
}// address is a prefix, so a partial value matches every address under it.
foreach ($bird->whatsapp->suppressions->list(['address' => '+1555']) as $suppression) {
echo $suppression->getAddress(), ' ', $suppression->getWaba() ?? 'every account', PHP_EOL;
}bird whatsapp suppressions listcurl "https://us1.platform.bird.com/v1/whatsapp/suppressions?address=%2B1555" \
-H "Authorization: Bearer $BIRD_API_KEY"La lista contiene ciò che è in vigore, e i record terminati sono esclusi. Un indirizzo assente non dimostra che lo spazio di lavoro non lo abbia mai soppresso; il record potrebbe essere terminato. Leggilo per ID per conferma.
Leggere un singolo record
GET /v1/whatsapp/suppressions/{suppression_id} restituisce sia un record terminato sia uno in vigore, indicando quando è terminato e cosa lo ha terminato:
// Resolves a record that has already ended, which the list leaves out.
const suppression = await bird.whatsapp.suppressions.get("was_01krdgeqcxet5s7t44vh8rt9mg");
console.log(suppression.reason, suppression.ended_at ?? "still in force");# Resolves a record that has already ended, which the list leaves out.
suppression = client.whatsapp.suppressions.get("was_01krdgeqcxet5s7t44vh8rt9mg")
print(suppression.reason, suppression.ended_at or "still in force")suppression, err := client.Whatsapp.Suppressions.Get(context.Background(), "was_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
fmt.Println(suppression.Reason, suppression.EndedAt)// Resolves a record that has already ended, which the list leaves out.
$suppression = $bird->whatsapp->suppressions->get('was_01krdgeqcxet5s7t44vh8rt9mg');
echo $suppression->getReason(), ' ', $suppression->getEndedAt()?->format(DATE_ATOM) ?? 'still in force';bird whatsapp suppressions get <suppression-id>curl https://us1.platform.bird.com/v1/whatsapp/suppressions/was_01krdgeqcxet5s7t44vh8rt9mg \
-H "Authorization: Bearer $BIRD_API_KEY"Terminare una soppressione
L'azione Delete su una riga di soppressione termina la soppressione anziché rimuoverla. Il blocco si interrompe. Il record resta leggibile e mostra quando è terminato e chi lo ha terminato. DELETE /v1/whatsapp/suppressions/{suppression_id} fa lo stesso e restituisce 204:
// Only a manual suppression can be ended; a recipient's own opt-out is
// theirs to reverse. The record is kept and still reads back by id.
await bird.whatsapp.suppressions.remove("was_01krdgeqcxet5s7t44vh8rt9mg");# Only a manual suppression can be ended; a recipient's own opt-out is
# theirs to reverse. The record is kept and still reads back by id.
client.whatsapp.suppressions.remove("was_01krdgeqcxet5s7t44vh8rt9mg")if err := client.Whatsapp.Suppressions.Remove(context.Background(), "was_01krdgeqcxet5s7t44vh8rt9mg"); err != nil {
log.Fatal(err)
}// Only a manual suppression can be ended; a recipient's own opt-out is theirs
// to reverse. The record is kept and still reads back by id.
$bird->whatsapp->suppressions->remove('was_01krdgeqcxet5s7t44vh8rt9mg');bird whatsapp suppressions remove <suppression-id> --yescurl -X DELETE https://us1.platform.bird.com/v1/whatsapp/suppressions/was_01krdgeqcxet5s7t44vh8rt9mg \
-H "Authorization: Bearer $BIRD_API_KEY"Una soppressione aggiunta da te ha motivo manual e può essere terminata. L'opt-out di un destinatario spetta a lui revocarlo, e il tentativo restituisce 422. Richiamare questa operazione su una soppressione già terminata ha successo senza cambiare nulla, e un ID non presente nello spazio di lavoro restituisce 404.
Terminare una soppressione richiede il suo ID, quindi cercalo prima nella lista.
Monitorare le nuove soppressioni
whatsapp_suppression.created si attiva quando viene registrata una soppressione, così il tuo sistema può rilevare nuovi blocchi senza polling. Il suo payload contiene:
- suppression_id, l'identificatore del record.
- address, il numero soppresso in formato E.164.
- waba, l'account a cui il blocco è limitato, o null quando copre l'intero spazio di lavoro.
- reason e workspace_id.
Nessun evento si attiva quando una soppressione termina, quindi rileggi la lista prima di fidarti di una copia in tuo possesso. Consulta eventi WhatsApp per il payload completo.
Passi successivi
- Preferences: i record dichiarati dai destinatari, e quali di essi puoi revocare.
- Eventi WhatsApp: il payload whatsapp.rejected prodotto da un invio bloccato.
- Invio di messaggi WhatsApp: l'API di invio e il suo modello di consegna asincrono.
Risorse correlate
Prosegui con la documentazione, le guide e gli esempi per questo argomento. Le risorse sono in inglese.
Guarda la guidaConnecting WhatsApp to Bird: from buying a number to a live channelComprendi il concettoWhat is the 24-hour customer service window on WhatsApp?Usa lo strumentoWhatsApp message builderEsplora la funzionalitàWhatsApp
Prova l'esercitazione e ottieni un brief di implementazione