Suppressions
Une suppression est une adresse que votre espace de travail ne contactera pas, enregistrée avec une portée. Bird bloque un envoi vers une adresse supprimée avant qu'il n'atteigne WhatsApp.
Ouvrez la page Suppressions pour gérer la liste, ou utilisez l'API ci-dessous. Les enregistrements déclarés par le destinataire se trouvent dans l'onglet Preferences de la même page et suivent des règles différentes.

Supprimer un compte professionnel
Depuis l'onglet Suppressions, créez une suppression pour un numéro de téléphone et choisissez le compte professionnel auquel elle s'applique. Bird bloque les messages provenant de ce compte, et vos autres comptes peuvent toujours contacter le numéro. La colonne Business account de la liste indique le compte auquel une suppression est associée, ou affiche All accounts si elle couvre l'ensemble de votre espace de travail.
POST /v1/whatsapp/suppressions enregistre la même chose depuis le code. waba est le compte auquel associer la portée ; omettez-le pour bloquer l'adresse dans tout votre espace de travail, y compris les comptes que vous connecterez par la suite :
// 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"}'
Une portée, un enregistrement
Une suppression ne porte qu'une seule portée : la même adresse bloquée pour deux comptes correspond donc à deux enregistrements, et non un seul. Pour couvrir tout l'espace de travail, effectuez un seul appel sans waba.
Ajouter une adresse déjà supprimée pour cette portée renvoie 200 avec l'enregistrement existant au lieu d'en créer un second. Un nouvel enregistrement renvoie 201.
Une suppression est indexée sur l'adresse que vous enregistrez. Un destinataire contacté par numéro de téléphone et le même destinataire contacté par un identifiant utilisateur associé au compte professionnel constituent deux clés : supprimer l'un ne supprime pas l'autre. Enregistrez les deux si vous contactez la même personne de l'une ou l'autre manière.
Consulter votre liste de suppressions
GET /v1/whatsapp/suppressions renvoie les suppressions en vigueur, les plus récentes en premier, sous forme de page paginée par curseur. address filtre par préfixe sans tenir compte de la casse : une valeur partielle correspond à toutes les adresses qui en découlent, et une valeur complète correspond à cette seule adresse. reason restreint à une catégorie, par exemple manual pour celles que vous avez ajoutées :
// 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 liste ne contient que ce qui est en vigueur ; les enregistrements terminés en sont exclus. L'absence d'une adresse ne prouve pas que l'espace de travail ne l'a jamais supprimée : l'enregistrement a pu être levé. Consultez-le par ID pour confirmer.
Consulter un enregistrement
GET /v1/whatsapp/suppressions/{suppression_id} résout un enregistrement terminé aussi bien qu'un enregistrement en vigueur, en indiquant quand il a pris fin et ce qui l'a levé :
// 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"Lever une suppression
L'action Delete sur une ligne de suppression met fin à la suppression au lieu de la supprimer. Le blocage cesse. L'enregistrement reste consultable et indique quand il a pris fin et qui l'a levé. DELETE /v1/whatsapp/suppressions/{suppression_id} fait la même chose et renvoie 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"Une suppression que vous avez ajoutée vous-même porte la raison manual et peut être levée. Le désabonnement d'un destinataire lui appartient et c'est à lui de l'inverser ; la tentative renvoie 422. Appeler cela à nouveau sur une suppression déjà terminée réussit sans rien changer, et un ID que l'espace de travail ne détient pas renvoie 404.
Lever une suppression nécessite son ID : consultez d'abord la liste pour le retrouver.
Surveiller les nouvelles suppressions
whatsapp_suppression.created se déclenche lorsqu'une suppression est enregistrée, afin que votre propre système puisse voir les nouveaux blocages sans interrogation périodique. Son contenu transporte :
- suppression_id, l'identifiant de l'enregistrement.
- address, le numéro supprimé au format E.164.
- waba, le compte auquel le blocage est limité, ou null quand il couvre l'ensemble de l'espace de travail.
- reason et workspace_id.
Aucun événement ne se déclenche lorsqu'une suppression prend fin : reconsultez la liste avant de vous fier à une copie que vous détenez. Consultez les événements WhatsApp pour le contenu complet.
Étapes suivantes
- Preferences : les enregistrements déclarés par les destinataires, et lesquels vous pouvez inverser.
- Événements WhatsApp : le contenu whatsapp.rejected produit par un envoi bloqué.
- Envoyer des messages WhatsApp : l'API d'envoi et son modèle de livraison asynchrone.
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.
Regarder le guideConnecting WhatsApp to Bird: from buying a number to a live channelComprendre le conceptWhat is the 24-hour customer service window on WhatsApp?Utiliser l'outilWhatsApp message builderExplorer la fonctionnalitéWhatsApp
Essayez la pratique et obtenez un guide d'implémentation